Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

improvement(ARRR): improve shielded transactions change notes handling in swaps #2331

Open
wants to merge 30 commits into
base: dev
Choose a base branch
from

Conversation

borngraced
Copy link
Member

@borngraced borngraced commented Jan 29, 2025

I found out that we can't spend them(change note) right away. This is because in Zcash, every note that you want to spend needs a nullifier - which is basically like a marker that shows if the note has been spent or not.
The problem is that change notes don't get their nullifier until after the original transaction is mined or so. So even though we might want to treat change notes just like regular received notes(the hack in previous PR), we can't, because they're missing this important nullifier until the transaction is confirmed on the blockchain.
I had originally thought we could save change notes as regular received notes, but I was wrong about this because of the missing nullifier issue.

Change notes are unspendable until confirmed

So, I implemented a mechanism that tracks transactions containing change notes and waits for their confirmations before allowing those notes to be used in new transactions.

I also found a bug in WASM walletdb impl which I've fixed in this PR.

cc @shamardy

@cipig
Copy link
Member

cipig commented Jan 29, 2025

tried to swap ARRR with this, but still getting same error

      {
         "event" : {
            "data" : {
               "error" : "taker_swap:1320] mm2src/coins/z_coin.rs:1233] z_coin:500] z_coin:483] GenTxError(SaveChangeNotesError(\"storage:206] NOT NULL constraint failed: received_notes.nf\"))"
            },
            "type" : "TakerFeeSendFailed"
         },
         "timestamp" : 1738160344119
      },

@borngraced borngraced changed the title fix(ARRR): allow storing empty nullifier for unspent/change notes fix(ARRR): require nullifier for only mined txs in WASM walletdb Jan 29, 2025
@borngraced
Copy link
Member Author

tried to swap ARRR with this, but still getting same error

      {
         "event" : {
            "data" : {
               "error" : "taker_swap:1320] mm2src/coins/z_coin.rs:1233] z_coin:500] z_coin:483] GenTxError(SaveChangeNotesError(\"storage:206] NOT NULL constraint failed: received_notes.nf\"))"
            },
            "type" : "TakerFeeSendFailed"
         },
         "timestamp" : 1738160344119
      },

@cipig #2331 (comment)

@borngraced borngraced changed the title fix(ARRR): require nullifier for only mined txs in WASM walletdb enhancement(ARRR): improve shielded transactions change notes handling in swaps Jan 30, 2025
@borngraced
Copy link
Member Author

@cipig can you please retry again? I've made some changes to this PR 🙏🏾

@borngraced borngraced force-pushed the fix-arrr-note-saving branch from f149bb3 to e735df9 Compare January 30, 2025 15:56
@borngraced borngraced changed the title enhancement(ARRR): improve shielded transactions change notes handling in swaps improvement(ARRR): improve shielded transactions change notes handling in swaps Jan 30, 2025
@cipig
Copy link
Member

cipig commented Jan 30, 2025

started a swap with https://sdk.devbuilds.komodo.earth/fix-arrr-note-saving/mm2_e735df9-linux-x86-64.zip
takerfee ARRR now worked fine, takerpayment failed though:

taker_swap:1700] mm2src/coins/z_coin.rs:1348] z_coin:572] client:878] Rpc(ResponseParseError(JsonRpcError { client_info: "coin: ARRR", request: JsonRpcRequest { jsonrpc: "2.0", id: 334, method: "blockchain.transaction.broadcast", params: [String("0400008085202f89000283aa22dd0800000017a91438b6fd31949ceef35e9ab3d8c25ec5755603e3ae8700000000000000006e6a4c6b6304381d9c67b17521020610f02dfb60f513b41b36221eb0b5c87377f0d48f6ed517848c7c2a793a40c0ac6782012088a914d31a8da756208b326a8294f90f8474f73d210da288210258a9e9b3332e186457ab8d91852fadb2f7bd9dd4d53f6813e5172ce8ec4f3c9cac6800000000b12732006bae22dd0800000001476c2687d8429860995e5ffee5b2c33b4e7de524ad686560599e787d4bc2d52c559d26f60c74a6696255d4bb69374e7234eae0d4ca337d34511b71e2f8d3e2178339f7d89effb8e07c088d9f59720370cff344fd1e995d6bcee157df4c4e19d6f4a8addde098cf8510dba764fec23959f7ede601ee64bb292c120fc2ccbe42dda669c33e817b1a5a0e6c467cf9262b92b39dc2efe62838d36553207b1e5f211cea05c662326b260291de0da2477a544a988f434504438e291c7a74f3219a04c52221626f89655745d2a6b1bff59307ff40b859413cc98be7c461f48b6c6e06150609f73420e1b34eda8d94e68df518ceff18c3d5e5998f31862632519ad4ea8594364d51c9c36b1ae841c591f7dbfa85947534056f176fe65c4086774840fbde80fe0643ec6325bd51f34a0c17ee01202398f5d3d214fe58d32eab90f96b80b1b4dc3de9ae93968a0eaea8f99d0da8a9fc9f9562f6442ca309af12914e244e3fc027243724e3be3baa08ecc8e8ad18707d54b4cd2380d590804456bff023830102352ac2546581ce8a0177ecd4de639f8bdd699bc977b664ab131ca6ee7f4c0866d6ec4e97799523eac8ceeeccd7f497abb590fceeb598e5f3166effdba72b874fd12b942827a91cf5c678a884ced816a779930cc009301098f07a972d86497958111d960175eaa25dc367107906fc15638aa503c870173cbe0ff862028ef31a0e976c4e72d55dc83eadf7504425619061e8b2f671acf84b4218a0874e5221f3fec84ce350db5f26621b65522dee3c14fb7f1014da99d38bd31687e6df65f09641d84c656be94d3c250ee1d875e6a972bc8748ae0d695b911e4a865050c12fae8a4802f410b8e65627d94f917a586dd87fb89a022ff16434100d997a6539e38f57d2cbc2c04ec9abfc51640d7257c1aa7b230648a91f116c23a996eb54453ae42f5cf074459f1a0086cb479f65f4b00b0c2c652ea508cb73ac553727dd726503666911da15dbb4abb614b2aa498473bf5cdc4481e045816dea13d79ce8f114262d50c1965f02a48a22bf5c46f6aa1a924e997858e8ede13a250a5b47cfee9d16e8617f5c356bf46fdfd1b7af1efe741f1325d485cf3e0a7c9d83c05f632e206d8fc7b28ad8c51a5602909e93a595b8932e40d593380143a2fce9be448bbd5e242d24748bad18ba2fdf48369c023b3ac0b0091e47d7245e6420beaee67d047e00bcb1f6426e28912cfd2042fe1e60f61a6ffed2c4d7a244c18d9202a9abb40954b15e29920431438b7e3ac298a8a6e701631397be6b1bd821c7b78251758f781b4cd37128e30ab0ac562d10160385eb40ba7efaf873911bcc2e34e2f12e71ee31a0ca3ec5fbe52369c7bc8aeade98ecd08d04d90fd3fd3d96d7633cb01433eae6b81a69965493518d4586d67e644a7aff39a7766eb8d90a353de0b429f4f3b8aa8ed78d9d82991d73ebf671df521afe529d0c350294af155c7dbda040cb5b45aaf2278316b8cec7781b9c449e6daec29460dcc967dd1c81047238fd5032a6dab0fc2fbde772062820386d842c81b1760c2fe566e587011e69be3cd548f3b82500d753b8e943b17ce8db2eda8560adbf2ceaba836f95a0b0adb56c456b098f29fcb90f4d68b4d7c3fb6afe6e34dc2d9cdacb0ec71c76f5efb1fe957505ab697715eeb5f5c85aa6a7ccad06fdee0427c00d21d5eb98c40e89f953e28758255559301af9ed85da232290c0f9a69d112edc5c315fc10a1f015d229be3abb4a82b6893ef35ff56993f243656001b366900ce7077160a21feb91201a4c2371286f4c64079eb6e6661b28a1c6f46cd2698b99265b7e24309510b452084dd4c34d043413a3948bea0e57b8acdcb9d32b85424e0b1eabf04c06a9ba6273107a01a074728211b3ecd80a90abe3d022ae0344e99aeb52c0eb9eb12ee56968c3c4425ed81cc997161ca0574b935c2c567fc37ed3ca9f65962c09104b9ea330f91dac32f69f0246a7b51b877ef9b60556dd19f61420c5d7ab04889bbc8743bfc04737b9a3628bfbbded722ae7ee08a48fda4c962e06a13867ccfd715f7dc7470958bd9cd12a6119420cdaba817d776736cf0429600abc4df8ceb9d7598c6ed1460f6b88a65359d3a37b866aaba9d6d3fdef612af0d104b0c97e24a8c0e0ac133cb120def1665f0504358fe9bc096587d817ec1b2c21365a092d9f2be9948a27096ba54d57a307048b35337f2d557a9ecd40202acafa5e754c5495cb312be2b6a44e34b95dba6cf8022a89f871ec62ff34c37d16aecc29211188f25c5d309266ba71bcb506b71506bbcaa68e14a3e9f3e5f93bbf20a4d9e6c16c26e9cc278844c0a32403b63c24806688cd149b5804a439f08ce1dbfb1c477f5a740b25b3f9e5882f74bda7898dbcfc4b89c4a937e3aca2104883f1383011cb8e839cb05251c481e265cb01dcc8bf08b1f58d528a9b105db958997217a91142893a26f9c3dd3f8f806e4c02bda5f50eb84aa6ad64973d0e299306f6a317414437f6b7fefd36c32b3c27f0f456b9fadd20b7ae035b169b2b1b4d131e80150c95a2b69def1d7198ba6e49b0edd646f1c4991d3b7f5b8cab56fc931a2d2558ba33f91902686fd6a6eda2fb9cab545cb2b61558e14712e29f912a6ba2437148aea17f6669a9eeff94c9b079ab2dc9266b751471d980ba808ebf77eeed09de300684a1b7ad9ffb2f2854d09583b1c10f041208c8725ea0fea98181bca26bce1aae67e08e8309d360ed72693deec0de26aeb08ee5dc53e2bae44081971999f5a07f34a2ffdca6cf75a110d4f56d4f507b04dcaedaf2133ac97bb4a6e31197cc7dce8c9d0ddc16a996258f2249aa03ae52ffa63f27119dd4ac295b267305a38204fbb96bb21d0120fc4b2963c02f8752189c8b67f827ca38dccaa97d49faeafb1fb964e730d6153f50946e9f4762c36a8a3d12feac413b6bdc744a7f7f6e03d5b711694243d45111a4cd0028761f7712e833f92b10431ddd0002ba55c6e953d68954c5bd0bf5e561fc261b0684d661d1d58f0a008a52496f3a30a8e85c562aa625d2adf47e3cb2079d0e374a39630421b9ef55fc28944b9f753c214e03a59f890478a48a6aca115bc5607551f1d88578f4bdbb3f3bad8efa27c0c540f832a252c07edb21c9b7477249969a0ea73acffdaf03e1595a3923de5a963cc5bee0f5c75b7f54bf4ef1c18a833f81e1194cece226633dc1521c627078b770003791a6e5043a2c105dfff2c4a483ad7cabb1a9f3249f9796db9c7a4e1f1d3cdc107eac1165604a6e443d557d187ff68de9008a0e0b832cb99d708ab0728e107")] }, error: Response(electrum1.cipig.net:20008, Object({"code": Number(1), "message": String("the transaction was rejected by network rules.\n\n\n[0400008085202f89000283aa22dd0800000017a91438b6fd31949ceef35e9ab3d8c25ec5755603e3ae8700000000000000006e6a4c6b6304381d9c67b17521020610f02dfb60f513b41b36221eb0b5c87377f0d48f6ed517848c7c2a793a40c0ac6782012088a914d31a8da756208b326a8294f90f8474f73d210da288210258a9e9b3332e186457ab8d91852fadb2f7bd9dd4d53f6813e5172ce8ec4f3c9cac6800000000b12732006bae22dd0800000001476c2687d8429860995e5ffee5b2c33b4e7de524ad686560599e787d4bc2d52c559d26f60c74a6696255d4bb69374e7234eae0d4ca337d34511b71e2f8d3e2178339f7d89effb8e07c088d9f59720370cff344fd1e995d6bcee157df4c4e19d6f4a8addde098cf8510dba764fec23959f7ede601ee64bb292c120fc2ccbe42dda669c33e817b1a5a0e6c467cf9262b92b39dc2efe62838d36553207b1e5f211cea05c662326b260291de0da2477a544a988f434504438e291c7a74f3219a04c52221626f89655745d2a6b1bff59307ff40b859413cc98be7c461f48b6c6e06150609f73420e1b34eda8d94e68df518ceff18c3d5e5998f31862632519ad4ea8594364d51c9c36b1ae841c591f7dbfa85947534056f176fe65c4086774840fbde80fe0643ec6325bd51f34a0c17ee01202398f5d3d214fe58d32eab90f96b80b1b4dc3de9ae93968a0eaea8f99d0da8a9fc9f9562f6442ca309af12914e244e3fc027243724e3be3baa08ecc8e8ad18707d54b4cd2380d590804456bff023830102352ac2546581ce8a0177ecd4de639f8bdd699bc977b664ab131ca6ee7f4c0866d6ec4e97799523eac8ceeeccd7f497abb590fceeb598e5f3166effdba72b874fd12b942827a91cf5c678a884ced816a779930cc009301098f07a972d86497958111d960175eaa25dc367107906fc15638aa503c870173cbe0ff862028ef31a0e976c4e72d55dc83eadf7504425619061e8b2f671acf84b4218a0874e5221f3fec84ce350db5f26621b65522dee3c14fb7f1014da99d38bd31687e6df65f09641d84c656be94d3c250ee1d875e6a972bc8748ae0d695b911e4a865050c12fae8a4802f410b8e65627d94f917a586dd87fb89a022ff16434100d997a6539e38f57d2cbc2c04ec9abfc51640d7257c1aa7b230648a91f116c23a996eb54453ae42f5cf074459f1a0086cb479f65f4b00b0c2c652ea508cb73ac553727dd726503666911da15dbb4abb614b2aa498473bf5cdc4481e045816dea13d79ce8f114262d50c1965f02a48a22bf5c46f6aa1a924e997858e8ede13a250a5b47cfee9d16e8617f5c356bf46fdfd1b7af1efe741f1325d485cf3e0a7c9d83c05f632e206d8fc7b28ad8c51a5602909e93a595b8932e40d593380143a2fce9be448bbd5e242d24748bad18ba2fdf48369c023b3ac0b0091e47d7245e6420beaee67d047e00bcb1f6426e28912cfd2042fe1e60f61a6ffed2c4d7a244c18d9202a9abb40954b15e29920431438b7e3ac298a8a6e701631397be6b1bd821c7b78251758f781b4cd37128e30ab0ac562d10160385eb40ba7efaf873911bcc2e34e2f12e71ee31a0ca3ec5fbe52369c7bc8aeade98ecd08d04d90fd3fd3d96d7633cb01433eae6b81a69965493518d4586d67e644a7aff39a7766eb8d90a353de0b429f4f3b8aa8ed78d9d82991d73ebf671df521afe529d0c350294af155c7dbda040cb5b45aaf2278316b8cec7781b9c449e6daec29460dcc967dd1c81047238fd5032a6dab0fc2fbde772062820386d842c81b1760c2fe566e587011e69be3cd548f3b82500d753b8e943b17ce8db2eda8560adbf2ceaba836f95a0b0adb56c456b098f29fcb90f4d68b4d7c3fb6afe6e34dc2d9cdacb0ec71c76f5efb1fe957505ab697715eeb5f5c85aa6a7ccad06fdee0427c00d21d5eb98c40e89f953e28758255559301af9ed85da232290c0f9a69d112edc5c315fc10a1f015d229be3abb4a82b6893ef35ff56993f243656001b366900ce7077160a21feb91201a4c2371286f4c64079eb6e6661b28a1c6f46cd2698b99265b7e24309510b452084dd4c34d043413a3948bea0e57b8acdcb9d32b85424e0b1eabf04c06a9ba6273107a01a074728211b3ecd80a90abe3d022ae0344e99aeb52c0eb9eb12ee56968c3c4425ed81cc997161ca0574b935c2c567fc37ed3ca9f65962c09104b9ea330f91dac32f69f0246a7b51b877ef9b60556dd19f61420c5d7ab04889bbc8743bfc04737b9a3628bfbbded722ae7ee08a48fda4c962e06a13867ccfd715f7dc7470958bd9cd12a6119420cdaba817d776736cf0429600abc4df8ceb9d7598c6ed1460f6b88a65359d3a37b866aaba9d6d3fdef612af0d104b0c97e24a8c0e0ac133cb120def1665f0504358fe9bc096587d817ec1b2c21365a092d9f2be9948a27096ba54d57a307048b35337f2d557a9ecd40202acafa5e754c5495cb312be2b6a44e34b95dba6cf8022a89f871ec62ff34c37d16aecc29211188f25c5d309266ba71bcb506b71506bbcaa68e14a3e9f3e5f93bbf20a4d9e6c16c26e9cc278844c0a32403b63c24806688cd149b5804a439f08ce1dbfb1c477f5a740b25b3f9e5882f74bda7898dbcfc4b89c4a937e3aca2104883f1383011cb8e839cb05251c481e265cb01dcc8bf08b1f58d528a9b105db958997217a91142893a26f9c3dd3f8f806e4c02bda5f50eb84aa6ad64973d0e299306f6a317414437f6b7fefd36c32b3c27f0f456b9fadd20b7ae035b169b2b1b4d131e80150c95a2b69def1d7198ba6e49b0edd646f1c4991d3b7f5b8cab56fc931a2d2558ba33f91902686fd6a6eda2fb9cab545cb2b61558e14712e29f912a6ba2437148aea17f6669a9eeff94c9b079ab2dc9266b751471d980ba808ebf77eeed09de300684a1b7ad9ffb2f2854d09583b1c10f041208c8725ea0fea98181bca26bce1aae67e08e8309d360ed72693deec0de26aeb08ee5dc53e2bae44081971999f5a07f34a2ffdca6cf75a110d4f56d4f507b04dcaedaf2133ac97bb4a6e31197cc7dce8c9d0ddc16a996258f2249aa03ae52ffa63f27119dd4ac295b267305a38204fbb96bb21d0120fc4b2963c02f8752189c8b67f827ca38dccaa97d49faeafb1fb964e730d6153f50946e9f4762c36a8a3d12feac413b6bdc744a7f7f6e03d5b711694243d45111a4cd0028761f7712e833f92b10431ddd0002ba55c6e953d68954c5bd0bf5e561fc261b0684d661d1d58f0a008a52496f3a30a8e85c562aa625d2adf47e3cb2079d0e374a39630421b9ef55fc28944b9f753c214e03a59f890478a48a6aca115bc5607551f1d88578f4bdbb3f3bad8efa27c0c540f832a252c07edb21c9b7477249969a0ea73acffdaf03e1595a3923de5a963cc5bee0f5c75b7f54bf4ef1c18a833f81e1194cece226633dc1521c627078b770003791a6e5043a2c105dfff2c4a483ad7cabb1a9f3249f9796db9c7a4e1f1d3cdc107eac1165604a6e443d557d187ff68de9008a0e0b832cb99d708ab0728e107]")})) }))

the transaction was rejected by network rules
likely because the change from takerfee was not confirmed when takerpayment was sent
this is known behavior though, it was like that all the time

@cipig
Copy link
Member

cipig commented Jan 30, 2025

@borngraced
Copy link
Member Author

image second swap with https://sdk.devbuilds.komodo.earth/fix-arrr-note-saving/mm2_13d1dd4-linux-x86-64.zip worked fine

thanks, does this fix the original issue?

@cipig
Copy link
Member

cipig commented Jan 30, 2025

thanks, does this fix the original issue?

yes, the last commits fixed the issue #2331 (comment)

@smk762 smk762 requested review from smk762 and cipig February 3, 2025 03:34
@cipig
Copy link
Member

cipig commented Feb 3, 2025

ARRR change from swaps is not added back to balance
only restart fixes ARRR balance
waiting for a fix

@borngraced
Copy link
Member Author

borngraced commented Feb 3, 2025

ARRR change from swaps is not added back to balance only restart fixes ARRR balance waiting for a fix

Let's try the latest build again 9a76c1b

Please provide the log file as well. thanks

Comment on lines 2455 to 2457
pub fn new_with_unspendable(spendable: BigDecimal, unspendable: BigDecimal) -> CoinBalance {
CoinBalance { spendable, unspendable }
}
Copy link
Member

@onur-ozkan onur-ozkan Feb 3, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just my opinion, not a game-changer blocker:

It doesn't feel right to have these functions as CoinBalance fields are already pubed and it doesn't have too many fields.

The use of

let _ = CoinBalance {
    spendable,
    unspendable
};

seems more clean than

CoinBalance::new_with_unspendable(x, y)

because we can't know what is the implementation detail behind new_with_unspendable.

@shamardy shamardy requested a review from dimxy February 3, 2025 10:37
@dimxy
Copy link
Collaborator

dimxy commented Feb 17, 2025

imagine you have a single ARRR UTXO, then you start a swap, trying to sell some ARRR ARRR takerfee is sent... then ARRR takerpaymet needs to use the change from takerfee... but if takerfee is not confirmed by the time takerpayment needs to be sent, then the change is not visible to mm2... so i assume vin is empty because there are no UTXOs to use... kind of expected result... but i thought the purpose of this PR was to change exactly that

This tx is okay by the look of it (absence of transparent vins is normal if a tx has a shielded spend).
Maybe there is more info in the komodo debug.log around that time (could you plz search for txid 4498a4534bad9e0406822ad195bce306baa862a4f4bae3f469bbfd70ac8e88c7 and/or 'CheckTransaction' in the debug.log - sometimes errors are logged w/o txid)

@cipig
Copy link
Member

cipig commented Feb 17, 2025

This tx is okay by the look of it (absence of transparent vins is normal if a tx has a shielded spend).
Maybe there is more info in the komodo debug.log around that time (could you plz search for txid 4498a4534bad9e0406822ad195bce306baa862a4f4bae3f469bbfd70ac8e88c7 and/or 'CheckTransaction' in the debug.log - sometimes errors are logged w/o txid)

the debug.log of ARRR on the electrums does not contain "4498a4534bad9e0406822ad195bce306baa862a4f4bae3f469bbfd70ac8e88c7"

found this entry

debug.log.3.gz:2025-02-14 13:05:55 ERROR: ContextualCheckTransaction(): transaction 7abf122c58608625f3ca866e7a67238f1af06408af48ceeb22f132003fd800ed is expired, expiry block 3308274 vs current block 3308277
debug.log.3.gz:2025-02-14 13:05:55 ERROR: AcceptToMemoryPool: ContextualCheckTransaction failed

but it's a different txid

@dimxy
Copy link
Collaborator

dimxy commented Feb 17, 2025

debug.log.3.gz:2025-02-14 13:05:55 ERROR: ContextualCheckTransaction(): transaction 7abf122c58608625f3ca866e7a67238f1af06408af48ceeb22f132003fd800ed is expired, expiry block 3308274 vs current block 3308277
debug.log.3.gz:2025-02-14 13:05:55 ERROR: AcceptToMemoryPool: ContextualCheckTransaction failed

but it's a different txid

BTW Looks like the librustcash sets DEFAULT_TX_EXPIRY_DELTA to 20 whereas the komodo code sets it as 200. Should not it be changed for us @borngraced?

@dimxy
Copy link
Collaborator

dimxy commented Feb 17, 2025

7abf122c58608625f3ca866e7a67238f1af06408af48ceeb22f132003fd800ed

it's a different tx.
The one in the error attached has "expiryheight": 3308511

No more 'CheckTransaction' logs?

@borngraced
Copy link
Member Author

borngraced commented Feb 17, 2025

debug.log.3.gz:2025-02-14 13:05:55 ERROR: ContextualCheckTransaction(): transaction 7abf122c58608625f3ca866e7a67238f1af06408af48ceeb22f132003fd800ed is expired, expiry block 3308274 vs current block 3308277
debug.log.3.gz:2025-02-14 13:05:55 ERROR: AcceptToMemoryPool: ContextualCheckTransaction failed

but it's a different txid

BTW Looks like the librustcash sets DEFAULT_TX_EXPIRY_DELTA to 20 whereas the komodo code sets it as 200. Should not it be changed for us @borngraced?

but I don't think the expiry height is causing the current bug(20/200 expiry looks long enough) and I can confirm the issue is no longer related to locked note

@cipig can you please make a swap with all notes to stimulate wait for previous tx to be confirmed to TakerPayment and show the log output. TakerPayment will correctly wait for any previous tx that produced a change needed to gen tx or not if balance is enough.

@cipig
Copy link
Member

cipig commented Feb 17, 2025

@cipig can you please make a swap with all notes to stimulate wait for previous tx to be confirmed to TakerPayment and show the log output. TakerPayment will correctly wait for any previous tx that produced a change needed to gen tx or not if balance is enough.

Not sure what you mean... this swap #2331 (comment) was done with latest mm2 from this branch

as you can see it didn't wait for confirmation of takerfee... it tried to send takerpayment while takerfee had 0 confirmations

@borngraced
Copy link
Member Author

borngraced commented Feb 17, 2025

@cipig can you please make a swap with all notes to stimulate wait for previous tx to be confirmed to TakerPayment and show the log output. TakerPayment will correctly wait for any previous tx that produced a change needed to gen tx or not if balance is enough.

Not sure what you mean... this swap #2331 (comment) was done with latest mm2 from this branch

as you can see it didn't wait for confirmation of takerfee... it tried to send takerpayment while takerfee had 0 confirmations

it's not going to wait for taker_fee confirmation if your spendable balance can cover the next tx.. also change from taker_fee will remained locked until swap is Finished or needed for next tx which is why we have the this log(cleanup) after the transaction is Finished

15 14:17:52, coins::z_coin:1680] INFO [b7016733-639a-43b9-8dd0-9b7b11f8a6a3] Running swap cleanup for ARRR 15 14:17:52, coins::z_coin:1695] INFO Confirming tx "9bacb8aee6a22de81a85feeded7b7086b092402f4d63f81f2df41f07ac54c8f7" 15 14:17:52, coins::utxo::rpc_clients:130] INFO Waiting for tx 9bacb8aee6a22de81a85feeded7b7086b092402f4d63f81f2df41f07ac54c8f7 confirmations, now 0, required 2, requires_notarization true 15 14:18:07, coins::utxo::rpc_clients:130] INFO Waiting for tx 9bacb8aee6a22de81a85feeded7b7086b092402f4d63f81f2df41f07ac54c8f7 confirmations, now 0, required 2, requires_notarization true 15 14:18:22, coins::utxo::rpc_clients:130] INFO Waiting for tx 9bacb8aee6a22de81a85feeded7b7086b092402f4d63f81f2df41f07ac54c8f7 confirmations, now 0, required 2, requires_notarization true 15 14:18:37, coins::utxo::rpc_clients:130] INFO Waiting for tx 9bacb8aee6a22de81a85feeded7b7086b092402f4d63f81f2df41f07ac54c8f7 confirmations, now 1, required 2, requires_notarization true 15 14:18:52, coins::utxo::rpc_clients:130] INFO Waiting for tx 9bacb8aee6a22de81a85feeded7b7086b092402f4d63f81f2df41f07ac54c8f7 confirmations, now 1, required 2, requires_notarization true 15 14:19:07, coins::utxo::rpc_clients:130] INFO Waiting for tx 9bacb8aee6a22de81a85feeded7b7086b092402f4d63f81f2df41f07ac54c8f7 confirmations, now 1, required 2, requires_notarization true 15 14:19:22, coins::utxo::rpc_clients:130] INFO Waiting for tx 9bacb8aee6a22de81a85feeded7b7086b092402f4d63f81f2df41f07ac54c8f7 confirmations, now 1, required 2, requires_notarization true 15 14:19:37, coins::utxo::rpc_clients:130] INFO Waiting for tx 9bacb8aee6a22de81a85feeded7b7086b092402f4d63f81f2df41f07ac54c8f7 confirmations, now 1, required 2, requires_notarization true 15 14:19:52, coins::utxo::rpc_clients:130] INFO Waiting for tx 9bacb8aee6a22de81a85feeded7b7086b092402f4d63f81f2df41f07ac54c8f7 confirmations, now 1, required 2, requires_notarization true 15 14:20:07, coins::utxo::rpc_clients:130] INFO Waiting for tx 9bacb8aee6a22de81a85feeded7b7086b092402f4d63f81f2df41f07ac54c8f7 confirmations, now 1, required 2, requires_notarization true

So if TakerPayment needs change from previous tx then it will wait for confirmations.

@cipig
Copy link
Member

cipig commented Feb 17, 2025

So if TakerPayment needs change from previous tx then it will wait for confirmations.

OK, then it means the reason why those 2 swaps failed is something else.

@cipig
Copy link
Member

cipig commented Feb 17, 2025

did a swap with a different ZHTLC coin, which failed with

taker_swap:1719] mm2src/coins/z_coin.rs:1354] z_coin:570] z_coin:428] GenTxError(NeededPrevTxConfirmed("Error while waiting for tx confirmation needed to generate new tx: rpc_clients:112] Waited too long until 1739824374 for transaction ffb0b923458414bd5c948636201c172b2b303bb42a4df44b1c848de26434afab to be confirmed 3 times"))

shows that mm2 indeed waits for takerfee to be confirmed before it sends takerpayment
it is 100% sure that i had a single UTXO before starting the swap because it's a new coin and i got some in a single tx to test it

this is the entire log file... look at the end... the new ZHTLC coin has the ticker ZDEEX
2025-02-17-16-47-35.kdf.log

question: why does it wait for 3 confirmations on takerfee? one would be enough to see the change...
ZDEEX has "required_confirmations": 3 set in coins file

@cipig
Copy link
Member

cipig commented Feb 17, 2025

tried a new swap, also with ZDEEX
this time it failed on takerpayment with totally different error

taker_swap:1719] mm2src/coins/z_coin.rs:1354] mod:717] client:885] Rpc(ResponseParseError(JsonRpcError { client_info: "coin: ZDEEX", request: JsonRpcRequest { jsonrpc: "2.0", id: 1337, method: "blockchain.transaction.broadcast", params: [String("0400008085202f8900025ebaba1d0000000017a9141de04f25b9e3fba8903d7962a51bac44238e1c9a8700000000000000006e6a4c6b63043ec3b367b175210318506930e5302d8c5a3d4a73b640799d3d0076547c297fc2f5e6cf4ec73cd1bcac6782012088a9148ee0d666e9e7e9548a3795ce5424ee4087271f46882103a33d84d3c55368df90ff346ab53db73f5def3484df46e948a5218ae1cc254ce6ac680000000059bd010046beba1d000000000121452aa4d17c0c1c9cb03eeb44a9a1cde259c4fb9c778a87fd4fa598885d991b749438677cc8bfadaeaeff4efbf5a3224e293e5713fa424f2bf1e34cb3841965bf39386fa7b668a6d31ed18cbf7704bae552cc0795e5eeb510714d0cd18d6ac1ad00d885fedc9b594d5e4bc5366d4a12f6b20ee64faed6af86e1ec2b0ae25e2f9166e765d6d4773dc7353727b095cb91624ec91e0b71ffbdc4d974da4fea27066d97f75e0e8d28e25a1002b4f57454d19416769ed3ce24ec718ac5e277864788cd288373ffb2310d7a5d1adfcf171cb270b141d79c1cc9ee23dc9775907ea8e4128b0151e3b41630de8c59a32e7beb5b0c65881a6f5353d151efe43f3bae32d6faae336600030ee876ad4b106d06fa5fb0be08cdfbd7af0842e54b55594cb285ee5127fb994ea1d8b6608452fcdf8896094da4c4afd65e9a2f1bdacc6bcc2041d61c2b98584a27818f71c946f4bb04112ecd8fe85fd7252a7afa08db61b338177f8cf562ea29371e3600fd810a83e446993240ffb8619320b8cedc0781e7070b0233bb29e01107cdd6603507ab8ac9c7dfd5a278b6d159f83b082e6965d19c010773b2dc33b0ab8313259b8dce42e16b8812f41e4ebed9ceca508abae784ef4718e8091e58c8784d65e1c4301962bfb42ebe98139b061115d0874e53f23ad2fe9e42fcd84011cbedef8d1be2255a3e6af6797b490840bc443b3ee3761113d8560a5edde7d2efed8b991224efa0c1892279654d51db594e634427df56c6701c15efab4a5f866cff0dbc8a99ad547af826937cdf0aad51239cb4ee691fbc9c796108995a34a7332494f22ff513dafcabb452d851fe629f70e8f3a22b7e5f243e04630743de3045900b8eab34c8cc9e5ec77358a4820ac7f7080fbfcedf6b30adb43e1e42617b4bca2a5e44c9d3cb4c8f701da117b35ba29786a354ff5994a8977703cd633fd5862990d10c51ac2f9c9f290ec01b30590f44ec8860c8f1cd5ab9543afc3f2c777f6909f65ffcc42093e02b01045581a26510046a4b240ae171a6afea6b157456d755d1e6b2cf4938b6fc2f5b25e65abe8e64fc678a9a5d82f0f13dae7b2a1ea7d081578a625561022f86639ca5e0f1c09544417d788775aa7c67d92082bddc603f6e7a3bfd251ce6b3415df1a77401ae3c3bbe3e3f86192f9932861916c055eb1656186139e3d8768db2c004987205bf801f4f80ce0e8fafc434217f6608fb0ea336ba59c03c70ef541215bb50b4214a20c07f395cea9b3abfd84f2bfcc6f1aff3a8e7eddc67618ec84278a2e37e5bc893cd4665b0dff6c3dba42e2a390f17c743a48615877fe47f8023c1e4119b20e94bc6a568bb5c85ec2cd5367df94b453c2e3d13a253759f742755bfbc421ed0174f7c747ff3c0792f1cfe672596d7cae7fc86bbef15d21d2aa2bde5d979e2f19cde9886671d992b889f5720cf251a248f820e6d15a1533f878662dbc248ca2b032720fea7f114744b13bdd8a9fa7497f3dcfffba65dbfb77ff33542ff45a282ff35f07192f35cd96bd8306cfe9ed9822d12c2d73aeecfaade3d210e416ce7aa28ffffd9c1b14642cccc6cbbcd9833224f2fc78d9271da6ffaaa80985acc8bc809826060ec84a91b86b9533526ebf608698c9305a41e2b89c395077d60941f512a6f5ee353cf967dfdc8ea2b45b9e1c12f951ac1854dbea6289f235e0b865125138244a33a667b34fa84ff1093ef067e7855e6b9b3bf8cceb21ab02d0b67533e2a13c7e0d8301b73150138abce7db272a724051d143671607ba0878365b3963067a06c1c51282a6718494c44b9a9aef002b2a2a775006eed9cc3e9d4c1f245c9582dccd669c88fb9f47c5e3075a6bdb858c4fba7e9f5cd0286b0893d062b842aafe410363b429d3999f70cb80a2695d3d4f3b457674557b30b810c893fa8fff8a34f7bcf6b00fd09c99023db1c89c398187f9ae092132d67faa8097f92053d0e568a728ca71673dd368393dad4ea4e02eb155c089e366d0843ca84dbb2028200ee7a108ccddfaa1711e7c2cc86b440a12d8fc8ed784d2bd3319adb8290f9036cf8761bef63e721004d53ddd9048bc8a498e212094cd7aa1a9c4099dfec49c3250b465f64df2fcf583ae2edc57a398e40c30aa7542d030731a889b8104d5f057054647e17a369c3c35f29326aa3799ed830fe389dc5fe77330e156212bd1abc06e6344ea131b0732ca3a5ba3340743e770bbe38d2ac4a4fec629084e4965e731b1366c793f8f0073796a50c9dc681532bd68f3cf2a3d3bcddfa39ef7cde2278a7cb858945372f4df4c9fb99748181790a352341e00bb1bdb2950169b1dccf5b68635f71f2b182a25757095135e9c49a5563dcafe48ebe4d71b94106892b909cfbca228e74b0ae819a958a8d2c9b491d1a297c2f5b648ba08c7fe5090cb6f81f321a39a80bb2c720de0683d4d88aa7a46501dbd6c888e2795177818184e275b5b6e2a66b562f2e81ba6b69c8d642fe8a2b9b8170736820cffaffc9083be841bbce8c4706441eb59ac2d224730ea514d4f4e0d46f036321cc70f08dd2c75e5f7fd6d56c2b3b196b333dbf833397e9bba2915786f265d0b10456930fb513edd335673a4e0e8b9d33db12ad6841307c636766ac0736895cff44576a0e7a3145cacb76e2a9bc771b37a8ea9437d91d14091efc7422569919c0669e598a8611bd6fa01c7fc07de0fa7d4127294ca5523dda059e2074f49cf1285526831951e60522c978a9643ac0b85dd39f9913c5699a58f8b00273d117a63bb53419e7adc134a6c42194ed9777aa9f432398a892c901e35a0d6d5bf5ed8c4d8f6c9911c9ed9f2d7c7531c8e0fe815ae282d472223c0e7ab99b51137b8e250a658838b747a04ad131c883e79af71580979d5fa919806ae12277185d38edde6f08ed7253d2a7bed6cfe82309d0b503a83afbd87cececa2a1e35838f81eb7318678b8d0e92211d508e8f737633261726ede06b36a104c10a4fa89b4fdc5079fcd4087ebbe883ddc5ef1a556439ec2a98824f4e54f76d843d93586f09201c2cb79e0c7a3e2aae3adf6211b87498499ef8bf072a97ed39f0587fecae35f5a40f2198aa328f85f305b7e80b2c958f5ebf118eeee0e53fea754967211c94b48803e14370504c3c7e3d08ff3843ac7671e84945633af069c58170b4c0ceae149adf502dcfa7f5805e9eb921a95a571992ecd23816a389c5801806a4feec7b387089600e17f040f8090349e47d60186a184208cc43a6d92892f908ceeea8923fdf6d7183b1e0afc1643e299ecfc0d885f950b9514371fea2a7d96f0c38f3b61895a0306")] }, error: Response(electrum.zdeex.org:50005, Object({"code": Number(1), "message": String("the transaction was rejected by network rules.\n\n18: bad-txns-joinsplit-requirements-not-met\n[0400008085202f8900025ebaba1d0000000017a9141de04f25b9e3fba8903d7962a51bac44238e1c9a8700000000000000006e6a4c6b63043ec3b367b175210318506930e5302d8c5a3d4a73b640799d3d0076547c297fc2f5e6cf4ec73cd1bcac6782012088a9148ee0d666e9e7e9548a3795ce5424ee4087271f46882103a33d84d3c55368df90ff346ab53db73f5def3484df46e948a5218ae1cc254ce6ac680000000059bd010046beba1d000000000121452aa4d17c0c1c9cb03eeb44a9a1cde259c4fb9c778a87fd4fa598885d991b749438677cc8bfadaeaeff4efbf5a3224e293e5713fa424f2bf1e34cb3841965bf39386fa7b668a6d31ed18cbf7704bae552cc0795e5eeb510714d0cd18d6ac1ad00d885fedc9b594d5e4bc5366d4a12f6b20ee64faed6af86e1ec2b0ae25e2f9166e765d6d4773dc7353727b095cb91624ec91e0b71ffbdc4d974da4fea27066d97f75e0e8d28e25a1002b4f57454d19416769ed3ce24ec718ac5e277864788cd288373ffb2310d7a5d1adfcf171cb270b141d79c1cc9ee23dc9775907ea8e4128b0151e3b41630de8c59a32e7beb5b0c65881a6f5353d151efe43f3bae32d6faae336600030ee876ad4b106d06fa5fb0be08cdfbd7af0842e54b55594cb285ee5127fb994ea1d8b6608452fcdf8896094da4c4afd65e9a2f1bdacc6bcc2041d61c2b98584a27818f71c946f4bb04112ecd8fe85fd7252a7afa08db61b338177f8cf562ea29371e3600fd810a83e446993240ffb8619320b8cedc0781e7070b0233bb29e01107cdd6603507ab8ac9c7dfd5a278b6d159f83b082e6965d19c010773b2dc33b0ab8313259b8dce42e16b8812f41e4ebed9ceca508abae784ef4718e8091e58c8784d65e1c4301962bfb42ebe98139b061115d0874e53f23ad2fe9e42fcd84011cbedef8d1be2255a3e6af6797b490840bc443b3ee3761113d8560a5edde7d2efed8b991224efa0c1892279654d51db594e634427df56c6701c15efab4a5f866cff0dbc8a99ad547af826937cdf0aad51239cb4ee691fbc9c796108995a34a7332494f22ff513dafcabb452d851fe629f70e8f3a22b7e5f243e04630743de3045900b8eab34c8cc9e5ec77358a4820ac7f7080fbfcedf6b30adb43e1e42617b4bca2a5e44c9d3cb4c8f701da117b35ba29786a354ff5994a8977703cd633fd5862990d10c51ac2f9c9f290ec01b30590f44ec8860c8f1cd5ab9543afc3f2c777f6909f65ffcc42093e02b01045581a26510046a4b240ae171a6afea6b157456d755d1e6b2cf4938b6fc2f5b25e65abe8e64fc678a9a5d82f0f13dae7b2a1ea7d081578a625561022f86639ca5e0f1c09544417d788775aa7c67d92082bddc603f6e7a3bfd251ce6b3415df1a77401ae3c3bbe3e3f86192f9932861916c055eb1656186139e3d8768db2c004987205bf801f4f80ce0e8fafc434217f6608fb0ea336ba59c03c70ef541215bb50b4214a20c07f395cea9b3abfd84f2bfcc6f1aff3a8e7eddc67618ec84278a2e37e5bc893cd4665b0dff6c3dba42e2a390f17c743a48615877fe47f8023c1e4119b20e94bc6a568bb5c85ec2cd5367df94b453c2e3d13a253759f742755bfbc421ed0174f7c747ff3c0792f1cfe672596d7cae7fc86bbef15d21d2aa2bde5d979e2f19cde9886671d992b889f5720cf251a248f820e6d15a1533f878662dbc248ca2b032720fea7f114744b13bdd8a9fa7497f3dcfffba65dbfb77ff33542ff45a282ff35f07192f35cd96bd8306cfe9ed9822d12c2d73aeecfaade3d210e416ce7aa28ffffd9c1b14642cccc6cbbcd9833224f2fc78d9271da6ffaaa80985acc8bc809826060ec84a91b86b9533526ebf608698c9305a41e2b89c395077d60941f512a6f5ee353cf967dfdc8ea2b45b9e1c12f951ac1854dbea6289f235e0b865125138244a33a667b34fa84ff1093ef067e7855e6b9b3bf8cceb21ab02d0b67533e2a13c7e0d8301b73150138abce7db272a724051d143671607ba0878365b3963067a06c1c51282a6718494c44b9a9aef002b2a2a775006eed9cc3e9d4c1f245c9582dccd669c88fb9f47c5e3075a6bdb858c4fba7e9f5cd0286b0893d062b842aafe410363b429d3999f70cb80a2695d3d4f3b457674557b30b810c893fa8fff8a34f7bcf6b00fd09c99023db1c89c398187f9ae092132d67faa8097f92053d0e568a728ca71673dd368393dad4ea4e02eb155c089e366d0843ca84dbb2028200ee7a108ccddfaa1711e7c2cc86b440a12d8fc8ed784d2bd3319adb8290f9036cf8761bef63e721004d53ddd9048bc8a498e212094cd7aa1a9c4099dfec49c3250b465f64df2fcf583ae2edc57a398e40c30aa7542d030731a889b8104d5f057054647e17a369c3c35f29326aa3799ed830fe389dc5fe77330e156212bd1abc06e6344ea131b0732ca3a5ba3340743e770bbe38d2ac4a4fec629084e4965e731b1366c793f8f0073796a50c9dc681532bd68f3cf2a3d3bcddfa39ef7cde2278a7cb858945372f4df4c9fb99748181790a352341e00bb1bdb2950169b1dccf5b68635f71f2b182a25757095135e9c49a5563dcafe48ebe4d71b94106892b909cfbca228e74b0ae819a958a8d2c9b491d1a297c2f5b648ba08c7fe5090cb6f81f321a39a80bb2c720de0683d4d88aa7a46501dbd6c888e2795177818184e275b5b6e2a66b562f2e81ba6b69c8d642fe8a2b9b8170736820cffaffc9083be841bbce8c4706441eb59ac2d224730ea514d4f4e0d46f036321cc70f08dd2c75e5f7fd6d56c2b3b196b333dbf833397e9bba2915786f265d0b10456930fb513edd335673a4e0e8b9d33db12ad6841307c636766ac0736895cff44576a0e7a3145cacb76e2a9bc771b37a8ea9437d91d14091efc7422569919c0669e598a8611bd6fa01c7fc07de0fa7d4127294ca5523dda059e2074f49cf1285526831951e60522c978a9643ac0b85dd39f9913c5699a58f8b00273d117a63bb53419e7adc134a6c42194ed9777aa9f432398a892c901e35a0d6d5bf5ed8c4d8f6c9911c9ed9f2d7c7531c8e0fe815ae282d472223c0e7ab99b51137b8e250a658838b747a04ad131c883e79af71580979d5fa919806ae12277185d38edde6f08ed7253d2a7bed6cfe82309d0b503a83afbd87cececa2a1e35838f81eb7318678b8d0e92211d508e8f737633261726ede06b36a104c10a4fa89b4fdc5079fcd4087ebbe883ddc5ef1a556439ec2a98824f4e54f76d843d93586f09201c2cb79e0c7a3e2aae3adf6211b87498499ef8bf072a97ed39f0587fecae35f5a40f2198aa328f85f305b7e80b2c958f5ebf118eeee0e53fea754967211c94b48803e14370504c3c7e3d08ff3843ac7671e84945633af069c58170b4c0ceae149adf502dcfa7f5805e9eb921a95a571992ecd23816a389c5801806a4feec7b387089600e17f040f8090349e47d60186a184208cc43a6d92892f908ceeea8923fdf6d7183b1e0afc1643e299ecfc0d885f950b9514371fea2a7d96f0c38f3b61895a0306]")})) }))

the transaction was rejected by network rules.\n\n18: bad-txns-joinsplit-requirements-not-met

idk if it's related to this PR, i guess it's not... but thought i mention it anyway

logfile... same as the one from previous post, but with the new swap
2025-02-17-16-47-35.kdf.log

@borngraced
Copy link
Member Author

borngraced commented Feb 17, 2025

did a swap with a different ZHTLC coin, which failed with

taker_swap:1719] mm2src/coins/z_coin.rs:1354] z_coin:570] z_coin:428] GenTxError(NeededPrevTxConfirmed("Error while waiting for tx confirmation needed to generate new tx: rpc_clients:112] Waited too long until 1739824374 for transaction ffb0b923458414bd5c948636201c172b2b303bb42a4df44b1c848de26434afab to be confirmed 3 times"))

shows that mm2 indeed waits for takerfee to be confirmed before it sends takerpayment it is 100% sure that i had a single UTXO before starting the swap because it's a new coin and i got some in a single tx to test it

this is the entire log file... look at the end... the new ZHTLC coin has the ticker ZDEEX 2025-02-17-16-47-35.kdf.log

question: why does it wait for 3 confirmations on takerfee? one would be enough to see the change... ZDEEX has "required_confirmations": 3 set in coins file

yes, this is indeed the expected behavior. Maybe we can increase the timeout in this case(the current timeout I set is relatively too short).

Also, I will make it 1 confirmation.

Copy link
Member

@onur-ozkan onur-ozkan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM other than some minors

Comment on lines +1206 to +1207
async fn clean_up(&self, _uuid: Uuid) -> MmResult<(), String> { Ok(()) }

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's worth to document this I think.

Comment on lines +79 to +88
Ok(db
.call(move |conn| {
conn.prepare(&format!(
"INSERT OR REPLACE INTO {table_name} (hex, hex_bytes, change) VALUES (?, ?, ?)"
))?
.execute(params![hex, hex_bytes, change])?;

Ok(())
})
.await?)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe map the error instead of using ? and then wrapping it with Ok? It seems badly formatted this way. There are similar other cases in this PR.

Comment on lines +13 to +14
let table_name = table_name(for_addr);
validate_table_name(&table_name)?;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not a blocker: Can we perform the validation directly in table_name? If we forget calling validate_table_name (which is quite possible), it will be security concern.

}

Ok(CoinBalance {
spendable: &spendable - &unspendable,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this always correct calculation?

I think, when we just sent a tx with a change output the my_balance_sat fn (which queries the received_notes table) does not include this tx change note.
It would include it only when the tx is confirmed and the block is processed.

Copy link
Member Author

@borngraced borngraced Feb 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

spendable includes notes from unconfirmed tx

use mm2_core::mm_ctx::MmArc;
use mm2_err_handle::prelude::*;

fn table_name(addr: &str) -> String { format!("{addr}_change_notes_cache") }
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here we segregate change notes by addresses.
But the spendable balance obtained in get_balance fn is queried by the AccountId. Should this not be done identically?

Also, why not just have a column with the address instead of adding it to the table name?


Ok(CoinBalance {
spendable: &spendable - &unspendable,
unspendable,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yet another remark about the 'unspendable' concept:
Here we include only 'change' into the 'unspendable' balance. But there are also unconfirmed received notes, which we do not track. So users may wonder, why we show the unconfirmed change as 'unspendable' but do not show recently received outputs like that.
I took a look at the latest librustzcash version - they separate unspendable change and received value as different vars in the balance.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure if we we still need to wait for additional confirmations after we received the notes(change) back to our wallet.

I think once our wallet sees the change note in a confirmed block, it becomes available for spending(usually after the first confirmation) hence why get_spendable_notes return it as part of our balance.

@dimxy
Copy link
Collaborator

dimxy commented Feb 20, 2025

I am running zombie tests (test need to be fixed though) and getting errors when all the tests are run together:

failures:
    z_coin::z_coin_native_tests::zombie_coin_send_and_spend_maker_payment
    z_coin::z_coin_native_tests::zombie_coin_send_dex_fee

The errors are from sendrawtransaction:
either "error": Object({"code": Number(-25), "message": String("")}
or "error\": Object({\"code\": Number(-26), \"message\": String(\"18: bad-txns-joinsplit-requirements-not-met\")}).

I traced the komodo code and found locations where errors are generated:
The -25 error is generated from here in komodo - actually from mempool.
The -26 error is generated from here in komodo - from the coin cache.

Looks like both errors are related to reused nullifies.
Do we always correctly mark the spent notes (maybe they marked only when the block scanned)?
I think this situation may happen when @cipig got bad-txns-joinsplit-requirements-not-met error, doing several swaps at once

@cipig
Copy link
Member

cipig commented Feb 20, 2025

I think this situation may happen when @cipig got bad-txns-joinsplit-requirements-not-met error, doing several swaps at once

Those are indeed the same errors i got on my failed swaps, either bad-txns-joinsplit-requirements-not-met or the one with the empty message. But i haven't started many ARRR swaps at once, in all cases it was just one, as taker, selling ARRR (means 2 txes are done, takerfee in ARRR and takerpayment in ARRR).

@dimxy
Copy link
Collaborator

dimxy commented Feb 23, 2025

I think this situation may happen when @cipig got bad-txns-joinsplit-requirements-not-met error, doing several swaps at once

Those are indeed the same errors i got on my failed swaps, either bad-txns-joinsplit-requirements-not-met or the one with the empty message. But i haven't started many ARRR swaps at once, in all cases it was just one, as taker, selling ARRR (means 2 txes are done, takerfee in ARRR and takerpayment in ARRR).

This may happen during only one swap (I am seeing this in the trade_test_electrum_rick_zombie test).
I think the reason for this we try to reuse in the payment tx the note already spent in the taker fee tx

@cipig
Copy link
Member

cipig commented Mar 6, 2025

the builds from this branch were removed from https://sdk.devbuilds.komodo.earth/
would be nice to make new ones, eg by merging changes in dev branch to this one

@shamardy
Copy link
Collaborator

shamardy commented Mar 6, 2025

the builds from this branch were removed from https://sdk.devbuilds.komodo.earth/
would be nice to make new ones, eg by merging changes in dev branch to this one

Done @cipig

// Wait for tx confirmation
// Wait up to 30 minutes for confirmations with 15 sec check interval
// (probably will be changed)
let wait_until = now_sec() + (30 * 60);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think maybe it's better not to do waiting inside the KDF and just delegate this to the User: simply return unconfirmed balance to the GUI (GUI may display unconfirmed balance and a warning that confirmation is needed)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the is the same as gui making sure that there's no more than one ARRR swap running..right?

@cipig
Copy link
Member

cipig commented Mar 12, 2025

tried to do 2 ARRR to EURE swaps and both failed on takerpayment:

taker_swap:1719] mm2src/coins/z_coin.rs:1354] mod:717] client:885] Rpc(ResponseParseError(JsonRpcError { client_info: "coin: ARRR", request: JsonRpcRequest { jsonrpc: "2.0", id: 791, method: "blockchain.transaction.broadcast", params: [String("0400008085202f89000244e3863d0d00000017a914a43bcfb84160e5c901d355ea44f2c552f9c2ac708700000000000000006e6a4c6b6304d91ad267b175210321e52c5468f013db889fe2b8a4d07f879feb81e3eada6959aff3978a9812e703ac6782012088a914bc3416c662080ee7929d1ef6c55451c016721fe58821039bb08d2c722a088e22715b7177c5cde32887ceb0905f8d9804a81092b1e7e651ac68000000003c0d33002ce7863d0d0000000275dda3d466ce11de1b91b81622120fa2762fc4718ca8a5f70ee057f32bde3fede39c0d762fc6862356c4872299d5528c1b6cdf6f7a8336191ae00d4d6de4c9667c4821c4527c6e8e873ef08a62ad2fb32f3bc6ddf9addd0c5dbcc1fe0709399b64f0de1c7af8143d7d3cd2edac745db4c5b2ea297fbcc229b7f5bffed17d5bd88e743451343708b8589c0919a1150e015192476699865034b4a3d936ff80783d3cf3c5b44a4a43adb7b67d02f24a84fa8ca18447868faef09bd4bf0caeac1706033aadb02e6fada0b1eb5032a4aacd4e7f51215045f294495fe1d681fd8663d815fa7f95b69cced526534eadc8e70e37b6b603ed24a031cd2e884d6d98cff7b49b4b23bc57d92097b592934e57b09eeeabe1c21649478c2ddd2fcf64cd6c922dc1baa514dc91b6e68a7ddc8623d85bf46111a9acee44b0b78b06cde7ac838799a9df193034acb1bbe956c5dfe47e92b6d8f40935aaeaefbd79d4eb0bada07768f2efa645773a677a3962d0e0308965372f6fd824912d5e9e0b4035c81c38a90804fd776bfa553e724d3839bb394e8fe56f744a7d50a120755b011d1eb836486ce39c0d762fc6862356c4872299d5528c1b6cdf6f7a8336191ae00d4d6de4c966cfb07b7d37311055791d604375c5f603797064399fdc93b68bbc01ec2bd12c6e1de0b7b6e4cf3ce264cd62cb06151fb2280f675eacf1143b548114247ce159e0ad5cc5778a099e6098dacd2369b09e042a273d0e7a2c457b7b975b191ef25ce055a7101e0fa7b4edd7242c3241733850a57313f5e3ddcd381c53a1f11f29a4b27aafbe5224c94d922e769355524fb8d4a15a963689c8aaffd88509f1ba9368ec06366dc2db4293be490db6cb63189e2cadcf5c9d86179411e1d91c0a54bb41202c96bf72902ee494a77dbde9248eac34944e8ba4d321d0e694314d8438c8f0c9001585bc93ec6ad467300aa303c048696e9f9b967eb0896deaa19de1dd78a26f3e1d05bb3e3f6089e94f44704ea424e65edba94973a34b05994c33f3bd2969809b8a3500a71821721761fb8a741111e24dacf3f8ac078024b02b782efd459a0a02138d9261a855a278b01016519579891354c2d30d973293195f72e8d01dad4a67f5b1246eb4da86005e0b42a8177f7d542a76f4bdb7ffbc5897cbdb96c5b4f13225ffe09f264985f35b93ac81c1bb322dcdf79d081a9d344dbaa981ce27ba54c884a3cccbe2297c540e1989bec22baffac920855d578aab937692293212e9f08bfb6b2cb218c6bc9728f1d011abca7af8c9c73074bc8251d34762a42dd3626ea1b90a65446e1e9b81a6427c76750eaaaf1ecbe522abec9a41b8fc8d0b02f3876ee2076f85faa6dcfa45ef4631668382339727c6194fc6b342faa8ab597bb37074ce55cefdd4ef7d9c99d362e5f973e846d1db8bd900f1db0cb59aa4844b88c51dafc8eb05f257f72b29bc9321b88f8b45411fcae0b981c593af14f7ec41195a79b191737e4bacf4d779190ed7ef3c3570a17b2147b147b33eabb57fa4ed277ba9c7383f628d8701d89ef85477ccf6cd5511311a5e4e854a76991544a428d24d6c8759b60c57b419ce6b9ce87bd596d8cd5e0745a6d6dc2982645400202c039b91b35ecb148ee88b9fe13031beaaf849f5447e5a5b20e20a246b023a3f6736239e08a310cde1b45dd99f307a2b7b86074afbd83939702184f1ed01a7bf88c38b00b0b5b5e128b58cc8e0e0ecd6cd3e488e2d367774fe87adbf3e63a37839b76288b2c2e656f9b970ce30a5306f57a486d670682593d4be96f6d133a4eac03cda632ce87da3f2a1525e60149aab132466dc5470afc10f5be1ddfd97196580ce758d939eb4f88593f3ffaa33237c77825a1693d16c8e080f1c31a63c87e3bb1615eebdcacf366b4f8c3d07ebc4f37d97fa56d6ac147cd58d243af0d29673177b48d614fcc49cc010fd1eb8d32453b1d0a007a01162cc00190b1f443dde5256a31b56d8bbdecc266b1d0f43b583dd1e3aee9fddf0085c5cea2a9875954fb5e6b97b9ed2fcaf957f17ecbe7d5c96034b7b3d0116405bfcd1da44a9821281d227e8ae8cd0026d152a711e7f4813bca46b2b2b64ea236c6d09bc476d91fef47c422287e34999c3d388c90ed1735207cf414e3f1474aea1f9847f5c73786f9ff2d8f4d70c75be665d09e38190bee27adb2b24bd29310996e6671fe0f643f773c6e3242f19542427f494a49edcb539b70ccbebfb88110a0b85501cdb684f3c6a7766c85e04d23644fe21831cb0296e4eb41699720fa3836f070e63b0c943647af9a07f81a4317a49a51a523c6ab092d5e57089255011fe6a12044bbb20188a16bdf94d2924dd9ed2b4802bddf3c2dea3a7fbb81aa03aa6487061e79333fc97b2b650538c9715057ea94b71b8f9efa9ac5070140863942d4fb36e90a86c0d0ddb9ea14cf191745d5fe2270049002e812872acae8e4bff9c608071f07920434603430b96625a82a2764f26f41858406ae6c85f35b07225f40221b89310aa5f5f8077eacb9c93e0abb66230eb2eea0474a95d4ffb1160a9d156b817701aa272909e445d43053821a13335db5b2d32371b0333104751bd85888cc0110137dcd9ca03d847675378a3dcc11620d2da3857c6d6bfb84a62b001613475e13b201da06d6663f74a8edee1c9660ad7302227cf345afbf1034b67732c001aa14e6767595034fc906069a95bdef9ac7aa9f478729546ccc136d57e4d720cd282d5c5ac404f6d3f5c1f060b887343b852b2d493e3dd9aee51b709c2d1f99351b9a48aa6e0e46271d7342d4ac9cf9acd9555c835a4edfa07b8ab16c812db6abb96c1e944a9268df2a8f7818327155a666afc8ecbde8f179e44b1f2b58b8fc1e3e6fbc1383b8ae698227d5a3dcabc9848daf438df9d5fb35c7eef96c27afbd06986aa19fcae9a1fff54c7804b6bec2c8c070ba255acc7f2dfbd956c651e99c638a98b96df477a2dbfad23857c13474b7a5cdd63861ac6c5048a2c834a8fbea36258f033dea1090046a831190f2cff016b854e0fd1c8f449825dc000e58d72021729f9e3ce7a9c6c3c971deae71ba6b37a25339a22c2caf1f1c60d3fc7bfa9e85928c1ad5dcb2bb36c787a8865ff7e927873816fad119a73abf8d1212396b54db7860b78c5fc543ec55e8036aa791c6cfeed060f19165b1f85c63b70e1acf878163f9c25c6aeb77fc4ccbe2043c1aba4bae98efdafb71489042f2276e777d4b4c17cf9cc0adf498d6a745df7c91b6abe6daeb2ad697be9309fe78d2eae894467b9dae14760c517d574462cbbf8b60da18f50bed710b9b8a0534203d7236e6bc34e9eace90982b497547dfd342a2e1bc26b0a71ff3736114f702889a3e9f61a3693a7d74e58a55fa1f5445260dbb16e43e28ca08202c23181c059f401075c174b83c3c20663be4ae5a1034117150b0f5c3ddbff7be8ec4162b6c39738bc14aa3c11f7ca80e5d42413c8c93900045d86a022fdf1701cb7a9f37c016bf6b588a09b8e5217fe00806f0e0d31249e77ef9caf4e5c283dc800972c8c284a838ce2b120cad92180baa9aa24f82da5c2d8f01f39a2c719ab168cdeaaff6a6c5359e9479239ae2cf8e9f176b3abe5877d736c26dfa563af1c0f0ffacff2bcad469d43b55b27e043632d42587737c4bb4a6b408ed6ee304b781286546f69a4147a273d58d250f86c58bca6604e09aa9342ccf260d6856532b89eec88bf5d5398a163851b450fe90545bb62521770f98e84480eefcb54462a5a6100f94a1c2b0c8b54b07363f7acd2eb56d3c421c12d81b1e7a70d077406ba654163676de11669c533e3ed448ed52ddade41a6681382a18017d4eee8cd5f3cc53b0c")] }, error: Response(electrum1.cipig.net:20008, Object({"code": Number(1), "message": String("the transaction was rejected by network rules.\n\n\n[0400008085202f89000244e3863d0d00000017a914a43bcfb84160e5c901d355ea44f2c552f9c2ac708700000000000000006e6a4c6b6304d91ad267b175210321e52c5468f013db889fe2b8a4d07f879feb81e3eada6959aff3978a9812e703ac6782012088a914bc3416c662080ee7929d1ef6c55451c016721fe58821039bb08d2c722a088e22715b7177c5cde32887ceb0905f8d9804a81092b1e7e651ac68000000003c0d33002ce7863d0d0000000275dda3d466ce11de1b91b81622120fa2762fc4718ca8a5f70ee057f32bde3fede39c0d762fc6862356c4872299d5528c1b6cdf6f7a8336191ae00d4d6de4c9667c4821c4527c6e8e873ef08a62ad2fb32f3bc6ddf9addd0c5dbcc1fe0709399b64f0de1c7af8143d7d3cd2edac745db4c5b2ea297fbcc229b7f5bffed17d5bd88e743451343708b8589c0919a1150e015192476699865034b4a3d936ff80783d3cf3c5b44a4a43adb7b67d02f24a84fa8ca18447868faef09bd4bf0caeac1706033aadb02e6fada0b1eb5032a4aacd4e7f51215045f294495fe1d681fd8663d815fa7f95b69cced526534eadc8e70e37b6b603ed24a031cd2e884d6d98cff7b49b4b23bc57d92097b592934e57b09eeeabe1c21649478c2ddd2fcf64cd6c922dc1baa514dc91b6e68a7ddc8623d85bf46111a9acee44b0b78b06cde7ac838799a9df193034acb1bbe956c5dfe47e92b6d8f40935aaeaefbd79d4eb0bada07768f2efa645773a677a3962d0e0308965372f6fd824912d5e9e0b4035c81c38a90804fd776bfa553e724d3839bb394e8fe56f744a7d50a120755b011d1eb836486ce39c0d762fc6862356c4872299d5528c1b6cdf6f7a8336191ae00d4d6de4c966cfb07b7d37311055791d604375c5f603797064399fdc93b68bbc01ec2bd12c6e1de0b7b6e4cf3ce264cd62cb06151fb2280f675eacf1143b548114247ce159e0ad5cc5778a099e6098dacd2369b09e042a273d0e7a2c457b7b975b191ef25ce055a7101e0fa7b4edd7242c3241733850a57313f5e3ddcd381c53a1f11f29a4b27aafbe5224c94d922e769355524fb8d4a15a963689c8aaffd88509f1ba9368ec06366dc2db4293be490db6cb63189e2cadcf5c9d86179411e1d91c0a54bb41202c96bf72902ee494a77dbde9248eac34944e8ba4d321d0e694314d8438c8f0c9001585bc93ec6ad467300aa303c048696e9f9b967eb0896deaa19de1dd78a26f3e1d05bb3e3f6089e94f44704ea424e65edba94973a34b05994c33f3bd2969809b8a3500a71821721761fb8a741111e24dacf3f8ac078024b02b782efd459a0a02138d9261a855a278b01016519579891354c2d30d973293195f72e8d01dad4a67f5b1246eb4da86005e0b42a8177f7d542a76f4bdb7ffbc5897cbdb96c5b4f13225ffe09f264985f35b93ac81c1bb322dcdf79d081a9d344dbaa981ce27ba54c884a3cccbe2297c540e1989bec22baffac920855d578aab937692293212e9f08bfb6b2cb218c6bc9728f1d011abca7af8c9c73074bc8251d34762a42dd3626ea1b90a65446e1e9b81a6427c76750eaaaf1ecbe522abec9a41b8fc8d0b02f3876ee2076f85faa6dcfa45ef4631668382339727c6194fc6b342faa8ab597bb37074ce55cefdd4ef7d9c99d362e5f973e846d1db8bd900f1db0cb59aa4844b88c51dafc8eb05f257f72b29bc9321b88f8b45411fcae0b981c593af14f7ec41195a79b191737e4bacf4d779190ed7ef3c3570a17b2147b147b33eabb57fa4ed277ba9c7383f628d8701d89ef85477ccf6cd5511311a5e4e854a76991544a428d24d6c8759b60c57b419ce6b9ce87bd596d8cd5e0745a6d6dc2982645400202c039b91b35ecb148ee88b9fe13031beaaf849f5447e5a5b20e20a246b023a3f6736239e08a310cde1b45dd99f307a2b7b86074afbd83939702184f1ed01a7bf88c38b00b0b5b5e128b58cc8e0e0ecd6cd3e488e2d367774fe87adbf3e63a37839b76288b2c2e656f9b970ce30a5306f57a486d670682593d4be96f6d133a4eac03cda632ce87da3f2a1525e60149aab132466dc5470afc10f5be1ddfd97196580ce758d939eb4f88593f3ffaa33237c77825a1693d16c8e080f1c31a63c87e3bb1615eebdcacf366b4f8c3d07ebc4f37d97fa56d6ac147cd58d243af0d29673177b48d614fcc49cc010fd1eb8d32453b1d0a007a01162cc00190b1f443dde5256a31b56d8bbdecc266b1d0f43b583dd1e3aee9fddf0085c5cea2a9875954fb5e6b97b9ed2fcaf957f17ecbe7d5c96034b7b3d0116405bfcd1da44a9821281d227e8ae8cd0026d152a711e7f4813bca46b2b2b64ea236c6d09bc476d91fef47c422287e34999c3d388c90ed1735207cf414e3f1474aea1f9847f5c73786f9ff2d8f4d70c75be665d09e38190bee27adb2b24bd29310996e6671fe0f643f773c6e3242f19542427f494a49edcb539b70ccbebfb88110a0b85501cdb684f3c6a7766c85e04d23644fe21831cb0296e4eb41699720fa3836f070e63b0c943647af9a07f81a4317a49a51a523c6ab092d5e57089255011fe6a12044bbb20188a16bdf94d2924dd9ed2b4802bddf3c2dea3a7fbb81aa03aa6487061e79333fc97b2b650538c9715057ea94b71b8f9efa9ac5070140863942d4fb36e90a86c0d0ddb9ea14cf191745d5fe2270049002e812872acae8e4bff9c608071f07920434603430b96625a82a2764f26f41858406ae6c85f35b07225f40221b89310aa5f5f8077eacb9c93e0abb66230eb2eea0474a95d4ffb1160a9d156b817701aa272909e445d43053821a13335db5b2d32371b0333104751bd85888cc0110137dcd9ca03d847675378a3dcc11620d2da3857c6d6bfb84a62b001613475e13b201da06d6663f74a8edee1c9660ad7302227cf345afbf1034b67732c001aa14e6767595034fc906069a95bdef9ac7aa9f478729546ccc136d57e4d720cd282d5c5ac404f6d3f5c1f060b887343b852b2d493e3dd9aee51b709c2d1f99351b9a48aa6e0e46271d7342d4ac9cf9acd9555c835a4edfa07b8ab16c812db6abb96c1e944a9268df2a8f7818327155a666afc8ecbde8f179e44b1f2b58b8fc1e3e6fbc1383b8ae698227d5a3dcabc9848daf438df9d5fb35c7eef96c27afbd06986aa19fcae9a1fff54c7804b6bec2c8c070ba255acc7f2dfbd956c651e99c638a98b96df477a2dbfad23857c13474b7a5cdd63861ac6c5048a2c834a8fbea36258f033dea1090046a831190f2cff016b854e0fd1c8f449825dc000e58d72021729f9e3ce7a9c6c3c971deae71ba6b37a25339a22c2caf1f1c60d3fc7bfa9e85928c1ad5dcb2bb36c787a8865ff7e927873816fad119a73abf8d1212396b54db7860b78c5fc543ec55e8036aa791c6cfeed060f19165b1f85c63b70e1acf878163f9c25c6aeb77fc4ccbe2043c1aba4bae98efdafb71489042f2276e777d4b4c17cf9cc0adf498d6a745df7c91b6abe6daeb2ad697be9309fe78d2eae894467b9dae14760c517d574462cbbf8b60da18f50bed710b9b8a0534203d7236e6bc34e9eace90982b497547dfd342a2e1bc26b0a71ff3736114f702889a3e9f61a3693a7d74e58a55fa1f5445260dbb16e43e28ca08202c23181c059f401075c174b83c3c20663be4ae5a1034117150b0f5c3ddbff7be8ec4162b6c39738bc14aa3c11f7ca80e5d42413c8c93900045d86a022fdf1701cb7a9f37c016bf6b588a09b8e5217fe00806f0e0d31249e77ef9caf4e5c283dc800972c8c284a838ce2b120cad92180baa9aa24f82da5c2d8f01f39a2c719ab168cdeaaff6a6c5359e9479239ae2cf8e9f176b3abe5877d736c26dfa563af1c0f0ffacff2bcad469d43b55b27e043632d42587737c4bb4a6b408ed6ee304b781286546f69a4147a273d58d250f86c58bca6604e09aa9342ccf260d6856532b89eec88bf5d5398a163851b450fe90545bb62521770f98e84480eefcb54462a5a6100f94a1c2b0c8b54b07363f7acd2eb56d3c421c12d81b1e7a70d077406ba654163676de11669c533e3ed448ed52ddade41a6681382a18017d4eee8cd5f3cc53b0c]")})) }))
taker_swap:1719] mm2src/coins/z_coin.rs:1354] mod:717] client:885] Rpc(ResponseParseError(JsonRpcError { client_info: "coin: ARRR", request: JsonRpcRequest { jsonrpc: "2.0", id: 14, method: "blockchain.transaction.broadcast", params: [String("0400008085202f8900022e26432c0d00000017a9149b0fb35fe9dc3bd51f8c05dd7ab5eba725c5d2a28700000000000000006e6a4c6b63041f25d267b175210347566c1398f88e2f83c259c3e29b93b3659eca797f406625eb8cc28dc727e3dfac6782012088a9144dc7b15eae992805ce64337dc4b3a65ff26e77b38821039c347e6d6858aa928210a61ca014e35c55d1d10aa0ccb2696f43588990fe983cac6800000000640d3300162a432c0d000000021450d290a26444bb27d1bafbb9b0f1aa792fec2c7d21fbfc620c66d520a9373d168b6712e2c601169925e7e10c7914fefbfdc5c7679d0653791aa52f21b1c763b8f6357413b5034123d57f374aa71fd3021d16d6f021f2e7996406eb401c0251b1ebb60c6d9aa46e23a55926a8dae070b951921179ee1e888b106cee1f585a99aec2c2d2306f11585aba0ac2862fe31cf6b108740d8b5e1dd0245636ab52933ce1cb1b7052993fa42408b344c9d56140a8e7fa58bb8319cbef9f8b5c1c0d65fd452e6f2411140091f2e085d9e8b74cea8b6ee40868f746ba4ff4908570ad80b70f457bfbfec846b1ed12f1d34fbcde958acc54b8c99abf0390e639c7d2500e6b0d9e2ff401a08ea2168e95ff0db4a443880732a3245d690fa9a0de96e688a19e12de233fff06562271c7361ed95fbaed6c22041f19037cd15b9aac7c77215473d5f40f1d81f554bda2b0bd21e589f42375e073ea8f865b9c1b662d773e1baa9000d4fd3f848df58957598aec328daa7c97f07e6b08cc88776b60bf08fa2cd800bafe1bb105269527085cc34f2861b73d09b417c06f50403f34a00484d8145e4a168b6712e2c601169925e7e10c7914fefbfdc5c7679d0653791aa52f21b1c763cfb07b7d37311055791d604375c5f603797064399fdc93b68bbc01ec2bd12c6ec55fc5f788ba8fb043b8e9acaaa6992eeffb034fd79e873f210ea1cc994d715a81fecbf33ac1c4b5451931a2cf59d90db6733baeec62be1c1c6fa229ca6d580ef28974908c9946c3176fa8456b4c23b687f9d153a526b6952a44b7c16757179c8799230003c5a26972e10957f7d579dcdef09f5cad970535e11e094186fed7ac0525e220439424b4013e3e7d1220a5c421c648848242060cae622635a1ea5f5aacd8d9286235061d7cb5f1eae47ab1ba852ee8eed46af20f66f657cf1c78133f334c2c632c09b196ca84f691a1a2c1a2c104a4625a3b45f8a43e2f39cd61cf6679c7f848e9243919d7defeb20461a62e07e4ad9fff161b9dd73ba45d754a3b0e99c6e3cd774a55e65073396c9524723f0dc0c17537555912ae65ba718a0ec90002901a2cdb3cd46cf2a4c2e11f6bda0c9e71739aa3d86691e8f7bb1ab90169868e0d1b94e7bd8ef74586d6e59ca8ec4dd043ae8a5ba78396479e22fe0e46e2b0257a286ccf880fc5f64770cf0f2d1e2361c8ef5614abd41ddd001c0fbfb8f12eaea2db1f2369bbafdf7a68e18f0d3a612d0284e057f555202fb191230e49361f4e758628ff881b048dd949bd32b4c4b80a404ad8233e330797501d6777392b55bfc1e8eb8d25ab54f35d7ae12f5abf44448ad3cc093dad43bd481c6cc90990ba803f45fa4dc3e83e6d5e067f7346cdaeb5fba3d5201f362a622a3717bd5f7c85af65e68744df4e5a19329e6623254227f5bf463a430ad05791d01677da32892af4c513b9607143bf274588dd15ff67f28afee3433811d961f26bf5519e2a2211366181fc98567093c5333b21dfcd89bd53ed8f68d0788544b58a04f95643d72a8f875c21b92861fdc2cb121b335d3d0e2411a89adc48be3f92ffd704077794087def6d309db7a8b679f6a4a4532afe13cb34e2e519c60e77ff3583080babb4515923f145c340913dc2633e8fb67c488de218c8592bb3670258f9dcaac9f911b94a6953284fa888fc085993d1691938d7c613816d4bae29ebe59e5d08bc82e763ad49952bfa7dbd2783ab0afc06c730a58ac5e9b7332af07be3bae157f729bbc91c0b95186d022f1d9f9d1fcccf92a9eecfa8f64d641fd89179e62ba38c1b2bba277f709a065119e9531b2f02f13d62b11e2b8a688b86e18ccfcfb5facce13e1cf784cf5d4a19ae286390d8a9fe7a3fcbdc5e90beb8038630d63c9ec7e4aebf066a541eaa81083bcff397373cb0967d01bbd7068c8e55bcd948c594eb996f099e6cf1496ef280b49ea18e780c47313e8a587a95274a437f371b3fee40a634ef5be6dc3f190d2854230fc134642edffb8109c8a9098d384b97c10a58c8b9b7b85280806a6e69be55e5ceb70b099e85e9e2b36261283f2068c690e121e6716cd17f39e2ca8784c7e9c5e1c5b6efb8b25cdd7ed24d40c97d309aaaeaafe239b86bcef4d90aeb51cae91c5f844f2ee81031386df4a8676493daa47fa260eefc9ca3d5d199bd73878de6619c85fede47cd587aa2019ba204b83593854a2b00aa06d5fe4eef20b28b8ab0bf30e68a44a572b98f4d7c292871d57eadbeac25d3b9ab214e27f9118a3b2b39ef16ae7eb19dec0f47c1b511147811194e8fa6dca5d452792db95ca48ee60443754d6ac3ceb4d9f98f90cb9275a91f939b5f0de3399a3477c56f1372826e97389a4e2959ea30f028dc31c3b8c329104b16dac53173a2cde16422a0b8d4fd5503b25ffe6f157f7e82ec790aa6e7ca56ac6a88f5dfbe0e635be8810600e47fcd96ee7bdbd99ba8add3d51611dcb18a014ffdb02802b6a649e43fb011b26b0c7be043ddd7bbb93c25dfd9b6ffdfcc3c1421435c731e3f69658d6aaa96efd21046eb4c18912e727e7d5d0f5c06dfe69548c2989c395220724dbb797c2154fcf4cd13a96d40cc7a9889f0fb756cfa94cae571cf439145af35ec1386ed3383fbdd93bf71b5f4cb6a18983031fd8639d2438768c0e2cbd63adef720a49c4bf2d798a9facc892a54d126d847191f5eb1cfebbe9f307d9f363c055ac4d9d7bffd073cd085e7e794ddc8e02aa6688ed94a60ba1c7fd19324df1e69ad36e8d9b91fa37fd66914bb8aca397a145552d7ff5835248f5794e6a24b8a167014011a0d7051a61a4f89102f140f73ad64e5f523f0edb5d9044eb3786afa0fc8793378a81c53812c4a1158210687b05334b074f40aab334b0c663bb564a7c015bfb16bd9a44b828968f1975bc2179a9abb98d255a3af9b658de942e1f3e2b8ec4b37a6491dd9bd7d8e9d1efabb786662f9ad19865eb47b98cd9459bcea472b26256b26072d520c52cf2063b461f572da59ff720e6ce4722db41941fa342dbdc1d5394e33b0b3377044ccd997ca7f757bb8d6c734a4bfb70c91bab2a3ae5b79247733e0ba4eff56d75652846563331934fde1030283d73874dbcf7c21160c834630f3d4f631594c3ead9214faaae1709b2dabc42e58b402a3bfc8fd3a153a3cba026d73dc9fbc8cb53c49988b34cdfe73e01dab8086ddaffe607fa263c8af06909b0770472cfd28752bb1c7e8e62d65222a73e390f544d67b41161e9d355b8ff137954dc658a5f8bad4a3335b1d9d6aea3005b7e3bd967795b282c3aeffc2a99f256a9403632894eca98012434ac7d46a15f23290d5b65deb4d137d05170e09bdaafe8dbf996ef4772da7a05f7a11e436ccff3911ac9ec9ad8c927e3907c77842a3a71d5c8cb1c1626608cb0d7508d501a18a72f334e711403b29630003963401626a7a1779019b964d6a7f91dcc0ac3fc5444c3426f9a20e009aa8af3d14d9521acfc628bee5d9f4a9e6f9b23c58b11fcbf0e1a87f7c8bad1ebedeed9a5689fbfafc0e115168ae7a3301d96a7f1f44b490a0d8e3c4333700a79f11878311d7319840dac18bbb872976932a6fd4f55d10dfda4174ad9199189e81c86aca754d62610eb2b8bf1a94b56b45110f23cff5e8591078b7925e5d81cb1665dae6084729012f7c05681e974abb9747e7adca572af3bcbb153c20c11eb9f7f5b6f35af171a27564f6cad1cd07899bc376b49bb171408c30fd5f9c428863c3c008362c55810fa8fa96e73c5bac9dae9800dcfbf52aaaa4dd25501a8a725f74c3a418512e61259baae22f6af1bd897d78443165cfb27bce1b65fb7a69ee8b53f70b4a7bb3adaabdd6c1083804e74f7ada01")] }, error: Response(electrum1.cipig.net:20008, Object({"code": Number(1), "message": String("the transaction was rejected by network rules.\n\n\n[0400008085202f8900022e26432c0d00000017a9149b0fb35fe9dc3bd51f8c05dd7ab5eba725c5d2a28700000000000000006e6a4c6b63041f25d267b175210347566c1398f88e2f83c259c3e29b93b3659eca797f406625eb8cc28dc727e3dfac6782012088a9144dc7b15eae992805ce64337dc4b3a65ff26e77b38821039c347e6d6858aa928210a61ca014e35c55d1d10aa0ccb2696f43588990fe983cac6800000000640d3300162a432c0d000000021450d290a26444bb27d1bafbb9b0f1aa792fec2c7d21fbfc620c66d520a9373d168b6712e2c601169925e7e10c7914fefbfdc5c7679d0653791aa52f21b1c763b8f6357413b5034123d57f374aa71fd3021d16d6f021f2e7996406eb401c0251b1ebb60c6d9aa46e23a55926a8dae070b951921179ee1e888b106cee1f585a99aec2c2d2306f11585aba0ac2862fe31cf6b108740d8b5e1dd0245636ab52933ce1cb1b7052993fa42408b344c9d56140a8e7fa58bb8319cbef9f8b5c1c0d65fd452e6f2411140091f2e085d9e8b74cea8b6ee40868f746ba4ff4908570ad80b70f457bfbfec846b1ed12f1d34fbcde958acc54b8c99abf0390e639c7d2500e6b0d9e2ff401a08ea2168e95ff0db4a443880732a3245d690fa9a0de96e688a19e12de233fff06562271c7361ed95fbaed6c22041f19037cd15b9aac7c77215473d5f40f1d81f554bda2b0bd21e589f42375e073ea8f865b9c1b662d773e1baa9000d4fd3f848df58957598aec328daa7c97f07e6b08cc88776b60bf08fa2cd800bafe1bb105269527085cc34f2861b73d09b417c06f50403f34a00484d8145e4a168b6712e2c601169925e7e10c7914fefbfdc5c7679d0653791aa52f21b1c763cfb07b7d37311055791d604375c5f603797064399fdc93b68bbc01ec2bd12c6ec55fc5f788ba8fb043b8e9acaaa6992eeffb034fd79e873f210ea1cc994d715a81fecbf33ac1c4b5451931a2cf59d90db6733baeec62be1c1c6fa229ca6d580ef28974908c9946c3176fa8456b4c23b687f9d153a526b6952a44b7c16757179c8799230003c5a26972e10957f7d579dcdef09f5cad970535e11e094186fed7ac0525e220439424b4013e3e7d1220a5c421c648848242060cae622635a1ea5f5aacd8d9286235061d7cb5f1eae47ab1ba852ee8eed46af20f66f657cf1c78133f334c2c632c09b196ca84f691a1a2c1a2c104a4625a3b45f8a43e2f39cd61cf6679c7f848e9243919d7defeb20461a62e07e4ad9fff161b9dd73ba45d754a3b0e99c6e3cd774a55e65073396c9524723f0dc0c17537555912ae65ba718a0ec90002901a2cdb3cd46cf2a4c2e11f6bda0c9e71739aa3d86691e8f7bb1ab90169868e0d1b94e7bd8ef74586d6e59ca8ec4dd043ae8a5ba78396479e22fe0e46e2b0257a286ccf880fc5f64770cf0f2d1e2361c8ef5614abd41ddd001c0fbfb8f12eaea2db1f2369bbafdf7a68e18f0d3a612d0284e057f555202fb191230e49361f4e758628ff881b048dd949bd32b4c4b80a404ad8233e330797501d6777392b55bfc1e8eb8d25ab54f35d7ae12f5abf44448ad3cc093dad43bd481c6cc90990ba803f45fa4dc3e83e6d5e067f7346cdaeb5fba3d5201f362a622a3717bd5f7c85af65e68744df4e5a19329e6623254227f5bf463a430ad05791d01677da32892af4c513b9607143bf274588dd15ff67f28afee3433811d961f26bf5519e2a2211366181fc98567093c5333b21dfcd89bd53ed8f68d0788544b58a04f95643d72a8f875c21b92861fdc2cb121b335d3d0e2411a89adc48be3f92ffd704077794087def6d309db7a8b679f6a4a4532afe13cb34e2e519c60e77ff3583080babb4515923f145c340913dc2633e8fb67c488de218c8592bb3670258f9dcaac9f911b94a6953284fa888fc085993d1691938d7c613816d4bae29ebe59e5d08bc82e763ad49952bfa7dbd2783ab0afc06c730a58ac5e9b7332af07be3bae157f729bbc91c0b95186d022f1d9f9d1fcccf92a9eecfa8f64d641fd89179e62ba38c1b2bba277f709a065119e9531b2f02f13d62b11e2b8a688b86e18ccfcfb5facce13e1cf784cf5d4a19ae286390d8a9fe7a3fcbdc5e90beb8038630d63c9ec7e4aebf066a541eaa81083bcff397373cb0967d01bbd7068c8e55bcd948c594eb996f099e6cf1496ef280b49ea18e780c47313e8a587a95274a437f371b3fee40a634ef5be6dc3f190d2854230fc134642edffb8109c8a9098d384b97c10a58c8b9b7b85280806a6e69be55e5ceb70b099e85e9e2b36261283f2068c690e121e6716cd17f39e2ca8784c7e9c5e1c5b6efb8b25cdd7ed24d40c97d309aaaeaafe239b86bcef4d90aeb51cae91c5f844f2ee81031386df4a8676493daa47fa260eefc9ca3d5d199bd73878de6619c85fede47cd587aa2019ba204b83593854a2b00aa06d5fe4eef20b28b8ab0bf30e68a44a572b98f4d7c292871d57eadbeac25d3b9ab214e27f9118a3b2b39ef16ae7eb19dec0f47c1b511147811194e8fa6dca5d452792db95ca48ee60443754d6ac3ceb4d9f98f90cb9275a91f939b5f0de3399a3477c56f1372826e97389a4e2959ea30f028dc31c3b8c329104b16dac53173a2cde16422a0b8d4fd5503b25ffe6f157f7e82ec790aa6e7ca56ac6a88f5dfbe0e635be8810600e47fcd96ee7bdbd99ba8add3d51611dcb18a014ffdb02802b6a649e43fb011b26b0c7be043ddd7bbb93c25dfd9b6ffdfcc3c1421435c731e3f69658d6aaa96efd21046eb4c18912e727e7d5d0f5c06dfe69548c2989c395220724dbb797c2154fcf4cd13a96d40cc7a9889f0fb756cfa94cae571cf439145af35ec1386ed3383fbdd93bf71b5f4cb6a18983031fd8639d2438768c0e2cbd63adef720a49c4bf2d798a9facc892a54d126d847191f5eb1cfebbe9f307d9f363c055ac4d9d7bffd073cd085e7e794ddc8e02aa6688ed94a60ba1c7fd19324df1e69ad36e8d9b91fa37fd66914bb8aca397a145552d7ff5835248f5794e6a24b8a167014011a0d7051a61a4f89102f140f73ad64e5f523f0edb5d9044eb3786afa0fc8793378a81c53812c4a1158210687b05334b074f40aab334b0c663bb564a7c015bfb16bd9a44b828968f1975bc2179a9abb98d255a3af9b658de942e1f3e2b8ec4b37a6491dd9bd7d8e9d1efabb786662f9ad19865eb47b98cd9459bcea472b26256b26072d520c52cf2063b461f572da59ff720e6ce4722db41941fa342dbdc1d5394e33b0b3377044ccd997ca7f757bb8d6c734a4bfb70c91bab2a3ae5b79247733e0ba4eff56d75652846563331934fde1030283d73874dbcf7c21160c834630f3d4f631594c3ead9214faaae1709b2dabc42e58b402a3bfc8fd3a153a3cba026d73dc9fbc8cb53c49988b34cdfe73e01dab8086ddaffe607fa263c8af06909b0770472cfd28752bb1c7e8e62d65222a73e390f544d67b41161e9d355b8ff137954dc658a5f8bad4a3335b1d9d6aea3005b7e3bd967795b282c3aeffc2a99f256a9403632894eca98012434ac7d46a15f23290d5b65deb4d137d05170e09bdaafe8dbf996ef4772da7a05f7a11e436ccff3911ac9ec9ad8c927e3907c77842a3a71d5c8cb1c1626608cb0d7508d501a18a72f334e711403b29630003963401626a7a1779019b964d6a7f91dcc0ac3fc5444c3426f9a20e009aa8af3d14d9521acfc628bee5d9f4a9e6f9b23c58b11fcbf0e1a87f7c8bad1ebedeed9a5689fbfafc0e115168ae7a3301d96a7f1f44b490a0d8e3c4333700a79f11878311d7319840dac18bbb872976932a6fd4f55d10dfda4174ad9199189e81c86aca754d62610eb2b8bf1a94b56b45110f23cff5e8591078b7925e5d81cb1665dae6084729012f7c05681e974abb9747e7adca572af3bcbb153c20c11eb9f7f5b6f35af171a27564f6cad1cd07899bc376b49bb171408c30fd5f9c428863c3c008362c55810fa8fa96e73c5bac9dae9800dcfbf52aaaa4dd25501a8a725f74c3a418512e61259baae22f6af1bd897d78443165cfb27bce1b65fb7a69ee8b53f70b4a7bb3adaabdd6c1083804e74f7ada01]")})) }))

@dimxy
Copy link
Collaborator

dimxy commented Mar 12, 2025

tried to do 2 ARRR to EURE swaps and both failed on takerpayment:

first one failed with the familiar error (on a PIRATE node):

error code: -26
error message:
18: bad-txns-joinsplit-requirements-not-met

Still note reuse, I guess

@cipig
Copy link
Member

cipig commented Mar 12, 2025

third swap worked fine, also ARRR to EURE

@borngraced
Copy link
Member Author

tried to do 2 ARRR to EURE swaps and both failed on takerpayment:

taker_swap:1719] mm2src/coins/z_coin.rs:1354] mod:717] client:885] Rpc(ResponseParseError(JsonRpcError { client_info: "coin: ARRR", request: JsonRpcRequest { jsonrpc: "2.0", id: 791, method: "blockchain.transaction.broadcast", params: [String("0400008085202f89000244e3863d0d00000017a914a43bcfb84160e5c901d355ea44f2c552f9c2ac708700000000000000006e6a4c6b6304d91ad267b175210321e52c5468f013db889fe2b8a4d07f879feb81e3eada6959aff3978a9812e703ac6782012088a914bc3416c662080ee7929d1ef6c55451c016721fe58821039bb08d2c722a088e22715b7177c5cde32887ceb0905f8d9804a81092b1e7e651ac68000000003c0d33002ce7863d0d0000000275dda3d466ce11de1b91b81622120fa2762fc4718ca8a5f70ee057f32bde3fede39c0d762fc6862356c4872299d5528c1b6cdf6f7a8336191ae00d4d6de4c9667c4821c4527c6e8e873ef08a62ad2fb32f3bc6ddf9addd0c5dbcc1fe0709399b64f0de1c7af8143d7d3cd2edac745db4c5b2ea297fbcc229b7f5bffed17d5bd88e743451343708b8589c0919a1150e015192476699865034b4a3d936ff80783d3cf3c5b44a4a43adb7b67d02f24a84fa8ca18447868faef09bd4bf0caeac1706033aadb02e6fada0b1eb5032a4aacd4e7f51215045f294495fe1d681fd8663d815fa7f95b69cced526534eadc8e70e37b6b603ed24a031cd2e884d6d98cff7b49b4b23bc57d92097b592934e57b09eeeabe1c21649478c2ddd2fcf64cd6c922dc1baa514dc91b6e68a7ddc8623d85bf46111a9acee44b0b78b06cde7ac838799a9df193034acb1bbe956c5dfe47e92b6d8f40935aaeaefbd79d4eb0bada07768f2efa645773a677a3962d0e0308965372f6fd824912d5e9e0b4035c81c38a90804fd776bfa553e724d3839bb394e8fe56f744a7d50a120755b011d1eb836486ce39c0d762fc6862356c4872299d5528c1b6cdf6f7a8336191ae00d4d6de4c966cfb07b7d37311055791d604375c5f603797064399fdc93b68bbc01ec2bd12c6e1de0b7b6e4cf3ce264cd62cb06151fb2280f675eacf1143b548114247ce159e0ad5cc5778a099e6098dacd2369b09e042a273d0e7a2c457b7b975b191ef25ce055a7101e0fa7b4edd7242c3241733850a57313f5e3ddcd381c53a1f11f29a4b27aafbe5224c94d922e769355524fb8d4a15a963689c8aaffd88509f1ba9368ec06366dc2db4293be490db6cb63189e2cadcf5c9d86179411e1d91c0a54bb41202c96bf72902ee494a77dbde9248eac34944e8ba4d321d0e694314d8438c8f0c9001585bc93ec6ad467300aa303c048696e9f9b967eb0896deaa19de1dd78a26f3e1d05bb3e3f6089e94f44704ea424e65edba94973a34b05994c33f3bd2969809b8a3500a71821721761fb8a741111e24dacf3f8ac078024b02b782efd459a0a02138d9261a855a278b01016519579891354c2d30d973293195f72e8d01dad4a67f5b1246eb4da86005e0b42a8177f7d542a76f4bdb7ffbc5897cbdb96c5b4f13225ffe09f264985f35b93ac81c1bb322dcdf79d081a9d344dbaa981ce27ba54c884a3cccbe2297c540e1989bec22baffac920855d578aab937692293212e9f08bfb6b2cb218c6bc9728f1d011abca7af8c9c73074bc8251d34762a42dd3626ea1b90a65446e1e9b81a6427c76750eaaaf1ecbe522abec9a41b8fc8d0b02f3876ee2076f85faa6dcfa45ef4631668382339727c6194fc6b342faa8ab597bb37074ce55cefdd4ef7d9c99d362e5f973e846d1db8bd900f1db0cb59aa4844b88c51dafc8eb05f257f72b29bc9321b88f8b45411fcae0b981c593af14f7ec41195a79b191737e4bacf4d779190ed7ef3c3570a17b2147b147b33eabb57fa4ed277ba9c7383f628d8701d89ef85477ccf6cd5511311a5e4e854a76991544a428d24d6c8759b60c57b419ce6b9ce87bd596d8cd5e0745a6d6dc2982645400202c039b91b35ecb148ee88b9fe13031beaaf849f5447e5a5b20e20a246b023a3f6736239e08a310cde1b45dd99f307a2b7b86074afbd83939702184f1ed01a7bf88c38b00b0b5b5e128b58cc8e0e0ecd6cd3e488e2d367774fe87adbf3e63a37839b76288b2c2e656f9b970ce30a5306f57a486d670682593d4be96f6d133a4eac03cda632ce87da3f2a1525e60149aab132466dc5470afc10f5be1ddfd97196580ce758d939eb4f88593f3ffaa33237c77825a1693d16c8e080f1c31a63c87e3bb1615eebdcacf366b4f8c3d07ebc4f37d97fa56d6ac147cd58d243af0d29673177b48d614fcc49cc010fd1eb8d32453b1d0a007a01162cc00190b1f443dde5256a31b56d8bbdecc266b1d0f43b583dd1e3aee9fddf0085c5cea2a9875954fb5e6b97b9ed2fcaf957f17ecbe7d5c96034b7b3d0116405bfcd1da44a9821281d227e8ae8cd0026d152a711e7f4813bca46b2b2b64ea236c6d09bc476d91fef47c422287e34999c3d388c90ed1735207cf414e3f1474aea1f9847f5c73786f9ff2d8f4d70c75be665d09e38190bee27adb2b24bd29310996e6671fe0f643f773c6e3242f19542427f494a49edcb539b70ccbebfb88110a0b85501cdb684f3c6a7766c85e04d23644fe21831cb0296e4eb41699720fa3836f070e63b0c943647af9a07f81a4317a49a51a523c6ab092d5e57089255011fe6a12044bbb20188a16bdf94d2924dd9ed2b4802bddf3c2dea3a7fbb81aa03aa6487061e79333fc97b2b650538c9715057ea94b71b8f9efa9ac5070140863942d4fb36e90a86c0d0ddb9ea14cf191745d5fe2270049002e812872acae8e4bff9c608071f07920434603430b96625a82a2764f26f41858406ae6c85f35b07225f40221b89310aa5f5f8077eacb9c93e0abb66230eb2eea0474a95d4ffb1160a9d156b817701aa272909e445d43053821a13335db5b2d32371b0333104751bd85888cc0110137dcd9ca03d847675378a3dcc11620d2da3857c6d6bfb84a62b001613475e13b201da06d6663f74a8edee1c9660ad7302227cf345afbf1034b67732c001aa14e6767595034fc906069a95bdef9ac7aa9f478729546ccc136d57e4d720cd282d5c5ac404f6d3f5c1f060b887343b852b2d493e3dd9aee51b709c2d1f99351b9a48aa6e0e46271d7342d4ac9cf9acd9555c835a4edfa07b8ab16c812db6abb96c1e944a9268df2a8f7818327155a666afc8ecbde8f179e44b1f2b58b8fc1e3e6fbc1383b8ae698227d5a3dcabc9848daf438df9d5fb35c7eef96c27afbd06986aa19fcae9a1fff54c7804b6bec2c8c070ba255acc7f2dfbd956c651e99c638a98b96df477a2dbfad23857c13474b7a5cdd63861ac6c5048a2c834a8fbea36258f033dea1090046a831190f2cff016b854e0fd1c8f449825dc000e58d72021729f9e3ce7a9c6c3c971deae71ba6b37a25339a22c2caf1f1c60d3fc7bfa9e85928c1ad5dcb2bb36c787a8865ff7e927873816fad119a73abf8d1212396b54db7860b78c5fc543ec55e8036aa791c6cfeed060f19165b1f85c63b70e1acf878163f9c25c6aeb77fc4ccbe2043c1aba4bae98efdafb71489042f2276e777d4b4c17cf9cc0adf498d6a745df7c91b6abe6daeb2ad697be9309fe78d2eae894467b9dae14760c517d574462cbbf8b60da18f50bed710b9b8a0534203d7236e6bc34e9eace90982b497547dfd342a2e1bc26b0a71ff3736114f702889a3e9f61a3693a7d74e58a55fa1f5445260dbb16e43e28ca08202c23181c059f401075c174b83c3c20663be4ae5a1034117150b0f5c3ddbff7be8ec4162b6c39738bc14aa3c11f7ca80e5d42413c8c93900045d86a022fdf1701cb7a9f37c016bf6b588a09b8e5217fe00806f0e0d31249e77ef9caf4e5c283dc800972c8c284a838ce2b120cad92180baa9aa24f82da5c2d8f01f39a2c719ab168cdeaaff6a6c5359e9479239ae2cf8e9f176b3abe5877d736c26dfa563af1c0f0ffacff2bcad469d43b55b27e043632d42587737c4bb4a6b408ed6ee304b781286546f69a4147a273d58d250f86c58bca6604e09aa9342ccf260d6856532b89eec88bf5d5398a163851b450fe90545bb62521770f98e84480eefcb54462a5a6100f94a1c2b0c8b54b07363f7acd2eb56d3c421c12d81b1e7a70d077406ba654163676de11669c533e3ed448ed52ddade41a6681382a18017d4eee8cd5f3cc53b0c")] }, error: Response(electrum1.cipig.net:20008, Object({"code": Number(1), "message": String("the transaction was rejected by network rules.\n\n\n[0400008085202f89000244e3863d0d00000017a914a43bcfb84160e5c901d355ea44f2c552f9c2ac708700000000000000006e6a4c6b6304d91ad267b175210321e52c5468f013db889fe2b8a4d07f879feb81e3eada6959aff3978a9812e703ac6782012088a914bc3416c662080ee7929d1ef6c55451c016721fe58821039bb08d2c722a088e22715b7177c5cde32887ceb0905f8d9804a81092b1e7e651ac68000000003c0d33002ce7863d0d0000000275dda3d466ce11de1b91b81622120fa2762fc4718ca8a5f70ee057f32bde3fede39c0d762fc6862356c4872299d5528c1b6cdf6f7a8336191ae00d4d6de4c9667c4821c4527c6e8e873ef08a62ad2fb32f3bc6ddf9addd0c5dbcc1fe0709399b64f0de1c7af8143d7d3cd2edac745db4c5b2ea297fbcc229b7f5bffed17d5bd88e743451343708b8589c0919a1150e015192476699865034b4a3d936ff80783d3cf3c5b44a4a43adb7b67d02f24a84fa8ca18447868faef09bd4bf0caeac1706033aadb02e6fada0b1eb5032a4aacd4e7f51215045f294495fe1d681fd8663d815fa7f95b69cced526534eadc8e70e37b6b603ed24a031cd2e884d6d98cff7b49b4b23bc57d92097b592934e57b09eeeabe1c21649478c2ddd2fcf64cd6c922dc1baa514dc91b6e68a7ddc8623d85bf46111a9acee44b0b78b06cde7ac838799a9df193034acb1bbe956c5dfe47e92b6d8f40935aaeaefbd79d4eb0bada07768f2efa645773a677a3962d0e0308965372f6fd824912d5e9e0b4035c81c38a90804fd776bfa553e724d3839bb394e8fe56f744a7d50a120755b011d1eb836486ce39c0d762fc6862356c4872299d5528c1b6cdf6f7a8336191ae00d4d6de4c966cfb07b7d37311055791d604375c5f603797064399fdc93b68bbc01ec2bd12c6e1de0b7b6e4cf3ce264cd62cb06151fb2280f675eacf1143b548114247ce159e0ad5cc5778a099e6098dacd2369b09e042a273d0e7a2c457b7b975b191ef25ce055a7101e0fa7b4edd7242c3241733850a57313f5e3ddcd381c53a1f11f29a4b27aafbe5224c94d922e769355524fb8d4a15a963689c8aaffd88509f1ba9368ec06366dc2db4293be490db6cb63189e2cadcf5c9d86179411e1d91c0a54bb41202c96bf72902ee494a77dbde9248eac34944e8ba4d321d0e694314d8438c8f0c9001585bc93ec6ad467300aa303c048696e9f9b967eb0896deaa19de1dd78a26f3e1d05bb3e3f6089e94f44704ea424e65edba94973a34b05994c33f3bd2969809b8a3500a71821721761fb8a741111e24dacf3f8ac078024b02b782efd459a0a02138d9261a855a278b01016519579891354c2d30d973293195f72e8d01dad4a67f5b1246eb4da86005e0b42a8177f7d542a76f4bdb7ffbc5897cbdb96c5b4f13225ffe09f264985f35b93ac81c1bb322dcdf79d081a9d344dbaa981ce27ba54c884a3cccbe2297c540e1989bec22baffac920855d578aab937692293212e9f08bfb6b2cb218c6bc9728f1d011abca7af8c9c73074bc8251d34762a42dd3626ea1b90a65446e1e9b81a6427c76750eaaaf1ecbe522abec9a41b8fc8d0b02f3876ee2076f85faa6dcfa45ef4631668382339727c6194fc6b342faa8ab597bb37074ce55cefdd4ef7d9c99d362e5f973e846d1db8bd900f1db0cb59aa4844b88c51dafc8eb05f257f72b29bc9321b88f8b45411fcae0b981c593af14f7ec41195a79b191737e4bacf4d779190ed7ef3c3570a17b2147b147b33eabb57fa4ed277ba9c7383f628d8701d89ef85477ccf6cd5511311a5e4e854a76991544a428d24d6c8759b60c57b419ce6b9ce87bd596d8cd5e0745a6d6dc2982645400202c039b91b35ecb148ee88b9fe13031beaaf849f5447e5a5b20e20a246b023a3f6736239e08a310cde1b45dd99f307a2b7b86074afbd83939702184f1ed01a7bf88c38b00b0b5b5e128b58cc8e0e0ecd6cd3e488e2d367774fe87adbf3e63a37839b76288b2c2e656f9b970ce30a5306f57a486d670682593d4be96f6d133a4eac03cda632ce87da3f2a1525e60149aab132466dc5470afc10f5be1ddfd97196580ce758d939eb4f88593f3ffaa33237c77825a1693d16c8e080f1c31a63c87e3bb1615eebdcacf366b4f8c3d07ebc4f37d97fa56d6ac147cd58d243af0d29673177b48d614fcc49cc010fd1eb8d32453b1d0a007a01162cc00190b1f443dde5256a31b56d8bbdecc266b1d0f43b583dd1e3aee9fddf0085c5cea2a9875954fb5e6b97b9ed2fcaf957f17ecbe7d5c96034b7b3d0116405bfcd1da44a9821281d227e8ae8cd0026d152a711e7f4813bca46b2b2b64ea236c6d09bc476d91fef47c422287e34999c3d388c90ed1735207cf414e3f1474aea1f9847f5c73786f9ff2d8f4d70c75be665d09e38190bee27adb2b24bd29310996e6671fe0f643f773c6e3242f19542427f494a49edcb539b70ccbebfb88110a0b85501cdb684f3c6a7766c85e04d23644fe21831cb0296e4eb41699720fa3836f070e63b0c943647af9a07f81a4317a49a51a523c6ab092d5e57089255011fe6a12044bbb20188a16bdf94d2924dd9ed2b4802bddf3c2dea3a7fbb81aa03aa6487061e79333fc97b2b650538c9715057ea94b71b8f9efa9ac5070140863942d4fb36e90a86c0d0ddb9ea14cf191745d5fe2270049002e812872acae8e4bff9c608071f07920434603430b96625a82a2764f26f41858406ae6c85f35b07225f40221b89310aa5f5f8077eacb9c93e0abb66230eb2eea0474a95d4ffb1160a9d156b817701aa272909e445d43053821a13335db5b2d32371b0333104751bd85888cc0110137dcd9ca03d847675378a3dcc11620d2da3857c6d6bfb84a62b001613475e13b201da06d6663f74a8edee1c9660ad7302227cf345afbf1034b67732c001aa14e6767595034fc906069a95bdef9ac7aa9f478729546ccc136d57e4d720cd282d5c5ac404f6d3f5c1f060b887343b852b2d493e3dd9aee51b709c2d1f99351b9a48aa6e0e46271d7342d4ac9cf9acd9555c835a4edfa07b8ab16c812db6abb96c1e944a9268df2a8f7818327155a666afc8ecbde8f179e44b1f2b58b8fc1e3e6fbc1383b8ae698227d5a3dcabc9848daf438df9d5fb35c7eef96c27afbd06986aa19fcae9a1fff54c7804b6bec2c8c070ba255acc7f2dfbd956c651e99c638a98b96df477a2dbfad23857c13474b7a5cdd63861ac6c5048a2c834a8fbea36258f033dea1090046a831190f2cff016b854e0fd1c8f449825dc000e58d72021729f9e3ce7a9c6c3c971deae71ba6b37a25339a22c2caf1f1c60d3fc7bfa9e85928c1ad5dcb2bb36c787a8865ff7e927873816fad119a73abf8d1212396b54db7860b78c5fc543ec55e8036aa791c6cfeed060f19165b1f85c63b70e1acf878163f9c25c6aeb77fc4ccbe2043c1aba4bae98efdafb71489042f2276e777d4b4c17cf9cc0adf498d6a745df7c91b6abe6daeb2ad697be9309fe78d2eae894467b9dae14760c517d574462cbbf8b60da18f50bed710b9b8a0534203d7236e6bc34e9eace90982b497547dfd342a2e1bc26b0a71ff3736114f702889a3e9f61a3693a7d74e58a55fa1f5445260dbb16e43e28ca08202c23181c059f401075c174b83c3c20663be4ae5a1034117150b0f5c3ddbff7be8ec4162b6c39738bc14aa3c11f7ca80e5d42413c8c93900045d86a022fdf1701cb7a9f37c016bf6b588a09b8e5217fe00806f0e0d31249e77ef9caf4e5c283dc800972c8c284a838ce2b120cad92180baa9aa24f82da5c2d8f01f39a2c719ab168cdeaaff6a6c5359e9479239ae2cf8e9f176b3abe5877d736c26dfa563af1c0f0ffacff2bcad469d43b55b27e043632d42587737c4bb4a6b408ed6ee304b781286546f69a4147a273d58d250f86c58bca6604e09aa9342ccf260d6856532b89eec88bf5d5398a163851b450fe90545bb62521770f98e84480eefcb54462a5a6100f94a1c2b0c8b54b07363f7acd2eb56d3c421c12d81b1e7a70d077406ba654163676de11669c533e3ed448ed52ddade41a6681382a18017d4eee8cd5f3cc53b0c]")})) }))
taker_swap:1719] mm2src/coins/z_coin.rs:1354] mod:717] client:885] Rpc(ResponseParseError(JsonRpcError { client_info: "coin: ARRR", request: JsonRpcRequest { jsonrpc: "2.0", id: 14, method: "blockchain.transaction.broadcast", params: [String("0400008085202f8900022e26432c0d00000017a9149b0fb35fe9dc3bd51f8c05dd7ab5eba725c5d2a28700000000000000006e6a4c6b63041f25d267b175210347566c1398f88e2f83c259c3e29b93b3659eca797f406625eb8cc28dc727e3dfac6782012088a9144dc7b15eae992805ce64337dc4b3a65ff26e77b38821039c347e6d6858aa928210a61ca014e35c55d1d10aa0ccb2696f43588990fe983cac6800000000640d3300162a432c0d000000021450d290a26444bb27d1bafbb9b0f1aa792fec2c7d21fbfc620c66d520a9373d168b6712e2c601169925e7e10c7914fefbfdc5c7679d0653791aa52f21b1c763b8f6357413b5034123d57f374aa71fd3021d16d6f021f2e7996406eb401c0251b1ebb60c6d9aa46e23a55926a8dae070b951921179ee1e888b106cee1f585a99aec2c2d2306f11585aba0ac2862fe31cf6b108740d8b5e1dd0245636ab52933ce1cb1b7052993fa42408b344c9d56140a8e7fa58bb8319cbef9f8b5c1c0d65fd452e6f2411140091f2e085d9e8b74cea8b6ee40868f746ba4ff4908570ad80b70f457bfbfec846b1ed12f1d34fbcde958acc54b8c99abf0390e639c7d2500e6b0d9e2ff401a08ea2168e95ff0db4a443880732a3245d690fa9a0de96e688a19e12de233fff06562271c7361ed95fbaed6c22041f19037cd15b9aac7c77215473d5f40f1d81f554bda2b0bd21e589f42375e073ea8f865b9c1b662d773e1baa9000d4fd3f848df58957598aec328daa7c97f07e6b08cc88776b60bf08fa2cd800bafe1bb105269527085cc34f2861b73d09b417c06f50403f34a00484d8145e4a168b6712e2c601169925e7e10c7914fefbfdc5c7679d0653791aa52f21b1c763cfb07b7d37311055791d604375c5f603797064399fdc93b68bbc01ec2bd12c6ec55fc5f788ba8fb043b8e9acaaa6992eeffb034fd79e873f210ea1cc994d715a81fecbf33ac1c4b5451931a2cf59d90db6733baeec62be1c1c6fa229ca6d580ef28974908c9946c3176fa8456b4c23b687f9d153a526b6952a44b7c16757179c8799230003c5a26972e10957f7d579dcdef09f5cad970535e11e094186fed7ac0525e220439424b4013e3e7d1220a5c421c648848242060cae622635a1ea5f5aacd8d9286235061d7cb5f1eae47ab1ba852ee8eed46af20f66f657cf1c78133f334c2c632c09b196ca84f691a1a2c1a2c104a4625a3b45f8a43e2f39cd61cf6679c7f848e9243919d7defeb20461a62e07e4ad9fff161b9dd73ba45d754a3b0e99c6e3cd774a55e65073396c9524723f0dc0c17537555912ae65ba718a0ec90002901a2cdb3cd46cf2a4c2e11f6bda0c9e71739aa3d86691e8f7bb1ab90169868e0d1b94e7bd8ef74586d6e59ca8ec4dd043ae8a5ba78396479e22fe0e46e2b0257a286ccf880fc5f64770cf0f2d1e2361c8ef5614abd41ddd001c0fbfb8f12eaea2db1f2369bbafdf7a68e18f0d3a612d0284e057f555202fb191230e49361f4e758628ff881b048dd949bd32b4c4b80a404ad8233e330797501d6777392b55bfc1e8eb8d25ab54f35d7ae12f5abf44448ad3cc093dad43bd481c6cc90990ba803f45fa4dc3e83e6d5e067f7346cdaeb5fba3d5201f362a622a3717bd5f7c85af65e68744df4e5a19329e6623254227f5bf463a430ad05791d01677da32892af4c513b9607143bf274588dd15ff67f28afee3433811d961f26bf5519e2a2211366181fc98567093c5333b21dfcd89bd53ed8f68d0788544b58a04f95643d72a8f875c21b92861fdc2cb121b335d3d0e2411a89adc48be3f92ffd704077794087def6d309db7a8b679f6a4a4532afe13cb34e2e519c60e77ff3583080babb4515923f145c340913dc2633e8fb67c488de218c8592bb3670258f9dcaac9f911b94a6953284fa888fc085993d1691938d7c613816d4bae29ebe59e5d08bc82e763ad49952bfa7dbd2783ab0afc06c730a58ac5e9b7332af07be3bae157f729bbc91c0b95186d022f1d9f9d1fcccf92a9eecfa8f64d641fd89179e62ba38c1b2bba277f709a065119e9531b2f02f13d62b11e2b8a688b86e18ccfcfb5facce13e1cf784cf5d4a19ae286390d8a9fe7a3fcbdc5e90beb8038630d63c9ec7e4aebf066a541eaa81083bcff397373cb0967d01bbd7068c8e55bcd948c594eb996f099e6cf1496ef280b49ea18e780c47313e8a587a95274a437f371b3fee40a634ef5be6dc3f190d2854230fc134642edffb8109c8a9098d384b97c10a58c8b9b7b85280806a6e69be55e5ceb70b099e85e9e2b36261283f2068c690e121e6716cd17f39e2ca8784c7e9c5e1c5b6efb8b25cdd7ed24d40c97d309aaaeaafe239b86bcef4d90aeb51cae91c5f844f2ee81031386df4a8676493daa47fa260eefc9ca3d5d199bd73878de6619c85fede47cd587aa2019ba204b83593854a2b00aa06d5fe4eef20b28b8ab0bf30e68a44a572b98f4d7c292871d57eadbeac25d3b9ab214e27f9118a3b2b39ef16ae7eb19dec0f47c1b511147811194e8fa6dca5d452792db95ca48ee60443754d6ac3ceb4d9f98f90cb9275a91f939b5f0de3399a3477c56f1372826e97389a4e2959ea30f028dc31c3b8c329104b16dac53173a2cde16422a0b8d4fd5503b25ffe6f157f7e82ec790aa6e7ca56ac6a88f5dfbe0e635be8810600e47fcd96ee7bdbd99ba8add3d51611dcb18a014ffdb02802b6a649e43fb011b26b0c7be043ddd7bbb93c25dfd9b6ffdfcc3c1421435c731e3f69658d6aaa96efd21046eb4c18912e727e7d5d0f5c06dfe69548c2989c395220724dbb797c2154fcf4cd13a96d40cc7a9889f0fb756cfa94cae571cf439145af35ec1386ed3383fbdd93bf71b5f4cb6a18983031fd8639d2438768c0e2cbd63adef720a49c4bf2d798a9facc892a54d126d847191f5eb1cfebbe9f307d9f363c055ac4d9d7bffd073cd085e7e794ddc8e02aa6688ed94a60ba1c7fd19324df1e69ad36e8d9b91fa37fd66914bb8aca397a145552d7ff5835248f5794e6a24b8a167014011a0d7051a61a4f89102f140f73ad64e5f523f0edb5d9044eb3786afa0fc8793378a81c53812c4a1158210687b05334b074f40aab334b0c663bb564a7c015bfb16bd9a44b828968f1975bc2179a9abb98d255a3af9b658de942e1f3e2b8ec4b37a6491dd9bd7d8e9d1efabb786662f9ad19865eb47b98cd9459bcea472b26256b26072d520c52cf2063b461f572da59ff720e6ce4722db41941fa342dbdc1d5394e33b0b3377044ccd997ca7f757bb8d6c734a4bfb70c91bab2a3ae5b79247733e0ba4eff56d75652846563331934fde1030283d73874dbcf7c21160c834630f3d4f631594c3ead9214faaae1709b2dabc42e58b402a3bfc8fd3a153a3cba026d73dc9fbc8cb53c49988b34cdfe73e01dab8086ddaffe607fa263c8af06909b0770472cfd28752bb1c7e8e62d65222a73e390f544d67b41161e9d355b8ff137954dc658a5f8bad4a3335b1d9d6aea3005b7e3bd967795b282c3aeffc2a99f256a9403632894eca98012434ac7d46a15f23290d5b65deb4d137d05170e09bdaafe8dbf996ef4772da7a05f7a11e436ccff3911ac9ec9ad8c927e3907c77842a3a71d5c8cb1c1626608cb0d7508d501a18a72f334e711403b29630003963401626a7a1779019b964d6a7f91dcc0ac3fc5444c3426f9a20e009aa8af3d14d9521acfc628bee5d9f4a9e6f9b23c58b11fcbf0e1a87f7c8bad1ebedeed9a5689fbfafc0e115168ae7a3301d96a7f1f44b490a0d8e3c4333700a79f11878311d7319840dac18bbb872976932a6fd4f55d10dfda4174ad9199189e81c86aca754d62610eb2b8bf1a94b56b45110f23cff5e8591078b7925e5d81cb1665dae6084729012f7c05681e974abb9747e7adca572af3bcbb153c20c11eb9f7f5b6f35af171a27564f6cad1cd07899bc376b49bb171408c30fd5f9c428863c3c008362c55810fa8fa96e73c5bac9dae9800dcfbf52aaaa4dd25501a8a725f74c3a418512e61259baae22f6af1bd897d78443165cfb27bce1b65fb7a69ee8b53f70b4a7bb3adaabdd6c1083804e74f7ada01")] }, error: Response(electrum1.cipig.net:20008, Object({"code": Number(1), "message": String("the transaction was rejected by network rules.\n\n\n[0400008085202f8900022e26432c0d00000017a9149b0fb35fe9dc3bd51f8c05dd7ab5eba725c5d2a28700000000000000006e6a4c6b63041f25d267b175210347566c1398f88e2f83c259c3e29b93b3659eca797f406625eb8cc28dc727e3dfac6782012088a9144dc7b15eae992805ce64337dc4b3a65ff26e77b38821039c347e6d6858aa928210a61ca014e35c55d1d10aa0ccb2696f43588990fe983cac6800000000640d3300162a432c0d000000021450d290a26444bb27d1bafbb9b0f1aa792fec2c7d21fbfc620c66d520a9373d168b6712e2c601169925e7e10c7914fefbfdc5c7679d0653791aa52f21b1c763b8f6357413b5034123d57f374aa71fd3021d16d6f021f2e7996406eb401c0251b1ebb60c6d9aa46e23a55926a8dae070b951921179ee1e888b106cee1f585a99aec2c2d2306f11585aba0ac2862fe31cf6b108740d8b5e1dd0245636ab52933ce1cb1b7052993fa42408b344c9d56140a8e7fa58bb8319cbef9f8b5c1c0d65fd452e6f2411140091f2e085d9e8b74cea8b6ee40868f746ba4ff4908570ad80b70f457bfbfec846b1ed12f1d34fbcde958acc54b8c99abf0390e639c7d2500e6b0d9e2ff401a08ea2168e95ff0db4a443880732a3245d690fa9a0de96e688a19e12de233fff06562271c7361ed95fbaed6c22041f19037cd15b9aac7c77215473d5f40f1d81f554bda2b0bd21e589f42375e073ea8f865b9c1b662d773e1baa9000d4fd3f848df58957598aec328daa7c97f07e6b08cc88776b60bf08fa2cd800bafe1bb105269527085cc34f2861b73d09b417c06f50403f34a00484d8145e4a168b6712e2c601169925e7e10c7914fefbfdc5c7679d0653791aa52f21b1c763cfb07b7d37311055791d604375c5f603797064399fdc93b68bbc01ec2bd12c6ec55fc5f788ba8fb043b8e9acaaa6992eeffb034fd79e873f210ea1cc994d715a81fecbf33ac1c4b5451931a2cf59d90db6733baeec62be1c1c6fa229ca6d580ef28974908c9946c3176fa8456b4c23b687f9d153a526b6952a44b7c16757179c8799230003c5a26972e10957f7d579dcdef09f5cad970535e11e094186fed7ac0525e220439424b4013e3e7d1220a5c421c648848242060cae622635a1ea5f5aacd8d9286235061d7cb5f1eae47ab1ba852ee8eed46af20f66f657cf1c78133f334c2c632c09b196ca84f691a1a2c1a2c104a4625a3b45f8a43e2f39cd61cf6679c7f848e9243919d7defeb20461a62e07e4ad9fff161b9dd73ba45d754a3b0e99c6e3cd774a55e65073396c9524723f0dc0c17537555912ae65ba718a0ec90002901a2cdb3cd46cf2a4c2e11f6bda0c9e71739aa3d86691e8f7bb1ab90169868e0d1b94e7bd8ef74586d6e59ca8ec4dd043ae8a5ba78396479e22fe0e46e2b0257a286ccf880fc5f64770cf0f2d1e2361c8ef5614abd41ddd001c0fbfb8f12eaea2db1f2369bbafdf7a68e18f0d3a612d0284e057f555202fb191230e49361f4e758628ff881b048dd949bd32b4c4b80a404ad8233e330797501d6777392b55bfc1e8eb8d25ab54f35d7ae12f5abf44448ad3cc093dad43bd481c6cc90990ba803f45fa4dc3e83e6d5e067f7346cdaeb5fba3d5201f362a622a3717bd5f7c85af65e68744df4e5a19329e6623254227f5bf463a430ad05791d01677da32892af4c513b9607143bf274588dd15ff67f28afee3433811d961f26bf5519e2a2211366181fc98567093c5333b21dfcd89bd53ed8f68d0788544b58a04f95643d72a8f875c21b92861fdc2cb121b335d3d0e2411a89adc48be3f92ffd704077794087def6d309db7a8b679f6a4a4532afe13cb34e2e519c60e77ff3583080babb4515923f145c340913dc2633e8fb67c488de218c8592bb3670258f9dcaac9f911b94a6953284fa888fc085993d1691938d7c613816d4bae29ebe59e5d08bc82e763ad49952bfa7dbd2783ab0afc06c730a58ac5e9b7332af07be3bae157f729bbc91c0b95186d022f1d9f9d1fcccf92a9eecfa8f64d641fd89179e62ba38c1b2bba277f709a065119e9531b2f02f13d62b11e2b8a688b86e18ccfcfb5facce13e1cf784cf5d4a19ae286390d8a9fe7a3fcbdc5e90beb8038630d63c9ec7e4aebf066a541eaa81083bcff397373cb0967d01bbd7068c8e55bcd948c594eb996f099e6cf1496ef280b49ea18e780c47313e8a587a95274a437f371b3fee40a634ef5be6dc3f190d2854230fc134642edffb8109c8a9098d384b97c10a58c8b9b7b85280806a6e69be55e5ceb70b099e85e9e2b36261283f2068c690e121e6716cd17f39e2ca8784c7e9c5e1c5b6efb8b25cdd7ed24d40c97d309aaaeaafe239b86bcef4d90aeb51cae91c5f844f2ee81031386df4a8676493daa47fa260eefc9ca3d5d199bd73878de6619c85fede47cd587aa2019ba204b83593854a2b00aa06d5fe4eef20b28b8ab0bf30e68a44a572b98f4d7c292871d57eadbeac25d3b9ab214e27f9118a3b2b39ef16ae7eb19dec0f47c1b511147811194e8fa6dca5d452792db95ca48ee60443754d6ac3ceb4d9f98f90cb9275a91f939b5f0de3399a3477c56f1372826e97389a4e2959ea30f028dc31c3b8c329104b16dac53173a2cde16422a0b8d4fd5503b25ffe6f157f7e82ec790aa6e7ca56ac6a88f5dfbe0e635be8810600e47fcd96ee7bdbd99ba8add3d51611dcb18a014ffdb02802b6a649e43fb011b26b0c7be043ddd7bbb93c25dfd9b6ffdfcc3c1421435c731e3f69658d6aaa96efd21046eb4c18912e727e7d5d0f5c06dfe69548c2989c395220724dbb797c2154fcf4cd13a96d40cc7a9889f0fb756cfa94cae571cf439145af35ec1386ed3383fbdd93bf71b5f4cb6a18983031fd8639d2438768c0e2cbd63adef720a49c4bf2d798a9facc892a54d126d847191f5eb1cfebbe9f307d9f363c055ac4d9d7bffd073cd085e7e794ddc8e02aa6688ed94a60ba1c7fd19324df1e69ad36e8d9b91fa37fd66914bb8aca397a145552d7ff5835248f5794e6a24b8a167014011a0d7051a61a4f89102f140f73ad64e5f523f0edb5d9044eb3786afa0fc8793378a81c53812c4a1158210687b05334b074f40aab334b0c663bb564a7c015bfb16bd9a44b828968f1975bc2179a9abb98d255a3af9b658de942e1f3e2b8ec4b37a6491dd9bd7d8e9d1efabb786662f9ad19865eb47b98cd9459bcea472b26256b26072d520c52cf2063b461f572da59ff720e6ce4722db41941fa342dbdc1d5394e33b0b3377044ccd997ca7f757bb8d6c734a4bfb70c91bab2a3ae5b79247733e0ba4eff56d75652846563331934fde1030283d73874dbcf7c21160c834630f3d4f631594c3ead9214faaae1709b2dabc42e58b402a3bfc8fd3a153a3cba026d73dc9fbc8cb53c49988b34cdfe73e01dab8086ddaffe607fa263c8af06909b0770472cfd28752bb1c7e8e62d65222a73e390f544d67b41161e9d355b8ff137954dc658a5f8bad4a3335b1d9d6aea3005b7e3bd967795b282c3aeffc2a99f256a9403632894eca98012434ac7d46a15f23290d5b65deb4d137d05170e09bdaafe8dbf996ef4772da7a05f7a11e436ccff3911ac9ec9ad8c927e3907c77842a3a71d5c8cb1c1626608cb0d7508d501a18a72f334e711403b29630003963401626a7a1779019b964d6a7f91dcc0ac3fc5444c3426f9a20e009aa8af3d14d9521acfc628bee5d9f4a9e6f9b23c58b11fcbf0e1a87f7c8bad1ebedeed9a5689fbfafc0e115168ae7a3301d96a7f1f44b490a0d8e3c4333700a79f11878311d7319840dac18bbb872976932a6fd4f55d10dfda4174ad9199189e81c86aca754d62610eb2b8bf1a94b56b45110f23cff5e8591078b7925e5d81cb1665dae6084729012f7c05681e974abb9747e7adca572af3bcbb153c20c11eb9f7f5b6f35af171a27564f6cad1cd07899bc376b49bb171408c30fd5f9c428863c3c008362c55810fa8fa96e73c5bac9dae9800dcfbf52aaaa4dd25501a8a725f74c3a418512e61259baae22f6af1bd897d78443165cfb27bce1b65fb7a69ee8b53f70b4a7bb3adaabdd6c1083804e74f7ada01]")})) }))

I have additional fixes lined up that should limit the occurrence of failing txs due to this

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants