def test_serialize_txgroup(self): address = "7ZUECA7HFLZTXENRV24SHLU4AVPUTMTTDUFUBNBD64C73F3UHRTHAIOF6Q" gh = "JgsgCaCTqIaLeVhyL6XlRu3n7Rfk2FxMeK+wRSaQ7dI=" txn = transaction.PaymentTxn(address, 3, 1, 100, gh, address, 1000, gen="testnet-v1.0", close_remainder_to=address) txid = txn.get_txid().encode() txid = base64.decodebytes(txid) txgroup = transaction.TxGroup([txid]) enc = encoding.msgpack_encode(txgroup) re_enc = encoding.msgpack_encode(encoding.msgpack_decode(enc)) self.assertEqual(enc, re_enc) txgroup = transaction.TxGroup([txid] * 11) enc = encoding.msgpack_encode(txgroup) re_enc = encoding.msgpack_encode(encoding.msgpack_decode(enc)) self.assertEqual(enc, re_enc) # check group field serialization gid = transaction.calculate_group_id([txn, txn]) txn.group = gid enc = encoding.msgpack_encode(txn) re_enc = encoding.msgpack_encode(encoding.msgpack_decode(enc)) self.assertEqual(enc, re_enc)
def test_payment_txn(self): paytxn = ("iaNhbXTOAAGGoKNmZWXNA+iiZnbNcq2jZ2Vuq25ldHdvcmstdjM4omdo" + "xCBN/+nfiNPXLbuigk8M/TXsMUfMK7dV//xB1wkoOhNu9qJsds1zEaNy" + "Y3bEIAZ2cvp4J0OiBy5eAHIX/njaRko955rEdN4AUNEl4rxTo3NuZMQg" + "GC5kQiOIPooA8mrvoHRyFtk27F/PPN08bAufGhnp0BGkdHlwZaNwYXk=") self.assertEqual( paytxn, encoding.msgpack_encode(encoding.msgpack_decode(paytxn)))
def test_bid(self): bid = ("gqFigqNiaWSGo2FpZAGjYXVjxCCokNFWl9DCqHrP9trjPICAMGOaRoX/OR+" + "M6tHWhfUBkKZiaWRkZXLEIP1rCXe2x5+exPBfU3CZwGPMY8mzwvglET+Qtg" + "fCPdCmo2N1cs8AAADN9kTOAKJpZM5JeDcCpXByaWNlzQMgo3NpZ8RAiR06J" + "4suAixy13BKHlw4VrORKzLT5CJr9n3YSj0Ao6byV23JHGU0yPf7u9/o4ECw" + "4Xy9hc9pWopLW97xKXRfA6F0oWI=") self.assertEqual(bid, encoding.msgpack_encode(encoding.msgpack_decode(bid)))
def test_signed_txn(self): stxn = ("gqNzaWfEQGdpjnStb70k2iXzOlu+RSMgCYLe25wkUfbgRsXs7jx6rbW61i" + "vCs6/zGs3gZAZf4L2XAQak7OjMh3lw9MTCIQijdHhuiaNhbXTOAAGGoKNm" + "ZWXNA+iiZnbNcl+jZ2Vuq25ldHdvcmstdjM4omdoxCBN/+nfiNPXLbuigk" + "8M/TXsMUfMK7dV//xB1wkoOhNu9qJsds1yw6NyY3bEIPRUuVDPVUFC7Jk3" + "+xDjHJfwWFDp+Wjy+Hx3cwL9ncVYo3NuZMQgGC5kQiOIPooA8mrvoHRyFt" + "k27F/PPN08bAufGhnp0BGkdHlwZaNwYXk=") self.assertEqual( stxn, encoding.msgpack_encode(encoding.msgpack_decode(stxn)))
def test_keyreg_txn(self): keyregtxn = ("jKNmZWXNA+iiZnbNcoqjZ2Vuq25ldHdvcmstdjM4omdoxCBN/+nfi" + "NPXLbuigk8M/TXsMUfMK7dV//xB1wkoOhNu9qJsds1y7qZzZWxrZX" + "nEIBguZEIjiD6KAPJq76B0chbZNuxfzzzdPGwLnxoZ6dARo3NuZMQ" + "gGC5kQiOIPooA8mrvoHRyFtk27F/PPN08bAufGhnp0BGkdHlwZaZr" + "ZXlyZWendm90ZWZzdM1yiqZ2b3Rla2TNMDmndm90ZWtlecQgGC5kQ" + "iOIPooA8mrvoHRyFtk27F/PPN08bAufGhnp0BGndm90ZWxzdM1y7g==") self.assertEqual( keyregtxn, encoding.msgpack_encode(encoding.msgpack_decode(keyregtxn)))
def test_assetconfig_txn(self): actxn = ("iKRhcGFyhKFjxCAJ+9J2LAj4bFrmv23Xp6kB3mZ111Dgfoxcdphkfbbh" + "/aFmxCAJ+9J2LAj4bFrmv23Xp6kB3mZ111Dgfoxcdphkfbbh/aFtxCAJ" + "+9J2LAj4bFrmv23Xp6kB3mZ111Dgfoxcdphkfbbh/aFyxCAJ+9J2LAj4" + "bFrmv23Xp6kB3mZ111Dgfoxcdphkfbbh/aRjYWlkgqFjxCAJ+9J2LAj4" + "bFrmv23Xp6kB3mZ111Dgfoxcdphkfbbh/aFpzQTSo2ZlZc0OzqJmds4A" + "BOwPomdoxCBIY7UYpLPITsgQ8i1PEIHLD3HwWaesIN7GL39w5Qk6IqJs" + "ds4ABO/3o3NuZMQgCfvSdiwI+Gxa5r9t16epAd5mdddQ4H6MXHaYZH22" + "4f2kdHlwZaRhY2Zn") self.assertEqual( actxn, encoding.msgpack_encode(encoding.msgpack_decode(actxn)))
def test_multisig_txn(self): msigtxn = ("gqRtc2lng6ZzdWJzaWeSgqJwa8Qg1ke3gkLuR0MUN/Ku0oyiRVIm9P1" + "QFDaiEhT5vtfLmd+hc8RAIEbfnhccjWfYQFQp/P4aJjATFdgaDDpnhy" + "JF0tU/37CO5I5hhoCvUCRH/A/6X94Ewz9YEtk5dANEGKQW+/WyAIKic" + "GvEIKgAZfZ4iDC+UY/P5F3tgs5rqeyYt08LT0c/D78u0V7KoXPEQCxU" + "kQgTVC9lLpKVzcZGKesSCQcZL9UjXTzrteADicvcca7KT3WP0crGgAf" + "J3a17Na5cykJzFEn7pq2SHgwD/QujdGhyAqF2AaN0eG6Jo2FtdM0D6K" + "NmZWXNA+iiZnbNexSjZ2Vuq25ldHdvcmstdjM4omdoxCBN/+nfiNPXL" + "buigk8M/TXsMUfMK7dV//xB1wkoOhNu9qJsds17eKNyY3bEIBguZEIj" + "iD6KAPJq76B0chbZNuxfzzzdPGwLnxoZ6dARo3NuZMQgpuIJvJzW8E4" + "uxsQGCW0S3n1u340PbHTB2zhtXo/AiI6kdHlwZaNwYXk=") self.assertEqual( msigtxn, encoding.msgpack_encode(encoding.msgpack_decode(msigtxn)))
def test_serialize_zero_amt(self): address = "7ZUECA7HFLZTXENRV24SHLU4AVPUTMTTDUFUBNBD64C73F3UHRTHAIOF6Q" gh = "JgsgCaCTqIaLeVhyL6XlRu3n7Rfk2FxMeK+wRSaQ7dI=" txn = transaction.PaymentTxn(address, 3, 1, 100, gh, address, 0, note=bytes([1, 32, 200])) enc = encoding.msgpack_encode(txn) re_enc = encoding.msgpack_encode(encoding.msgpack_decode(enc)) self.assertEqual(enc, re_enc)
def test_serialize_gen(self): address = "7ZUECA7HFLZTXENRV24SHLU4AVPUTMTTDUFUBNBD64C73F3UHRTHAIOF6Q" gh = "JgsgCaCTqIaLeVhyL6XlRu3n7Rfk2FxMeK+wRSaQ7dI=" txn = transaction.PaymentTxn(address, 3, 1, 100, gh, address, 1000, gen="testnet-v1.0", close_remainder_to=address) enc = encoding.msgpack_encode(txn) re_enc = encoding.msgpack_encode(encoding.msgpack_decode(enc)) self.assertEqual(enc, re_enc)
def test_sign(self): mn = ("advice pudding treat near rule blouse same whisper inner " + "electric quit surface sunny dismiss leader blood seat " + "clown cost exist hospital century reform able sponsor") gh = "JgsgCaCTqIaLeVhyL6XlRu3n7Rfk2FxMeK+wRSaQ7dI=" address = "PNWOET7LLOWMBMLE4KOCELCX6X3D3Q4H2Q4QJASYIEOF7YIPPQBG3YQ5YI" close = "IDUTJEUIEVSMXTU4LGTJWZ2UE2E6TIODUKU6UW3FU3UKIQQ77RLUBBBFLA" sk = mnemonic.to_private_key(mn) pk = account.address_from_private_key(sk) txn = transaction.PaymentTxn(pk, 4, 12466, 13466, gh, address, 1000, note=base64.b64decode("6gAVR0Nsv5Y="), gen="devnet-v33.0", close_remainder_to=close) stx = txn.sign(sk) golden = ("gqNzaWfEQPhUAZ3xkDDcc8FvOVo6UinzmKBCqs0woYSfodlmBMfQvGbeU" + "x3Srxy3dyJDzv7rLm26BRv9FnL2/AuT7NYfiAWjdHhui6NhbXTNA+ilY2" + "xvc2XEIEDpNJKIJWTLzpxZpptnVCaJ6aHDoqnqW2Wm6KRCH/xXo2ZlZc0" + "EmKJmds0wsqNnZW6sZGV2bmV0LXYzMy4womdoxCAmCyAJoJOohot5WHIv" + "peVG7eftF+TYXEx4r7BFJpDt0qJsds00mqRub3RlxAjqABVHQ2y/lqNyY" + "3bEIHts4k/rW6zAsWTinCIsV/X2PcOH1DkEglhBHF/hD3wCo3NuZMQg5/" + "D4TQaBHfnzHI2HixFV9GcdUaGFwgCQhmf0SVhwaKGkdHlwZaNwYXk=") self.assertEqual(golden, encoding.msgpack_encode(stx)) txid_golden = "5FJDJD5LMZC3EHUYYJNH5I23U4X6H2KXABNDGPIL557ZMJ33GZHQ" self.assertEqual(txn.get_txid(), txid_golden) # check group field serialization gid = transaction.calculate_group_id([txn]) stx.group = gid enc = encoding.msgpack_encode(stx) re_enc = encoding.msgpack_encode(encoding.msgpack_decode(enc)) self.assertEqual(enc, re_enc)
def mtxs(context, msigtxns): context.mtxs = msigtxns.split(" ") context.mtxs = [encoding.msgpack_decode(m) for m in context.mtxs]
def dec_mtx(context, mtx): context.mtx = encoding.msgpack_decode(mtx)
def enc_dec_bid(context): context.bid = encoding.msgpack_decode(encoding.msgpack_encode(context.bid))
# create the NoteField object bid_currency = 100 max_price = 15 bid_id = 18862 auction_key = "7ZUECA7HFLZTXENRV24SHLU4AVPUTMTTDUFUBNBD64C73F3UHRTHAIOF6Q" auction_id = 93559 bid = auction.Bid(public_key, bid_currency, max_price, bid_id, auction_key, auction_id) signed_bid = bid.sign(private_key) notefield = auction.NoteField(signed_bid, constants.note_field_type_bid) # create the transaction txn = transaction.PaymentTxn(public_key, sp, receiver, amount, note=base64.b64decode( encoding.msgpack_encode(notefield))) # encode the transaction encoded_txn = encoding.msgpack_encode(txn) print("Encoded transaction:", encoded_txn, "\n") # if someone else were to want to access the notefield from an encoded # transaction, they could just decode the transaction decoded_txn = encoding.msgpack_decode(encoded_txn) decoded_notefield = encoding.msgpack_decode(base64.b64encode(decoded_txn.note)) print("Decoded notefield from encoded transaction:", decoded_notefield.dictify())