Skip to main content

Overview

SignatureVerifier validates that cross-chain transactions have been properly signed by the required number of oracles before they can be claimed. Contract Location: contracts/transfers/SignatureVerifier.sol

Key Functions

submit

Verifies oracle signatures for a submission.
function submit(
    bytes32 _submissionId,
    bytes calldata _signatures
) external view returns (
    uint256 successCount,
    bytes memory successOracles
)
_submissionId
bytes32
required
Unique identifier for the cross-chain submission
_signatures
bytes
required
Concatenated oracle signatures (65 bytes each)

Signature Format

Signatures are concatenated ECDSA signatures:
  • r: 32 bytes
  • s: 32 bytes
  • v: 1 byte (recovery id)
Example Signature Verification
// Each signature is 65 bytes
bytes memory signatures = abi.encodePacked(
    r1, s1, v1,  // Oracle 1
    r2, s2, v2,  // Oracle 2
    r3, s3, v3   // Oracle 3
);

(uint256 count, bytes memory oracles) = verifier.submit(
    submissionId,
    signatures
);

Validation Rules

1

Signature Count

Must have at least minConfirmations valid signatures
2

Required Oracles

All oracles marked as required must have signed
3

Valid Oracles

Each signature must be from an active, valid oracle
4

No Duplicates

No oracle can sign more than once
For high-value transfers above the threshold, excessConfirmations is used instead of minConfirmations.

OraclesManager

Oracle network management

DeBridgeGate

Uses verification for claim operations

Build docs developers (and LLMs) love