BigchainDB is a development platform that has blockchain properties such as decentralization, permanence, proprietor controlled resources, etc., and database properties such as high exchange rate, low inertness, ordering and questioning of organized information. It was first discharged—open source—in February 2016 and has been enhanced continuously from that point forward.
BigchainDB can serve a myriad of use cases. Wherever there is a requirement for immutable data highlighting digital assets, BigchainDB can come in use. There are numerous industries which can use BigchainDB features for their benefits. In this blog, we will be creating an application using BigchainDB in Python.
To use BigchainDB we need to install BigchainDB driver for this command
pip3 install -U bigchaindb-driver
To connect with BigchainDB we use url that is
bdb_root_url = 'http://localhost:9984' # this is your local set up BigchainDb url
If you have not set up Bigchaindb locally then you can use BigchainDB testnet url that is
bdb_root_url = ‘https://test.bigchaindb.com’ # this is testnet url of BigchainDB
If we use testnet url then we will pass
App_id & app_key that we will find after signup on url
https://testnet.bigchaindb.com/
2. To connect with BigchainDB
We will import this class
from bigchaindb_driver import BigchainDB
Add appi_id & app_key in header of url like this
bdb = BigchainDB(
'https://test.bigchaindb.com',
headers={'app_id': 'da9c76b6'
'app_key': '34f1acaf209503732a3521afb184560a'})
3. Create private key & public key.
Import this class to create private key & public key
from bigchaindb_driver.crypto import generate_keypair
& create by this method
user1, user2 = generate_keypair(), generate_keypair()
3. Code of creating asset .
from bigchaindb_driver import BigchainDB
from bigchaindb_driver.crypto import generate_keypair
user1, user2 = generate_keypair(), generate_keypair()
bdb = BigchainDB(
'https://test.bigchaindb.com',
headers={'app_id': 'da9c76b6',
'app_key': '34f1acaf209503732a3521afb184560a'})
Test_asset = {
'data': {
'test22': {
'serial_number': 'abcd123412',
'manufacturer': 'bkfabahr'
},
},
}
Test_asset_metadata = {
'country': 'india'
}
prepared_creation_tx = bdb.transactions.prepare(
operation='CREATE',
signers=user1.public_key,
asset=Test_asset,
metadata=Test_asset_metadata
)
fulfilled_creation_tx = bdb.transactions.fulfill(
prepared_creation_tx,
private_keys=user1.private_key
)
sent_creation_tx = bdb.transactions.send_commit(fulfilled_creation_tx)
print('create')
print(sent_creation_tx)
txid = fulfilled_creation_tx['id']
b = bdb.transactions.get(asset_id=txid)
print('b')
print(b)
Response-> after successfull run code
create
{'asset': {'data': {'bicycle': {'manufacturer': 'bkfab', 'serial_number': 'abcd1234'}}}, 'id': 'd7fb62d90f1c67861e520cffeb6e7c6a62ed3b7ba335ebfc784c8baba46592a0', 'inputs': [{'fulfillment': 'pGSAIIg31Ki3DZbYOAZMnBmVgV0-hfy_xeDiz9d83I6jBmxagUBKbgqZksjvhMAeyGPSHNDnIjBqmgM8qVdy641Z0PQNB27dbZNYsnGac2fgzkZxXyDx6YqBx1WNCG-wT8BCTokL', 'fulfills': None, 'owners_before': ['AAjpnRqzJRhS8xpQsXNLV1hdaB8gUwgE41qJhinfGtqw']}], 'metadata': {'planet': 'earth'}, 'operation': 'CREATE', 'outputs': [{'amount': '1', 'condition': {'details': {'public_key': 'AAjpnRqzJRhS8xpQsXNLV1hdaB8gUwgE41qJhinfGtqw', 'type': 'ed25519-sha-256'}, 'uri': 'ni:///sha-256;oFneJQzJm7Nq5k786xXdDRUCd-48WFQ1HLlkyojar3M?fpt=ed25519-sha-256&cost=131072'}, 'public_keys': ['AAjpnRqzJRhS8xpQsXNLV1hdaB8gUwgE41qJhinfGtqw']}], 'version': '2.0'}
4. Transfer Asset ownership.
We are transfer previously created transaction
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']
}
prepared_transfer_tx = bdb.transactions.prepare(
operation='TRANSFER',
asset=transfer_asset,
inputs=transfer_input,
recipients=user2.public_key,
)
fulfilled_transfer_tx = bdb.transactions.fulfill(
prepared_transfer_tx,
private_keys=alice.private_key,
)
sent_transfer_tx = bdb.transactions.send_commit(fulfilled_transfer_tx)
print('sent_transfer_tx')
print(sent_transfer_tx)
Response are like this of transfer asset ->
{'asset': {'id': 'd7fb62d90f1c67861e520cffeb6e7c6a62ed3b7ba335ebfc784c8baba46592a0'}, 'id': '0ee2929a01e949fe051d1cfaaa643556e6f5caef5d9fb932dae241a9efe98f65', 'inputs': [{'fulfillment': 'pGSAIIg31Ki3DZbYOAZMnBmVgV0-hfy_xeDiz9d83I6jBmxagUB3Lj4-f5VhdYkiMLuWDrUhctY-_wQVvOcCdtLy0o7zaMGl-rPmx8k0wK0WXdz-24gkOqqDkJh9fp8uB7RQkNIB', 'fulfills': {'output_index': 0, 'transaction_id': 'd7fb62d90f1c67861e520cffeb6e7c6a62ed3b7ba335ebfc784c8baba46592a0'}, 'owners_before': ['AAjpnRqzJRhS8xpQsXNLV1hdaB8gUwgE41qJhinfGtqw']}], 'metadata': None, 'operation': 'TRANSFER', 'outputs': [{'amount': '1', 'condition': {'details': {'public_key': '7STQGzddjH2RiiQEedxatVuoi7CqV7NbPPWRxaubaTke', 'type': 'ed25519-sha-256'}, 'uri': 'ni:///sha-256;JpyXA6_WsPe-MEyBTchq0XVGsqBR_BnmF1fZI0PD8Qc?fpt=ed25519-sha-256&cost=131072'}, 'public_keys': ['7STQGzddjH2RiiQEedxatVuoi7CqV7NbPPWRxaubaTke']}], 'version': '2.0'}
5. Get transaction details
Code of get transaction details
from bigchaindb_driver import BigchainDB
from bigchaindb_driver.crypto import generate_keypair
bdb = BigchainDB(
'https://test.bigchaindb.com',
headers={'app_id': 'da9c76b6',
'app_key': '34f1acaf209503732a3521afb184560a'})
print('txid')
b = bdb.transactions.get(asset_id='d7fb62d90f1c67861e520cffeb6e7c6a62ed3b7ba335ebfc784c8baba46592a0')
print('b')
print(b)
Response are like this
[{'inputs': [{'owners_before': ['AAjpnRqzJRhS8xpQsXNLV1hdaB8gUwgE41qJhinfGtqw'], 'fulfills': None, 'fulfillment': 'pGSAIIg31Ki3DZbYOAZMnBmVgV0-hfy_xeDiz9d83I6jBmxagUBKbgqZksjvhMAeyGPSHNDnIjBqmgM8qVdy641Z0PQNB27dbZNYsnGac2fgzkZxXyDx6YqBx1WNCG-wT8BCTokL'}], 'outputs': [{'public_keys': ['AAjpnRqzJRhS8xpQsXNLV1hdaB8gUwgE41qJhinfGtqw'], 'condition': {'details': {'type': 'ed25519-sha-256', 'public_key': 'AAjpnRqzJRhS8xpQsXNLV1hdaB8gUwgE41qJhinfGtqw'}, 'uri': 'ni:///sha-256;oFneJQzJm7Nq5k786xXdDRUCd-48WFQ1HLlkyojar3M?fpt=ed25519-sha-256&cost=131072'}, 'amount': '1'}], 'operation': 'CREATE', 'metadata': {'planet': 'earth'}, 'asset': {'data': {'bicycle': {'serial_number': 'abcd1234', 'manufacturer': 'bkfab'}}}, 'version': '2.0', 'id': 'd7fb62d90f1c67861e520cffeb6e7c6a62ed3b7ba335ebfc784c8baba46592a0'}, {'inputs': [{'owners_before': ['AAjpnRqzJRhS8xpQsXNLV1hdaB8gUwgE41qJhinfGtqw'], 'fulfills': {'transaction_id': 'd7fb62d90f1c67861e520cffeb6e7c6a62ed3b7ba335ebfc784c8baba46592a0', 'output_index': 0}, 'fulfillment': 'pGSAIIg31Ki3DZbYOAZMnBmVgV0-hfy_xeDiz9d83I6jBmxagUB3Lj4-f5VhdYkiMLuWDrUhctY-_wQVvOcCdtLy0o7zaMGl-rPmx8k0wK0WXdz-24gkOqqDkJh9fp8uB7RQkNIB'}], 'outputs': [{'public_keys': ['7STQGzddjH2RiiQEedxatVuoi7CqV7NbPPWRxaubaTke'], 'condition': {'details': {'type': 'ed25519-sha-256', 'public_key': '7STQGzddjH2RiiQEedxatVuoi7CqV7NbPPWRxaubaTke'}, 'uri': 'ni:///sha-256;JpyXA6_WsPe-MEyBTchq0XVGsqBR_BnmF1fZI0PD8Qc?fpt=ed25519-sha-256&cost=131072'}, 'amount': '1'}], 'operation': 'TRANSFER', 'metadata': None, 'asset': {'id': 'd7fb62d90f1c67861e520cffeb6e7c6a62ed3b7ba335ebfc784c8baba46592a0'}, 'version': '2.0', 'id': '0ee2929a01e949fe051d1cfaaa643556e6f5caef5d9fb932dae241a9efe98f65'}]
6. To Check tranaction have successfully send or not !
from bigchaindb_driver import BigchainDB
from bigchaindb_driver.crypto import generate_keypair
bdb = BigchainDB(
'https://test.bigchaindb.com',
headers={'app_id': 'da9c76b6',b
2523
'app_key': '34f1acaf209503732a3521afb184560a'})
b = block_height = bdb.blocks.get(txid='d7fb62d90f1c67861e520cffeb6e7c6a62ed3b7ba335ebfc784c8baba46592a0')
print('Block Number')
print(b)
Response -> this will show block number thats hold the transaction details
Block Number
2523
Source: https://docs.bigchaindb.com/projects/py-driver/en/latest/usage.html