Skip to content

feat(tpu-v2): provide swap protocol versioning#2324

Merged
shamardy merged 16 commits intodevfrom
fix-tpu-v2-wait-for-payment-spend-swap-version
Feb 12, 2025
Merged

feat(tpu-v2): provide swap protocol versioning#2324
shamardy merged 16 commits intodevfrom
fix-tpu-v2-wait-for-payment-spend-swap-version

Conversation

@laruh
Copy link
Copy Markdown

@laruh laruh commented Jan 17, 2025

ref issue #2337

ordermatch structs which got swap_version field:

  • TakerOrderBuilder
  • MakerOrderBuilder
  • MakerOrder
  • MakerReserved
  • TakerRequest

swap structs. if swap started swap_version will be saved in db:

  • MySwapForRpc
  • TakerSwapStateMachine
  • MakerSwapStateMachine
  • TakerSwapDbRepr
  • MakerSwapDbRepr

swap version 2 is tpu v2 protocol
legacy swap protocol is 1 version

When Taker or Maker build order, the value const SWAP_VERSION: u32 = 2; is used for order Builder.
However in create_maker_order/lp_auto_buy if user didnt use ctx.use_trading_proto_v2() in config we set legacy protocol version to the order.

@laruh laruh changed the title feat(tpu-v2) provide swap protocol versioning field feat(tpu-v2): provide swap protocol versioning Jan 17, 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.

Is this blocking anything currently? These changes look like a hacky workaround rather than a being proper solution. It would be great if we can avoid this change.

Comment thread mm2src/mm2_main/src/lp_ordermatch.rs Outdated
Comment on lines +1254 to +1256
fn legacy_swap_version() -> u32 { 1 }

fn is_legacy_swap_version(swap_version: &u32) -> bool { *swap_version == 1 }
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Suggested change
fn legacy_swap_version() -> u32 { 1 }
fn is_legacy_swap_version(swap_version: &u32) -> bool { *swap_version == 1 }
const fn legacy_swap_version() -> u32 { 1 }
fn is_legacy_swap_version(swap_version: &u32) -> bool { *swap_version == legacy_swap_version() }

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Provided const fn 998e75a

@laruh
Copy link
Copy Markdown
Author

laruh commented Jan 20, 2025

Is this blocking anything currently? These changes look like a hacky workaround rather than a being proper solution. It would be great if we can avoid this change.

We need swap versioning to do a legacy fallback on order matching

Comment thread mm2src/mm2_main/src/lp_ordermatch.rs Outdated
Comment thread mm2src/mm2_main/src/lp_ordermatch.rs Outdated
/// In the future alls users will be using TPU V2 by default without "use_trading_proto_v2" configuration.
pub fn use_trading_proto_v2(mut self, use_trading_proto_v2: bool) -> Self {
if !use_trading_proto_v2 {
self.swap_version = 1;
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

we should use a const like LEGACY_SWAP_VERSION (indicating current version this code supports)

Copy link
Copy Markdown
Author

@laruh laruh Jan 21, 2025

Choose a reason for hiding this comment

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

Current version this code/repo supports is this const SWAP_VERSION.
If use_trading_proto_v2:false it means user didnt enable TPU

reused const fn 53d4b40
we need const function for #[serde(default = "legacy_swap_version")], so no need to create one more const variable.

UPD: I refactored this function a bit according to Onur notes, so please check newer commits

Comment thread mm2src/mm2_main/src/lp_ordermatch.rs Outdated
Comment on lines +1420 to +1425
pub fn use_trading_proto_v2(mut self, use_trading_proto_v2: bool) -> Self {
if !use_trading_proto_v2 {
self.swap_version = legacy_swap_version();
}
self
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Why not this?

Suggested change
pub fn use_trading_proto_v2(mut self, use_trading_proto_v2: bool) -> Self {
if !use_trading_proto_v2 {
self.swap_version = legacy_swap_version();
}
self
}
pub fn use_trading_proto_v2(mut self) -> Self {
self.swap_version = legacy_swap_version();
self
}

or, at least rename it to something like maybe_**

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

u suggested to change version to legacy protocol calling use_trading_proto_v2
please re read doc comment

    /// When a new [TakerOrderBuilder::new] is created, it sets [SWAP_VERSION] by default.
    /// However, if user has not specified in the config to use TPU V2,
    /// the TakerOrderBuilder's swap_version is changed to legacy.
    /// In the future alls users will be using TPU V2 by default without "use_trading_proto_v2" configuration.
    pub fn use_trading_proto_v2(mut self, use_trading_proto_v2: bool) -> Self {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

What I suggest is, either remove this boolean from the function and check it on the caller side or declare that in the function name with "maybe" prefix.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

What I suggest is, either remove this boolean from the function and check it on the caller side

I dont get it, on the caller side it is where? Right now it looks like, you call use_trading_proto_v2 and set legacy

    pub fn use_trading_proto_v2(mut self) -> Self {
        self.swap_version = legacy_swap_version();
        self
    }

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

I updated function name e37c74e

Copy link
Copy Markdown

@onur-ozkan onur-ozkan Jan 21, 2025

Choose a reason for hiding this comment

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

I didn't pay attention to the logic, the usage was just unclear. Looking at the logic, it's even more unclear.. Function is called use_trading_proto_v2 but it downgrades version to legacy if given boolean is false.

Why not just this:

    pub fn use_trading_proto_legacy(mut self) -> Self {
        self.swap_version = legacy_swap_version();
        self
    }

and call it only when use_trading_proto_v2 is false?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

the thing is that use_trading_proto_v2 initially is a config boolean flag, so use_trading_proto_legacy is supposed to be a question

ok I refactored function, now its purpose is only to set legacy protocol a62f56a

Comment thread mm2src/mm2_main/src/lp_ordermatch.rs Outdated
Comment on lines +1926 to +1930
pub fn use_trading_proto_v2(mut self, use_trading_proto_v2: bool) -> Self {
if !use_trading_proto_v2 {
self.swap_version = legacy_swap_version();
}
self
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

same as above

Comment thread mm2src/mm2_main/src/lp_ordermatch.rs Outdated
let alice_swap_v = maker_match.request.swap_version;

// Start legacy swap if taker uses legacy protocol (version 1) or if conditions for trading_proto_v2 aren't met.
if alice_swap_v == 1u32 || !ctx.use_trading_proto_v2() {
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Suggested change
if alice_swap_v == 1u32 || !ctx.use_trading_proto_v2() {
if alice_swap_v == legacy_swap_version() || !ctx.use_trading_proto_v2() {

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Done d4c5a16

Comment thread mm2src/mm2_main/src/lp_ordermatch.rs Outdated
let bob_swap_v = taker_match.reserved.swap_version;

// Start legacy swap if maker uses legacy protocol (version 1) or if conditions for trading_proto_v2 aren't met.
if bob_swap_v == 1u32 || !ctx.use_trading_proto_v2() {
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Suggested change
if bob_swap_v == 1u32 || !ctx.use_trading_proto_v2() {
if bob_swap_v == legacy_swap_version() || !ctx.use_trading_proto_v2() {

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Done d4c5a16


wasm_bindgen_test_configure!(run_in_browser);

const LEGACY_SWAP_V: u32 = 1;
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

legacy_swap_version can replace this need

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Done d4c5a16

Comment thread mm2src/mm2_main/src/ordermatch_tests.rs Outdated
@laruh laruh added the priority: high Important tasks that need attention soon. label Jan 23, 2025
@laruh laruh mentioned this pull request Jan 26, 2025
29 tasks
Comment thread mm2src/mm2_main/src/lp_ordermatch.rs Outdated
Comment on lines +268 to +270
#[serde(default = "legacy_swap_version")]
#[serde(skip_serializing_if = "is_legacy_swap_version")]
pub swap_version: u32,
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

It's worth to create a separate type (or even a separate module for handling everyting related to versioning for swaps) for swap versioning, e.g., something like:

struct SwapVersion {
    #[serde(default = "legacy_swap_version")]
    #[serde(skip_serializing_if = "is_legacy_swap_version")]
    swap_version: u32,
}

which can help us to avoid this serialization rules applied all around the codebase.

I think this is a non-blocker improvement and I am okay to approve this PR without it. If you don't want to do it in this PR, can you leave a TODO note on one of them?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

I like this idea!
it will be safer to work with version field wrapped into structure with all annotations which we need, then adding manually version with annotations to p2p messages structures.
Im going to do it in the current pr to not refactoring everything in next PR.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

It's worth to create a separate type (or even a separate module for handling everyting related to versioning for swaps) for swap versioning, e.g., something like:

struct SwapVersion {
    #[serde(default = "legacy_swap_version")]
    #[serde(skip_serializing_if = "is_legacy_swap_version")]
    swap_version: u32,
}

which can help us to avoid this serialization rules applied all around the codebase.

I tested such wrapper, deserialisation and serialisation dont work as we would like if you dont provide serde annotation above the pub swap_version: SwapVersion, field.
https://github.com/laruh/benchmarks_and_tests/blob/merge-candidate/serde_example/src/tests.rs

So we still have to add annotations, but I think that looks better:
image

And everything is in separate module
image

I will push changes for review

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Here 6687599

Comment thread mm2src/mm2_main/src/ordermatch_tests.rs Outdated
@shamardy shamardy requested a review from dimxy February 3, 2025 10:08
onur-ozkan
onur-ozkan previously approved these changes Feb 5, 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.

Thanks!

LGTM other than 2 minor notes which are not blockers.

Comment thread mm2src/mm2_main/src/swap_versioning.rs Outdated
Comment on lines +18 to +19
impl SwapVersion {
pub(crate) fn is_legacy(&self) -> bool { self.version == legacy_swap_version() }
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Suggested change
impl SwapVersion {
pub(crate) fn is_legacy(&self) -> bool { self.version == legacy_swap_version() }
impl SwapVersion {
pub(crate) const fn is_legacy(&self) -> bool { self.version == legacy_swap_version() }

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Hmm why we can use const here if actual self.version value will be known at runtime?
I mean I can compile it, I thought it wont work. Is it bcz version has a primitive type?

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

version size is known at compile time.

Comment thread mm2src/mm2_main/src/swap_versioning.rs Outdated

#[derive(Copy, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct SwapVersion {
pub version: u32,
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Not a blocker but u32 doesn't seem necessary for swap versioning, u8 should be more than enough.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

I think it wont be a problem to move to u32, so we can start with u8
bab63f1

@laruh
Copy link
Copy Markdown
Author

laruh commented Feb 5, 2025

@onur-ozkan I noticed if user update the app having old swap entries in db, there could be error when we try to get such data, as structs expect version field
Added this commit de60aae

Well, changes are about TPU (not in production yet), but I think if migration 13 adds swap_version column, then it should also handle setting old swaps to version 1.

@mariocynicys
Copy link
Copy Markdown
Collaborator

mariocynicys commented Feb 6, 2025

@laruh you should add this in a new migration 14. Existing DBs that ran migration 13 will not run it again.
p.s. migrations should never be changed after written in general.

@laruh
Copy link
Copy Markdown
Author

laruh commented Feb 6, 2025

@laruh you should add this in a new migration 14. Existing DBs that ran migration 13 will not run it again. p.s. migrations should never be changed after written in general.

The current pr adds 13 migration. Dev doesn have it
https://github.com/KomodoPlatform/komodo-defi-framework/blob/ff0eefcdccfa9b48161052ed95d8185220ba2cbd/mm2src/mm2_main/src/database.rs#L122-L137

@mariocynicys
Copy link
Copy Markdown
Collaborator

The current pr adds 13 migration. Dev doesn have it

ah my bad. only checked the commit diff u linked :)

Base automatically changed from fix-tpu-v2-wait-for-payment-spend to dev February 8, 2025 14:04
@shamardy shamardy dismissed onur-ozkan’s stale review February 8, 2025 14:04

The base branch was changed.

@laruh laruh force-pushed the fix-tpu-v2-wait-for-payment-spend-swap-version branch from de60aae to fe1bfc3 Compare February 8, 2025 14:56
@laruh
Copy link
Copy Markdown
Author

laruh commented Feb 8, 2025

Since the base branch was changed, I force-pushed an updated branch (cherry picked feature commits) with a clean git history to resolve conflicts

@laruh laruh requested a review from onur-ozkan February 8, 2025 15:23
@shamardy
Copy link
Copy Markdown
Collaborator

shamardy commented Feb 8, 2025

Since the base branch was changed, I force-pushed an updated branch (cherry picked feature commits) with a clean git history to resolve conflicts

ooh, I deleted the base branch after merging to dev, sorry about that. No need for another review from @onur-ozkan as I will give it a review before merging.

@laruh
Copy link
Copy Markdown
Author

laruh commented Feb 8, 2025

ooh, I deleted the base branch after merging to dev, sorry about that. No need for another review from @onur-ozkan as I will give it a review before merging.

Its ok, I have old original branches locally and can push them if someone needs it

@laruh laruh removed the request for review from onur-ozkan February 8, 2025 16:39
onur-ozkan
onur-ozkan previously approved these changes Feb 10, 2025
/// Adds Swap Protocol version column to `my_swaps` table
pub const ADD_SWAP_VERSION_FIELD: &str = "ALTER TABLE my_swaps ADD COLUMN swap_version INTEGER;";
/// Sets default value for `swap_version` to `1` for existing rows
pub const SET_DEFAULT_SWAP_VERSION: &str = "UPDATE my_swaps SET swap_version = 1 WHERE swap_version IS NULL;";
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

About naming vars:
I think SET_DEFAULT_SWAP_VERSION here actually means not 'default' but 'existing'.

Plus, there is also a comment in the code:

/// When a new [TakerOrderBuilder::new] is created, it sets [SWAP_VERSION] by default.

So I guess, SWAP_VERSION is in fact SWAP_VERSION_DEFAULT

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Thanks for the catch, fixed here 731e605

dimxy
dimxy previously approved these changes Feb 10, 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.

Apart from my SWAP_VERSION nit,
LGTM.

(PS. I believe this is an interim fix for version selection mechanism, until we work out some general approach for it, to solve the old nodes compatibility problem)

@laruh laruh dismissed stale reviews from dimxy and onur-ozkan via 731e605 February 10, 2025 12:27
shamardy
shamardy previously approved these changes Feb 11, 2025
Copy link
Copy Markdown
Collaborator

@shamardy shamardy left a comment

Choose a reason for hiding this comment

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

Great work! All these comments are non-blockers but good to have.

];

/// Adds Swap Protocol version column to `my_swaps` table
pub const ADD_SWAP_VERSION_FIELD: &str = "ALTER TABLE my_swaps ADD COLUMN swap_version INTEGER;";
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I think it would be useful to add the version to stats_swaps table as well. It should be done in another PR though as this is should be merged soon.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I just noticed that currently we don't need the swap version in my_swaps table as we have swap_type https://github.com/KomodoPlatform/komodo-defi-framework/blob/731e605fc2b53b9f4afa9e13e3682c5be7ed9cf6/mm2src/mm2_main/src/database/my_swaps.rs#L89 https://github.com/KomodoPlatform/komodo-defi-framework/blob/39515a9f3ea1089bb462e99c8cafb1049a920dbd/mm2src/mm2_main/src/lp_swap.rs#L152-L154 but version can be different from type in the future, for instance MAKER_SWAP_V2_TYPE which s TPU Maker can have multiple versions but one type. Just thought to mention this and the redundancy we have.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

I just noticed that currently we don't need the swap version in my_swaps table as we have swap_type

From what I see these TYPE consts were provided to separate legacy and swap_v2 taker/maker data formats in database. I think it is something different from swap protocol version.

Well may be in practice we will see, will taker/maker types be different from swap protocol version or not.

ps: This field is useful for MySwapForRpc, as it can be retrieved from both get_taker_swap_data_for_rpc and get_maker_swap_data_for_rpc. Having a ready swap_version field simplifies the process of determining the swap version.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I understand, that's why I said currently :)
What I meant was that we could have converted this type to the version without adding a new column for now, that's all. But I like having version explicitly and resolving this comment.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Leaving it only for stats_swaps #2324 (comment)

Comment thread mm2src/mm2_main/src/lp_ordermatch/new_protocol.rs Outdated
Comment thread mm2src/mm2_main/src/lp_ordermatch/new_protocol.rs Outdated
Comment thread mm2src/mm2_main/src/lp_ordermatch.rs Outdated
Comment thread mm2src/mm2_main/src/lp_ordermatch.rs Outdated
@shamardy shamardy merged commit 60302fc into dev Feb 12, 2025
@shamardy shamardy deleted the fix-tpu-v2-wait-for-payment-spend-swap-version branch February 12, 2025 18:19
dimxy pushed a commit that referenced this pull request Feb 16, 2025
* dev:
  fix(derive_key_from_path): check length of current_key_material (#2356)
  chore(release): bump mm2 version to 2.4.0-beta (#2346)
  fix(tests): add additional testnet sepolia nodes to test code (#2358)
  fix(swaps): maintain legacy compatibility for negotiation messages (#2353)
  refactor(SwapOps): impl defaults for protocol specific swapops fns (#2354)
  feat(tpu-v2): provide swap protocol versioning (#2324)
  feat(wallet): add change mnemonic password rpc (#2317)
  fix(tpu-v2): fix tpu-v2 wait for payment spend and extract secret (#2261)
  feat(tendermint): unstaking/undelegation (#2330)
  fix(utxo-withdraw): get hw ctx only when `PrivKeyPolicy` is trezor (#2333)
  feat(event-streaming): API-driven subscription management (#2172)
  fix(hash-types): remove panic, enforce fixed-size arrays (#2279)
  fix(ARRR): store unconfirmed change output (#2276)
  feat(tendermint): staking/delegation (#2322)
  chore(deps): `timed-map` migration (#2247)
  fix(mem-leak): `running_swap` never shrinks (#2301)
  chore(dep-bump): libp2p (#2326)
  refactor(build script): rewrite the main build script (#2319)
dimxy pushed a commit that referenced this pull request Feb 16, 2025
* dev:
  fix(derive_key_from_path): check length of current_key_material (#2356)
  chore(release): bump mm2 version to 2.4.0-beta (#2346)
  fix(tests): add additional testnet sepolia nodes to test code (#2358)
  fix(swaps): maintain legacy compatibility for negotiation messages (#2353)
  refactor(SwapOps): impl defaults for protocol specific swapops fns (#2354)
  feat(tpu-v2): provide swap protocol versioning (#2324)
  feat(wallet): add change mnemonic password rpc (#2317)
  fix(tpu-v2): fix tpu-v2 wait for payment spend and extract secret (#2261)
  feat(tendermint): unstaking/undelegation (#2330)
  fix(utxo-withdraw): get hw ctx only when `PrivKeyPolicy` is trezor (#2333)
  feat(event-streaming): API-driven subscription management (#2172)
  fix(hash-types): remove panic, enforce fixed-size arrays (#2279)
  fix(ARRR): store unconfirmed change output (#2276)
  feat(tendermint): staking/delegation (#2322)
  chore(deps): `timed-map` migration (#2247)
  fix(mem-leak): `running_swap` never shrinks (#2301)
  chore(dep-bump): libp2p (#2326)
  refactor(build script): rewrite the main build script (#2319)
dimxy pushed a commit to dimxy/komodo-defi-framework that referenced this pull request Feb 24, 2025
* dev: (24 commits)
  fix(eth-tpu): remove state from funding validation (GLEECBTC#2334)
  improvement(rpc-server): rpc server dynamic port allocation (GLEECBTC#2342)
  fix(tests): fix or ignore unstable tests (GLEECBTC#2365)
  fix(fs): make `filter_files_by_extension` return only files (GLEECBTC#2364)
  fix(derive_key_from_path): check length of current_key_material (GLEECBTC#2356)
  chore(release): bump mm2 version to 2.4.0-beta (GLEECBTC#2346)
  fix(tests): add additional testnet sepolia nodes to test code (GLEECBTC#2358)
  fix(swaps): maintain legacy compatibility for negotiation messages (GLEECBTC#2353)
  refactor(SwapOps): impl defaults for protocol specific swapops fns (GLEECBTC#2354)
  feat(tpu-v2): provide swap protocol versioning (GLEECBTC#2324)
  feat(wallet): add change mnemonic password rpc (GLEECBTC#2317)
  fix(tpu-v2): fix tpu-v2 wait for payment spend and extract secret (GLEECBTC#2261)
  feat(tendermint): unstaking/undelegation (GLEECBTC#2330)
  fix(utxo-withdraw): get hw ctx only when `PrivKeyPolicy` is trezor (GLEECBTC#2333)
  feat(event-streaming): API-driven subscription management (GLEECBTC#2172)
  fix(hash-types): remove panic, enforce fixed-size arrays (GLEECBTC#2279)
  fix(ARRR): store unconfirmed change output (GLEECBTC#2276)
  feat(tendermint): staking/delegation (GLEECBTC#2322)
  chore(deps): `timed-map` migration (GLEECBTC#2247)
  fix(mem-leak): `running_swap` never shrinks (GLEECBTC#2301)
  ...
dimxy pushed a commit that referenced this pull request Mar 5, 2025
* dev:
  feat(rpc): add is_success field to legacy MySwapStatusResponse (#2371)
  fix(key-derivation): use stored Argon2 parameters instead of default values (#2360)
  fix(tests): stabilize `tendermint_coin::test_claim_staking_rewards` (#2373)
  improvement(RPCs): group staking rpcs under a namespace (#2372)
  feat(tendermint): claim delegation rewards (#2351)
  fix(eth-tpu): remove state from funding validation (#2334)
  improvement(rpc-server): rpc server dynamic port allocation (#2342)
  fix(tests): fix or ignore unstable tests (#2365)
  fix(fs): make `filter_files_by_extension` return only files (#2364)
  fix(derive_key_from_path): check length of current_key_material (#2356)
  chore(release): bump mm2 version to 2.4.0-beta (#2346)
  fix(tests): add additional testnet sepolia nodes to test code (#2358)
  fix(swaps): maintain legacy compatibility for negotiation messages (#2353)
  refactor(SwapOps): impl defaults for protocol specific swapops fns (#2354)
  feat(tpu-v2): provide swap protocol versioning (#2324)
  feat(wallet): add change mnemonic password rpc (#2317)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

priority: high Important tasks that need attention soon. status: pending review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants