前回に引き続き、
また、
トランザクション承認依頼(合意)
これまでの記事で何度も述べてきましたが、
file_
def send_signreq(receiver_name, receiver_user_id, ref_txids=None, file_data=None, bbc_app_client=None):
transaction = bbclib.make_transaction(relation_num=1, witness=True)
user_info_msg = "Ownership is transfered from %s to %s" % (user_name, receiver_name)
bbclib.add_relation_asset(transaction, relation_idx=0, asset_group_id=asset_group_id,
user_id=receiver_user_id, asset_body=user_info_msg, asset_file=file_data)
transaction.witness.add_witness(user_id)
transaction.witness.add_witness(receiver_user_id)
(中略)
asset_id = transaction.relations[0].asset.asset_id
asset_files = {asset_id: file_data}
ret = bbc_app_client.gather_signatures(transaction, destinations=[receiver_user_id],
asset_files=asset_files)
if not ret:
print("Failed to send sign request")
sys.exit(0)
return transaction
このコードは、
そして、
この処理の後、
def enter_file_wait_mode():
bbc_app_client = setup_bbc_client()
recvdat = wait_for_transaction_msg(bbc_app_client=bbc_app_client)
transaction, source_id = pick_valid_transaction_info(received_data=recvdat,
bbc_app_client=bbc_app_client)
prompt_user_to_accept_the_file(bbc_app_client=bbc_app_client, source_id=source_id,
transaction_id=transaction.transaction_id)
signature = transaction.sign(keypair=key_pair)
bbc_app_client.sendback_signature(source_id, transaction.transaction_id, -1, signature)
このコードはwait側で実行されます。処理を関数にまとめているためシンプルに見えますが、
なお、
合意したトランザクションの完成
最後に、
def wait_for_signs(transaction, bbc_app_client):
response_data = bbc_app_client.callback.synchronize()
if response_data[KeyType.status] < ESUCCESS:
print("Rejected because ", response_data[KeyType.reason].decode(), "")
sys.exit(0)
result = response_data[KeyType.result]
transaction.witness.add_signature(user_id=result[1], signature=result[2])
sig_mine = transaction.sign(private_key=key_pair.private_key,
public_key=key_pair.public_key)
transaction.witness.add_signature(user_id=user_id, signature=sig_mine)
transaction.digest()
return transaction
このコードは、
result = response_
それ以降の処理は、
def insert_signed_transaction_to_bbc_core(transaction=None, bbc_app_client=None,
file_name=None):
print("Insert the transaction into BBc-1")
ret = bbc_app_client.insert_transaction(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)
ここで紹介したメッセージング機能
まとめ
今回は、
次回は、