Au début, j'ai lu les articles par ici et rattrapé. https://www.slideshare.net/cookle/5-58379474 http://qiita.com/hshimo/items/1881fba8957c2a6e17ca http://qiita.com/akitoh/items/bebf1bf3d71d3e4b96b0
J'ai donc trouvé la blockchain très utile.
Je ne le sais qu'en gros, mais je veux quand même le déplacer. Si vous faites une erreur, veuillez vous précipiter. Essayez d'utiliser une bibliothèque appelée bigchaindb qui m'intéresse depuis longtemps. Il dit que c'est une base de données blockchain évolutive. Une bibliothèque qui combine une base de données distribuée et une blockchain plutôt qu'une pure sensation p2p.
--Officiel https://docs.bigchaindb.com/en/latest/index.html
BigchainDB réduit la concurrence des licences pour les chaînes qui connectent les créateurs et les téléspectateurs, et offre un investissement parfait dans les artefacts numériques. Un service de musique typique compte 38 millions de chansons. BigchainDB peut stocker ces informations en un clin d'œil, ainsi que des informations de licence pour chaque chanson et des informations sur l'utilisation des abonnés. Comme autre exemple, prenons un marché photo de taille moyenne qui exécute 100 000 transactions par jour. L'application de cela à Bitcoin coûte 10000 USD par jour et se connecte au réseau Bitcoin.
BigchainDB réduit les frictions juridiques en fournissant des preuves irréfutables du comportement électronique. BigchainDB peut également stocker directement les informations de support, telles que les reçus et les certificats (COA), plutôt que de créer des liens vers des documents ou de stocker des hachages.
Abréviation ~
https://www.thoughtworks.com/insights/blog/blockchain-practice-tamper-proof-read-receipts
Il ne se connecte pas au bloc précédent par hachage. Une liste de vote est conservée à l'intérieur du bloc. Le nœud de signature vote. Il sera valable si vous obtenez une majorité des voix en faveur du blocage. Et une chaîne se produit au moment du vote.
BigchainDB Node Un nœud BigchainDB est un ensemble de machines exécutant un serveur MongoDB, un serveur BigchainDB. Chaque nœud est contrôlé par un individu ou une organisation. BigchainDB Cluster Un ensemble de nœuds BigchainDB peut être interconnecté pour former un cluster BigchainDB. Chaque nœud du cluster exécute le même logiciel. Le cluster contient une banque de données MongoDB logique. BigchainDB Consortium Les personnes et organisations qui exécutent les nœuds du cluster appartiennent au consortium BigchainDB (une autre organisation). Le consortium a besoin d'une structure de gouvernance pour prendre des décisions. Si une entreprise exploite un cluster, cette entreprise est le seul «consortium». Un cluster est un ensemble de nœuds connectés. Un consortium est une organisation qui possède un cluster et chaque nœud du cluster a un opérateur différent. Qu'est-ce qu'un opérateur ... Quoi qu'il en soit, il est interprété comme une image avec un cluster sous le consortium et un nœud sous le cluster.
À un niveau supérieur, vous pouvez utiliser l'API HTTP BigchainDB Client-Serveur, ou un wrapper pour cette API (tel que le pilote Python BigchainDB), pour communiquer avec un cluster BigchainDB (un ensemble de nœuds). Le pilote Python BigchainDB prend en charge la préparation, l'exécution et l'envoi de transactions aux nœuds BigchainDB. Obtenez la transaction par identifiant. Obtenez le statut de la transaction par identifiant.
Côté serveur: documentation du serveur, démarrage rapide du serveur, documentation de l'API http Côté client: documentation du pilote python Autres: outil de tran ... ligne comannd
ubuntu14 or mac python3 conda DB choisit RethinkDB ou MongoDB, RethinkDB est-il toujours pris en charge?
Il s'agit d'un paramètre côté serveur.
Cela ne fonctionne pas à moins que ce ne soit python3, donc je suis passé à python3 avec conda.
Cliquez ici pour conda http://qiita.com/miyamotok0105/items/5f26e4ae41f0e35ded16
sudo apt-get update
sudo apt-get install g++ python3-dev libffi-dev build-essential libssl-dev
sudo apt-get install python3-pip
sudo pip3 install --upgrade pip setuptools
sudo pip3 install bigchaindb
bigchaindb -y configure mongodb
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
Cliquez ici pour mongo en premier lieu. C'est une base de données basée sur JSON, et vous pouvez la lancer sans penser au type. http://qiita.com/saba1024/items/f2ad56f2a3ba7aaf8521
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
echo "deb [ arch=amd64 ] http://repo.mongodb.org/apt/ubuntu precise/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
sudo apt-get update
sudo apt-get install -y mongodb-org
mongo --version
sudo mkdir -p /data/db
sudo chmod -R 700 /data/db
Si vous exécutez sur un serveur, modifiez la partie ip ou domaine
sudo emacs ~/.bigchaindb
"server": {"bind": "localhost:9984", ... } to "server": {"bind": "0.0.0.0:9984", ... }
0.0.0.0 aux informations sur mon serveur
référence https://docs.bigchaindb.com/projects/server/en/latest/production-nodes/setup-run-node.html
sudo mongod --replSet=bigchain-rs
Cela a entraîné une erreur. Sinon, vous pouvez l'ignorer. Le mongo que j'ai installé avant est un obstacle. Résolu ci-dessous. http://kiita312.hatenablog.com/entry/2013/03/03/130935
Configurez une autre console avec bigchain-rs en cours d'exécution.
bigchaindb start
Un journal sort et se déplace. Cette. Ce gars va travailler.
****************************************************************************
* *
* Initialization complete. BigchainDB Server is ready and waiting. *
* You can send HTTP requests via the HTTP API documented in the *
* BigchainDB Server docs at: *
* https://bigchaindb.com/http-api *
* *
* Listening to client connections on: localhost:9984 *
* *
****************************************************************************
(MainProcess - pid: 15547)
======== Running on http://localhost:9985 ========
(Press CTRL+C to quit)
[2017-08-19 02:47:02] [INFO](gunicorn.error) Starting gunicorn 19.7.1 (webapi - pid: 15680)
[2017-08-19 02:47:02] [INFO](gunicorn.error) Listening at: http://127.0.0.1:9984 (15680) (webapi - pid: 15680)
[2017-08-19 02:47:02] [INFO](gunicorn.error) Using worker: sync (webapi - pid: 15680)
[2017-08-19 02:47:02] [INFO](gunicorn.error) Booting worker with pid: 15685 (webapi - pid: 15685)
[2017-08-19 02:47:02] [INFO](gunicorn.error) Booting worker with pid: 15686 (webapi - pid: 15686)
[2017-08-19 02:47:02] [INFO](gunicorn.error) Booting worker with pid: 15687 (webapi - pid: 15687)
[2017-08-19 02:47:02] [INFO](gunicorn.error) Booting worker with pid: 15688 (webapi - pid: 15688)
[2017-08-19 02:47:03] [INFO](gunicorn.error) Booting worker with pid: 15689 (webapi - pid: 15689)
[2017-08-19 02:47:07] [INFO](bigchaindb.backend.mongodb.connection) Closing initial connection to MongoDB (Process-16 - pid: 15659)
Accéder à la partie de localhost: 9984.
Si vous cliquez dessus avec un navigateur, quelque chose reviendra
{
"api": {
"v1": {
"assets": "/api/v1/assets/",
"docs": "https://docs.bigchaindb.com/projects/server/en/v1.0.1/http-client-server-api.html",
"outputs": "/api/v1/outputs/",
"statuses": "/api/v1/statuses/",
"streams": "ws://localhost:9985/api/v1/streams/valid_transactions",
"transactions": "/api/v1/transactions/"
}
},
"docs": "https://docs.bigchaindb.com/projects/server/en/v1.0.1/",
"keyring": [],
"public_key": "HPxXw3Kbkj8BVvgR49xa7jaUkHpmmqwL39pmk5qpbdjQ",
"software": "BigchainDB",
"version": "1.0.1"
}
BigchainDB Python Driver Frappé du côté client.
pip3 install bigchaindb_driver
or
pip install bigchaindb_driver
Étant donné que les actifs ont une signification similaire à celle des actifs, les données sont-elles une image des actifs? J'ai sommeil. Le vélo appartient à Alice et assume le processus à transmettre à Bob. L'interprétation du processus est décrite dans le commentaire.
python
# -*- coding: utf-8 -*-
from bigchaindb_driver import BigchainDB
from bigchaindb_driver.crypto import generate_keypair
from time import sleep
from sys import exit
#Génération de paires cryptographiques
alice, bob = generate_keypair(), generate_keypair()
bdb_root_url = 'http://0.0.0.0:9984' #Réécrire vers l'URL racine de BigchainDB! !!
bdb = BigchainDB(bdb_root_url)
#Définition de l'actif
bicycle_asset = {
'data': {
'bicycle': {
'serial_number': 'abcd1234',
'manufacturer': 'bkfab'
},
},
}
#Des métadonnées facultatives peuvent être ajoutées à la transaction
bicycle_asset_metadata = {
'planet': 'earth'
}
#Création d'actifs
#Au lieu d'enregistrements RDB, la bigchain stocke les données dans des unités de transaction.
#Préparation de la transaction.
prepared_creation_tx = bdb.transactions.prepare(
operation='CREATE',
signers=alice.public_key,
asset=bicycle_asset,
metadata=bicycle_asset_metadata
)
#La transaction doit être effectuée en signant avec la clé privée d'Alice.
fulfilled_creation_tx = bdb.transactions.fulfill(
prepared_creation_tx,
private_keys=alice.private_key
)
#Envoyer au nœud BigchainDB! !! !!
sent_creation_tx = bdb.transactions.send(fulfilled_creation_tx)
txid = fulfilled_creation_tx['id']
#Continuez à vérifier le statut de la transaction jusqu'à ce que la transaction soit valide
trials = 0
while trials < 60:
try:
if bdb.transactions.status(txid).get('status') == 'valid':
print('Tx valid in:', trials, 'secs')
break
except bigchaindb_driver.exceptions.NotFoundError:
trials += 1
sleep(1)
if trials == 60:
print('Tx is still being processed... Bye!')
exit(0)
asset_id = txid
transfer_asset = {
'id': asset_id
}
output_index = 0
output = fulfilled_creation_tx['outputs'][output_index]
transfer_input = {
'fulfillment': output['condition']['details'],
'fulfills': {
'output_index': output_index,
'transaction_id': fulfilled_creation_tx['id']
},
'owners_before': output['public_keys']
}
#Création d'actifs
prepared_transfer_tx = bdb.transactions.prepare(
operation='TRANSFER',
asset=transfer_asset,
inputs=transfer_input,
recipients=bob.public_key,
)
fulfilled_transfer_tx = bdb.transactions.fulfill(
prepared_transfer_tx,
private_keys=alice.private_key,
)
sent_transfer_tx = bdb.transactions.send(fulfilled_transfer_tx)
print("Is Bob the owner?",
sent_transfer_tx['outputs'][0]['public_keys'][0] == bob.public_key)
print("Was Alice the previous owner?",
fulfilled_transfer_tx['inputs'][0]['owners_before'][0] == alice.public_key)
le vélo est sous bob. L'ancien propriétaire est Alice. J'ai vu le résultat.
Tx valid in: 0 secs
Is Bob the owner? True
Was Alice the previous owner? True
Le plan est préparé, rempli et envoyé.
Library Reference
BigchainDB driver class
bigchaindb_driver.driver.TransactionsEndpoint
Exécute la transaction spécifiée.
Valeur de retour: la charge utile de la transaction exécutée est prête à être envoyée à BigchainDB Federation
Préparez-vous à la préparation de la charge utile de la transaction et exécutée. Vous pouvez sélectionner CREATE ou TRANSFER pendant l'opération.
Valeur de retour: dict de la transaction préparée
Soumettez une transaction à la fédération.
Valeur de retour: dict de la transaction envoyée au nœud de fédération
Il y en a d'autres, mais les détails sont ci-dessous https://docs.bigchaindb.com/projects/py-driver/en/latest/libref.html?highlight=prepare#driver
La prochaine fois que j'écrirai un article, je prévois de creuser un peu plus dans le transfert de transactions et autour des api.
ps
La version du nœud était également docker et la démo fonctionnait parfaitement. https://github.com/bigchaindb/bigchaindb-examples