def test_verifyAuthority(self): stm = self.bts stm.wallet.unlock("123") tx = TransactionBuilder(use_condenser_api=True, crea_instance=stm) tx.appendOps( Transfer( **{ "from": "crea", "to": "crea1", "amount": Amount("1.300 CBD", crea_instance=stm), "memo": "Foobar" })) account = Account("crea", crea_instance=stm) tx.appendSigner(account, "active") self.assertTrue(len(tx.wifs) > 0) tx.sign() tx.verify_authority() self.assertTrue(len(tx["signatures"]) > 0)
def test_transfer_1of1(self): crea = self.bts crea.nobroadcast = False tx = TransactionBuilder(use_condenser_api=True, crea_instance=crea) tx.appendOps( Transfer( **{ "from": 'crea', "to": 'crea1', "amount": Amount("0.01 CREA", crea_instance=crea), "memo": '1 of 1 transaction' })) self.assertEqual(tx["operations"][0]["type"], "transfer_operation") tx.appendWif(self.active_key) tx.sign() tx.sign() self.assertEqual(len(tx['signatures']), 1) tx.broadcast() crea.nobroadcast = True
def test_transfer_2of2_wif(self): nodelist = NodeList() # Send a 2 of 2 transaction from elf which needs crea4's cosign to send # funds but sign the transaction with elf's key and then serialize the transaction # and deserialize the transaction. After that, sign with crea4's key. crea = Crea( node=self.nodes, num_retries=10, keys=[self.active_private_key_of_crea5], expiration=360, ) tx = TransactionBuilder(use_condenser_api=True, crea_instance=crea) tx.appendOps( Transfer( **{ "from": 'crea5', "to": 'crea', "amount": Amount("0.01 CREA", crea_instance=crea), "memo": '2 of 2 serialized/deserialized transaction' })) tx.appendSigner("crea5", "active") tx.addSigningInformation("crea5", "active") tx.sign() tx.clearWifs() self.assertEqual(len(tx['signatures']), 1) tx_json = tx.json() del crea del tx crea = Crea( node=self.nodes, num_retries=10, keys=[self.active_private_key_of_crea4], expiration=360, ) new_tx = TransactionBuilder(tx=tx_json, crea_instance=crea) new_tx.appendMissingSignatures() new_tx.sign(reconstruct_tx=False) self.assertEqual(len(new_tx['signatures']), 2) new_tx.broadcast()
def test_TransactionConstructor(self): stm = self.bts opTransfer = Transfer( **{ "from": "crea", "to": "crea1", "amount": Amount("1 CREA", crea_instance=stm), "memo": "" }) tx1 = TransactionBuilder(use_condenser_api=True, crea_instance=stm) tx1.appendOps(opTransfer) tx = TransactionBuilder(tx1, crea_instance=stm) self.assertFalse(tx.is_empty()) self.assertTrue(len(tx.list_operations()) == 1) self.assertTrue(repr(tx) is not None) self.assertTrue(str(tx) is not None) account = Account("crea", crea_instance=stm) tx.appendSigner(account, "active") self.assertTrue(len(tx.wifs) > 0) tx.sign() self.assertTrue(len(tx["signatures"]) > 0)
def test_Transfer_broadcast(self): nodelist = NodeList() stm = Crea(node=self.nodes, keys=[self.active_key], nobroadcast=True, expiration=120, num_retries=10) tx = TransactionBuilder(use_condenser_api=True, expiration=10, crea_instance=stm) tx.appendOps( Transfer( **{ "from": "crea", "to": "crea1", "amount": Amount("1 CREA", crea_instance=stm), "memo": "" })) tx.appendSigner("crea", "active") tx.sign() tx.broadcast()
def test_appendWif(self): nodelist = NodeList() stm = Crea(node=self.nodes, nobroadcast=True, expiration=120, num_retries=10) tx = TransactionBuilder(use_condenser_api=True, crea_instance=stm) tx.appendOps( Transfer( **{ "from": "crea", "to": "crea1", "amount": Amount("1 CREA", crea_instance=stm), "memo": "" })) with self.assertRaises(MissingKeyError): tx.sign() with self.assertRaises(InvalidWifError): tx.appendWif("abcdefg") tx.appendWif(self.active_key) tx.sign() self.assertTrue(len(tx["signatures"]) > 0)
def test_transfer_2of2_serialized_deserialized(self): # Send a 2 of 2 transaction from crea5 which needs crea4's cosign to send # funds but sign the transaction with crea5's key and then serialize the transaction # and deserialize the transaction. After that, sign with crea4's key. crea = self.bts crea.nobroadcast = False crea.wallet.unlock("123") # crea.wallet.removeAccount("crea4") crea.wallet.removePrivateKeyFromPublicKey( str(PublicKey(self.active_private_key_of_crea4, prefix=core_unit))) tx = TransactionBuilder(use_condenser_api=True, crea_instance=crea) tx.appendOps( Transfer( **{ "from": 'crea5', "to": 'crea1', "amount": Amount("0.01 CREA", crea_instance=crea), "memo": '2 of 2 serialized/deserialized transaction' })) tx.appendSigner("crea5", "active") tx.addSigningInformation("crea5", "active") tx.sign() tx.clearWifs() self.assertEqual(len(tx['signatures']), 1) # crea.wallet.removeAccount("crea5") crea.wallet.removePrivateKeyFromPublicKey( str(PublicKey(self.active_private_key_of_crea5, prefix=core_unit))) tx_json = tx.json() del tx new_tx = TransactionBuilder(tx=tx_json, crea_instance=crea) self.assertEqual(len(new_tx['signatures']), 1) crea.wallet.addPrivateKey(self.active_private_key_of_crea4) new_tx.appendMissingSignatures() new_tx.sign(reconstruct_tx=False) self.assertEqual(len(new_tx['signatures']), 2) new_tx.broadcast() crea.nobroadcast = True
def test_transfer_2of2_simple(self): # Send a 2 of 2 transaction from elf which needs crea4's cosign to send funds crea = self.bts crea.nobroadcast = False tx = TransactionBuilder(use_condenser_api=True, crea_instance=crea) tx.appendOps( Transfer( **{ "from": 'crea5', "to": 'crea1', "amount": Amount("0.01 CREA", crea_instance=crea), "memo": '2 of 2 simple transaction' })) tx.appendWif(self.active_private_key_of_crea5) tx.sign() tx.clearWifs() tx.appendWif(self.active_private_key_of_crea4) tx.sign(reconstruct_tx=False) self.assertEqual(len(tx['signatures']), 2) tx.broadcast() crea.nobroadcast = True
def test_appendSigner(self): nodelist = NodeList() stm = Crea(node=self.nodes, keys=[self.active_key], nobroadcast=True, expiration=120, num_retries=10) tx = TransactionBuilder(use_condenser_api=True, crea_instance=stm) tx.appendOps( Transfer( **{ "from": "crea", "to": "crea1", "amount": Amount("1 CREA", crea_instance=stm), "memo": "" })) account = Account("crea", crea_instance=stm) with self.assertRaises(AssertionError): tx.appendSigner(account, "abcdefg") tx.appendSigner(account, "active") self.assertTrue(len(tx.wifs) > 0) tx.sign() self.assertTrue(len(tx["signatures"]) > 0)
def test_transfer_2of2_wallet(self): # Send a 2 of 2 transaction from crea5 which needs crea4's cosign to send # priv key of crea5 and crea4 are stored in the wallet # appendSigner fetches both keys and signs automatically with both keys. crea = self.bts crea.nobroadcast = False crea.wallet.unlock("123") tx = TransactionBuilder(use_condenser_api=True, crea_instance=crea) tx.appendOps( Transfer( **{ "from": 'crea5', "to": 'crea1', "amount": Amount("0.01 CREA", crea_instance=crea), "memo": '2 of 2 serialized/deserialized transaction' })) tx.appendSigner("crea5", "active") tx.sign() self.assertEqual(len(tx['signatures']), 2) tx.broadcast() crea.nobroadcast = True
def test_verifyAuthorityException(self): nodelist = NodeList() stm = Crea(node=self.nodes, keys=[self.posting_key], nobroadcast=True, expiration=120, num_retries=10) tx = TransactionBuilder(use_condenser_api=True, crea_instance=stm) tx.appendOps( Transfer( **{ "from": "crea", "to": "crea1", "amount": Amount("1 CREA", crea_instance=stm), "memo": "" })) account = Account("crea2", crea_instance=stm) tx.appendSigner(account, "active") tx.appendWif(self.posting_key) self.assertTrue(len(tx.wifs) > 0) tx.sign() with self.assertRaises(exceptions.MissingRequiredActiveAuthority): tx.verify_authority() self.assertTrue(len(tx["signatures"]) > 0)
def test_Transfer(self): transferJson = { 'from': 'test', 'to': 'test1', 'amount': "1.000 CREA", 'memo': 'foobar' } t = Transfer(transferJson) self.assertEqual(transferJson, json.loads(str(t))) self.assertEqual(transferJson, t.json()) self.assertEqual(transferJson, t.toJson()) self.assertEqual(transferJson, t.__json__()) transferJson = { 'from': 'test', 'to': 'test1', 'amount': ['3000', 3, '@@000000037'], 'memo': 'foobar' } t = Transfer(transferJson) self.assertEqual(transferJson, json.loads(str(t))) self.assertEqual(transferJson, t.json()) self.assertEqual(transferJson, t.toJson()) self.assertEqual(transferJson, t.__json__()) o = Operation(Transfer(transferJson)) self.assertEqual(o.json()[1], transferJson) tx = { 'ref_block_num': 0, 'ref_block_prefix': 0, 'expiration': '2018-04-07T09:30:53', 'operations': [o], 'extensions': [], 'signatures': [] } s = Signed_Transaction(tx) s.sign(wifkeys=[wif], chain="CREAAPPBASE") self.assertEqual(s.json()["operations"][0][1], transferJson)