Skip to content

proposal(evm): trust-model hardening for signer controls and finTransfer domain binding #555

Description

@omarespejel

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

  1. For signer updates, prefer:
  • role separation only, or
  • role separation + delayed two-step apply?
  1. For migration, prefer:
  • dual-verify with explicit legacy-disable switch, or
  • strict cutover at deployment boundary?
  1. Any additional constraints for relayer/signer rollout sequencing?

If this direction looks good, I can open PR A first with minimal, isolated scope.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions