diff --git a/monero/transaction/__init__.py b/monero/transaction/__init__.py index cff2e5a..058db4f 100644 --- a/monero/transaction/__init__.py +++ b/monero/transaction/__init__.py @@ -125,6 +125,49 @@ class Transaction(object): for outputs directed to the wallet, provided that matching subaddresses have been already generated. """ + def _scan_pubkeys(svk, psk, stealth_address): + for keyidx, tx_key in enumerate(self.pubkeys): + hsdata = b"".join( + [ + ed25519.encodepoint( + ed25519.scalarmult( + ed25519.decodepoint(tx_key), ed25519.decodeint(svk) * 8 + ) + ), + varint.encode(idx), + ] + ) + Hs_ur = sha3.keccak_256(hsdata).digest() + + # sc_reduce32: + Hsint_ur = ed25519.decodeint(Hs_ur) + Hsint = Hsint_ur % ed25519.l + Hs = ed25519.encodeint(Hsint) + + k = ed25519.encodepoint( + ed25519.edwards_add( + ed25519.scalarmult_B(Hsint), ed25519.decodepoint(psk), + ) + ) + if k != stealth_address: + continue + if not encamount: + # Tx ver 1 + break + amount_hs = sha3.keccak_256(b"amount" + Hs).digest() + xormask = amount_hs[:len(encamount)] + dec_amount = bytes(a ^ b for a, b in zip(encamount, xormask)) + int_amount = int.from_bytes( + dec_amount, byteorder="little", signed=False + ) + amount = from_atomic(int_amount) + return Payment( + amount=amount, + timestamp=self.timestamp, + transaction=self, + local_address=addr) + + if not self.json: raise exceptions.TransactionWithoutJSON( 'Tx {:s} has no .json attribute'.format(self.hash)) @@ -133,66 +176,32 @@ class Transaction(object): ep = ExtraParser(self.json["extra"]) extra = ep.parse() self.pubkeys = extra.get("pubkeys", []) - svk = wallet.view_key() + svk = binascii.unhexlify(wallet.view_key()) + # fetch before loop to save on calls; cast to list to preserve over multiple iterations + addresses = list( + itertools.chain(*map(operator.methodcaller("addresses"), wallet.accounts))) outs = [] for idx, vout in enumerate(self.json['vout']): - try: - extra_pubkey = self.pubkeys[idx] - except IndexError: - extra_pubkey = None + stealth_address = binascii.unhexlify(vout['target']['key']) if self.version == 2 and not self.is_coinbase: encamount = binascii.unhexlify( self.json["rct_signatures"]["ecdhInfo"][idx]["amount"] ) + payment = None amount = from_atomic(vout['amount']) if wallet: - for addr in itertools.chain(map( - operator.methodcaller('addresses', wallet.accounts))): - psk = addr.spend_key() - svk = binascii.unhexlify(addr.wallet.svk) - for keyidx, tx_key in enumerate(self.pubkeys): - hsdata = b"".join( - [ - ed25519.encodepoint( - ed25519.scalarmult( - ed25519.decodepoint(tx_key), ed25519.decodeint(svk) * 8 - ) - ), - varint.encode(idx), - ] - ) - Hs_ur = sha3.keccak_256(hsdata).digest() - - # sc_reduce32: - Hsint_ur = ed25519.decodeint(Hs_ur) - Hsint = Hsint_ur % ed25519.l - Hs = ed25519.encodeint(Hsint) - - k = ed25519.encodepoint( - ed25519.edwards_add( - ed25519.scalarmult_B(Hsint), ed25519.decodepoint(psk), - ) - ) - if k != vout['target']['key']: - continue - if not encamount: - # Tx ver 1 - break - amount_hs = sha3.keccak_256(b"amount" + Hs).digest() - xormask = amount_hs[:len(encamount)] - dec_amount = bytes(a ^ b for a, b in zip(encamount, xormask)) - int_amount = int.from_bytes( - dec_amount, byteorder="little", signed=False - ) - amount = from_atomic(int_amount) + for addridx, addr in enumerate(addresses): + psk = binascii.unhexlify(addr.spend_key()) + payment = _scan_pubkeys(svk, psk, stealth_address) + if payment: break outs.append(OneTimeOutput( - pubkey=vout['target']['key'], - extra_pubkey=extra_pubkey, - amount=amount, + stealth_address=vout['target']['key'], + amount=payment.amount if payment else amount, index=self.output_indices[idx] if self.output_indices else None, height=self.height, - transaction=self)) + transaction=self, + payment=payment)) return outs def __repr__(self): @@ -201,43 +210,44 @@ class Transaction(object): class OneTimeOutput(object): """ - A Monero one-time public output (A.K.A stealth address). Identified by `pubkey`, or `index` and `amount` + A Monero one-time public output (A.K.A stealth address). + Identified by `stealth_address`, or `index` and `amount` together, it can contain differing levels of information on an output. This class is not intended to be turned into objects by the user, it is used by backends. """ - pubkey = None - extra_pubkey = None + stealth_address = None amount = None index = None height = None mask = None transaction = None + payment = None unlocked = None def __init__(self, **kwargs): - self.pubkey = kwargs.get('pubkey', self.pubkey) - self.extra_pubkey = kwargs.get('extra_pubkey', self.extra_pubkey) + self.stealth_address = kwargs.get('stealth_address', self.stealth_address) self.amount = kwargs.get('amount', self.amount) self.index = kwargs.get('index', self.index) self.height = kwargs.get('height', self.height) self.mask = kwargs.get('mask', self.mask) self.transaction = kwargs.get('transaction', self.transaction) + self.payment = kwargs.get('payment', self.payment) self.unlocked = kwargs.get('unlocked', self.unlocked) def __repr__(self): # Try to represent output as (index, amount) pair if applicable because there is no RPC - # daemon command to lookup outputs by their pubkey ;( - if self.pubkey: - return self.pubkey + # daemon command to lookup outputs by their stealth_address ;( + if self.stealth_address: + return self.stealth_address else: return '(index={},amount={})'.format(self.index, self.amount) def __eq__(self, other): - # Try to compare pubkeys, then try to compare (index,amount) pairs, else raise error - if self.pubkey and other.pubkey: - return self.pubkey == other.pubkey + # Try to compare stealth_addresses, then try to compare (index,amount) pairs, else raise error + if self.stealth_address and other.stealth_address: + return self.stealth_address == other.stealth_address elif None not in (self.index, other.index, self.amount, other.amount): return self.index == other.index and self.amount == other.amount else: diff --git a/tests/data/test_outputs/test_multiple_outputs-daemon-00-get_transactions.json b/tests/data/test_outputs/test_multiple_outputs-daemon-00-get_transactions.json new file mode 100644 index 0000000..29e3a4e --- /dev/null +++ b/tests/data/test_outputs/test_multiple_outputs-daemon-00-get_transactions.json @@ -0,0 +1,33 @@ +{ + "credits": 0, + "status": "OK", + "top_hash": "", + "txs": [ + { + "as_hex": "02000102000be1c674fda10d978907a59003f702b75ef701f3019701d1064ed9ec814b9a74da2e2df025100561c0c233f00b3d80b10f0a26f5ffd8599ada06050002d3eb42322566c1d48685ee0d1ad7aed2ba6210291a785ec051d8b13ae797d20200025bda44d7953e27b84022399850b59ed87408facdf00bbd1a2d4fda4bf9ebf72f00024c79c14d5d78696e72959a28a734ec192059ebabb931040b5a0714c67b507e76000264de2b358cdf96d498a9688edafcc0e25c60179e813304747524c876655a8e550002966240954892294091a48c599c6db2b028e265c67677ed113d2263a7538f9a43c3010192ed6c8a662dee21a1ce87a2af9b36bee0c97bb83548de681e3e758bf787b64b04057154bdd29a820e4bc1f2118ddc296362ceddb8dd2783a56ceb6b67be2837ae0bd13f177ab2ceacb18ec4c60b0aa63a5305f362a8a40087b8b41497cd4227177bedf1e89434a17a273b12a365e3e08d934f2cd439e8f76dee40eb9283145ce7553f1d218f0bab7ead0a532001549d56b4172cba95542f70fc3ccf1d1413f296cbb6a394165376cfcbe1279d2b13bea136a145e0223a8c9abc01381d74e395125f0490d2cea801a3dbb31727a3e5cfd7a6c0054a610d1507c8fc0b2b0fc7f6607b8b2b1ec9f80b4fd6e38be6204f58a9f90678b5845959a1a1d14759d0b5bce3669a14bbfe74bcec241fe84650886ad824808507afc632d593539f661efb418fba5ee867965662bfe6223a2c54a179deae21658bb80046749f6472fc1b970950adec0bceb01d7c41cec0869d8c77ad1f86ab1d99a77eea46de63ef9a77cea4b40992b8838552f48fd1c7256e4fd68430391f552ba2a259f26041a5ac58f803a51ee862663319673f00e027cd8500060138b1e102343db8a54c37a2f5a6c62ad446898647d079722cc4ac9402af04c88f8fc3c85514e168d26d661c737397fea984cc6343d91bd93403f055994c9bfc48183ae483d5143962ca65568e3740f248d43e5be0ec91a7b3ea1d62cd30f7fce6d7ea4929665e7fe8e817f8085e2032261ed4768773c86a0419199fa05a576626f66ff062cd4e8f5c41c6fd734b7c7f8fbf63403adb5d99d34f684d3584479101742940aea8790e2f41ab1bb257fd0e04181d10e042919ba9806e7ba6f98de10e093ec6112ff79c868b5fc38a8445540dad37a26ec9e21a11f01a8669cab71e3d65b4383c74feb8097f3a2cabd302bcadb6db083ff0f71a9307e273fa3d961eb62befb3d25efc9483e238789ef4614e00ba2f064bc89841c695528a121383109ee888a4c82075db66915b03475703301df16f2413f4b554c0e0dc9dc98e0725c9ca9e46c7e4d402c5cb6bef28d43ea5705f9b1735f86861021e7c9c6082fe54988ee2ced59d208fc4aae4513d8ebad98f2cb965a6181c0abafa55077a9a83c7225b28ea3812678031a87df905d3232d6576763455500c7cf0ecd89c1719defbbe83e6aac873a20d226b7ff9b81d69122d7da984cb613feedabf2482c9ff04e49566416d31a9470ca4d645e5a0a2d406a602b63604585741545cee6eef031d7bede609eee6dec920ca7c8952098a2401b430d1a9afff46ad120668f0a8e72f58b006411756d66e04d3af9eeec25153b12b49da177774f94c2b6fac2a29111e688bb72739beb8ac276214cbc4a88b9bac51c3c86a0c466d1324d1cd681f97cefc146b4740ac0551a37d8c918e7f4337a42a43340b400ae47107b2aa68842786dce2482ec259186ee5d2240c903d1d6b664dcb7f0df30d4f0e24692ceb19ad0afd0c3d00c99ac95756d217428960e5aeba218e7be66a12f7612f9cb6343b0f6dbacf60da4a7f9d63798848cde94acbeaeeb344f1b037262930a26b7edbe9dea75b7bbdfca0aaf2c5170758a30cb6e9d76034cf36feec042952160e52123d31b1cfa88663a1f076ac0843597dc7e649d0ff5ab1119fe8bf64cb11eed635e9967455e42f66c07c307f18362a83d5077132d9a4321b0551f27b11020f2bfa5d09029a8f0a03159459b85a103ec0b922825c1938a5a07571fb2b8c04443cb3011d50745328080e9cc1cd43dcf5670074dffee22810befc1fab62c6b00da3ab0988b61e5e470608fd8e303d0667cbfa64d54d679448a276385fe9d1e5d2882a8ce32a67670e096d2da20ca809d6ba354c65dd923c55e858c396aacc999a5fd0bf3db3f84572022fc3dfce42acf2d42b2c684b8b7be2e7bda7798cd0e82bc8815ddf5cdb6dda023a80ebb849c6d632460f2be359f4aed9c15494c2001f7dc9259a475aa89819055a5f297f7b60eb6fcebf009b84a07945bb8ce56c2a96e48087771ab927bc530fec807e60db4033d2c8ba0ece0a7f5847fca815e007cdfe7234201677ea88610d004fd4c45121bf37d089ea6040d295958b755e7d22ad489d8adae2968ef6fd07c70dce876df8289249974843408e08c4dcb53eaa22a71b44afed698e15480a0deeb5935968af8788fd8daef06caba73fd274a5e68c822c8caf8a960f37ed5a0a85099205213e9b56737b24172f305246ba9a0a3297d0b770be107605e9be2c0ddc174eb3fc4ea49284fcdfbfdc0a04107aed4935a7f08fa4d1f477624b2c92042ad01bda4bd4c54d92f1db722769acae7d5a879ddfca784c81f613d814d642014c8f457006bcdd29e9af0c1eac78059b61da17295bca5a7a333001583631f30e6b8e362442ab3fc4b35faa0c3999c61b25f4441c36843a9240eb85905bd4220b292549854c8a5e2d3ea5c6bb3eb1c2670385898318dcb9120239fdd748fc5e0075d010f0be24b488e1c9e5cef6145842616139fa822145d8f910473dc4a949055e9232d63107500a6087056e1cec6574143972fe326a9a2a2f0b923c018f720843d96f9caeae1569ea9b9ae87b00597d7326bb7ac982252e71ac748fe42a6707f080c5db9cccc17ca908bff267c1dfde9613dc778102040b8070a48b9f05af0769d35acd1d3219081945729b0c10bf846c790e76ec53916185bc4b641536f2051d8f0b456af0e9a6ee55ea520a1f931c98134e2ee5572120ce337046f200cd0d099451ffe6219c35ced259599e9513c5de6d6aa29bc50ccd2443088a242797029a62a18aa5112b887685b2b5f9995518225d85b183538d1bae3029891166e308a7b06e6815dedf0806acf52377c1554ff6695f1614630f13120f649bf5aec05e", + "as_json": "{\n \"version\": 2, \n \"unlock_time\": 0, \n \"vin\": [ {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 1909601, 217341, 115863, 51237, 375, 12087, 247, 243, 151, 849, 78\n ], \n \"k_image\": \"d9ec814b9a74da2e2df025100561c0c233f00b3d80b10f0a26f5ffd8599ada06\"\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 0, \n \"target\": {\n \"key\": \"d3eb42322566c1d48685ee0d1ad7aed2ba6210291a785ec051d8b13ae797d202\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"5bda44d7953e27b84022399850b59ed87408facdf00bbd1a2d4fda4bf9ebf72f\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"4c79c14d5d78696e72959a28a734ec192059ebabb931040b5a0714c67b507e76\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"64de2b358cdf96d498a9688edafcc0e25c60179e813304747524c876655a8e55\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"966240954892294091a48c599c6db2b028e265c67677ed113d2263a7538f9a43\"\n }\n }\n ], \n \"extra\": [ 1, 146, 237, 108, 138, 102, 45, 238, 33, 161, 206, 135, 162, 175, 155, 54, 190, 224, 201, 123, 184, 53, 72, 222, 104, 30, 62, 117, 139, 247, 135, 182, 75, 4, 5, 113, 84, 189, 210, 154, 130, 14, 75, 193, 242, 17, 141, 220, 41, 99, 98, 206, 221, 184, 221, 39, 131, 165, 108, 235, 107, 103, 190, 40, 55, 174, 11, 209, 63, 23, 122, 178, 206, 172, 177, 142, 196, 198, 11, 10, 166, 58, 83, 5, 243, 98, 168, 164, 0, 135, 184, 180, 20, 151, 205, 66, 39, 23, 123, 237, 241, 232, 148, 52, 161, 122, 39, 59, 18, 163, 101, 227, 224, 141, 147, 79, 44, 212, 57, 232, 247, 109, 238, 64, 235, 146, 131, 20, 92, 231, 85, 63, 29, 33, 143, 11, 171, 126, 173, 10, 83, 32, 1, 84, 157, 86, 180, 23, 44, 186, 149, 84, 47, 112, 252, 60, 207, 29, 20, 19, 242, 150, 203, 182, 163, 148, 22, 83, 118, 207, 203, 225, 39, 157, 43, 19, 190, 161, 54, 161, 69, 224, 34, 58, 140, 154, 188, 1, 56, 29, 116, 227, 149, 18, 95\n ], \n \"rct_signatures\": {\n \"type\": 4, \n \"txnFee\": 353610000, \n \"ecdhInfo\": [ {\n \"amount\": \"a3dbb31727a3e5cf\"\n }, {\n \"amount\": \"d7a6c0054a610d15\"\n }, {\n \"amount\": \"07c8fc0b2b0fc7f6\"\n }, {\n \"amount\": \"607b8b2b1ec9f80b\"\n }, {\n \"amount\": \"4fd6e38be6204f58\"\n }], \n \"outPk\": [ \"a9f90678b5845959a1a1d14759d0b5bce3669a14bbfe74bcec241fe84650886a\", \"d824808507afc632d593539f661efb418fba5ee867965662bfe6223a2c54a179\", \"deae21658bb80046749f6472fc1b970950adec0bceb01d7c41cec0869d8c77ad\", \"1f86ab1d99a77eea46de63ef9a77cea4b40992b8838552f48fd1c7256e4fd684\", \"30391f552ba2a259f26041a5ac58f803a51ee862663319673f00e027cd850006\"]\n }, \n \"rctsig_prunable\": {\n \"nbp\": 1, \n \"bp\": [ {\n \"A\": \"38b1e102343db8a54c37a2f5a6c62ad446898647d079722cc4ac9402af04c88f\", \n \"S\": \"8fc3c85514e168d26d661c737397fea984cc6343d91bd93403f055994c9bfc48\", \n \"T1\": \"183ae483d5143962ca65568e3740f248d43e5be0ec91a7b3ea1d62cd30f7fce6\", \n \"T2\": \"d7ea4929665e7fe8e817f8085e2032261ed4768773c86a0419199fa05a576626\", \n \"taux\": \"f66ff062cd4e8f5c41c6fd734b7c7f8fbf63403adb5d99d34f684d3584479101\", \n \"mu\": \"742940aea8790e2f41ab1bb257fd0e04181d10e042919ba9806e7ba6f98de10e\", \n \"L\": [ \"3ec6112ff79c868b5fc38a8445540dad37a26ec9e21a11f01a8669cab71e3d65\", \"b4383c74feb8097f3a2cabd302bcadb6db083ff0f71a9307e273fa3d961eb62b\", \"efb3d25efc9483e238789ef4614e00ba2f064bc89841c695528a121383109ee8\", \"88a4c82075db66915b03475703301df16f2413f4b554c0e0dc9dc98e0725c9ca\", \"9e46c7e4d402c5cb6bef28d43ea5705f9b1735f86861021e7c9c6082fe54988e\", \"e2ced59d208fc4aae4513d8ebad98f2cb965a6181c0abafa55077a9a83c7225b\", \"28ea3812678031a87df905d3232d6576763455500c7cf0ecd89c1719defbbe83\", \"e6aac873a20d226b7ff9b81d69122d7da984cb613feedabf2482c9ff04e49566\", \"416d31a9470ca4d645e5a0a2d406a602b63604585741545cee6eef031d7bede6\"\n ], \n \"R\": [ \"eee6dec920ca7c8952098a2401b430d1a9afff46ad120668f0a8e72f58b00641\", \"1756d66e04d3af9eeec25153b12b49da177774f94c2b6fac2a29111e688bb727\", \"39beb8ac276214cbc4a88b9bac51c3c86a0c466d1324d1cd681f97cefc146b47\", \"40ac0551a37d8c918e7f4337a42a43340b400ae47107b2aa68842786dce2482e\", \"c259186ee5d2240c903d1d6b664dcb7f0df30d4f0e24692ceb19ad0afd0c3d00\", \"c99ac95756d217428960e5aeba218e7be66a12f7612f9cb6343b0f6dbacf60da\", \"4a7f9d63798848cde94acbeaeeb344f1b037262930a26b7edbe9dea75b7bbdfc\", \"a0aaf2c5170758a30cb6e9d76034cf36feec042952160e52123d31b1cfa88663\", \"a1f076ac0843597dc7e649d0ff5ab1119fe8bf64cb11eed635e9967455e42f66\"\n ], \n \"a\": \"c07c307f18362a83d5077132d9a4321b0551f27b11020f2bfa5d09029a8f0a03\", \n \"b\": \"159459b85a103ec0b922825c1938a5a07571fb2b8c04443cb3011d5074532808\", \n \"t\": \"0e9cc1cd43dcf5670074dffee22810befc1fab62c6b00da3ab0988b61e5e4706\"\n }\n ], \n \"MGs\": [ {\n \"ss\": [ [ \"08fd8e303d0667cbfa64d54d679448a276385fe9d1e5d2882a8ce32a67670e09\", \"6d2da20ca809d6ba354c65dd923c55e858c396aacc999a5fd0bf3db3f8457202\"], [ \"2fc3dfce42acf2d42b2c684b8b7be2e7bda7798cd0e82bc8815ddf5cdb6dda02\", \"3a80ebb849c6d632460f2be359f4aed9c15494c2001f7dc9259a475aa8981905\"], [ \"5a5f297f7b60eb6fcebf009b84a07945bb8ce56c2a96e48087771ab927bc530f\", \"ec807e60db4033d2c8ba0ece0a7f5847fca815e007cdfe7234201677ea88610d\"], [ \"004fd4c45121bf37d089ea6040d295958b755e7d22ad489d8adae2968ef6fd07\", \"c70dce876df8289249974843408e08c4dcb53eaa22a71b44afed698e15480a0d\"], [ \"eeb5935968af8788fd8daef06caba73fd274a5e68c822c8caf8a960f37ed5a0a\", \"85099205213e9b56737b24172f305246ba9a0a3297d0b770be107605e9be2c0d\"], [ \"dc174eb3fc4ea49284fcdfbfdc0a04107aed4935a7f08fa4d1f477624b2c9204\", \"2ad01bda4bd4c54d92f1db722769acae7d5a879ddfca784c81f613d814d64201\"], [ \"4c8f457006bcdd29e9af0c1eac78059b61da17295bca5a7a333001583631f30e\", \"6b8e362442ab3fc4b35faa0c3999c61b25f4441c36843a9240eb85905bd4220b\"], [ \"292549854c8a5e2d3ea5c6bb3eb1c2670385898318dcb9120239fdd748fc5e00\", \"75d010f0be24b488e1c9e5cef6145842616139fa822145d8f910473dc4a94905\"], [ \"5e9232d63107500a6087056e1cec6574143972fe326a9a2a2f0b923c018f7208\", \"43d96f9caeae1569ea9b9ae87b00597d7326bb7ac982252e71ac748fe42a6707\"], [ \"f080c5db9cccc17ca908bff267c1dfde9613dc778102040b8070a48b9f05af07\", \"69d35acd1d3219081945729b0c10bf846c790e76ec53916185bc4b641536f205\"], [ \"1d8f0b456af0e9a6ee55ea520a1f931c98134e2ee5572120ce337046f200cd0d\", \"099451ffe6219c35ced259599e9513c5de6d6aa29bc50ccd2443088a24279702\"]], \n \"cc\": \"9a62a18aa5112b887685b2b5f9995518225d85b183538d1bae3029891166e308\"\n }], \n \"pseudoOuts\": [ \"a7b06e6815dedf0806acf52377c1554ff6695f1614630f13120f649bf5aec05e\"]\n }\n}", + "block_height": 519608, + "block_timestamp": 1582026036, + "double_spend_seen": false, + "in_pool": false, + "output_indices": [ + 2308110, + 2308111, + 2308112, + 2308113, + 2308114 + ], + "prunable_as_hex": "", + "prunable_hash": "c161504656f45473eb588d2dceac7fca229ab873cf0e4fc186873145bc051370", + "pruned_as_hex": "", + "tx_hash": "f79a10256859058b3961254a35a97a3d4d5d40e080c6275a3f9779acde73ca8d" + } + ], + "txs_as_hex": [ + "02000102000be1c674fda10d978907a59003f702b75ef701f3019701d1064ed9ec814b9a74da2e2df025100561c0c233f00b3d80b10f0a26f5ffd8599ada06050002d3eb42322566c1d48685ee0d1ad7aed2ba6210291a785ec051d8b13ae797d20200025bda44d7953e27b84022399850b59ed87408facdf00bbd1a2d4fda4bf9ebf72f00024c79c14d5d78696e72959a28a734ec192059ebabb931040b5a0714c67b507e76000264de2b358cdf96d498a9688edafcc0e25c60179e813304747524c876655a8e550002966240954892294091a48c599c6db2b028e265c67677ed113d2263a7538f9a43c3010192ed6c8a662dee21a1ce87a2af9b36bee0c97bb83548de681e3e758bf787b64b04057154bdd29a820e4bc1f2118ddc296362ceddb8dd2783a56ceb6b67be2837ae0bd13f177ab2ceacb18ec4c60b0aa63a5305f362a8a40087b8b41497cd4227177bedf1e89434a17a273b12a365e3e08d934f2cd439e8f76dee40eb9283145ce7553f1d218f0bab7ead0a532001549d56b4172cba95542f70fc3ccf1d1413f296cbb6a394165376cfcbe1279d2b13bea136a145e0223a8c9abc01381d74e395125f0490d2cea801a3dbb31727a3e5cfd7a6c0054a610d1507c8fc0b2b0fc7f6607b8b2b1ec9f80b4fd6e38be6204f58a9f90678b5845959a1a1d14759d0b5bce3669a14bbfe74bcec241fe84650886ad824808507afc632d593539f661efb418fba5ee867965662bfe6223a2c54a179deae21658bb80046749f6472fc1b970950adec0bceb01d7c41cec0869d8c77ad1f86ab1d99a77eea46de63ef9a77cea4b40992b8838552f48fd1c7256e4fd68430391f552ba2a259f26041a5ac58f803a51ee862663319673f00e027cd8500060138b1e102343db8a54c37a2f5a6c62ad446898647d079722cc4ac9402af04c88f8fc3c85514e168d26d661c737397fea984cc6343d91bd93403f055994c9bfc48183ae483d5143962ca65568e3740f248d43e5be0ec91a7b3ea1d62cd30f7fce6d7ea4929665e7fe8e817f8085e2032261ed4768773c86a0419199fa05a576626f66ff062cd4e8f5c41c6fd734b7c7f8fbf63403adb5d99d34f684d3584479101742940aea8790e2f41ab1bb257fd0e04181d10e042919ba9806e7ba6f98de10e093ec6112ff79c868b5fc38a8445540dad37a26ec9e21a11f01a8669cab71e3d65b4383c74feb8097f3a2cabd302bcadb6db083ff0f71a9307e273fa3d961eb62befb3d25efc9483e238789ef4614e00ba2f064bc89841c695528a121383109ee888a4c82075db66915b03475703301df16f2413f4b554c0e0dc9dc98e0725c9ca9e46c7e4d402c5cb6bef28d43ea5705f9b1735f86861021e7c9c6082fe54988ee2ced59d208fc4aae4513d8ebad98f2cb965a6181c0abafa55077a9a83c7225b28ea3812678031a87df905d3232d6576763455500c7cf0ecd89c1719defbbe83e6aac873a20d226b7ff9b81d69122d7da984cb613feedabf2482c9ff04e49566416d31a9470ca4d645e5a0a2d406a602b63604585741545cee6eef031d7bede609eee6dec920ca7c8952098a2401b430d1a9afff46ad120668f0a8e72f58b006411756d66e04d3af9eeec25153b12b49da177774f94c2b6fac2a29111e688bb72739beb8ac276214cbc4a88b9bac51c3c86a0c466d1324d1cd681f97cefc146b4740ac0551a37d8c918e7f4337a42a43340b400ae47107b2aa68842786dce2482ec259186ee5d2240c903d1d6b664dcb7f0df30d4f0e24692ceb19ad0afd0c3d00c99ac95756d217428960e5aeba218e7be66a12f7612f9cb6343b0f6dbacf60da4a7f9d63798848cde94acbeaeeb344f1b037262930a26b7edbe9dea75b7bbdfca0aaf2c5170758a30cb6e9d76034cf36feec042952160e52123d31b1cfa88663a1f076ac0843597dc7e649d0ff5ab1119fe8bf64cb11eed635e9967455e42f66c07c307f18362a83d5077132d9a4321b0551f27b11020f2bfa5d09029a8f0a03159459b85a103ec0b922825c1938a5a07571fb2b8c04443cb3011d50745328080e9cc1cd43dcf5670074dffee22810befc1fab62c6b00da3ab0988b61e5e470608fd8e303d0667cbfa64d54d679448a276385fe9d1e5d2882a8ce32a67670e096d2da20ca809d6ba354c65dd923c55e858c396aacc999a5fd0bf3db3f84572022fc3dfce42acf2d42b2c684b8b7be2e7bda7798cd0e82bc8815ddf5cdb6dda023a80ebb849c6d632460f2be359f4aed9c15494c2001f7dc9259a475aa89819055a5f297f7b60eb6fcebf009b84a07945bb8ce56c2a96e48087771ab927bc530fec807e60db4033d2c8ba0ece0a7f5847fca815e007cdfe7234201677ea88610d004fd4c45121bf37d089ea6040d295958b755e7d22ad489d8adae2968ef6fd07c70dce876df8289249974843408e08c4dcb53eaa22a71b44afed698e15480a0deeb5935968af8788fd8daef06caba73fd274a5e68c822c8caf8a960f37ed5a0a85099205213e9b56737b24172f305246ba9a0a3297d0b770be107605e9be2c0ddc174eb3fc4ea49284fcdfbfdc0a04107aed4935a7f08fa4d1f477624b2c92042ad01bda4bd4c54d92f1db722769acae7d5a879ddfca784c81f613d814d642014c8f457006bcdd29e9af0c1eac78059b61da17295bca5a7a333001583631f30e6b8e362442ab3fc4b35faa0c3999c61b25f4441c36843a9240eb85905bd4220b292549854c8a5e2d3ea5c6bb3eb1c2670385898318dcb9120239fdd748fc5e0075d010f0be24b488e1c9e5cef6145842616139fa822145d8f910473dc4a949055e9232d63107500a6087056e1cec6574143972fe326a9a2a2f0b923c018f720843d96f9caeae1569ea9b9ae87b00597d7326bb7ac982252e71ac748fe42a6707f080c5db9cccc17ca908bff267c1dfde9613dc778102040b8070a48b9f05af0769d35acd1d3219081945729b0c10bf846c790e76ec53916185bc4b641536f2051d8f0b456af0e9a6ee55ea520a1f931c98134e2ee5572120ce337046f200cd0d099451ffe6219c35ced259599e9513c5de6d6aa29bc50ccd2443088a242797029a62a18aa5112b887685b2b5f9995518225d85b183538d1bae3029891166e308a7b06e6815dedf0806acf52377c1554ff6695f1614630f13120f649bf5aec05e" + ], + "txs_as_json": [ + "{\n \"version\": 2, \n \"unlock_time\": 0, \n \"vin\": [ {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 1909601, 217341, 115863, 51237, 375, 12087, 247, 243, 151, 849, 78\n ], \n \"k_image\": \"d9ec814b9a74da2e2df025100561c0c233f00b3d80b10f0a26f5ffd8599ada06\"\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 0, \n \"target\": {\n \"key\": \"d3eb42322566c1d48685ee0d1ad7aed2ba6210291a785ec051d8b13ae797d202\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"5bda44d7953e27b84022399850b59ed87408facdf00bbd1a2d4fda4bf9ebf72f\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"4c79c14d5d78696e72959a28a734ec192059ebabb931040b5a0714c67b507e76\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"64de2b358cdf96d498a9688edafcc0e25c60179e813304747524c876655a8e55\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"966240954892294091a48c599c6db2b028e265c67677ed113d2263a7538f9a43\"\n }\n }\n ], \n \"extra\": [ 1, 146, 237, 108, 138, 102, 45, 238, 33, 161, 206, 135, 162, 175, 155, 54, 190, 224, 201, 123, 184, 53, 72, 222, 104, 30, 62, 117, 139, 247, 135, 182, 75, 4, 5, 113, 84, 189, 210, 154, 130, 14, 75, 193, 242, 17, 141, 220, 41, 99, 98, 206, 221, 184, 221, 39, 131, 165, 108, 235, 107, 103, 190, 40, 55, 174, 11, 209, 63, 23, 122, 178, 206, 172, 177, 142, 196, 198, 11, 10, 166, 58, 83, 5, 243, 98, 168, 164, 0, 135, 184, 180, 20, 151, 205, 66, 39, 23, 123, 237, 241, 232, 148, 52, 161, 122, 39, 59, 18, 163, 101, 227, 224, 141, 147, 79, 44, 212, 57, 232, 247, 109, 238, 64, 235, 146, 131, 20, 92, 231, 85, 63, 29, 33, 143, 11, 171, 126, 173, 10, 83, 32, 1, 84, 157, 86, 180, 23, 44, 186, 149, 84, 47, 112, 252, 60, 207, 29, 20, 19, 242, 150, 203, 182, 163, 148, 22, 83, 118, 207, 203, 225, 39, 157, 43, 19, 190, 161, 54, 161, 69, 224, 34, 58, 140, 154, 188, 1, 56, 29, 116, 227, 149, 18, 95\n ], \n \"rct_signatures\": {\n \"type\": 4, \n \"txnFee\": 353610000, \n \"ecdhInfo\": [ {\n \"amount\": \"a3dbb31727a3e5cf\"\n }, {\n \"amount\": \"d7a6c0054a610d15\"\n }, {\n \"amount\": \"07c8fc0b2b0fc7f6\"\n }, {\n \"amount\": \"607b8b2b1ec9f80b\"\n }, {\n \"amount\": \"4fd6e38be6204f58\"\n }], \n \"outPk\": [ \"a9f90678b5845959a1a1d14759d0b5bce3669a14bbfe74bcec241fe84650886a\", \"d824808507afc632d593539f661efb418fba5ee867965662bfe6223a2c54a179\", \"deae21658bb80046749f6472fc1b970950adec0bceb01d7c41cec0869d8c77ad\", \"1f86ab1d99a77eea46de63ef9a77cea4b40992b8838552f48fd1c7256e4fd684\", \"30391f552ba2a259f26041a5ac58f803a51ee862663319673f00e027cd850006\"]\n }, \n \"rctsig_prunable\": {\n \"nbp\": 1, \n \"bp\": [ {\n \"A\": \"38b1e102343db8a54c37a2f5a6c62ad446898647d079722cc4ac9402af04c88f\", \n \"S\": \"8fc3c85514e168d26d661c737397fea984cc6343d91bd93403f055994c9bfc48\", \n \"T1\": \"183ae483d5143962ca65568e3740f248d43e5be0ec91a7b3ea1d62cd30f7fce6\", \n \"T2\": \"d7ea4929665e7fe8e817f8085e2032261ed4768773c86a0419199fa05a576626\", \n \"taux\": \"f66ff062cd4e8f5c41c6fd734b7c7f8fbf63403adb5d99d34f684d3584479101\", \n \"mu\": \"742940aea8790e2f41ab1bb257fd0e04181d10e042919ba9806e7ba6f98de10e\", \n \"L\": [ \"3ec6112ff79c868b5fc38a8445540dad37a26ec9e21a11f01a8669cab71e3d65\", \"b4383c74feb8097f3a2cabd302bcadb6db083ff0f71a9307e273fa3d961eb62b\", \"efb3d25efc9483e238789ef4614e00ba2f064bc89841c695528a121383109ee8\", \"88a4c82075db66915b03475703301df16f2413f4b554c0e0dc9dc98e0725c9ca\", \"9e46c7e4d402c5cb6bef28d43ea5705f9b1735f86861021e7c9c6082fe54988e\", \"e2ced59d208fc4aae4513d8ebad98f2cb965a6181c0abafa55077a9a83c7225b\", \"28ea3812678031a87df905d3232d6576763455500c7cf0ecd89c1719defbbe83\", \"e6aac873a20d226b7ff9b81d69122d7da984cb613feedabf2482c9ff04e49566\", \"416d31a9470ca4d645e5a0a2d406a602b63604585741545cee6eef031d7bede6\"\n ], \n \"R\": [ \"eee6dec920ca7c8952098a2401b430d1a9afff46ad120668f0a8e72f58b00641\", \"1756d66e04d3af9eeec25153b12b49da177774f94c2b6fac2a29111e688bb727\", \"39beb8ac276214cbc4a88b9bac51c3c86a0c466d1324d1cd681f97cefc146b47\", \"40ac0551a37d8c918e7f4337a42a43340b400ae47107b2aa68842786dce2482e\", \"c259186ee5d2240c903d1d6b664dcb7f0df30d4f0e24692ceb19ad0afd0c3d00\", \"c99ac95756d217428960e5aeba218e7be66a12f7612f9cb6343b0f6dbacf60da\", \"4a7f9d63798848cde94acbeaeeb344f1b037262930a26b7edbe9dea75b7bbdfc\", \"a0aaf2c5170758a30cb6e9d76034cf36feec042952160e52123d31b1cfa88663\", \"a1f076ac0843597dc7e649d0ff5ab1119fe8bf64cb11eed635e9967455e42f66\"\n ], \n \"a\": \"c07c307f18362a83d5077132d9a4321b0551f27b11020f2bfa5d09029a8f0a03\", \n \"b\": \"159459b85a103ec0b922825c1938a5a07571fb2b8c04443cb3011d5074532808\", \n \"t\": \"0e9cc1cd43dcf5670074dffee22810befc1fab62c6b00da3ab0988b61e5e4706\"\n }\n ], \n \"MGs\": [ {\n \"ss\": [ [ \"08fd8e303d0667cbfa64d54d679448a276385fe9d1e5d2882a8ce32a67670e09\", \"6d2da20ca809d6ba354c65dd923c55e858c396aacc999a5fd0bf3db3f8457202\"], [ \"2fc3dfce42acf2d42b2c684b8b7be2e7bda7798cd0e82bc8815ddf5cdb6dda02\", \"3a80ebb849c6d632460f2be359f4aed9c15494c2001f7dc9259a475aa8981905\"], [ \"5a5f297f7b60eb6fcebf009b84a07945bb8ce56c2a96e48087771ab927bc530f\", \"ec807e60db4033d2c8ba0ece0a7f5847fca815e007cdfe7234201677ea88610d\"], [ \"004fd4c45121bf37d089ea6040d295958b755e7d22ad489d8adae2968ef6fd07\", \"c70dce876df8289249974843408e08c4dcb53eaa22a71b44afed698e15480a0d\"], [ \"eeb5935968af8788fd8daef06caba73fd274a5e68c822c8caf8a960f37ed5a0a\", \"85099205213e9b56737b24172f305246ba9a0a3297d0b770be107605e9be2c0d\"], [ \"dc174eb3fc4ea49284fcdfbfdc0a04107aed4935a7f08fa4d1f477624b2c9204\", \"2ad01bda4bd4c54d92f1db722769acae7d5a879ddfca784c81f613d814d64201\"], [ \"4c8f457006bcdd29e9af0c1eac78059b61da17295bca5a7a333001583631f30e\", \"6b8e362442ab3fc4b35faa0c3999c61b25f4441c36843a9240eb85905bd4220b\"], [ \"292549854c8a5e2d3ea5c6bb3eb1c2670385898318dcb9120239fdd748fc5e00\", \"75d010f0be24b488e1c9e5cef6145842616139fa822145d8f910473dc4a94905\"], [ \"5e9232d63107500a6087056e1cec6574143972fe326a9a2a2f0b923c018f7208\", \"43d96f9caeae1569ea9b9ae87b00597d7326bb7ac982252e71ac748fe42a6707\"], [ \"f080c5db9cccc17ca908bff267c1dfde9613dc778102040b8070a48b9f05af07\", \"69d35acd1d3219081945729b0c10bf846c790e76ec53916185bc4b641536f205\"], [ \"1d8f0b456af0e9a6ee55ea520a1f931c98134e2ee5572120ce337046f200cd0d\", \"099451ffe6219c35ced259599e9513c5de6d6aa29bc50ccd2443088a24279702\"]], \n \"cc\": \"9a62a18aa5112b887685b2b5f9995518225d85b183538d1bae3029891166e308\"\n }], \n \"pseudoOuts\": [ \"a7b06e6815dedf0806acf52377c1554ff6695f1614630f13120f649bf5aec05e\"]\n }\n}" + ], + "untrusted": false +} diff --git a/tests/data/test_outputs/test_multiple_outputs-wallet-00-get_accounts.json b/tests/data/test_outputs/test_multiple_outputs-wallet-00-get_accounts.json new file mode 100644 index 0000000..5e5d5ae --- /dev/null +++ b/tests/data/test_outputs/test_multiple_outputs-wallet-00-get_accounts.json @@ -0,0 +1,26 @@ +{ + "id": 0, + "jsonrpc": "2.0", + "result": { + "subaddress_accounts": [ + { + "account_index": 0, + "balance": 13387591827179, + "base_address": "56eDKfprZtQGfB4y6gVLZx5naKVHw6KEKLDoq2WWtLng9ANuBvsw67wfqyhQECoLmjQN4cKAdvMp2WsC5fnw9seKLcCSfjj", + "label": "Primary account", + "tag": "", + "unlocked_balance": 13387591827179 + }, + { + "account_index": 1, + "balance": 221310000000, + "base_address": "7BC3q5ogPCfTkBHZajDdkhSLxN3wSSULEN52Q2XzGebeetyG4oumiCHJjPpSyNvP6qR2idCYiUEqmHjKwc66fmcKN4dxW5u", + "label": "(Untitled account)", + "tag": "", + "unlocked_balance": 221310000000 + } + ], + "total_balance": 13608901827179, + "total_unlocked_balance": 13608901827179 + } +} diff --git a/tests/data/test_outputs/test_multiple_outputs-wallet-01-query_key.json b/tests/data/test_outputs/test_multiple_outputs-wallet-01-query_key.json new file mode 100644 index 0000000..a0ddc4a --- /dev/null +++ b/tests/data/test_outputs/test_multiple_outputs-wallet-01-query_key.json @@ -0,0 +1,7 @@ +{ + "id": 0, + "jsonrpc": "2.0", + "result": { + "key": "e507923516f52389eae889b6edc182ada82bb9354fb405abedbe0772a15aea0a" + } +} diff --git a/tests/data/test_outputs/test_multiple_outputs-wallet-02-addresses-account-0.json b/tests/data/test_outputs/test_multiple_outputs-wallet-02-addresses-account-0.json new file mode 100644 index 0000000..3ad36bf --- /dev/null +++ b/tests/data/test_outputs/test_multiple_outputs-wallet-02-addresses-account-0.json @@ -0,0 +1,1611 @@ +{ + "id": 0, + "jsonrpc": "2.0", + "result": { + "address": "56eDKfprZtQGfB4y6gVLZx5naKVHw6KEKLDoq2WWtLng9ANuBvsw67wfqyhQECoLmjQN4cKAdvMp2WsC5fnw9seKLcCSfjj", + "addresses": [ + { + "address": "56eDKfprZtQGfB4y6gVLZx5naKVHw6KEKLDoq2WWtLng9ANuBvsw67wfqyhQECoLmjQN4cKAdvMp2WsC5fnw9seKLcCSfjj", + "address_index": 0, + "label": "Primary account", + "used": true + }, + { + "address": "797WaaL2Tm4CKQcKjLCdtx9Mg6wVuLQcYe68Ljb17euvEMNQDBqXAXN7eHFNy4uSgwJk2hicLnvWY6p4fbAqcfaVEiox2rd", + "address_index": 1, + "label": "(Untitled address)", + "used": true + }, + { + "address": "79BhtCt4bqx1SXZW4ZdKTkZaBzPDD6DzBdLTCxEMCQbWQ6guj4noycWFPd6zLtpY5Fez7zck1fT6ohZ88XcitRjEEH13JQY", + "address_index": 2, + "label": "(Untitled address)", + "used": true + }, + { + "address": "76F1zQpev8aKYiZa4RiykvMgpbpavDVHNCJhYa71zB88MquS8vmjPytLSC2nDoBoHX5WpXLR5SyS6ExGbSMVV1nkT6rfZTd", + "address_index": 3, + "label": "(Untitled address)", + "used": true + }, + { + "address": "75WdZaaokEYSz35E3hbK5RLt5M83iGMrCHPc8twFfWmd9xc4TuTEgMRYgCmYueaAEd4HEk1GZyrsoJYLdBDJSSKC9GhB15y", + "address_index": 4, + "label": "(Untitled address)", + "used": true + }, + { + "address": "7AAMoYytsGDGwVyCrLo3rU1vKwbDM9qHzEapbqUz596HhBEBj2aF4a9dmqaNaAd9LYcQHXTGaZe8KGBZHKi4k1FQSnJB3fa", + "address_index": 5, + "label": "(Untitled address)", + "used": true + }, + { + "address": "76Suu6FrxbaizXgFYgen3Pa2GNLCiJFgKbU3AEAocmP4VcUQiUC9L14HQP2Pve9nb7Swd9KKL9z1g56iimhMgaiMEwaYeZQ", + "address_index": 6, + "label": "(Untitled address)", + "used": true + }, + { + "address": "73Ti7quVLqhKtycnajptBVEerc2FknXts1GWjjv4BqZ7LYTq5umpDv3C2ryKEbLV5gUAj8ewpM9upacdXTg68JVV8Zq7jN3", + "address_index": 7, + "label": "(Untitled address)", + "used": true + }, + { + "address": "74UgyLN1mAFMp2eDcGpBfA9emaZfeJ4L46KzqcomaPQg2b3GtbNdWedS4mCBFS7sCqB39J7Jt4tuWGYjVZ9CZ8Wa4QJjbN4", + "address_index": 8, + "label": "(Untitled address)", + "used": false + }, + { + "address": "79X56BnG8Ji4G7yCeVvrhvJHbbTyf8Y7XHGo7TUvwJRbjhyDcQM36Na7mkyS33S6WpaFt1WKHuq9AQXotpFbhSC3RZEnNV3", + "address_index": 9, + "label": "(Untitled address)", + "used": true + }, + { + "address": "72PCN9MvwSMdTtBPiD9vHvgBpXuyuPyrSCZBejTYmLPqUUJi58aQAaPNEAtRdtFK5DUsLWc254LkcPvo5aL8PYom8oG1e8M", + "address_index": 10, + "label": "", + "used": true + }, + { + "address": "76Cdds6xgBGAEXSp9PTS2B72Nj1LYbfNEJpBZWnyiDrKDFoFGbeaVrX986mW3rAFQfXNNMaxqCB2dhUrvUHeBrY4Kif6fBd", + "address_index": 11, + "label": "", + "used": true + }, + { + "address": "7A5HypwhcbnhC5ZbxHTpXYVvAcYnkV9HsMU5K98XtzGnL5uXbveSgRBMeHZ6fp3u7c8YEhzJY3TgCEUds9TSHMhsVExXJ3y", + "address_index": 12, + "label": "", + "used": true + }, + { + "address": "7974GSfQDGgFAHHoiKo5kmYroJNtJGQ3hRPWwkCZCwXM7CBiVypxMmHVGjAA4DsSnaHXCUo2CEVXEdbfXjEWgiDuFA7XWNq", + "address_index": 13, + "label": "", + "used": true + }, + { + "address": "78kguCCdkxqABChwvKmExghXrCtK91WM4JrJg4zrTg7Y5PTMgm9Lsg1S65GB9jqjQMQjvdHsL6nrWH3obuDennAKMphAjK6", + "address_index": 14, + "label": "", + "used": true + }, + { + "address": "7AZtzWaofYJXzuua13XcuJVaxuDDdFFJYFHg4u8FRYDLCtmXVQwPDMaVA8jvCYBU5j2NKaskL9LAv9ngcWCvrdd3D37DbiT", + "address_index": 15, + "label": "", + "used": true + }, + { + "address": "78V2L76DhTt63opXTCk6xoYZqYG1tidmEAKMSNcqVzv258raj2xrCkfcYLNknCAbixdV6wnemWorn1LDacochzN1BMJLyMg", + "address_index": 16, + "label": "", + "used": true + }, + { + "address": "7ANTXCv65p6hjVpuPhWXCvCjawneZDp13hcyWhNHCAeCAeNiqvJteoSZkmVRMbbyndNm4Ft32zh91W9FQhZq6P7yEj1LPi8", + "address_index": 17, + "label": "", + "used": true + }, + { + "address": "7357PkBQF6GYyZzUBcarv2jeuL8ixnAmEErAw37G5skLGyAMtwPwB5hBYGv4it2JByYeDJdJVcGXWA7oeoHfXDzrUZwroii", + "address_index": 18, + "label": "", + "used": true + }, + { + "address": "7ACPcxXBfZaPTsfzMXGKYyfhjcQXQYsTYhEfRx4qTb1fJDgK6EHHVHr47PSYpgMAzY1Vza6C7EcF5JQWV1PVckxTBd1CeVc", + "address_index": 19, + "label": "", + "used": true + }, + { + "address": "72JBrDZRZ2od4XzsSg2mq152MEoSWNpNd6QFtuZ3WpfEFtP7cL63r9kez7k7h9rwmfe4QoNYKZQdPHPu4esmw8Ty4Bik3Au", + "address_index": 20, + "label": "(Untitled address)", + "used": true + }, + { + "address": "78zGgzb45TEL8uvRFjCayUjHS98RFry1f7P4PE4LU7oeLh42s9AtP8fYXVzWqUW4r3Nz4g3V64w9RSiV7o3zUbPZVs5DVaU", + "address_index": 21, + "label": "(Untitled address)", + "used": true + }, + { + "address": "73ndji4W2bu4WED87rJDVALMvUsZLLYstZsigbcGfb5YG9SuNyCSYk7Qbttez2mXciKtWRzRN9aYGJbF9TPBidNQNZppnFw", + "address_index": 22, + "label": "(Untitled address)", + "used": true + }, + { + "address": "76Qt2xMZ3m7b2tagubEgkvG81pwf9P3JYdxR65H2BEv8c79A9pCBTacEFv87tfdcqXRemBsZLFVGHTWbqBpkoBJENBoJJS9", + "address_index": 23, + "label": "(Untitled address)", + "used": true + }, + { + "address": "7BJxHKTa4p5USJ9Z5GY15ZARXL6Qe84qT3FnWkMbSJSoEj9ugGjnpQ1N9H1jqkjsTzLiN5VTbCP8f4MYYVPAcXhr36bHXzP", + "address_index": 24, + "label": "(Untitled address)", + "used": true + }, + { + "address": "79DdEaCy41YJ1CzurP2KvtfRrkZJTsvNSBNJELxhsP7Aj6dtmqFVaL8f8L3ohSBP6shgyZEZSZHGeWCiVSaBkYMP6g1mBxa", + "address_index": 25, + "label": "(Untitled address)", + "used": false + }, + { + "address": "76gwfsrwTkfPBaMFGm6Ws14nKh4BcqfSzb9JFaDh6Esq5giB2YkEwnj3RCzYCRzysmipEo2n6XN1eb9AtrAtnoq7Crvr3zm", + "address_index": 26, + "label": "", + "used": false + }, + { + "address": "72hdcYQZzvhQg99Hsr3s5rZvLaEhcVkL1dyPaDi4T5wt6WnvN4vd4nbPR4jbgCJF6U9i3GU54MRu2EBtPKnGu9EVP1pNw6W", + "address_index": 27, + "label": "", + "used": false + }, + { + "address": "738Lu7mPhd867FqMNTmM7mjFHUjQ74nFX3gdsTdTx4sQPbpSH4xTrbvZrr19kmMZiW9WXzJb7YP5U4A5upzmFwpeMU72hBi", + "address_index": 28, + "label": "", + "used": false + }, + { + "address": "78MXmh4kzuUZWawVM9q5ZMjgU664Hps7Fh9G73nhwr57BxkdaW3gwpk7U66VUF5AWoeHzfmQ3GCYUUxSnBmRXBdNBL1hdd8", + "address_index": 29, + "label": "", + "used": false + }, + { + "address": "792T3SqeL7qjbKzF1q4S3tEgA4T19t6pMUr6twKBo7QUM4CjKs4J4Ti6kQuW2Pit3CLCgc7xjbpzEDHcAwVJxTpu4af9uSW", + "address_index": 30, + "label": "", + "used": false + }, + { + "address": "73vhuNU7aYy3H1e2HmrtVYepumDCEcFDmZuWWpvLihtrBUTrKCQcSpmaVurEnWyCwAjAAQTPLuRfVRrZWbyuRfAb5sj9NEE", + "address_index": 31, + "label": "", + "used": false + }, + { + "address": "742VhvRXf1zBp5ULt7cHWChESWLowugJvFNXziAgT5Q4Q5LgWk6uoZL3SjvYi1tMdPPPzhT2HB2kySZh81XCNmizEWcgt4V", + "address_index": 32, + "label": "", + "used": false + }, + { + "address": "731Z6s5hdBmKGsgTiEg3qbiRZ5qCna495ibn9qi4gZugRGsFgt8j4SVWarkmmRUpe8cm7X8zLnVCMW2q2P8W9zs84oTukKn", + "address_index": 33, + "label": "", + "used": false + }, + { + "address": "7BZtx46Tm8eAPMPDJ5HsVL8ZXc671BQGBJdaqHygewSmdLQ3mJvzK7ReknBWodcc71KsjXW8uhWb4D6kFcr8qXvDRAzqv5x", + "address_index": 34, + "label": "", + "used": false + }, + { + "address": "767C3wugD7cbEcSrsP9R3o8LJTWXpT8UhNd7YaaM5HJ9DvFW57G2XAG2H23DrMqJsYXbt5y3hNmmec2MdASmCz8HRh5yPSt", + "address_index": 35, + "label": "", + "used": false + }, + { + "address": "78bD2RpH6R9apMsXW5Z7C3czEhY6mzorwMuhRwrpr7LKQQKymnGn9MNT7BzX2shEXeEtvRYk3qkURVQzh3ALFVCG1r9WGDJ", + "address_index": 36, + "label": "", + "used": false + }, + { + "address": "78tNfHSpc6nXiERjgqEXUhLKQb5bDWDKt13PjKN5WWCDJeKR5m5KtUcKRbYGC6tY74MAQxc56q73DWV2ZL8EhwgsD2JV5Pd", + "address_index": 37, + "label": "", + "used": false + }, + { + "address": "72HjzysURT73Q8Vciv3vTjQxc4Rc1SBbU8pZXGG5QdwY6oqUt25NsbMDLfcYpxKSFT3rNB7tNVdYzBYPMaTZFHuTUDrwMY1", + "address_index": 38, + "label": "", + "used": false + }, + { + "address": "74tjkVv36pCCbFnAzEb8NsJikbdBUodhw8H6FuUooec2EfkiRwCrXvUEpEYBbWZrL8FuNmiCvMJ8CHTPJvR7fwfKLQZyhZb", + "address_index": 39, + "label": "", + "used": false + }, + { + "address": "76PE2x7819NY7CJ8QQs5fuGPnqHobVksq2hTnRABCFGse2YQKSMFgJEXMjrg9J4WLFHKrSQkS6xAPDw34KpC3qqH5rVYEe6", + "address_index": 40, + "label": "", + "used": false + }, + { + "address": "757voQay1o5XNSa2Q5b62gfuDGp5S1TyhEnr7KHQH8RPHPjoDdEMXFnNYWPCcbNH3YBpV2EUynCw282LEMAxEpZ8Nmg5soh", + "address_index": 41, + "label": "", + "used": false + }, + { + "address": "766cbbgej8CicfwrUNXu7idQKYVG1j7MnU9HDhimsuNLH59Q4pKk2CJPmHA2mVJQCMSFc6EZn57Y65UrvjKbQdTVRPY8WYA", + "address_index": 42, + "label": "", + "used": false + }, + { + "address": "7A2v4anWrEtGCt4TyJpPJrDNw4qYnKHj3WmGrDCN4SWNQjgQ3YKwfLfDfsuD7dWDD1g4PzmEhRM7832u8cdDEnTjMWvqVxG", + "address_index": 43, + "label": "", + "used": false + }, + { + "address": "78cZvyJ4F8JB5qQwXjcZ4V6cL4Ww8n6ZX31XxThUyYATGHSqmmDCbSGU55JVZkYRocNKMx1HmJjAncsYhUnAoF3c7Bg5ghN", + "address_index": 44, + "label": "", + "used": false + }, + { + "address": "761eLuaRuQVU6HboY3qNTFNXZiyBUpTWqdJ2eJSRZPH6HCcSueYdrLjhVsFbcgReJDZGCR4QbckrhNWNvrUyGw5jHfJUkGG", + "address_index": 45, + "label": "", + "used": false + }, + { + "address": "72MDd6pHx2SWZq3wa98Fr5h5FNNkiPSjXNcQFFGP9zNRH5kn8jdQFkUBmjZWjE7xjTZwXbtjZRNBU3Apsa8nj2HBLHzXJqZ", + "address_index": 46, + "label": "", + "used": false + }, + { + "address": "77pt1hTQ1tz1BJQxvFbZozCSxCAJM67GVcsjtj9bEhwCFL1qPiDNDSgGQ59K8vn1PcG3uNqrGtQQX2HBMcXfJMcsRmhdMQK", + "address_index": 47, + "label": "", + "used": false + }, + { + "address": "79H4PLaXF4v6ghGjfZSvnUZERuN8qYnADfjhjdV8r7wuWWft5e8DctcAUK189Zbk6QSzqzGZNTzx4hfVHGWUMTcoNfxcnym", + "address_index": 48, + "label": "", + "used": false + }, + { + "address": "7BebMMzKbNjbsWyYz2ABnhYpd9MZjmh8dCY4Bz6cD1GzVFxwxU2bumhVwUSDJtdzAk2fQDjPjridXipV6j6entEB7uKFmce", + "address_index": 49, + "label": "", + "used": false + }, + { + "address": "731PPK1CR1JSjGdLsvLgJk5GRgs2RNmdWhQmkXUYbMouZciCPumHwCYfvNwkrjZwYzhQaraULXwiGByD6xc7iGUaBuHAA39", + "address_index": 50, + "label": "", + "used": false + }, + { + "address": "77HseWfsWym2RjtYPXrCQ4J7MmKysGkdDVXjgnpW1pgu91CnW8hShwRJvS6cnjTycvhn2SK12sJz3emtp45VemdxBT52vp2", + "address_index": 51, + "label": "", + "used": false + }, + { + "address": "7BEqE1w1Y8k9NWDTAay5xGL6YwiSuA5am8Wr3JeB3bJfTF3zW9s8pRtDbyFrMBYPAheycdZk56cDS6YjZ3qR9aRN3ahg4Nx", + "address_index": 52, + "label": "", + "used": false + }, + { + "address": "73buhX8nQQyYbZcLBRfWEC89AckcmJrRU4iKEQzivbb58fFZWcAMCHS2eavtNFDFQRDp6aHtJDT2FePFE3tZXUJq2G2RRBP", + "address_index": 53, + "label": "", + "used": false + }, + { + "address": "75MxSYSHND3aSBVNo6umpbTawCdZ11qUjNH5UuyTaSzhCzzi4ycAZVL8jSC86S7TpgjSQqB7c26sA77317CtiXd94fhCX6q", + "address_index": 54, + "label": "", + "used": false + }, + { + "address": "7B8B4mx1fnz7atevGbqhRTjGCPVzqptaver1FNgM84Wc45sdwn7MhTj7u9MXjoNzaUjXFZS41z4X5FMgq4SQiUmrQF77tfk", + "address_index": 55, + "label": "", + "used": false + }, + { + "address": "72RV4LEAu3je69hwqfUMSnYdvXk5WJp5A7GW6fVoqsYERRz3dbmajYbiHSW7e6YpSYcrGHym2knYdBzSfaort38UNHsDKSk", + "address_index": 56, + "label": "", + "used": false + }, + { + "address": "75bkT6UmADMNJwV7TNsCdu52WkLT7y6RTPLoPdSrf5Gvi72NAx4pzALBPxKJxuJQMx6DsYhWFFHQQ99GvAUQx7AM54Ya4bw", + "address_index": 57, + "label": "", + "used": false + }, + { + "address": "7BVxFHXaJVLXdyCu3LxbYQN6jg3LKJqHfdjuSv79je7v1EYWyjRAPZCZpeAKF46neUhh1VSZF71GUYTpwTNCiDedP46MAwH", + "address_index": 58, + "label": "", + "used": false + }, + { + "address": "73jTs7QF5JbA3d6yhNWzXbee4ekM4qCN4f3ahhUJ2JjpcgECpTHHG8B582w33ciD4nYMpL5PTEZe2H9qDuk9gHn2F8uqAps", + "address_index": 59, + "label": "", + "used": false + }, + { + "address": "7Asxm3tjvBvH5qQREfZ5BLf7jf3tqEnw42NbsPyckQ3H98nWisCvsqa8sih5rHVYxz5trWszpyK4JjBHuJxtuqym6VURbMn", + "address_index": 60, + "label": "", + "used": false + }, + { + "address": "73dmZPuANfZEJyumvn4zxbPj1iMXrQ5HpTtPF1F5ooDfJUCH1eFLotbLrMo4HnvXX5CbFdRqh26pVSCxehrpDyGFF3226eM", + "address_index": 61, + "label": "", + "used": false + }, + { + "address": "76L42VQwf3CWGkXhvB94vPhKBNUd13y1h3tsY37LMagYbc4PL2B7chmDpFK3xYmYerdZpzh33rXhPa63agkUYHmHSQojtWi", + "address_index": 62, + "label": "", + "used": false + }, + { + "address": "72rvPkB5W4uGPRknpTUn5MEZ277tRPWazJKVsvRGA3J8gjd1RLAAZuL4TStbYEqvWdZPmq29sgmLUc92BFCvPBXkCo7wZEN", + "address_index": 63, + "label": "", + "used": false + }, + { + "address": "7BKhDY8PnxPg6NvBPGyBt5hn2aKRhmh3X8KRynbu7joK5QCTQqQYT1aNZQvSXisjTcbg3Ttr3tbeK2oehdTVE2fU4JXazAR", + "address_index": 64, + "label": "", + "used": false + }, + { + "address": "73JtvMWVsELRvsLo7h3vDmTPfc8eDYq2iZqTGCgzixFkESEhacdvAjs7xQMH8qvscLUBahA6z7dzuEuHWKKR8EUeSUFshqZ", + "address_index": 65, + "label": "", + "used": false + }, + { + "address": "73L4ZyPUYko7cwLJWgBogw9rWjyanzL1dA7Jw1dAdimM3NwEhFZzwwA7Zx6CvVLW14ctPWjsj19AWa6bsBm9EjeVTHbwpBm", + "address_index": 66, + "label": "", + "used": false + }, + { + "address": "74Z3WJd32836EeT4wvzcw3eYTmSfejeZ5P59bh8tUT1b6fdxtYkbKsXiGeQTgM664mUr3kQFxPnY6ZxwsKJGtQqMNnJrcTb", + "address_index": 67, + "label": "", + "used": false + }, + { + "address": "77yae8tgSbGBZGUVYPLasYYrueBhBPe1vjYSp54NZdPS78TGqi25Q77KBdLk1wmYubjZh9zxM2Y4za1bVEKU4Xi5DsUDbnW", + "address_index": 68, + "label": "", + "used": false + }, + { + "address": "77LMtsE81dsFaSCmJoT6qz9qTCDASUP7hMQXxVJpT7MDCETiMyLL7ueHa9HA1WEyad3NQEday1LgMHfab6DWfvBwE8KNt7S", + "address_index": 69, + "label": "", + "used": false + }, + { + "address": "7ApXuudD3REEaR7sBXpwpgLaAAJ4PVhtMAr4h2nwEtFqP41KbFZTRFaebsB6QXSMEWM5nRR9J9akD9KoeiPoBApqQd4BRSc", + "address_index": 70, + "label": "", + "used": false + }, + { + "address": "75WzAgDRhnsGAx1WMDPprvLF2M45FivcZXHwH9TgqzuHZNpLhecVtz5B69jZ2jEonw36BUmXojVsrYCgvSpagpnf4L7WswK", + "address_index": 71, + "label": "", + "used": false + }, + { + "address": "76UapoeyrkMWYe2gXv8sDt5PWRDRiZRToZyecHTRsngU7w3a4xqduSD8aNs9bBDSTHJXDyCvxWKhMj1KyyPUn5ELJQLu2j8", + "address_index": 72, + "label": "", + "used": false + }, + { + "address": "77jMCXmqxX5TzTTdBDB5Ee4Gr1LT4SZ4h8Y7c8DMANxv3Gpeua9b2pka24LYL61i3xHWRwkUzkPYVX8Kc43FUXSvMXD9hdw", + "address_index": 73, + "label": "", + "used": false + }, + { + "address": "79LwwX6BejmKbf5Yc2X1UHc2QwsjQNJ29Dj7hdM2tMvzbRJzvA4JXp47vTb2Eo825HK5UohdB4UTF5MYvEs3YrtCM2LFTmz", + "address_index": 74, + "label": "", + "used": false + }, + { + "address": "72m8YmsSomCgExHeBWk36p5SexiXbKEKeZYtyZ2wpsHnLiMMCiNDQrnUnKtvQxsBoue1V3eFKerbnMEKTfi8PbLsJwq7xX6", + "address_index": 75, + "label": "", + "used": false + }, + { + "address": "78m6ph8Bvx6b9cksmRLoi1UJpWj7MWPWLh1NQLP5MNXCQ8DxMroTrKu6oGsHzauor6UtMu2Nsquh4d3Rno3p86TJ7xbwKcL", + "address_index": 76, + "label": "", + "used": false + }, + { + "address": "73WrafapUczieHSFgBWugk6uEf36Qu33KY6bgLnBMiJ9bAhQDi3unMtPU8x3dY5Zq8C15Q9HBDKToARzyAzC1DryN3JNUEw", + "address_index": 77, + "label": "", + "used": false + }, + { + "address": "73NdqwXP3skDV5FYTVmvHvKVfxYJVZfKD3fpvF64GcpRbDF6S4NcikAEhtFqdEooL17ywYmmywoxAWTqp32Xiy8ABMgScGZ", + "address_index": 78, + "label": "", + "used": false + }, + { + "address": "77mZpSTJgBDBh8H5xxemEjiD3hDt1WdXR7q1CPS4rzGEB6v4NrbmoJp5sRtcC1bAzzBireAqoRkhu4778QxEr7gMQUyLkyx", + "address_index": 79, + "label": "", + "used": false + }, + { + "address": "75Q3Kom5hpEjDDm78MPwES6kwKkGMkGNoDhQ4vGE1N543LgiK6x4HM2EKpPSvhAwgcW1r7EnVWSH7ZpnsVvMU99tLMEQg3M", + "address_index": 80, + "label": "", + "used": false + }, + { + "address": "79vgSDvCYKF5vzRYyWwmmo6YGQj9UfPgb5RQ6cAAtVbuFxpsC75jwi688XbefkzM5WBzCeBzXE8qHiDBx1nyC9mgPw22Eng", + "address_index": 81, + "label": "", + "used": false + }, + { + "address": "7AL7WsME9kZVxdmmPLEd75bmCD6xDd6aiSFtct6VTiKhVGJNnJyLvNBgMAsRCK41Ai1oJNE57pWonS6B4ZphEaZRQJAw2uv", + "address_index": 82, + "label": "", + "used": false + }, + { + "address": "757zszrmLraha29pyWFEdJVScv52KWNLBSUaBCa1WR5Ri2Kcj92LNyZ4AfnJ78HfipchXW1tgNVszJmrBghRDv4mUQCE6ej", + "address_index": 83, + "label": "", + "used": false + }, + { + "address": "7AcJo8MbHkyQBvHHPDhpCH57NhsXkFcUQQQiKeaUkw9y3X1rNzFx13QMaUmhpFrL7Ter9EaVDTwH3HezfGVuXUK84LeTmaN", + "address_index": 84, + "label": "", + "used": false + }, + { + "address": "7BY7KBYQHRo7JTeeQwWSAUCJwXen7Gch34dTpgCDdtyMDVZ6oQzix6shfaxJRqRpRibUzz1423VoMiCk6uC2FKk6CDjCVDB", + "address_index": 85, + "label": "", + "used": false + }, + { + "address": "75xWCFS3ohcVVn7frrJNpcGJU4XcpNDJkJfrR73xMzB9EmJ2kv2ycoMSxhMHqVWAfxV4vpmypFh7C9QE2VufXSSyBWGY483", + "address_index": 86, + "label": "", + "used": false + }, + { + "address": "74cKvty4GX4VmzRBAKzCVeadwoYNmws6DWq6rXhgrmGdczwaEJ2HaqHGbpoF9DiXZghzecGL7oQQmNKadoGD14e6DF2UDsz", + "address_index": 87, + "label": "", + "used": false + }, + { + "address": "72MqJ1iyXpyE2pVuGZ4QeKZ7oi3nx8Lvze8G1rVRkK51QmA3ZaMrzKDfQQyZAud8UCSFrhV7cuKx6AYvQ53Pw9prTsK1nBq", + "address_index": 88, + "label": "", + "used": false + }, + { + "address": "75wmyxtH5kdZjtKWYdB9ov8mCa8XmtdpvUXSX6TmSnuoXdtSZasWRThC1Deoos4ac3LfvAm5jsUnTHomA23v7JdqN7DDQNR", + "address_index": 89, + "label": "", + "used": false + }, + { + "address": "72qf739utgkM6cYmNmva5Fb5JamKqVfgL8g44CZEtqfcKuMqC1pste9MvS1fNzxkKdUM4ycB4nKbbcMKnsf7aXJzVQVQQRF", + "address_index": 90, + "label": "", + "used": false + }, + { + "address": "74xUhZKzbXj6pUvx1DbzCyJvgdf7sMUfM7FJxEKUeT43RVhTjuxq9LyEDKoZRGCXLoPtZ4imt5rj5QVztdR46a5K9TUe9qJ", + "address_index": 91, + "label": "", + "used": false + }, + { + "address": "79MuxevgoroWe2HzjRvYCQC41i4bijJ2sYJXfdSzgN3paxMNvYKkWpBWnAsXE2i7QMTL271e7oykkcmoWCLyF8bU8fgw91z", + "address_index": 92, + "label": "", + "used": false + }, + { + "address": "74Ugew43AvYWsTL9FWW6TNfGbRqxhi8oKE5UZsvbb1Eka19usRzxNZEKAVnV2V5w3LdzT9hPqwYvSCR3eC6q2Scr2vRxsv9", + "address_index": 93, + "label": "", + "used": false + }, + { + "address": "77V5BZdRF2rbjYUwEdRTTKW1w3HhQVdvv2Ls8pUSJnyKGjisVcbxnioipLA1tckF69676UQ9LkPAkA65xXqA1gXwT7nTX6y", + "address_index": 94, + "label": "", + "used": false + }, + { + "address": "72NyvRVxKQ7V3j1M1Dspx8XdctZUX2RsyFA6seViSaxcAtB8ptQh8xjF9TX5UJ333W3yDGGCpJwcWRokfNAxyTNsA3LeYsz", + "address_index": 95, + "label": "", + "used": false + }, + { + "address": "7Ar5NiFFHwsgMBhwJ1xosqNknH5iEQzkaQ2MuKKyBE2w3P4v6YyXuBwg573gMNh8HvJ8TG7njNg7BGG6YkYoPsMqHZ6znFH", + "address_index": 96, + "label": "", + "used": false + }, + { + "address": "76nTuaf2K37SWh3E7fX1ezUmnTpVHwyUsT3pKyMa29VH1w9PamL1cuyAgXauQDW8PqHBDVaH5biLaK3ohW2VkN81RDBE8tH", + "address_index": 97, + "label": "", + "used": false + }, + { + "address": "79MscYFHbZ2726A2zSewjh5YxwniCVG7QJEndnHEXs51JFQ1YGkrM7j73yW1FwbSCHBadjb1nzQPpBwb4ufsXKcP5FpEzh7", + "address_index": 98, + "label": "", + "used": false + }, + { + "address": "72Q6nMg87p8bve4GNdFzaDCqACfwRczQ1gLFRsX6gk4YbhR8E8gtdGndyRxEi3H3XtSpHJiKyaNni7nBaq4w45vWN2kD6RJ", + "address_index": 99, + "label": "", + "used": false + }, + { + "address": "75rWq5KaTaDUkMsMGgJ4smRvSKyjzNJmzHsF6i6J6LDk6KAxeh2ng5nEG2QHyEjNYY9g3kSVktbY3VT2VN8QixrqU2GetZy", + "address_index": 100, + "label": "", + "used": false + }, + { + "address": "75yxHgiqCT749NWTT4TQdKFaKXn7BbgWwKMnnqgVjRZxSTmux7dmVNTPoftXGva9sxiXfwMVbLBkCPjdgrVgCz653hH7a3R", + "address_index": 101, + "label": "", + "used": false + }, + { + "address": "76bpeoLFpMve174wcioKYGNHsrcfmXGuxCqGNquqDKFhgPHp1wuWVCYKWaPUQTpg5UJiMBJJfGbPr89iSe15wnPZEmaHtTj", + "address_index": 102, + "label": "", + "used": false + }, + { + "address": "79JihfbyrHK2inkHfuhb6jQL1mUa3Ahnd2fs7ukYFsbkH4t7S6DcJpb1HThJUwR6vLiLu77zumvQQMcwdFaP1xNZHrE2KLv", + "address_index": 103, + "label": "", + "used": false + }, + { + "address": "73NjV8GxPYoGHv7K5koWT68wZe96inT8sJoXkkfD3w5RMkeebzLhQV1AYPA7p96RH3VHoDYt6Retc3reYMXELwUV8ZG6PWL", + "address_index": 104, + "label": "", + "used": false + }, + { + "address": "7BUZgyyiNitSC6V7xHzmEr9ANcynzh2DaHLA65KU7DXxQsdPbsHfaFu2eXFRP7FvsVC2tW4KbcPeFiHAAy4WMrRfNo9ZS7A", + "address_index": 105, + "label": "", + "used": false + }, + { + "address": "7BkqshWaC1TXzUcpxzPkX1HiMhbB26mzEbXjyV4YvwpyRMuPhZ7mauidbquku4wiuPF6FLdu2QWmpSpRGFLwMtR6CCQdZ3p", + "address_index": 106, + "label": "", + "used": false + }, + { + "address": "72SeHFvLdqKaDyoFSPnPyY1Djntt2YbANfeNGgTGPkCShjdxZHq3s6pYaYHRT61s6pDpPdkSxbBp1cFvvgeofWVfJqmixPh", + "address_index": 107, + "label": "", + "used": false + }, + { + "address": "7BoABqRjySNU67Dab7njjd52xnttKromoeHXpoABB5FMLoG3DTvzoMXVhNQDDgsMSE4rUFPmDF4eqCLP8GZvKB4KV8jaYXU", + "address_index": 108, + "label": "", + "used": false + }, + { + "address": "72K8B44SrwHRqdT5Y5KDqKS8CPo6ZGRKtHoaGV61sRkQfT9uqkSzeQ7dn4KdagxsKzAJp9FvcDDgn7iNeGHDdSM4UsGKq6k", + "address_index": 109, + "label": "", + "used": false + }, + { + "address": "73kpFjDATbBdLGt9DFyvPc9t2dh8bjEJA9QjCZd3RpbyE7P447hwExf5WqUeZqCovQWHDi5H9qaEoZUqmu8pKAPL7AK46T9", + "address_index": 110, + "label": "", + "used": false + }, + { + "address": "72sZ5UBcoKmc5HRFTcPNrXisizJk1H72F1FYLJ7aiPEpAnwfsN6PjSMhcfBo1n7V2sgaJoUXUzE986cxSBv49eKWLF8yGhC", + "address_index": 111, + "label": "", + "used": false + }, + { + "address": "74mTNw4JMCH3FGY9X7Uy2W4fcz1FquYtwGEZHvZTZM5ELpaaPcdP4Ft4FADPKUqjZNS2yKGD6Ss6Yc6fpMjHYWrf9wCgHEi", + "address_index": 112, + "label": "", + "used": false + }, + { + "address": "79KtFaVosXVbAADoaVUhdij1FMTdf5soEjLYzaAHjmMu7cxXth2xSJYXkBPP31PfQYGGxhV7oeGrEZ4aPN2JaKqq5szzKUj", + "address_index": 113, + "label": "", + "used": false + }, + { + "address": "78geakBKysYJUCcX6byXbX25a78bfrHXxUKCeV5tcZayh1eEVJRXqjcCx8U8D4623fQrddDDKgpRneLVxcNBzTVF1JHHFEW", + "address_index": 114, + "label": "", + "used": false + }, + { + "address": "78bon3949ZYM9U5W9dEENa4mE6SUh7auJCnc2Vao1VnyAEWP6CMQ6JUUUtSx6dH9wMJg5pHpRVUrGhtehQKieJnJPYCFxzA", + "address_index": 115, + "label": "", + "used": false + }, + { + "address": "75JztRSTDjC42ysXuSaD3MLtuxPhDMK1GDbRdzN5EsVRab7FdYmvW8hiy5PnuNM5bTKLBCARJpukSKjo5UBY64aWRcdvYP9", + "address_index": 116, + "label": "", + "used": false + }, + { + "address": "76kxjE9ZKyiTdPy2zJLztJUDCDEUo6QKmeWiQV8MP5svgra4XKDdrpK2TCykfx5WaQPEwpvYmgj3qiFH51UXG4bhRyx1z9c", + "address_index": 117, + "label": "", + "used": false + }, + { + "address": "79nuRP9dDvK2jdL9utTBNHbJa54k4XdCKL5CXWi39s1gHv2u87wfq1HSBuc2zNt7Ni58NxKG6QjnzaNDd1fAWAMZTTJUfgR", + "address_index": 118, + "label": "", + "used": false + }, + { + "address": "73Q8EAcWFQ88RmCNbZFfKbTvrEo65NCBmSBpqD8VGQtUjmUGWXjTER2QyubDSZupfWhxTPnCAn7787XefjotvRmVTfNQndM", + "address_index": 119, + "label": "", + "used": false + }, + { + "address": "73dN8yLg6LRZGT6vEM7MZHTH6q5Zbp2QzeW9jrXLzvycPbKEwdZVTKa4vg6CJ2t1iG992zdhcPP74U88kv8sqDtiFoNrNEp", + "address_index": 120, + "label": "", + "used": false + }, + { + "address": "72QYzaNCUuRTEuTiFpvgSXF6yierksoajeYB5kCKBLSWThPXNk1RedsAKZWn9mf33KX8jAwqvyDCFAJsjZodVKk2G6Sgpgw", + "address_index": 121, + "label": "", + "used": false + }, + { + "address": "74bHm7fM9ek2AQwKxM2oqCYJsYp3GgougiVY1DxW8FvmdsBeVu9cc86jhFEaWv5qGKPJNBczRFkZuAcDKd848Z7XU1FmJxg", + "address_index": 122, + "label": "", + "used": false + }, + { + "address": "76EV2dcp4UTbDyBVZGPHwrhLmu9N7AVaZiNsGVnfY53W1BMEEAdvRfRMFW7Gkg62ENN1ir4D3bNwNLR8svQ23U49EJVPdLS", + "address_index": 123, + "label": "", + "used": false + }, + { + "address": "7AzdKy3NEmHfWJBTmiZghj8vHhPTjbfsb6McTHFxVZCCZ3qSafbqin1Ee8PBa2PmyYNg9UNKdfdx3C451MKDan6G1zbn1Mu", + "address_index": 124, + "label": "", + "used": false + }, + { + "address": "799hT9t574J7eRw6dLto7HLkTgsr69FNWBDCHVic14o8MwYtp4YEhVhBcWamXXNGxJhfA8DSZh3EgDVis36TcaG2F5jAnRN", + "address_index": 125, + "label": "", + "used": false + }, + { + "address": "7731qqcDBzzHV6kjNNV78HVMKwTWBftnWCdiYwzvKdRU1DPWwNsnDvX1cACihuaJyu9ftb2P7CQq5cL21NEDig8jJhQ2ohE", + "address_index": 126, + "label": "", + "used": false + }, + { + "address": "741n2vGPK64dfb4SmtpwLBPgUf7Yi5BzqRBnZfEARtfEU4fSKm2epPsgyxKT6cgCDCGQFq6Cdjq9qaRhNFHdHqhmLhqE88F", + "address_index": 127, + "label": "", + "used": false + }, + { + "address": "7AdDetMeDygBEcMhmZnLNBAc5XNcpn33pSphLujcyXTR6uQhhWEZFshbqebYz6cEGzD2WGk2AXhkF514DAeDysYqQZx2DEE", + "address_index": 128, + "label": "", + "used": true + }, + { + "address": "7BP4CVRk2sfCDTimMRKk6MMBKFcfc8ePgDEnLC5vvKfTjXttCVNtrooRunypyC1rdJAa5BbGaqLjiYZTnANAn8TQFRd7ygr", + "address_index": 129, + "label": "(Untitled address)", + "used": true + }, + { + "address": "7744d3FRvKSEKqFrBVeKTPSYiw5U1oT44C5Fb19sUSqAHio12ogXzTS5aidzoovK4tSyX2VeVEpkSNDviYQdnb7sC5jEwih", + "address_index": 130, + "label": "", + "used": false + }, + { + "address": "77casR1dXvUQEpTJay3U8mS7Hshob8aVySzNgA4jC64RBqDjPrXom3cWHJV7TFcg4rWsVLWrjL9StbjHFDJpjfrMPUsJcDx", + "address_index": 131, + "label": "", + "used": false + }, + { + "address": "78fjmjitiDWGk5csdje4CxTMZQL7tMS44chEye2PmnNs1UWBQBJytBijaHWu4D7iaN1DvVppF4LnDLoKDAQdq8G4Mz96t9e", + "address_index": 132, + "label": "", + "used": false + }, + { + "address": "73wjY87f3oBXYg48XvPwgiht77UfkuSE2YdBGREBwNZkeBtLdCjAoTPfN2A6ALnnkgaCGi6iBgTv1U5gNRMpeS83LNJ7fwT", + "address_index": 133, + "label": "", + "used": false + }, + { + "address": "7721oUcr6HF9sgGU4WmLmtawLrJ1TmH4GDs3c3Wr9VqEUUGKGni63gT788PTR7QB3q8pmroEQy3EdCigzH3ahyrMTQpW5bo", + "address_index": 134, + "label": "", + "used": false + }, + { + "address": "72Q1UUtRZtdau6gZqiYMGqEPYGs8hFAy1TaPzmawSkFo8TWhiUqTY2tdvLG5XAxFs4N7BHt1sT9ekNZYyDc1Y2dpU4SFTBx", + "address_index": 135, + "label": "", + "used": false + }, + { + "address": "73Ahzr7vnW52knSNgWvNbdKKotiqXKmRbeQ8d88Y4vYK9bDRtqtG2FbPYsfX1NYVeHh196hUhfJDF2dZYMefgvp4CJcSFW2", + "address_index": 136, + "label": "", + "used": false + }, + { + "address": "7AZ1jduehq334ykVP34r7qj7yMDDHbqsB567ziXtTzRiWbonEmahqPwTn1riNxu7cLNPWFLoUmtsKTDxaoTTAGwC2xqRWFf", + "address_index": 137, + "label": "", + "used": false + }, + { + "address": "74exJtLkJoj6VqAhCDBvkY5nZABtwrWcLQhU6qhiXgPkTrsAkoZJtFGbemAd72wE1r2cVxfBJp7gNfseGXzfsNH8UtNQipG", + "address_index": 138, + "label": "", + "used": false + }, + { + "address": "75kvNAghW19H66V63cG2DaGz2NHnYhsqU8fSVTCeYvPz5oMtyqSDcDaf1XdrZf6NMLUPXxcm9qamMgADsHGEw3gr8E5ngQq", + "address_index": 139, + "label": "", + "used": false + }, + { + "address": "74nPAWGypFqGE22DkR9P4dQ7bovocKeeYDLLtREQVUVNNyKCchP3dMoC3AMjzKdne9NGW4uwuc5Rjf8wimEGyd2XUK4MkWJ", + "address_index": 140, + "label": "", + "used": false + }, + { + "address": "78Ex1pCXehJWfHXYq9MbsEGJp6QBJK7y9LeKhKA2VLLYb8hVBEMsMgV3XKy6nzYVfTHrXsu4t35bke1aUKNpH4NmS5LZyui", + "address_index": 141, + "label": "", + "used": false + }, + { + "address": "73QHUwmyd75TGoe85GRmSiBE2u9uG4AbSDP6NMejqawQf9E1rVBL7XSi4M8Jq3WPZtgrdFzty1EJuZf5iqdg5ka6KAnmk2Q", + "address_index": 142, + "label": "", + "used": false + }, + { + "address": "76x5TdUEQEF7xJnLW8XRaqWf7SmKgufcJKBxpgrbaTEJCUd6go4h2BPhakxZHtHJiV5tMaUv3NwJAaY4VWQ8BPiGTzf7hvB", + "address_index": 143, + "label": "", + "used": false + }, + { + "address": "798CqTexUewBadvho58Up8aCfyARf6SSE4HSXpbC7WthSEKDTKH9x8ydRLzrr6uFz95bPXExP3AVgXVZBbW4NSZyVVMzYEM", + "address_index": 144, + "label": "", + "used": true + }, + { + "address": "78NjmbohsQNBJdJ7kyMBki4YMnHFAT91mX2jgGEEP2bEVmVYVjLwXBX9ZSMauGvijcUwAxGqxoBTa4Yq2MrwqdkR9Aswtku", + "address_index": 145, + "label": "(Untitled address)", + "used": true + }, + { + "address": "76684iaduPwLPnVdn6rvBaMCEoXZERaxCZNqi4diZUzz1p4y43Bt13BJANpeQuSd98KkQWuxwGSs341DESYt5DHPSULyE9D", + "address_index": 146, + "label": "", + "used": false + }, + { + "address": "76imtnfpEaJTzbi7qbEHikbeqbfGjVcTGYtCq3eQCuUgY1HLjx6gQNyZUmZEFD5c3N6naczr7Mr4156RvFeaM6aRNUAQKkS", + "address_index": 147, + "label": "", + "used": false + }, + { + "address": "7B19PLEavD6fvdP6TCJBtWRcmVJK4WiT2TUjDPcwiTGoieCtFJfpeBrF1s98dYwpDkW4aXcb5yLqNHmPcRjfqvuQ7CMoqaH", + "address_index": 148, + "label": "", + "used": false + }, + { + "address": "7BZB3UNxq6w6C3TWkAh9cXdtXV4oNyjUdYbjxw8gUnVvjbpDBKLUcuUdGRNbsrDkSRMisPmPhNufuHruMtQPfbysQEy46wT", + "address_index": 149, + "label": "", + "used": false + }, + { + "address": "79UWvb2kMD12zUAnjPLoet9S7BtK2cJeFR2nynJvWypARB4Tesc49BpC7K3x3T4mAXGLgiJgT6Z4Mh2hLyaC6u3kLXsMePf", + "address_index": 150, + "label": "", + "used": false + }, + { + "address": "79MSweZ5U8B6yNd1ex17MMSce3RrG7JoMHNJA6pP9EjgbjKTfWrFG647csJTg7wuRqP6kgiMrhARRXmwHqjQjp7xBpSEn7J", + "address_index": 151, + "label": "", + "used": false + }, + { + "address": "7AFuDMeQkY4S2iXE6J7pRVEY9mb6ivck1CdFvRRvdbb1JEn8C2MMP8mYtqwzPVWc63ZC58bGMbhRKG3tAFarkK7sRXPXmjh", + "address_index": 152, + "label": "", + "used": false + }, + { + "address": "75eA4afovkvEcBuLyXULjV2bd2NoKmrugWrWKoCjXxAqLMpEpsYZsjZCvmQ95CpXN8NLrDGoWXpGTCGdfbpA2J2jADb2mSw", + "address_index": 153, + "label": "", + "used": false + }, + { + "address": "775V5csU2fbBPiZKGU8hP787hV4G16GTPgW5ifewcdWkFv5mfG6SBAicor3JtVJp9g7rpA8hMSV6G5MQemSrjUXrPwQBtk2", + "address_index": 154, + "label": "", + "used": false + }, + { + "address": "79vJfBVCJhuV5WkLdm838miAVbJ6MJ5JxGviFA3BqbfpayBHNT5w4mnFyiPfEd4EjyKi4aHXf6TwbE8JB4Pdv83fDTYhUbn", + "address_index": 155, + "label": "", + "used": false + }, + { + "address": "78iXrPM21qeZ4Nm3yPsaHm44pJ2r3UgV7LSDUSbvSiyChwPtKYKD3in3sht5tH4YBxVaW8BQc3bUohgWWGBGmGyMHVcovSC", + "address_index": 156, + "label": "", + "used": false + }, + { + "address": "72jBfadbK9AWQ6SqhwEphH2mFTQpYW7DmJAce2CunheUYsAb5vrwLx8Mh2kbRkaYiS6PnMtV43TR5aizU9fXpL8rHRrhkJ7", + "address_index": 157, + "label": "", + "used": false + }, + { + "address": "78Zx85YkdCwQoJ6fbd1Xr1gWP6L6Smi2s3aEeTqtakwuXHmnPz3zqKxeSWKEnTGqEz1Dr7cZ43oA5B4agfbADDVyHqg8wLb", + "address_index": 158, + "label": "", + "used": false + }, + { + "address": "754tRApCr3QgWrKJDAM7qBeFPyeY4rz3ujKmWn83cNW8825zChb4JjABmSudCAv1yEdaPWpVBiF8p16hiekTdW6Z8vzznXZ", + "address_index": 159, + "label": "", + "used": false + }, + { + "address": "75ZxibuCBz18H9KuKyUdgTisurtT8dfRWBHzMM4yARQteajW2Y239XGNFDys91dL5rbUzJtza88LU5VwrbX7vjyT6kqFohr", + "address_index": 160, + "label": "", + "used": false + }, + { + "address": "786raQRppT93Ue9HhN4BCsAHV6gSkdfCtM8pgNuvYfktb1KcnwrNUGZhNt3nehGQGK5s3oMTFxHhwVchNfEmGhCQRzZTKbo", + "address_index": 161, + "label": "", + "used": false + }, + { + "address": "79AVXd41zNhKYH3jQ9cPCbPHPKq44ymcwWdikwSy1TdM6gH1fF9kNNdLQn6rgVT1YFMBahWjHAmXcNSL5jWfwBVJA2pL8u5", + "address_index": 162, + "label": "", + "used": false + }, + { + "address": "755wdAdsiw3BDdZY9fCwPx6iPS8RqGqGo26ZKYbT5J4S3fFhcrWdiCRbnvXS2Ep9PSSY7ccdKM6ySKogYpTn5f5wNjHncnr", + "address_index": 163, + "label": "", + "used": false + }, + { + "address": "79RPGyJHgtZh8UQ5kWvEQEiEphbPxbuLjHZo15C7AqBDYda9ueLEhgRZwgYee6XYxCAoJnTdkmhRmif3DkA7gS7TQ8TzRiR", + "address_index": 164, + "label": "", + "used": false + }, + { + "address": "76cLZJ74PxM3nT6Wdg13XRJcbLsbKCU5bEUSFJzJd6SyJ3TUNehYu8sARXNwyTYS4A8x6pY9te1kfH1Kgnc3UrmdG9FckGu", + "address_index": 165, + "label": "", + "used": false + }, + { + "address": "7ANLb4T9QhqjTi76vgpnuZ2LpV4veYqvrVi5PqMwZyciH8jz1J6j5429RbJWkF16kB6WXCZScuHQiES3TkFbSDZ93snx9rL", + "address_index": 166, + "label": "", + "used": false + }, + { + "address": "78k8howdrtDLEfvaf2PPbb1SxzeBBdrtVKhhAt18XPp7c49xGkWLQrTe3p7eRN6YXaHPcJfc2rgTS3UB8AXSPZfm1tCA1Dw", + "address_index": 167, + "label": "", + "used": false + }, + { + "address": "775SEWtrUEYg9tyc6gYDrVbFBv7vvpzanVKSTV8oRhGVUV9kppPkLfrZ72mwDzVLgC67FDBDghxeMDdU9KtcSAv25vdq8iN", + "address_index": 168, + "label": "", + "used": false + }, + { + "address": "77fbFRdaUKAT8V8sQyUJ4pU4MmqpJkJgXWmwXzsu22ZKjNdTy1pReSc6ampwGga7QkC1CA2r6wcGCagGogNARfmR7U1ndC3", + "address_index": 169, + "label": "", + "used": false + }, + { + "address": "76K8Xgu3jHEh6wMvexMMGd6mnDuuQM42igt8JPQqsqCecCFVLdFBpZiViPQMcvXgLwS6QmRLdFgc34KmPqbPhAqNSybzwvc", + "address_index": 170, + "label": "", + "used": false + }, + { + "address": "745ozzgjfwJPGHijYZrvFug2GQnT4YJbKgiVvkvHrWtY5auE86j6smLfTpviSLgthhfFmzVy7S3U74E54q6M7s2ZV4AbfMD", + "address_index": 171, + "label": "", + "used": false + }, + { + "address": "79eUxL5jHBx4hkmFDyDoGh8PgquKj3PsXccGWQ9eSD2qAjhPbhAcgf5afVr7548w4yiymi5g9Mt1oLUKgJTbzSLiRYwH9TB", + "address_index": 172, + "label": "", + "used": false + }, + { + "address": "72QsrqZtG8QVyg7FLRW74ZiJ5DeARNQge4KNovKuJyrDWeGe9NB9GTUL7sRS3GZncjE3AGAe8jEh3PMofUEaMJj9Hibro8s", + "address_index": 173, + "label": "", + "used": false + }, + { + "address": "7437s1Xa2LZ1NVLeTrUt3rZHSrgMLUoMajamTzfcMmJD1vVZftDt3VuheswGBaRkZLg4Z5wv2bD4hZbZwhJfk7ue3sFD4h3", + "address_index": 174, + "label": "", + "used": false + }, + { + "address": "76MHobZFccxVm1xtwkohER46Jtz1GbYiCfChJhm3mKNAXsXkh7dP1Xo9EthsUKonHdDkibeQZdT8MPQJKBjvzfBAA3DNH3o", + "address_index": 175, + "label": "", + "used": false + }, + { + "address": "75PEv1VNsFg8sS5YN5pu5NCiFLgk6hhZUPXFPD9H7czCMax7MHptUjGB8NownjT78pGxKE9r1MKgrYp9mtXMjgVwT7ED7Dd", + "address_index": 176, + "label": "", + "used": false + }, + { + "address": "77NP94vvkFqYJk28GXJuDG5os837xyvk4jmHZpZuqferPU8fBGaocx53FdJt7gPdPF92sVR2Z6WZfH3p8cyfewozEXQSptJ", + "address_index": 177, + "label": "", + "used": false + }, + { + "address": "73nXtLGaEBq5UfYhpZFfff4yTtQPTniH7EBx21EytwTQ5FKjAKK8QUKU9PVdSDngm474tLmMZfQ3TUzU9opHkZ9FN8wu4qN", + "address_index": 178, + "label": "", + "used": false + }, + { + "address": "75WBsreJE1jNguNp75Mykn3rGWQkM29NfQm1RLwsoDtS9aA86p5v66P2vXWpUaA6HEhyQvx8jZH5saKcaZdDBvdp431yQrc", + "address_index": 179, + "label": "", + "used": false + }, + { + "address": "79s2f5JgQ17M13UtZut9b5E5okjrXvEyw3V8XJQHAGJejUfJmMepkoPgYe3YhvAZhxjnLuNSCzwYiMunHhDqZncEQ74xUv3", + "address_index": 180, + "label": "", + "used": false + }, + { + "address": "7AJ9jaSAGRU4XM6EA2vYxq5ztJixHpMMtbRezzJSd2qxTE2iuo3MV5V24JpTFVq9nJjiP93JZpLQw8ekGXFoii6yNSRfbbi", + "address_index": 181, + "label": "", + "used": false + }, + { + "address": "79yH81NeWVNaTND7KDg9jj8MEGrUKr8NjUscHN41h8PKeHGhUyVrtwXeyTGZsZedEtMK7nEaReGYzMP5mrrqYtqVKzqGrVN", + "address_index": 182, + "label": "", + "used": false + }, + { + "address": "77Bw1wCR9M5Dm7LHZeJrG6bVL7Grs3nA9ZKMo5yT7xSsD5BqFWerf9YD6p9QKRm7y8Edk4yXESDM6D25fWDAWfdr81xQL7M", + "address_index": 183, + "label": "", + "used": false + }, + { + "address": "73wqizbkM4Ed6augpdf8jgfmZZzbvaekTQuJ7bb77oUhEoyg1SRAfMGb82QyaXcjtkc7gmoLrFcrzcPCi8ut3riX2Q1ucXH", + "address_index": 184, + "label": "", + "used": false + }, + { + "address": "76V3cUnZQnJD9t5K8UYu4k6QJKPsYbxz6hBVaSBmX9Gud5jEWHi5qSLMCP2iBLqH1n2X6FMEj52zd271t58PTndfVhmj5sY", + "address_index": 185, + "label": "", + "used": false + }, + { + "address": "7BF8g2MTC2sbLJJD9KupFFBoFwKpq2SEd1bTmxNntvh8cz7G87ds3tKVMcQ7KddDazKRDi4AdQuqW7eZTWmmPsmsND1uoFq", + "address_index": 186, + "label": "", + "used": false + }, + { + "address": "7Agc1CKpnQzWFfZvMef5rT6XZvwMRFuA2WTjrnh4cx2bUXb6FwyeFXaDWmC7NFpHBGExYWUTRNr45VZmSEKRhgi4RWXU2wV", + "address_index": 187, + "label": "", + "used": false + }, + { + "address": "76j9k3NvRZFVi8xQHcTobRR3TYW3oFQNzd67NtnmJH827iRw29VzyvrQcEgHNnsMqxTRB5vsibJW3dH5VbdGp6Wr5MjD9Df", + "address_index": 188, + "label": "", + "used": false + }, + { + "address": "7BNoyHwF7be5rftZM5Xxn8Gt3akCre7hg1yE6BrCm2vW6EXEJ1w8GVPVWCG5dUNq8WUquLatM4vCtBy8UXTo2cidDxvPS8T", + "address_index": 189, + "label": "", + "used": false + }, + { + "address": "76dMUGNx5MDdh1G9r64m71bbGydPqqCaXRjuNkB7jRhTjEfewbJ5P27af5bkVp58wXcRBps765qZP7REUvDwayNXKTUm4UG", + "address_index": 190, + "label": "", + "used": false + }, + { + "address": "79zUHskvdVbS9iAewP6dVd4nXgxrmpDAfiAY41tLj7PzXd75q6tbpJXcJhRC6CKsTZaArvHyor7V42hGRjEDAGhd3EACSoh", + "address_index": 191, + "label": "", + "used": false + }, + { + "address": "7853zG8ymFkhVSUw9JppnsQdMnRC8gqfUBGpttSEzbNoNxRndB5VdpojUUmAAHsVWZGSenMegurRXGD4Q38whQwpUtkhxz1", + "address_index": 192, + "label": "", + "used": false + }, + { + "address": "79cGaUQhxkrPEXxivXnSPhYpw9rt5jACqPNnFhM7yDK8W7oJmVSncoPKZVdjCujbFMCqvkS4XWRFBErMxP6kr7oNDAqh6xz", + "address_index": 193, + "label": "", + "used": false + }, + { + "address": "75GdHcAquyr4fkBJ89HMu3JoQuqVCEdanR7YaKppT6k1T2dsBndANQR1KJ9zs7qA8m9MTgTkuzpEjNMvfYbePACJ9nHm9uN", + "address_index": 194, + "label": "", + "used": false + }, + { + "address": "72PkVG2xG8XKWPQWrnGkS8YKF5brqw24bHsjsv6GX3grJZccuYxmWgvUE5x15xqm4WgKp7dfyyppLffJQxDJnaWK8xhoxhH", + "address_index": 195, + "label": "", + "used": false + }, + { + "address": "76bVBRWPvaxG2CRqmDoxNThVqTX3JEHFsiNqev7WRzn77JScJEH8K8BUVoskxT8SDZUBTLKcjwAJwYt766saZvQF2byCAAD", + "address_index": 196, + "label": "", + "used": false + }, + { + "address": "76ksu9zEr8r17t4tgbv9nVCPEjUK8Fgkg6GGWsxFh2EJWxWAt1kzcbsbo92SKVDzJJAAPs3Y3ekXPdMdkVSL8FBf4TTfKzh", + "address_index": 197, + "label": "", + "used": false + }, + { + "address": "76LSGUJ6mSmZhtHHACnGmwKoQgdaHF5245rdoN9in79T8U8TPpQiTkMFv8UKNwigAiV125EAUHFEbVPG8cXf4yrvMbWu2pd", + "address_index": 198, + "label": "", + "used": false + }, + { + "address": "73S5xsFAEjwDmTn5ihka8iAuxd2yetu8C4oDUkYSWC2ANcgLd19RbSzFPK5RzB2pBtTg8j7LXmMu83dPx1caC3Hq1HPMiUc", + "address_index": 199, + "label": "", + "used": false + }, + { + "address": "74oBKMCnD8u4EpRJi3ZLPKBW6oqNyAVp6SJBGPEGNZqeP9dt66F4CWe1zdp78GoPNejCbaEnABTsjawY6XUzN8e8U9RuoYH", + "address_index": 200, + "label": "", + "used": false + }, + { + "address": "72yigXzzhYajb5eCiRY5MAcgWR45twjVa8SbcpbVaefNRmtG4SKiuKQbuC41SbF4CgMCpsyDjZyd5EdtbTP6We597RMmpiC", + "address_index": 201, + "label": "", + "used": false + }, + { + "address": "76bADmTcmMVdDKFgd7gwo5ZqnKq5kiJkv31isev7ATWzLpw4XuARhQQetz8KfVdDVHHRp2AvnjmTM75tT2PEMXXuELfqKUU", + "address_index": 202, + "label": "", + "used": false + }, + { + "address": "75wThBomU13RF1Uzmv6PZUHNxUoMnTRtJb69PDdafB8Vcu9p5ZMT7abW8WAMvq7NLYbV62oJZAbwhWrc2RKMW7BwPvPiMJQ", + "address_index": 203, + "label": "", + "used": false + }, + { + "address": "78Afmb2e7RGex8sEcXxdWHTzC2kXMnErLDrH6dwEjE99YVaNrtSNTfN8MRTMU76Mi8LpmfDjHQeSDD8ddSJDoXkKDrndt1c", + "address_index": 204, + "label": "", + "used": false + }, + { + "address": "7BAvHfXC62A8PzJvkUn8wndduxetQKz1u3ZXFtomXw65b4e47nNvqm4bxqsRk47qfnWQrBPmyPsQH2LKfgM3kQHBHeP6zwF", + "address_index": 205, + "label": "", + "used": false + }, + { + "address": "77fsQEZKZTnVqvbUxR5CuCa7C4m5JgThCQjXVyFrbYYjJ93NS2FCV2MF9anmmh67tqF1kLAo55KcyPYdwkDqRoEKBiXMShh", + "address_index": 206, + "label": "", + "used": false + }, + { + "address": "775XriXoFVKUUwJVJeVwWBY9uyc3AJdbi591Ngt88LjmASgqM3cFxHKiSpSBsf9GFpifYWksQmEcQ6tAp8sJkFjFEJ2CtAD", + "address_index": 207, + "label": "", + "used": false + }, + { + "address": "72bwkqM4MSqCEo8V2jX8htJqXG8X2KkxX1eE7KPLeGws3e5JTAhwdXQYZNGSavw6jH53yyb27Qbj1XBfaaWUQxb1CKSBGwf", + "address_index": 208, + "label": "", + "used": false + }, + { + "address": "7462kHgpmM11YMh2zzmzZLRDfdCwCpUnPBWAFd3wYGb68vRskSd76qhBCfz73sVp4sjJPrrpyjKvtGMY6Nx9x3AaCKvGaQ7", + "address_index": 209, + "label": "", + "used": false + }, + { + "address": "7A1W1d1iz7RDUSiAQJyVqb1tm63tiytg96f2RKvdPQFYCnNR6bq7mUAAeaku1bKGGS8kFspAYokfx1c3mz1nqTZa7WXDDU6", + "address_index": 210, + "label": "", + "used": false + }, + { + "address": "77uU6eQ2sPU84ewpS1JnyVQJbrquaCqLnfHhKN9xiu5iBuF1YzfWwjDgSnkyn1p5jYAjgSKwX1TKB7CN8kaQeH8H6diqSN8", + "address_index": 211, + "label": "", + "used": false + }, + { + "address": "76VTNUmxgt13VRriX76s4C5jDqwa8vjurMjC6DKG3FW2MrEV9jw5Y54UEqmiFdZiwzCVGrUnxkHomaVSew9NRGwv18VNzr3", + "address_index": 212, + "label": "", + "used": false + }, + { + "address": "7Bdcm25dbbcgCce5ugZzZPGXFeCkG4bZzXWdjrmQg3oHP8wUK7DQzmFGPCTFuaCKzmjW5RjVyGm585BrJ8kB2btxT3mw9FK", + "address_index": 213, + "label": "", + "used": false + }, + { + "address": "78CGcdueNzVLHJ5URyBv8hZozb82RGaHpGjpqQ4qUs6wa4VAzQP8ZMpMe4yB7nPzBpfLqCYLCp47n25udQpgDPf11R9AHoQ", + "address_index": 214, + "label": "", + "used": false + }, + { + "address": "75GAs8XGdaj5aAgga7VA4gDzpfz7SHWemQFQJZ5c4VvnDBroe1d2uKKKs4nD6AATtcDEnnyNY9UGs9BfezMhphSa2FhBdgD", + "address_index": 215, + "label": "", + "used": false + }, + { + "address": "7BdHSTHJBzBhuFQW7jfpypiaQyg7BcTmhXHqSuQbWctF9BBZmi273MrGc651iVfFopGKEXgTNb4afEqBpJGUM69d4rT75vi", + "address_index": 216, + "label": "", + "used": false + }, + { + "address": "77UwgyX1JgRMCmjmkuPf7sEb4WDnfcUZmMDugfudgfMb23fReERhxcXPahkXxfsQDXY5qZ4sQP2Sm2csxTxfGbeoCu8pfR2", + "address_index": 217, + "label": "", + "used": false + }, + { + "address": "7ALnQA49k6nP8H9tZ5Tb13gGZyjWMv2BwB2eqLjEpponXirMnJqoE8UadwnYoh9yvgFvD6YdGP1VJ88PgHaK17qvHSrRGSZ", + "address_index": 218, + "label": "", + "used": false + }, + { + "address": "7B2x184sxYSJf3PJ7KTp3QLooitKnSQkfRKMRZ4CF5uHSQDjmds2XBcZQUnfk4Mtd8WUYpUARGNGXGpGpYpFcDj1DaqQnVB", + "address_index": 219, + "label": "", + "used": false + }, + { + "address": "77UbDWEy9rJ8WZtyCUsHwGazmbpgSxVQ7PEf1FYESUnCHFrcPN16kVH7tAydxkAyqZBdGnSF9QqeKjFVSr6Pscx25UUPeH8", + "address_index": 220, + "label": "", + "used": false + }, + { + "address": "7ARQjaUTSQdfmZdyjb1Tu3DH5M4BaUzdvg7vnBU1H1NUjRpFZgq75niKhnoHAKPAhWL6kjGHGYAEKSGvdURKERr79BmDa7e", + "address_index": 221, + "label": "", + "used": false + }, + { + "address": "7867ZbkMP7hFt5h31tbSqefshFc6AP6nrBAWfnehARnc1njUVRP3uwwf9EX8JbhCRmWy8H5VQK2TcQSm3mb5wiCf1MATP8N", + "address_index": 222, + "label": "", + "used": false + }, + { + "address": "7BixU543RBqjmzS2JKMEHhBTYoN7Ds2NyHaaY1NCKhwGiEGesJ5p5Z98bUiaTE1SzZ1r2n6hwzwRvWe4Ry6iVKnHPm9FZLy", + "address_index": 223, + "label": "", + "used": false + }, + { + "address": "74VsAdN5vFRNJgpKJbX6LaPRnWxBrGXWYBA5pKXSXetsKJFKMmcCVx2emtj1e21net7HYsuS5EKUU6MSpxHJMiUZ7nFvaTV", + "address_index": 224, + "label": "", + "used": false + }, + { + "address": "72YP8YfkDbdEUzYCsxCEdQBvYvwXfpYAjKoxfWdXGNP1PNNYNT81o2E3BWxM79niGLhsBr9BpQqDL1avjarhB8dsQxfT699", + "address_index": 225, + "label": "", + "used": false + }, + { + "address": "73UWx9RjSzL3Q2YAsv4L7vcg5JdsfPEGECGNH7ZzKvmrYUK79dHoHgqcKSNXrsvocEAnVk7Kbe4g4gLNcvSWEHwRKUHzPaL", + "address_index": 226, + "label": "", + "used": false + }, + { + "address": "79ziz1ViHTnjnn5conrZ82KFGi3wpL5Rv5gTDMrVjrB2FNfg5v6MBfZ6k4fuMN3vBngwJiWGx7myCNVRJ3cVs7hjLmMcKBu", + "address_index": 227, + "label": "", + "used": false + }, + { + "address": "78KEr3iN3fWZRuTMDAxyRN5v4DUgFTZ69csaiYoPm7EFRxpSZmiWbGz14un1gJ4xpNWyGzq2RmVw7WhVmWRx1xtF4t64CD9", + "address_index": 228, + "label": "", + "used": false + }, + { + "address": "7BcegbyFt3RNcY76tABJhYH1mmttf7VU1CbKbox9jrHm5BHEj5wigy64crRbNKg4KeikGZ8gmEyz9cJaKvx93gzi5DEEtnZ", + "address_index": 229, + "label": "", + "used": false + }, + { + "address": "78c4NvqYs6rhFf6L8Noey1VgnCXv4R3Sp7oX7B3tC1TCdVGe7s21UHZDK2m4Hy74hjMnJPVtzHA8zeSrNPBAVKY9RFes2St", + "address_index": 230, + "label": "", + "used": false + }, + { + "address": "77B2AXN95FFHeWfY8qBhHUNbrbmVCfk8edCMHmZnVFrQBXTUC9spdhA9QHny4Vz1AzihCgdg2xVB2RLjtVmBmWRX9XzRpKR", + "address_index": 231, + "label": "", + "used": false + }, + { + "address": "76gtUSS4hDqghZTBmQ1SEHWgsbtDiG1yQ4QbHzuqFdrJF4QzjT6pBnCdXCrGScHsKWU9qvtd2JYc2JDukiEWxi944vTk8s9", + "address_index": 232, + "label": "", + "used": false + }, + { + "address": "75G1wbDNyHRAnDPuL1HwngQNqVZJvywgu177W85wcXxUGdWDL2zH6osEwZz13FFQWgbCjv3eznkVVefPRHmQikA6NArkGBL", + "address_index": 233, + "label": "", + "used": false + }, + { + "address": "7AtFQZGCJz1K7wUiRnLvyQWHkAk17ntQRFmrqP2jiEuLPUKdp94GXkCe7w8iK94pQiNzzqR7YZdGMRfsC6TfjgLvTo8CJRg", + "address_index": 234, + "label": "", + "used": false + }, + { + "address": "79B7Y1YMaQR2a1Yg3edW9Neu73Vw9ctLCY4tywNzLuNKSqEbkYpmQKsDkeoRhLoM2gjQ7fG5HDNew5p7TTzFd7aTBFFyMHV", + "address_index": 235, + "label": "", + "used": false + }, + { + "address": "76Kn5Ee1wa3EoYNC96X7aXCcJSyWv2wLx3gHY5nnNxsqG5aX4AYxqvuYYw7RrTcS3DB312Z28jf4hU2FHwVxBM6QTiZoQML", + "address_index": 236, + "label": "", + "used": false + }, + { + "address": "78wbGe9teYC8qaA2kHuTmQik5TDbws86PibsaU4G1z9xNwABKVPgHGAJqDcUgXWq6DDwKTxf5Ypud3BTZTPnF56iKKYNx6n", + "address_index": 237, + "label": "", + "used": false + }, + { + "address": "75dnqgKoEKaixyiXW1uuzFPXxhv3eFMpVAfkavvc3hGJ4JJFEAiLyASNBV4qbwFcYpQkqg2i4mxusRyNWYS8GkDK2QdvNdm", + "address_index": 238, + "label": "", + "used": false + }, + { + "address": "79n4rYJxHFvTSZWAZUehZw31DwAMciirXRVUyMRJxLas56Ch1XaqCnFTS3Fm1AcPKkPHyRsQShd7TToD9LpYD9H181tzdca", + "address_index": 239, + "label": "", + "used": false + }, + { + "address": "78KpkKN5TAsaNJT6cnaFnq3nbAEzWuABr4FouLXajj2pQJhfuTSbEjY5tMdFey5RKAJVunZ99qPP2213haAXddAEGij2PvN", + "address_index": 240, + "label": "", + "used": false + }, + { + "address": "7BZgLkA5w8RC4n7P1avE3jMdhj5WjVcTySC3nR3wrLg8cE2iF7PAE2YEPNdHdf5MMaMBqou4PasYycsiDgmMPLqo5szqFok", + "address_index": 241, + "label": "", + "used": false + }, + { + "address": "73WrS367aBE5r3iQCB44u6HABeVT9PwYxRAeT6NKQkyhbtNRjaaLHV9cn51PBz39exdwWv8ErrMk7czeFYFUdyUwTm1kEg4", + "address_index": 242, + "label": "", + "used": false + }, + { + "address": "72patdRMrdA5W9uhMNxkVzYTmLe2Qhy4sK8U1R9hJ2JRSa58DDzn1dRH7eZwnnBDkqbemaSGUhGge8w7xYE95JLT4boz3zF", + "address_index": 243, + "label": "", + "used": false + }, + { + "address": "78xdrNuTZbsZ9PNWesM9XL2ft4oCJr142V38Rp6YuvMhWQ8wWJHr4Xb2N3P7XVCQUKNAvX3hMmn5fAr9dmcXbhFWU6sdYnn", + "address_index": 244, + "label": "", + "used": false + }, + { + "address": "78uUooNtNorgXZBxVBJdZq1Eaeyx9TSTM629LpMwQkUqFN9EqVhLFkiMXZPR3Usp3p98qRw32qpWoPpNhLMrpf4LCntpPvL", + "address_index": 245, + "label": "", + "used": false + }, + { + "address": "75yVxEDyRPD6LZS7Jhbqf5FJzvriitQ1yRkpAeqzsHRi83bbBnQjKEAbmvdwzzBg7wbW4rpoK2CMwHJNV4xW6r7uAoy1r5D", + "address_index": 246, + "label": "", + "used": false + }, + { + "address": "73jpi4BRNhbYAdGZYbiPUvBYH6j8TjLis7DxH6n2khXABDeTbBtwkBzfva9qN8skZaarDkTHWyY1yCWEy7XbFRrf3awq7zL", + "address_index": 247, + "label": "", + "used": false + }, + { + "address": "7824EZXq95618p3ZH2fjz47b5y9p2TmwDfoGJZgczCWtTGeiWqb1rBiPhmwkAVn1DGfwW1m3bLDwpd9YfRNR1CDKUwQFnRc", + "address_index": 248, + "label": "", + "used": false + }, + { + "address": "78mtxqodabZf7B4DQ2GcWqAoqWfUjV66WWCF3qLg9CnMNrh1eVuoA4CSuT9U3kBoTJ4rwnZZf49Cke7injaRLXMYL6fCKLu", + "address_index": 249, + "label": "", + "used": false + }, + { + "address": "7AkbCWu5V31HRpdgS5o3s1ViTYJSL4eiD3A8DyMxmesjUbiW7y9Kyr3AAcguK6nciA7Pj1y2Ls6JqXpuBztzvSAZHeWvvZs", + "address_index": 250, + "label": "", + "used": false + }, + { + "address": "77FJsBJUmfN6mMvX6qTR1PWGzMSbjB85eHqidDhsxk7kQigC1PmA4UtUHtoiGjTXcdUcaCgg7czhcX7fdZH422JN5G54EfJ", + "address_index": 251, + "label": "", + "used": false + }, + { + "address": "7BLCywzMZ9deYhZMzo1eGvGxCZfAYkvGiYKU2rApMU6VQP9YM5yZxGeZxhMMcpxufoLM1VxWR3rN9M5jWw8jQD6C7qjNyNi", + "address_index": 252, + "label": "", + "used": false + }, + { + "address": "73wTTUfkLVgANhiqYSgzTYMkqXrD2o7GaVcn86VhpuWrgVUpqmsZXTfTMCgxix6gn4jaBrggZeGF4TQco71QEkPx9swZySi", + "address_index": 253, + "label": "", + "used": false + }, + { + "address": "73x33FbueD9PwUoyEBhF9y4mJ2dE81A7hYojBPu48AwgBr9Dd7BWxZuhuQ6ANVzw9DZqHZVN8EdPYTLmuDiBy4gR8GXaJeS", + "address_index": 254, + "label": "", + "used": false + }, + { + "address": "78azRFqUGkRPWtuN8ibJMg1RqZZDjTRpdcgUFWmyteap6eQ1GhxPHzDhbDhMUWqqcW7wFQfCZGA68VCmEpGmHwMpJGA6znd", + "address_index": 255, + "label": "", + "used": false + }, + { + "address": "7Av2i8qTjuQXwrC6i6rFrY6dLf5naA8MEfMtqL12E19fdrk8wxjGhvshik6qL3wiieL39VBBa7QhJZLPRnjVsed5Pe2nor1", + "address_index": 256, + "label": "", + "used": false + }, + { + "address": "79qwF2b6r5VA9oCJwwX5TdPeGtUqkWfBTfivzQ5yRrWDiGNAnCPWc98dhufqonDjMce65HMrajDV94QPk4frvCGaKJqEVpD", + "address_index": 257, + "label": "", + "used": false + }, + { + "address": "7727zJpicZS9GqffKAcH5edUza65kxyxiNdRQKAPJ1WXgziGoyvTNHufFcFMmQmDZ8asD1tAoPiXx1FLsDA9Lhsz7oPwUHt", + "address_index": 258, + "label": "", + "used": false + }, + { + "address": "73gieRywxjcgfxBnJmS7fS6tr98AhkS5qiq2Ht2d2n1eAA2goDdTDrSMCJcV29Y28HPhhxwr5VbfRcHYKKmdzJSsF8J8tAC", + "address_index": 259, + "label": "", + "used": false + }, + { + "address": "74FqPECHeedafcyNaZRiXoVRPbM8kXd19BoRwes93oanLnhdzkuV2dZJLaV8NaF4nKL4vo8QYrjBc8gAqnzpgVUuQbb1C6H", + "address_index": 260, + "label": "", + "used": true + }, + { + "address": "75PQsYawoYfHQs9dJMzLsFNKxJgvTyLJhZK2PkiVWPYwiJuqWUcpGR7BAH3RXDEzc16dQyGEqfFkWRAvVUbHZXk7Dg1dHdj", + "address_index": 261, + "label": "", + "used": false + }, + { + "address": "7BSnKGBBcEZ74Fi9NEG2jXNf3SLy84TmJe5spszcSmcjcPSwQmtWjdYf7KLowaGLSoTruo6zjmmEzfp7VihcSvSPUGNyyi8", + "address_index": 262, + "label": "", + "used": false + }, + { + "address": "79QBvrVQGvYdaQauHUBBdxJqGapkMzoQJP31sLXmMYZuHjTJFEariB9gQ2dgYvVtfK8FdJ7covNFJNjSx9PDMPQNFUpBeVU", + "address_index": 263, + "label": "", + "used": true + }, + { + "address": "76zqvCgaqjdfbvtNp7ecYxDEBVTqfykR5USwmHmBE8Ny68RxWzAN9EQZkTbNTnhopaYsE5QV7rGKPWGQMsXDUE6b1qvQDUA", + "address_index": 264, + "label": "", + "used": false + }, + { + "address": "75KLTYoKwsTFGBMSHg8AhD8MTxP4oz9JK2YgSF8RAhPsFgnkrJFbqEpRVdFwceyVtUhq1xHagUyqBAFEXJ4oBGRvDc54YXa", + "address_index": 265, + "label": "", + "used": true + }, + { + "address": "74ap8eJA8GeZsRD4GsLzAb451AZJgcRShTEYTh9WHdk5LcLSqTeR7vMGqK3UiidpRShw7mfLUsXDV8yZG4UP2xBy4EFMg2u", + "address_index": 266, + "label": "(Untitled address)", + "used": true + } + ] + } +} diff --git a/tests/data/test_outputs/test_multiple_outputs-wallet-02-addresses-account-1.json b/tests/data/test_outputs/test_multiple_outputs-wallet-02-addresses-account-1.json new file mode 100644 index 0000000..471013b --- /dev/null +++ b/tests/data/test_outputs/test_multiple_outputs-wallet-02-addresses-account-1.json @@ -0,0 +1,15 @@ +{ + "id": 0, + "jsonrpc": "2.0", + "result": { + "address": "7BC3q5ogPCfTkBHZajDdkhSLxN3wSSULEN52Q2XzGebeetyG4oumiCHJjPpSyNvP6qR2idCYiUEqmHjKwc66fmcKN4dxW5u", + "addresses": [ + { + "address": "7BC3q5ogPCfTkBHZajDdkhSLxN3wSSULEN52Q2XzGebeetyG4oumiCHJjPpSyNvP6qR2idCYiUEqmHjKwc66fmcKN4dxW5u", + "address_index": 0, + "label": "(Untitled account)", + "used": true + } + ] + } +} diff --git a/tests/test_outputs.py b/tests/test_outputs.py new file mode 100644 index 0000000..d4c1695 --- /dev/null +++ b/tests/test_outputs.py @@ -0,0 +1,81 @@ +from decimal import Decimal +try: + from unittest.mock import patch, Mock +except ImportError: + from mock import patch, Mock +import responses + +from monero.daemon import Daemon +from monero.wallet import Wallet +from monero.backends.jsonrpc import JSONRPCDaemon, JSONRPCWallet + +from .base import JSONTestCase + +class OutputTestCase(JSONTestCase): + data_subdir = "test_outputs" + daemon_transactions_url = "http://127.0.0.1:38081/get_transactions" + wallet_jsonrpc_url = "http://127.0.0.1:38083/json_rpc" + + @responses.activate + def test_multiple_outputs(self): + daemon = Daemon(JSONRPCDaemon(host="127.0.0.1", port=38081)) + responses.add(responses.POST, self.wallet_jsonrpc_url, + json=self._read("test_multiple_outputs-wallet-00-get_accounts.json"), + status=200) + responses.add(responses.POST, self.wallet_jsonrpc_url, + json=self._read("test_multiple_outputs-wallet-01-query_key.json"), + status=200) + responses.add(responses.POST, self.wallet_jsonrpc_url, + json=self._read("test_multiple_outputs-wallet-02-addresses-account-0.json"), + status=200) + responses.add(responses.POST, self.wallet_jsonrpc_url, + json=self._read("test_multiple_outputs-wallet-02-addresses-account-1.json"), + status=200) + wallet = Wallet(JSONRPCWallet(host="127.0.0.1", port=38083)) + responses.add(responses.POST, self.daemon_transactions_url, + json=self._read("test_multiple_outputs-daemon-00-get_transactions.json"), + status=200) + tx = daemon.transactions( + "f79a10256859058b3961254a35a97a3d4d5d40e080c6275a3f9779acde73ca8d")[0] + outs = tx.outputs(wallet=wallet) + self.assertEqual(len(outs), 5) + self.assertEqual( + outs[0].stealth_address, + "d3eb42322566c1d48685ee0d1ad7aed2ba6210291a785ec051d8b13ae797d202") + self.assertEqual( + outs[1].stealth_address, + "5bda44d7953e27b84022399850b59ed87408facdf00bbd1a2d4fda4bf9ebf72f") + self.assertEqual( + outs[2].stealth_address, + "4c79c14d5d78696e72959a28a734ec192059ebabb931040b5a0714c67b507e76") + self.assertEqual( + outs[3].stealth_address, + "64de2b358cdf96d498a9688edafcc0e25c60179e813304747524c876655a8e55") + self.assertEqual( + outs[4].stealth_address, + "966240954892294091a48c599c6db2b028e265c67677ed113d2263a7538f9a43") + self.assertIsNotNone(outs[0].payment) + self.assertIsNone(outs[1].payment) # FIXME: isn't that change we should recognize? + self.assertIsNotNone(outs[2].payment) + self.assertIsNotNone(outs[3].payment) + self.assertIsNotNone(outs[4].payment) + self.assertEqual(outs[0].amount, outs[0].payment.amount) + self.assertEqual(outs[2].amount, outs[2].payment.amount) + self.assertEqual(outs[3].amount, outs[3].payment.amount) + self.assertEqual(outs[4].amount, outs[4].payment.amount) + self.assertEqual(outs[0].amount, Decimal(4)) + self.assertEqual(outs[2].amount, Decimal(1)) + self.assertEqual(outs[3].amount, Decimal(2)) + self.assertEqual(outs[4].amount, Decimal(8)) + self.assertEqual( + outs[0].payment.local_address, + "76Qt2xMZ3m7b2tagubEgkvG81pwf9P3JYdxR65H2BEv8c79A9pCBTacEFv87tfdcqXRemBsZLFVGHTWbqBpkoBJENBoJJS9") + self.assertEqual( + outs[2].payment.local_address, + "78zGgzb45TEL8uvRFjCayUjHS98RFry1f7P4PE4LU7oeLh42s9AtP8fYXVzWqUW4r3Nz4g3V64w9RSiV7o3zUbPZVs5DVaU") + self.assertEqual( + outs[3].payment.local_address, + "73ndji4W2bu4WED87rJDVALMvUsZLLYstZsigbcGfb5YG9SuNyCSYk7Qbttez2mXciKtWRzRN9aYGJbF9TPBidNQNZppnFw") + self.assertEqual( + outs[4].payment.local_address, + "7BJxHKTa4p5USJ9Z5GY15ZARXL6Qe84qT3FnWkMbSJSoEj9ugGjnpQ1N9H1jqkjsTzLiN5VTbCP8f4MYYVPAcXhr36bHXzP") diff --git a/tests/test_transaction.py b/tests/test_transaction.py index 3352dc6..4c1d944 100644 --- a/tests/test_transaction.py +++ b/tests/test_transaction.py @@ -52,7 +52,7 @@ class FiltersTestCase(unittest.TestCase): self.assertEqual(out1.transaction, self.tx2) self.assertEqual(out2.transaction, self.tx2) self.assertIn(self.json1['vout'][0]['target']['key'], repr(out1)) - self.assertFalse(out2 != OneTimeOutput(pubkey=self.json1['vout'][1]['target']['key'])) + self.assertFalse(out2 != OneTimeOutput(stealth_address=self.json1['vout'][1]['target']['key'])) self.assertIn('(index=25973289,amount=0E-12)', repr(self.oto1)) self.assertEqual(self.oto1, OneTimeOutput(index=25973289, amount=Decimal('0.000000000000')))