Skip to content

Conversation

@shamardy
Copy link
Collaborator

@shamardy shamardy commented Nov 25, 2025

v2.6.0-beta - 2025-11-28

Features:

SIA Integration:

  • Completed SIA coin integration, adding SIA as a new protocol with activation in both Iguana and HD modes using the m/44'/1991'/0'/0'/0' derivation path, wallet operations, transaction history v1, and legacy swaps are supported. #2540

WalletConnect:

  • Implemented BTC/UTXO coin activation via WalletConnect, aligning UTXO with existing EVM/Cosmos activations. #2499

Trading:

  • Added expirable maker orders controlled by an optional timeout_in_minutes field on setprice, so stale listings retire automatically while staying backwards compatible. #2516

UTXO Management:

  • Introduced a consolidate_utxos RPC to merge small outputs and reduce fee overhead. #2587

Work in Progress (WIP) Features:

Solana Protocol:

  • Added the initial wallet-only Solana implementation (activation, token handling, WASM-compatible RPC wiring). swaps and transaction history are not yet available. #2586 #2598 #2622 #2679

Liquidity Routing:

  • Added a best_swap RPC that performs ask-side liquidity routing to surface the optimal route for a desired outcome amount. #2362

Enhancements/Fixes:

Swaps and Order Matching:

  • Banned makers after failed negotiation attempts in legacy swaps to prevent repeated retries on the same maker. #2688
  • Reduced legacy swap payment broadcast intervals for faster propagation on mobiles. #2680
  • Hardened swap v2 offline validation by reusing the offline maker/taker checks, then added best‑effort visibility gates with one‑shot rebroadcast fallback to all coins. #2646 #2618
  • Split the orderbook trie from the orderbook to cut lock contention during propagation. #2661
  • Ensured order subscriptions are set on kickstart and skipped GC of own pubkeys. #2597
  • Corrected dexfee balance checks for TPU swaps to avoid false failures. #2600

Wallet and Keys:

  • Corrected shielded HD derivation path formatting in get_private_keys responses. #2685
  • Fixes a critical bug where get_private_keys returned incorrect keys in iguana mode that were derived from an empty passphrase when passphrase is null, this happened when loading wallets from KDF encrypted storage. #2683
  • Updated Trezor UTXO/EVM calls to match recent firmware changes. #2565

UTXO / Electrum:

  • Switched Electrum block-count queries to sequential mode to avoid server bans on endpoints with strict per-IP limits. #2666
  • Added a fixed-fee option for DINGO-like chains. #2454
  • Revised minimum trading volume for fixed-fee UTXO coins to account for HTLC spend fees and avoid unprofitable swaps. #2564
  • Relaxed scriptSig signature parsing to stop rejecting valid inputs during validation. #2591
  • Overhauled UTXO block-header deserialization and fork handling for AuxPoW/KAWPOW variants, PIVX Sapling, Namecoin, XEC, Cheetahcoin, and many others to prevent parsing failures and false AuxPoW attempts. #2583 #2563 #2572
  • Made UTXO chain variants explicit via chain_variant config replacing hardcoded ticker handling. #2692

EVM / ETH:

  • Refined gas fee policy handling (adjustment params, renamed RPC) for swap/signing flows. #2533
  • Added activation validation tweaks and increased EVM timeouts; aligned naming for platform balance helpers. #2543
  • Fixed ETH max withdrawal logic, prevented underflow on low balances, and now return structured EIP-1559 withdrawal errors that include network-required fee info. #2531 #2532

WalletConnect:

  • Returned the pairing_topic in new_connection responses. #2538

RPCs:

  • Allowed get_enabled_coins, task::init_trezor::init, and wc_get_sessions to accept an empty params field so RPC callers can omit optional payloads without breaking compatibility. #2612
  • Returned JSON-formatted help responses from the help RPC. #2613

Event Streaming:

  • Broadcast OS shutdown signals via the streaming manager (stream::shutdown_signal::enable). #2667
  • Stopped streamer errors from crashing dev builds by handling SIGINT/SIGTERM/SIGQUIT more gently when the signal handler runs. #2669
  • Fixed SSE client-id parsing and allowed query parameters to pass through to event-stream endpoints. #2677 #2678
  • Fixed iOS certificate validation for Tendermint balance streaming. #2674

Tendermint / Cosmos:

  • Implemented get_trade_fee RPC for Tendermint-based assets (trade/swap only, not wallet-only assets) that requires an existing on-chain account. #2663

CLI:

  • Migrated the CLI to clap, standardizing -h/--help and version output, removing unused/undocumented modes. #2510

Graceful Shutdown:

  • Refactored signal handling to cover more signals, and fail gracefully with the feature disabled on Windows/Web. #2667

Error Handling:

  • Added an map_mm_err helper and applied it at key conversion sites to satisfy newer Rust coherence rules without changing error semantics for MmError. #2443

Other Changes:

Toolchain:

  • Switched the build to always use the latest available stable compiler (including WASM targets). #2444 #2528 #2557

Dependencies:

  • Applied broad security/dependency updates (tokio, anstream, atty, mio, time, chrono, and more), removed some deprecated/duplicated crates. #2562

Infrastructure / CI:

  • Updated the CI container base image to Debian 11 to keep dependencies working across host OSes. #2534
  • Added Node.js 20 to the CI container image to satisfy tooling needs for release builds and scripts. #2536
  • Added a git blame ignore list so toolchain/formatting churn no longer dominates blame views. #2649
  • Deployed a GitHub Action that publishes WASM playground previews on PRs with the deploy: wasm-playground label. #2607
  • Avoided using port 7000 for MYCOIN in docker tests to skirt macOS AirPlay receiver conflicts. #2681

Core Maintenance:

  • Removed remaining static mut globals in favor of thread-safe primitives across executor/WASM/coins/swap tests. #2590

Documentation:

  • Improved macOS docs for common Docker startup errors to ease initial setup and troubleshooting. #2544 #2550

NB - Backwards compatibility breaking changes:

ETH Clients:

  • Parity client support was removed. #2527

EVM / ETH Withdrawal Errors:

  • EIP-1559 withdrawal failures now return structured error objects containing network-required fees; clients parsing RPC strings should handle the new schema. #2532

Fixed-Fee UTXO Coins:

  • Minimum trading volume calculation was revised for fixed-fee UTXO coins, which may change minimum order sizes on those networks (dynamic-fee/dust-based coins unchanged). #2564 #2591 #2692

CLI Modes:

  • Unused/undocumented CLI modes were removed during the migration to clap; scripts relying on them may need updates (RPC API unchanged). #2510

shamardy and others added 30 commits June 16, 2025 09:25
chore(release): propagate kdf 2.5.0-beta bump (staging→dev)
chore(release): propagate kdf 2.5.0-beta changelogs (staging→dev)
chore(release): propagate `delete_wallet` RPC (staging→dev)
…stc versions (#2443)

Recent Rust compiler updates have tightened coherence rules, causing the blanket From<MmError> for MmError conversions to break. Instead of refactoring the core MmError type, this commit applies a minimal, mechanical change: it inserts calls to the new .map_mm_err() helper before each ? where the conversion would fail.

No changes to business logic or public API 100% an internal compatibility update
chore(release): propagate `get_enabled_address` hw wallet hotfix (staging→dev)
chore(release): propagate walletconnect connection hotfix (staging→dev)
* post merge fix: After merging staging into dev, there were compilation errors due to #2443, this fixes it

* review fix: Improve error handling with `.into()`
This introduces a new experimental RPC, `experimental::liquidity_routing::find_best_quote`, to find the most cost-effective swap path by aggregating atomic swaps with external liquidity routing via the 1inch API.

The new endpoint allows users to execute token swaps even if they do not directly hold the tokens required by maker orders. It evaluates possible swap paths by combining external liquidity routing with atomic swaps to find the most price-effective route.

Key changes include:
- A new RPC endpoint `experimental::liquidity_routing::find_best_quote` for pathfinding.
- Core logic in `mm2src/mm2_main/src/rpc/lp_commands/lr_swap/lr_impl.rs` to process orders and query the 1inch API.
- Refactored the 1inch API client in `trading_api` to use a `UrlBuilder` for more robust URL construction and added support for the Portfolio API.
- Extracted common Ethereum utility functions into a new `coins/eth/eth_utils.rs` module to improve code organization.
- Updated `RpcOrderbookEntryV2` and `MmNumberMultiRepr` to be deserializable.

Currently, this feature only supports filling `ask` orders with liquidity routing performed before the atomic swap.
chore(release): propagate final 2.5.0-beta changelog (staging→dev)
Parity nodes have been deprecated for years, this removes support for them and also fixes the conflict between version checking and komodo-defi-proxy.
Implements expirable maker orders which can be easily used with timeout_in_minutes arg in setprice RPC. It's an optional field and doesn't cause a breaking-change.
* feat(use-clap-for-kdf): use clap to parse CLI-Args #2215

- had to set clap version to "=v4.2" in Cargo.toml, because cargo was trying to fetch clap version 4.5 and it requires a higher version of rust tool-chain (1.74) and the current one is (1.72)
- clap provides both "-h" or "--help" for the help
- override the behaviour of the help to be able to show the same message as before with the version of KDF_VERSION provided by the git-commit
- modes & subcommands like `btc2kmd`, `events`, `vanity`, `update_config` weren't actually used or handled by the code, so I removed them

* fix(use-clap-for-cli): remove '=' from Cargo.toml as the Cargo.lock file is already created.

* fix(use-clap-for-cli): hard-code the version output prefix to keep it like before

* fix(use-clap-for-cli): remove reference for the JSON parameters from help as they can quickly become obsolete and outdated.
EVM max withdrawals were broken due to the max flag always being set to false. This commit passes the correct `req.max` value and also addresses two low-balance edge cases: it avoids panic from arithmetic underflow when calculating max amount to transfer, and gracefully handles cryptic RPC errors by converting known “insufficient funds” messages into a clear `WithdrawError::AmountTooLow`.
This commit improves the error handling for EVM withdrawals when the provided EIP-1559 max_fee_per_gas is too low. Previously, the API returned a generic string-based error, forcing the user to guess a new fee. Now, the withdraw endpoint can return a structured error object containing the required network base fee, allowing client applications to better handle the error.
…eamers (#2489)

* refactor(event-streaming): impl DeriveStreamerId trait for all streamers #2441

- Added DeriveStreamerId trait with InitParam for new and DeriveParam for derive_streamer_id, including lifetime 'a for flexible references.
- Refactored streamer structs to use &str for DeriveParam where applicable.

* refactor(orderbook_events): introduce BaseAndRel type alias for DeriveParam #2441

Replaces the raw tuple (&str, &str) with a named type alias for clarity

* docs(event-streaming): add documentation for DeriveStreamerId trait and its associated types #2441

---------

Co-authored-by: BigFish2086 <[email protected]>
In addition to fixing a small wasm build problem, this commit bumps Debian CI image to bullseye.
* adds nodejs 20 to ci container

* remove comment

* remove mm2 (in favor of kdf) from dockerfiles

* move node install from ci container to build cache action
This commit migrates to the stable compiler 1.85.1, some crates (like as mm2_state_machine, mm2_err_handle and certain test crates) still retain nightly features due to their practical benefits in those contexts.
chore(release): propagate get_private_keys hotfix (staging→dev)
This makes KDF no longer locked to a specific compiler version, instead, uses the latest available stable version
Signed-off-by: Onur Özkan <[email protected]>
This commit introduces an automated GitHub Actions workflow to remind reviewers about stale pull requests. The workflow runs daily at 12:00 PM UTC on business days and posts a reminder on non-draft PRs that have been waiting for review for two or more days and have fewer than two approvals. `status: in progress`, `status: pending review` labels are no longer required.
This commit make txsize not round up by default. It then adds a new fixed tx fee option "dingo_fee"=true, with rounding up, that could be set for a coin in the coins file.
…2499)

This implements activation only, full WalletConnect implementation for UTXO coins will follow.
mariocynicys and others added 21 commits October 27, 2025 14:36
* serialize get_servers_with_latest_block_count requests

as in, perfrom them in series instead of in parallel (and label the connection as not_needed once done with the request).
this makes it so we won't break the max_connected threshold (this is a lie as we can break it by at most one extra connection due to the running background task that also manages connections aside from us forcefully instantiating connections in get_servers_with_latest_block_count)

* we actually don't need the not_needed() call

since any forceful request will always call not_needed() at the end (check ElectrumClient::electurm_request_to())
* handle more OS signals

Signed-off-by: Onur Özkan <[email protected]>

* drop `signal` feature from tokio

Signed-off-by: Onur Özkan <[email protected]>

* disable `spawn_os_signal_handler` for Windows

Signed-off-by: Onur Özkan <[email protected]>

* broadcast shutdown signals through streaming manager

Signed-off-by: Onur Özkan <[email protected]>

* apply nit

Signed-off-by: Onur Özkan <[email protected]>

---------

Signed-off-by: Onur Özkan <[email protected]>
This ensures correct behavior for URLs like `/endpoint?id=10`
which would never work with the previous approach as it looks
for the `&` char.

Signed-off-by: Onur Özkan <[email protected]>
…#2674)

* use webpki roots for rustls

* isolate webpki dep update to ios only

* add platform specific certificate validation

* fmt tcp_stream.rs

---------

Co-authored-by: Kadan Stadelmann <[email protected]>
…roadcast (#2646)

This commit extends offline validation done in #2618 while adding best‑effort visibility gates with a one‑shot rebroadcast fallback to all coins, this is now part of the state machine instead of being coin specific.
* drop `enable-solana` feature

Signed-off-by: Onur Özkan <[email protected]>

* implement our own rpc client for solana

Signed-off-by: Onur Özkan <[email protected]>

* simplify encode_bincode_base64

Signed-off-by: Onur Özkan <[email protected]>

* fix get_token_accounts_by_owner bug

Signed-off-by: Onur Özkan <[email protected]>

* reduce `pub` scopes

Signed-off-by: Onur Özkan <[email protected]>

* add timeout handling

Signed-off-by: Onur Özkan <[email protected]>

* handle status code

Signed-off-by: Onur Özkan <[email protected]>

---------

Signed-off-by: Onur Özkan <[email protected]>
Since 7000 conflicts with airplay receiver port in macos.
This hides noisy commits (e.g., toolchain upgrades) so blame points to the last meaningful change.
…#2680)

This PR reduces delays for legacy atomic swaps on the iOS platform. Since the default iOS auto-lock timeout is 30 seconds, the app often returned to the background before another broadcast could occur. This commit fixes this.
…agation locking (#2661)

This commit removes the maker pubkeys trie state and the Patricia-trie memory db out of Orderbook into a dedicated trie store to reduce Orderbook locking time and let messages propagate before trie work.
Fixes a critical bug where get_private_keys in iguana mode derived keys from an empty passphrase when ctx.conf["passphrase"] was null which happens when loading it from KDF encrypted storage instead of passing it from config.
chore(release): 2.6.0-beta dev -> staging
@shamardy shamardy requested a review from DeckerSU November 25, 2025 13:25
@smk762 smk762 self-requested a review November 26, 2025 10:36
smk762
smk762 previously approved these changes Nov 26, 2025
Copy link

@smk762 smk762 left a comment

Choose a reason for hiding this comment

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

Confirmed SIA functioning in wallet and postman with recent bugfixes operational

  • bestorders (v2)
  • tx_history (indexing)
  • swaps (maker tx parsing)
  • withdraw / withdraw max / orderbook / broadcast_raw_transaction and other standard methods functional

utxo consolidation and wallet connect methods have been documented and confirmed operational, along with the new timeout param in setprice.

WIP features (solana/LR) will not been tested or documented until further developed.

Iguana privkey bugfix and updated trezor ops to align with firmware confirmed functioning.

Misc other automated/postman/wallet testing performed to confirm ready for release.

Thanks for all the hard work gentlemen. It's been a challenge, but also an honor. 🫡 🖖

Copy link

@DeckerSU DeckerSU left a comment

Choose a reason for hiding this comment

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

LGTM.

As part of this security review, only the dependencies were examined (99+ updated dependencies and 126 newly added ones). Due to the large number of dependencies, they were reviewed in a semi-automatic mode with the help of AI. All "suspicious" areas were checked manually. The review included searching for malicious inclusions such as:

  • Sending data to external servers
  • Theft of credentials or keys
  • Unauthorized access to files
  • Intentional weakening of cryptographic functions
  • Logging of sensitive information

None of these were found, and all modified/added packages were deemed safe. However, I emphasize that this review does not cover potential errors in the logic of kdf itself.

@smk762 smk762 self-requested a review November 29, 2025 21:55
Copy link

@smk762 smk762 left a comment

Choose a reason for hiding this comment

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

Re-approving, thanks

@shamardy shamardy merged commit 475cdb4 into main Nov 30, 2025
41 of 53 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants