Proposal: EVM trust-model hardening (alignment first, then implementation)
This is a proposal issue to align on design before opening code PRs.
Current behavior is functional; this is a hardening pass to improve operational safety and replay resistance over time, with backward-compatible migration.
Scope
In scope:
- signer/governance controls around privileged EVM operations
- stronger signature domain binding for
finTransfer
Out of scope (intentional design choices already documented):
- changing
deployToken chain-agnostic metadata signatures
- fee-on-transfer token support policy
Targeted areas
evm/src/omni-bridge/contracts/OmniBridge.sol
setNearBridgeDerivedAddress(...)
_authorizeUpgrade(...)
finTransfer(...) signature hash domain
Proposed approach
1) Domain binding hardening for finTransfer
Add a v2 domain for signed transfer messages that includes native execution context:
block.chainid
address(this)
Migration-safe rollout:
- temporary dual-verify support (
legacy + v2)
- explicit switch to disable legacy path once signers/relayer are migrated
- no breaking cutover in a single release
2) Privileged control hardening
Strengthen privileged operations with clearer separation and auditability:
- split privileges for signer updates vs upgrade authorization (role separation)
- optional two-step signer update flow (propose/apply) with delay window
- explicit eventing on propose/apply and role-sensitive config changes
Delivery plan (after alignment)
- PR A:
finTransfer domain-binding v2 + dual-verify migration + replay tests
- PR B: role separation (and optional delayed two-step signer update) + auth tests
Test expectations
- unit tests for hash/domain generation
- integration tests proving replay rejection across:
- same payload, different contract address
- same payload, different chain id
- authorization tests for each privileged pathway
- migration tests for legacy acceptance toggle
Maintainer decisions requested
- For signer updates, prefer:
- role separation only, or
- role separation + delayed two-step apply?
- For migration, prefer:
- dual-verify with explicit legacy-disable switch, or
- strict cutover at deployment boundary?
- Any additional constraints for relayer/signer rollout sequencing?
If this direction looks good, I can open PR A first with minimal, isolated scope.
Proposal: EVM trust-model hardening (alignment first, then implementation)
This is a proposal issue to align on design before opening code PRs.
Current behavior is functional; this is a hardening pass to improve operational safety and replay resistance over time, with backward-compatible migration.
Scope
In scope:
finTransferOut of scope (intentional design choices already documented):
deployTokenchain-agnostic metadata signaturesTargeted areas
evm/src/omni-bridge/contracts/OmniBridge.solsetNearBridgeDerivedAddress(...)_authorizeUpgrade(...)finTransfer(...)signature hash domainProposed approach
1) Domain binding hardening for
finTransferAdd a v2 domain for signed transfer messages that includes native execution context:
block.chainidaddress(this)Migration-safe rollout:
legacy+v2)2) Privileged control hardening
Strengthen privileged operations with clearer separation and auditability:
Delivery plan (after alignment)
finTransferdomain-binding v2 + dual-verify migration + replay testsTest expectations
Maintainer decisions requested
If this direction looks good, I can open PR A first with minimal, isolated scope.