def test_07_1_insert_transaction(self): print("\n-----", sys._getframe().f_code.co_name, "-----") global transaction transaction = bbclib.BBcTransaction() rtn = bbclib.BBcRelation() rtn.asset_group_id = asset_group_id rtn.asset = bbclib.BBcAsset() rtn.asset.add(user_id=user_id1, asset_body=b'bbbbbb', asset_file=b'cccccccccc') ptr = bbclib.BBcPointer() ptr.add(transaction_id=txid1) rtn.add(pointer=ptr) wit = bbclib.BBcWitness() transaction.add(relation=rtn, witness=wit) wit.add_witness(user_id1) sig = transaction.sign(private_key=keypair.private_key, public_key=keypair.public_key) transaction.add_signature_object(user_id=user_id1, signature=sig) transaction.digest() asset_files = { transaction.relations[0].asset.asset_id: transaction.relations[0].asset.asset_file, } ret = cores[0].insert_transaction(domain_id, bbclib.serialize(transaction), asset_files) assert ret[KeyType.transaction_id] == transaction.transaction_id ret = cores[0]._search_transaction_by_txid(domain_id, transaction.transaction_id) assert ret is not None assert len(ret[KeyType.all_asset_files]) == 1 print(ret) print("-- wait 2 seconds --") time.sleep(2)
def prepare_transactions(): global transactions for i in range(client_num*2): txobj = bbclib.BBcTransaction() evt = bbclib.BBcEvent() evt.asset_group_id = asset_group_id1 evt.asset = bbclib.BBcAsset() evt.asset.add(user_id=user_id1, asset_body=b'aaaaaa') rtn = bbclib.BBcRelation() rtn.asset_group_id = asset_group_id2 rtn.asset = bbclib.BBcAsset() rtn.asset.add(user_id=user_id2, asset_body=b'bbbbbb', asset_file=b'cccccccccc%d' % i) ptr = bbclib.BBcPointer() ptr.add(transaction_id=txid1) rtn.add(pointer=ptr) rtn2 = bbclib.BBcRelation() rtn2.asset_group_id = asset_group_id3 rtn2.asset = bbclib.BBcAsset() rtn2.asset.add(user_id=user_id2, asset_body=b'cccccc') if i > 0: ptr = bbclib.BBcPointer() ptr.add(transaction_id=transactions[-1].transaction_id) rtn.add(pointer=ptr) wit = bbclib.BBcWitness() if i % 2 == 0: txobj.add(event=evt, relation=[rtn, rtn2], witness=wit) else: txobj.add(event=evt, relation=rtn, witness=wit) wit.add_witness(user_id1) sig = txobj.sign(private_key=keypair1.private_key, public_key=keypair1.public_key) txobj.add_signature(user_id=user_id1, signature=sig) txobj.digest() transactions.append(txobj)
def create_user_id(self, num_pubkeys=1, public_keys=None): keypair = bbclib.KeyPair() user_id = hashlib.sha256(bytes(keypair.public_key)).digest() # FIXME: detect collision initial_keypairs = [] if public_keys is None: public_keys = [] for i in range(num_pubkeys): new_keypair = bbclib.KeyPair() initial_keypairs.append(new_keypair) public_keys.append(new_keypair.public_key) directive = Directive(Directive.CMD_REPLACE, public_keys) tx = bbclib.make_transaction_for_base_asset( asset_group_id=self.namespace_id, event_num=1) tx.events[0].asset.add(user_id=user_id, asset_body=directive.serialize()) tx.events[0].add(mandatory_approver=user_id) tx.add(witness=bbclib.BBcWitness()) tx.witness.add_witness(user_id) self.sign_and_insert(tx, user_id, keypair) return (user_id, initial_keypairs)
def set_mint_data(self, index, asset_body, update=False, keypair=None, idPublickeyMap=None): store_id = self.store_ids[index] if update: self.app.search_transaction_with_condition( asset_group_id=self.mint_id, user_id=store_id) res = self.app.callback.synchronize() if res[KeyType.status] >= ESUCCESS: reftx = bbclib.BBcTransaction( deserialize=res[KeyType.transactions][0]) else: reftx = None tx = bbclib.make_transaction_for_base_asset( asset_group_id=self.mint_id, event_num=1) tx.events[0].asset.add(user_id=store_id, asset_body=asset_body) tx.events[0].add(mandatory_approver=self.mint_id) if reftx is None: tx.add(witness=bbclib.BBcWitness()) tx.witness.add_witness(self.mint_id) else: bbclib.add_reference_to_transaction(self.mint_id, tx, reftx, 0) if keypair is None: return tx return self.sign_and_insert(tx, self.mint_id, keypair, idPublickeyMap)
def test_01_setup(self): print("\n-----", sys._getframe().f_code.co_name, "-----") global data_handler dummycore = DummyCore() conf = config["domains"][bbclib.convert_id_to_string(domain_id)] data_handler = DataHandler(networking=dummycore.networking, config=conf, workingdir="testdir", domain_id=domain_id) global transactions for i in range(10): txobj = bbclib.BBcTransaction() evt = bbclib.BBcEvent() evt.asset_group_id = asset_group_id1 evt.asset = bbclib.BBcAsset() evt.asset.add(user_id=user_id1, asset_body=b'aaaaaa') rtn = bbclib.BBcRelation() rtn.asset_group_id = asset_group_id2 rtn.asset = bbclib.BBcAsset() rtn.asset.add(user_id=user_id2, asset_body=b'bbbbbb', asset_file=b'cccccccccc%d' % i) ptr = bbclib.BBcPointer() ptr.add(transaction_id=txid1) rtn.add(pointer=ptr) if i > 0: ptr = bbclib.BBcPointer() ptr.add(transaction_id=transactions[-1].transaction_id) rtn.add(pointer=ptr) wit = bbclib.BBcWitness() txobj.add(event=evt, relation=rtn, witness=wit) wit.add_witness(user_id1) sig = txobj.sign(private_key=keypair1.private_key, public_key=keypair1.public_key) txobj.add_signature(user_id=user_id1, signature=sig) txobj.digest() transactions.append(txobj)
def prepare_transaction(asset_group, client, datnum, txid_pointer=None, no_cross_ref=False): user_id = client['user_id'] kp = client['keypair'] txobj = bbclib.BBcTransaction() rtn = bbclib.BBcRelation() asset = bbclib.BBcAsset() asset.add(user_id=user_id, asset_body=b'data=%d' % datnum) rtn.add(asset_group_id=asset_group, asset=asset) if txid_pointer is not None: ptr = bbclib.BBcPointer() ptr.add(transaction_id=txid_pointer) rtn.add(pointer=ptr) wit = bbclib.BBcWitness() txobj.add(relation=rtn, witness=wit) wit.add_witness(user_id) if not no_cross_ref: client['app'].include_cross_ref(txobj) sig = txobj.sign(key_type=bbclib.KeyType.ECDSA_SECP256k1, keypair=kp) txobj.add_signature(user_id=user_id, signature=sig) txobj.digest() return txobj
def issue(self, to_user_id, amount, time_of_origin=None, keypair=None): if self.user_id != self.mint_id: raise RuntimeError('issuer must be the mint') tx = bbclib.make_transaction_for_base_asset( asset_group_id=self.mint_id, event_num=1) if time_of_origin is None: time_of_origin = tx.timestamp tx.events[0].asset.add( user_id=to_user_id, asset_body=IssuedAssetBody( amount, time_of_origin, self.currency_spec.variation_specs).serialize()) tx.events[0].add(mandatory_approver=self.mint_id) tx.events[0].add(mandatory_approver=to_user_id) tx.add(witness=bbclib.BBcWitness()) tx.witness.add_witness(self.mint_id) if keypair is None: return tx return self.store.sign_and_insert(tx, self.mint_id, keypair, self.idPublickeyMap)