Skip to content

Master into rel latest#9035

Merged
alextse-bg merged 48 commits into
rel/latestfrom
master-into-rel-latest
Jun 16, 2026
Merged

Master into rel latest#9035
alextse-bg merged 48 commits into
rel/latestfrom
master-into-rel-latest

Conversation

@alextse-bg

Copy link
Copy Markdown
Contributor

No description provided.

asset-metadata-bot Bot and others added 30 commits June 11, 2026 07:58
…etAddress

verifyMPCWalletAddress already computed the expected address internally and then
compared it to a candidate. Extract that derivation half into a reusable
deriveMPCWalletAddress() that returns the derived address and the HD path used,
and have verifyMPCWalletAddress() delegate to it before comparing.

This lets callers produce an MPC wallet address offline (public keys only) using
the exact same code path as verification, so derive and verify can never diverge.
Behavior of verifyMPCWalletAddress is unchanged.

Adds unit coverage for deriveMPCWalletAddress (ed25519 MPCv2, SMC prefix path,
secp256k1) including a derive->verify round-trip assertion.

WCN-913

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…anced

feat: add 'advanced' wallet generation in type
current grpc had the version with vulnerability
ref:GHSA-99f4-grh7-6pcq
upgrade to fix it

Ticket: CSHLD-1028
fix: update package deps to fix vuln
Also adds nock to devDependencies to make the dependency explicit
rather than relying on hoisted resolution from other modules.

Refs: SI-287
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
fix: Migrate tcanton:usd1 token to Testnet
…MPCv2 txs

Mirror WP's isSignablePreHashed flow so Avalanche atomic cross-chain
transactions use SHA-256 signableHex directly instead of re-hashing with keccak256.

Co-authored-by: Cursor <cursoragent@cursor.com>

TICKET: CECHO-1295
feat(sdk-coin-canton): handle ISO timestamp vs microsecond mismatch in assertDeepCantonMatch
…lidation-recipients

fix(sdk-coin-trx): allow TSS TRC20 consolidation when recipients absent
fix(sdk-coin-sui): handle gas coin empty with only address balance
feat: PR from asset-metadata-service for token onboardings
…ve-mpc-wallet-address

refactor(sdk-core): extract deriveMPCWalletAddress from verifyMPCWalletAddress
Add a deriveAddress(params) method to the IBaseCoin interface and a default
BaseCoin implementation that throws NotImplementedError, so coins can opt in to
locally deriving a wallet receive address from a derivation path.

This is the inverse of isWalletAddress: instead of checking a candidate address,
it produces the address offline from public key material only (xpub triple for
BIP32 multisig coins, or commonKeychain for TSS/MPC coins) - no private keys and
no network access required.

Introduces DeriveAddressOptions and DeriveAddressResult to mirror the existing
VerifyAddressOptions / TssVerifyAddressOptions shape.

WCN-912

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ss-primitive

feat(sdk-core): add deriveAddress primitive to BaseCoin
OFC coins never use keychains for address verification — isWalletAddress
always throws MethodNotImplementedError and the check is skipped. Fetching
all wallet keys was unnecessary and failed for wallets where a server-managed
key at index 1 has no accessible keychain record in the OFC namespace.

Fixes WCN-942

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Override BaseCoin.deriveAddress on the Sol coin to locally derive a receive
address from the wallet's commonKeychain + index, reusing the shared
deriveMPCWalletAddress (ed25519) helper. This is the inverse of isWalletAddress
and shares its exact derivation path, so derive and verify can never diverge.

Offline and key-material-free (public keys only). Supports the SMC prefix path
via derivedFromParentWithSeed.

Adds unit coverage including a derive->verify round-trip and an SMC-seed case.

WCN-917

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Override BaseCoin.deriveAddress on AbstractEthLikeNewCoins to locally derive a
receive address from the wallet's commonKeychain + index for MPC/TSS wallets
(wallet versions 3, 5, 6), reusing the shared deriveMPCWalletAddress (secp256k1)
helper plus KeyPair.getAddress() — the exact derivation isWalletAddress checks
against, so derive and verify can never diverge.

Offline and key-material-free (public keys only). Legacy BIP32 forwarder wallets
(versions 1, 2, 4) throw a clear error and are handled in a separate ticket.

Adds unit coverage (in sdk-coin-eth) asserting exact-match against the existing
MPC test vector, a derive->verify round-trip, the forwarder-version guard, and
the missing-keychains error.

WCN-916

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ddress-skip-kms-key-fetch

fix(sdk-core): skip keychain fetch in createAddress for OFC wallets
…llets

Override BaseCoin.deriveAddress on AbstractUtxoCoin to locally derive a 2-of-3
multisig receive address from the xpub triple and a chain/index, delegating to
the existing generateAddress used by the isWalletAddress verification path, so
derive and verify can never diverge. Offline and key-material-free (public keys
only). The chain code selects the script type (P2SH, P2WSH/bech32, P2TR) with an
optional format override.

Adds unit coverage for legacy P2SH (chain 0) and bech32 P2WSH (chain 20):
derived address matches generateAddress, plus a derive->verify round-trip.

WCN-915

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat: skip forceV1Auth when HMAC present for SSO
…llet

feat(sdk-coin-flrp): add createPairedWallet method to Flrp
feat(sdk-core): add pre-hashed signable support for Avalanche txn
MohammedRyaan786 and others added 16 commits June 15, 2026 20:57
fix(sdk-coin-sol): skip checking recipients in case of ATA tx
Add an offline endpoint that locally derives and returns a wallet receive address
from a derivation path, the inverse of iswalletaddress. The handler operates purely
on the request body (keychains + chain/index) via coin.deriveAddress — no
wallets().get lookup and no network access, so it can run in an air-gapped Express.

Stateless: the caller supplies the index; the endpoint never allocates server-side.
Pairs with iswalletaddress for a derive->verify round-trip.

- typed route schema modules/express/src/typedRoutes/api/v2/deriveAddress.ts
- registered in typedRoutes/api/index.ts
- handler handleV2DeriveAddress + route registration in clientRoutes.ts
- codec + supertest integration tests (UTXO + TSS/MPC, 400s, error surfacing)

WCN-914

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adds a standalone helper to decrypt and validate both EdDSA MPCv2
reduced keycards, returning typed Buffer key shares and the derived
commonKeyChain. Mirrors the ECDSA getMpcV2RecoveryKeyShares pattern
as part of the SJCL-to-Argon2 migration.

- Decrypt both keycards in parallel via Promise.all
- Use bitgo.decryptAsync (v1 + v2) when a BitGoBase instance is
  provided; fall back to sjcl.decrypt (v1 only) otherwise
- Validate pub and rootChainCode separately with distinct error
  messages
- Wrap getDecodedReducedKeyShare in try-catch to surface a descriptive
  error for malformed or public-only keycards
- Export type for recovery key shares
- Add 3 unit tests: v1 happy path, malformed keycard, mismatched keys

Ticket: WCI-396
feat: exclude CVE related to esbuild's Deno distribution for Node.js …
feat: add exclusions for new CVEs affecting dependencies and clarify usage context
Forward recipient addresses from the SDK to the server's
GET /api/v1/wallet/:id/billing/fee endpoint as recipients[]
query params. This allows the server to waive the PayGo fee
when all recipients are v2 PayGo wallets (v1-to-v2 migration
scenario). Backward-compatible: existing calls without
recipients are unchanged.

Ticket: T1-3579
Session-Id: 9bcb0f58-d633-492c-a7a4-70bcd09ce08b
Task-Id: bf7868aa-6a4c-4ee7-8520-1e6b61551a64
…-migration

feat(sdk-api): pass recipient addresses to v1 billing fee endpoint for PayGo migration waiver
feat(sdk-core): add getEddsaMPCv2RecoveryKeyShares helper
…ddress

feat(abstract-utxo): implement deriveAddress for fixed-script UTXO wallets
…ve-address

feat(abstract-eth): implement deriveAddress for MPC/TSS ETH wallets
…ve-address-endpoint

feat(express): add POST /api/v2/:coin/address/derive endpoint
  Add GoUSD stablecoin on Solana (prod/testnet/staging) and Tempo
  (prod/testnet/staging), and SCAASACME (Acme USD) demo token on Hoodi
  ETH, BSC testnet, and Tempo testnet/staging. All tokens include
  on-chain and OFC counterparts.

  - GoUSD: 6 decimals, Token-2022 program on Solana
  - SCAASACME: 18 decimals on EVM chains, 6 on Tempo
  - No production entries for SCAASACME (staging/test only)

TICKET: SCAAS-9540, SCAAS-9748
@alextse-bg alextse-bg marked this pull request as ready for review June 16, 2026 16:38
@alextse-bg alextse-bg requested review from a team as code owners June 16, 2026 16:38
@alextse-bg alextse-bg merged commit 5a46d45 into rel/latest Jun 16, 2026
22 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.