Skip to content

fix(abstract-eth): verify EVM TSS intent before signing - #10134

Closed
dpkjnr wants to merge 1 commit into
masterfrom
CECHO-2460-evm-tss-minimal
Closed

dpkjnr wants to merge 1 commit into
masterfrom
CECHO-2460-evm-tss-minimal

Conversation

@dpkjnr

@dpkjnr dpkjnr commented Nov 5, 2026

Copy link
Copy Markdown
Contributor

What

Harden EVM TSS verification before the user key share signs, without adding validators for every intent.

  • Reject definite mismatches for native, ERC-20, explicit-calldata, native-batch and token-batch payments. A caller-declared intent takes precedence; otherwise use the stored request intent. transfer and payment denote the same operation.
  • Check supported consolidation shapes against the wallet base address, token identity when trusted metadata establishes it, canonical calldata and native value. Sweep amounts are not compared.
  • Route legacy EVM signing preimages through serialized transaction verification and bind the verified bytes to the preimage; retain existing type-2 and specialized routes. Remove the remaining EvmCoin legacy verifier bypass.
  • Reject unsupported EVM contractCall and customTx; warn precisely when trusted metadata or a complete intent validator is unavailable. Recognize FLR atomic formats without treating them as ordinary EVM transactions.
  • Add the deployed Katana batcher address to mainnet and Bokuto SDK network statics. This does not enable Katana ERC-20 batching.

Verification

  • Node 24.22.1: forced TypeScript build of statics, sdk-core, abstract-eth, sdk-coin-evm, sdk-coin-eth, sdk-coin-bsc and sdk-coin-flr.
  • Unit suites: abstract-eth 270; sdk-coin-eth 569; sdk-coin-evm 69; sdk-coin-bsc 58; sdk-coin-xdc 65; FLR 65; focused sdk-core 72. Statics network and coin tests: 41,790.
  • Real ECDSA and MPCv2 signing entry points: matching transactions reach the signing-round boundary; mismatches and serialized/preimage inconsistencies do not. Tests cover type-0 on EIP-1559-capable chains, type-2, BSC, and legacy-only EVM chains.
  • Offline replay through real signing entry points: 138 delivered payment requests across 30 coin types, plus all seven delivered EVM TSS consolidation requests in the window. All passed without warnings; synthetic destination, amount and token-identity mismatches were rejected. The query uses source creation DATE, 2026-08-07 inclusive through 2026-11-05 exclusive, TSS-wallet filtering and request deduplication. No keys or network calls were used. Temporary production payloads were removed.

Limits and release gates

  • The 138-payment replay is a bounded sample, not the full production population; the release gate remains open. Consolidation evidence covers seven requests on ETH/MPCv2 only.
  • Missing asset/batcher metadata and intents without a complete validator remain warning-only. Encrypted confidential-token amounts are not compared. No universal fail-closed claim or INFOSEC-671 closure is made.
  • FLR atomic exports/imports are recognized and warned, not verified against intent. On the prehashed MPCv2 path the recognized serialized bytes are not currently bound to the signed digest; this pre-existing gap remains open.
  • Current upstream does not expose the reference branch's client-side strict warning option; this PR does not introduce a new strict-mode API.
  • CI and Security review are pending.

Ticket: CECHO-2460

Compare payment and compatible consolidation transactions with their
authorized intent, and reject definite mismatches before signing.

Bind serialized legacy transactions to the signing preimage, preserve
specialized formats, and warn when trusted metadata is unavailable.

Ticket: CECHO-2460
@linear-code

linear-code Bot commented Nov 5, 2026

Copy link
Copy Markdown
Contributor

CECHO-2460

@github-actions

github-actions Bot commented Nov 5, 2026

Copy link
Copy Markdown
Contributor

⚠️ Compatibility checks are failing on Node.js 27-nightly (experimental, non-blocking). This does not block merge, but it signals an incompatibility to fix before this release becomes supported.

View run

@dpkjnr

dpkjnr commented Nov 5, 2026

Copy link
Copy Markdown
Contributor Author

Closing in favour of the narrower first release in #10136, which limits the change to verifyTssTransaction.

The remaining work in this PR is now tracked as separate tickets: CECHO-2680 (contractCall / customTx) and the sub-tickets under CECHO-2679 (legacy routing, intent plumbing, Katana, FLR, remaining handlers).

The branch is kept for reference.

@dpkjnr dpkjnr closed this Nov 5, 2026
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.

1 participant