前回は、
なお、
file_
アプリケーションプログラムの処理の流れの全体像
BBc-1アプリケーションの処理は、

ドメイン作成は、
トランザクションを作成するためには、
それでは、
まず、
BBc-1の機能を利用するには、
from bbc1.core import bbc_app
from bbc1.core.bbc_config import DEFAULT_CORE_PORT
from bbc1.core import bbclib
from bbc1.core.message_key_types import KeyType
from bbc1.core.bbc_error import *
ドメインの作成
ドメインとはデータを共有する範囲を表します。ドメインの作成は、
ドメインを作成するコードは、
def domain_setup():
tmpclient = bbc_app.BBcAppClient(port=DEFAULT_CORE_PORT, multiq=False, loglevel="all")
if os.path.exists("node_key.pem"):
tmpclient.set_node_key("node_key.pem")
tmpclient.domain_setup(domain_id)
tmpclient.callback.synchronize()
tmpclient.unregister_from_core()
print("Domain %s is created." % (binascii.b2a_hex(domain_id[:4]).decode()))
print("Setup is done.")
この関数では、
tmpclient.
鍵作成
BBc-1のトランザクションには必ず署名
bbc1モジュールでは、
def create_keypair():
keypair = bbclib.KeyPair()
keypair.generate()
with open(PRIVATE_KEY, "wb") as fout:
fout.write(keypair.private_key)
with open(PUBLIC_KEY, "wb") as fout:
fout.write(keypair.public_key)
print("created private_key and public_key : %s, %s" % (PRIVATE_KEY, PUBLIC_KEY))
keypair = bbclib.
トランザクション登録
いよいよトランザクションの作成と登録です。トランザクションに含めるアセットの内容はアプリケーションごとさまざまですが、
file_
def store_proc(file, txid=None):
with open(file, "rb") as fin:
data = fin.read()
bbc_app_client = setup_bbc_client()
store_transaction = bbclib.make_transaction(relation_num=1, witness=True)
user_info = "Owner is %s" % user_name
bbclib.add_relation_asset(store_transaction, relation_idx=0, asset_group_id=asset_group_id,
user_id=user_id, asset_body=user_info, asset_file=data)
store_transaction.witness.add_witness(user_id)
if txid:
bbc_app_client.search_transaction(txid)
response_data = bbc_app_client.callback.synchronize()
if response_data[KeyType.status] < ESUCCESS:
print("ERROR: ", response_data[KeyType.reason].decode())
sys.exit(0)
prev_tx, fmt_type = bbclib.deserialize(response_data[KeyType.transaction_data])
bbclib.add_relation_pointer(transaction=store_transaction, relation_idx=0,
ref_transaction_id=prev_tx.transaction_id)
sig = store_transaction.sign(private_key=key_pair.private_key,
public_key=key_pair.public_key)
store_transaction.get_sig_index(user_id)
store_transaction.add_signature(user_id=user_id, signature=sig)
store_transaction.digest()
print(store_transaction)
ret = bbc_app_client.insert_transaction(store_transaction)
assert ret
response_data = bbc_app_client.callback.synchronize()
if response_data[KeyType.status] < ESUCCESS:
print("ERROR: ", response_data[KeyType.reason].decode())
sys.exit(0)
store_id_mappings(os.path.basename(file),
asset_group_id, transaction_id=response_data[KeyType.transaction_id],
asset_ids=store_transaction.relations[0].asset.asset_id)
store_
トランザクションの作成
処理の流れの詳細を説明していきます。 次の部分がトランザクションを作成する部分です。
store_transaction = bbclib.make_transaction(relation_num=1, witness=True)
user_info = "Owner is %s" % user_name
bbclib.add_relation_asset(store_transaction, relation_idx=0, asset_group_id=asset_group_id,
user_id=user_id, asset_body=user_info, asset_file=data)
store_transaction.witness.add_witness(user_id)
make_
トランザクションの検索
if txid:
bbc_app_client.search_transaction(txid)
response_data = bbc_app_client.callback.synchronize()
if response_data[KeyType.status] < ESUCCESS:
print("ERROR: ", response_data[KeyType.reason].decode())
sys.exit(0)
prev_tx, fmt_type = bbclib.deserialize(response_data[KeyType.transaction_data])
bbclib.add_relation_pointer(transaction=store_transaction, relation_idx=0,
ref_transaction_id=prev_tx.transaction_id)
if txid:の条件分岐で、
ここまでで、
トランザクションへの署名付与
sig = store_transaction.sign(private_key=key_pair.private_key,
public_key=key_pair.public_key)
あとは、
store_transaction.add_signature(user_id=user_id, signature=sig)
先のwitness.
store_transaction.digest()
print(store_transaction)
の部分は、
トランザクションの登録と後処理
ret = bbc_app_client.insert_transaction(store_transaction)
assert ret
response_data = bbc_app_client.callback.synchronize()
if response_data[KeyType.status] < ESUCCESS:
print("ERROR: ", response_data[KeyType.reason].decode())
sys.exit(0)
store_id_mappings(os.path.basename(file),
asset_group_id, transaction_id=response_data[KeyType.transaction_id],
asset_ids=store_transaction.relations[0].asset.asset_id)
完成したトランザクションは、
最後のstore_
まとめ
今回は、