Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
 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
Ejemplo n.º 7
0
    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)