Skip to content

fix(zcoin): correctly track unconfirmed z-coin notes#2331

Merged
shamardy merged 86 commits intodevfrom
fix-arrr-note-saving
Jun 13, 2025
Merged

fix(zcoin): correctly track unconfirmed z-coin notes#2331
shamardy merged 86 commits intodevfrom
fix-arrr-note-saving

Conversation

@borngraced
Copy link
Copy Markdown

@borngraced borngraced commented Jan 29, 2025

fixes #2273

@cipig
Copy link
Copy Markdown

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
Copy Markdown
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
Copy Markdown
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
Copy Markdown

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
Copy Markdown

cipig commented Jan 30, 2025

@borngraced
Copy link
Copy Markdown
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
Copy Markdown

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 cipig and smk762 February 3, 2025 03:34
@cipig
Copy link
Copy Markdown

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
Copy Markdown
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
Copy Markdown

@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
onur-ozkan
onur-ozkan previously approved these changes May 29, 2025
Copy link
Copy Markdown

@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.

dimxy
dimxy previously approved these changes May 31, 2025
Copy link
Copy Markdown
Collaborator

@dimxy dimxy left a comment

Choose a reason for hiding this comment

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

Approving.

As a TODO list for this code:

  • I think wait_for_spendable_balance_impl loop is better to be integrated with the main light_wallet_db_sync_loop (like all other chain watchers)
  • ideally the locked_notes db should be executed within one database transaction together with librustzcash wallet db updates.
  • Good to store unconfirmed change output in a db like the locked_notes db, to show accurate unspendable balance

The above 2 issues could be resolved when we migrate to a newer librustzcash which supports tracking spent notes and unconfirmed change.

@cipig
Copy link
Copy Markdown

cipig commented Jun 10, 2025

can i please have a new build of this?
the old ones were removed from https://sdk.devbuilds.komodo.earth and i use it everywhere since it's the only build with working ARRR swaps
or just merge this PR to dev ;-)

@shamardy
Copy link
Copy Markdown
Collaborator

or just merge this PR to dev ;-)

Will check it and merge it asap, sorry that this slipped through the cracks

@shamardy
Copy link
Copy Markdown
Collaborator

As a TODO list for this code:

  • I think wait_for_spendable_balance_impl loop is better to be integrated with the main light_wallet_db_sync_loop (like all other chain watchers)
  • ideally the locked_notes db should be executed within one database transaction together with librustzcash wallet db updates.
  • Good to store unconfirmed change output in a db like the locked_notes db, to show accurate unspendable balance

I think I should include these as todos in the code instead of opening issues for them. Will do while reviewing.

shamardy added 6 commits June 10, 2025 22:07
- Restores previous dependency tree
…exedDB schema

- Switch LockedNoteTable::on_upgrade_needed to `while old_version < new_version` pattern.
- Enables future schema migrations and aligns with IndexedDB best practices.
…sError, remove unused NeededPrevTxConfirmed variant
…nding spent and change notes

Previously, the "unspendable" shielded balance for ZCoin (Sapling) was calculated as the sum of all locked notes' values. This was inaccurate: locked notes represent inputs of pending (unconfirmed) spending transactions, which, once confirmed, will be removed from the balance and replaced by their change outputs. The user should not see the value of spent notes as unspendable, but rather the value of change outputs from pending (unconfirmed) transactions.

This commit refactors the locking database and balance calculation as follows:
- The locked notes tracking now distinguishes between two types:
    - `Spent`: notes being spent in a pending tx (should not be shown as available, nor as unspendable)
    - `Change`: pending change outputs from unconfirmed txs (should be shown as unspendable until confirmed)
- The balance calculation now:
    - Excludes all `Spent` notes from the spendable balance.
    - Sums all `Change` notes' values as the true unspendable shielded amount.
    - Only change outputs from pending txs are shown as unspendable, providing a more accurate user balance.

This ensures that shielded balances display correctly:
- Spendable: Only notes not being spent by any pending tx.
- Unspendable: Only unconfirmed change outputs.
- Spent notes' value is not shown at all after a send, matching expected wallet behavior.
@shamardy
Copy link
Copy Markdown
Collaborator

@cipig please test latest commit and that it now produces the correct unspendable balance while keeping the behaviour as before.

@cipig
Copy link
Copy Markdown

cipig commented Jun 12, 2025

@cipig please test latest commit and that it now produces the correct unspendable balance while keeping the behaviour as before.

tested and works fine
tracked balance/unspendable_balance during swaps and it was what i expected

@shamardy shamardy changed the title improvement(ARRR): improve shielded transactions change notes handling in swaps fix(zcoin): correctly track unconfirmed z-coin notes Jun 13, 2025
@shamardy shamardy merged commit 0d2d1f8 into dev Jun 13, 2025
22 of 26 checks passed
@shamardy shamardy deleted the fix-arrr-note-saving branch June 13, 2025 02:18
dimxy pushed a commit to dimxy/komodo-defi-framework that referenced this pull request Jun 27, 2025
* dev: (30 commits)
  chore(core): replace hash_raw_entry with stable entry() API (GLEECBTC#2473)
  chore(core): adapt `MmError` and usages for compatibility with new rustc versions (GLEECBTC#2443)
  feat(wallet): add `delete_wallet` RPC (GLEECBTC#2497)
  chore(release): add changelog entries for v2.5.0-beta (GLEECBTC#2494)
  chore(release): bump kdf version to 2.5.0-beta (GLEECBTC#2492)
  feat(tests): zcoin unit test to validate dex fee (GLEECBTC#2460)
  fix(zcoin): correctly track unconfirmed z-coin notes (GLEECBTC#2331)
  improvement(orders): remove BTC specific volume from min_trading_vol logic (GLEECBTC#2483)
  feat(ibc-routing-part-2): supporting entire Cosmos network for swaps (GLEECBTC#2476)
  fix(startup): don't initialize WalletConnect during startup (GLEECBTC#2485)
  fix(dns): better ip resolution (GLEECBTC#2487)
  improvement(event-streaming): strong type streamer IDs (GLEECBTC#2441)
  bump timed-map to `1.4.1` (GLEECBTC#2481)
  improvement(RPC): unified interface for legacy and current RPC interfaces (GLEECBTC#2450)
  improvement(tendermint): `tendermint_tx_internal_id` helper (GLEECBTC#2438)
  feat(walletconnect): add WalletConnect v2 support for EVM and Cosmos (GLEECBTC#2223)
  feat(ibc-routing-part-1): supporting entire Cosmos network for swaps (GLEECBTC#2459)
  fix(test): fix HD Wallet message signing tests (GLEECBTC#2474)
  improvement(builds): enable static CRT linking for MSVC builds (GLEECBTC#2464)
  feat(wallet): implement HD multi-address support for message signing (GLEECBTC#2432)
  ...

# Conflicts:
#	mm2src/coins/qrc20.rs
#	mm2src/mm2_main/src/lp_swap/maker_swap.rs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

priority: urgent Critical tasks requiring immediate action. status: pending review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants