Search for projects by name or address
Intent-based centralized bridge optimised for speed, multichain and multiasset support. A centralized API quotes orders and Relay-operated solvers fill them from their own liquidity; the onchain footprint is minimal and settlement depends on a single... allocator key per chain.
Intent-based centralized bridge optimised for speed, multichain and multiasset support. A centralized API quotes orders and Relay-operated solvers fill them from their own liquidity; the onchain footprint is minimal and settlement depends on a single... allocator key per chain.
Intent-based centralized bridge optimised for speed, multichain and multiasset support. A centralized API quotes orders and Relay-operated solvers fill them from their own liquidity; the onchain footprint is minimal and settlement depends on a single allocator key per chain.
Relay is an intent-based, non-minting bridge and crosschain payments network with a deliberately minimal onchain footprint. Users request a quote from the centralized Relay API and pay on the origin chain; a Relay solver then fills them on the destination chain from its own pre-positioned liquidity with a plain transfer, swap, or contract call. All order matching, pricing, and balance accounting happen offchain and on Relay-operated infrastructure — no contract on the origin or destination chain verifies any relationship between the user’s payment and the solver’s fill.
There are three origin-side payment paths. In the legacy flow, native tokens are sent to the RelayReceiver, which immediately forwards them to a solver address hardcoded at deployment and merely emits the order commitment as an event (ERC20s in this flow are transferred to the solver directly). In the router flow, the RelayApprovalProxyV3 pulls user ERC20s (approvals, EIP-2612/ERC-3009 permits, or Permit2) into the stateless RelayRouterV3, which atomically executes the calls of the quote. In the settlement flow, funds are escrowed in the RelayDepository tagged with an order id — the contract keeps no balance accounting and only emits a deposit event.
After filling, the solver asks the Relay Oracle — an offchain service run by Relay — to attest the origin deposit and destination fill. The attestation is submitted to an Oracle contract on the ‘Relay Chain’ (a Relay-operated sovereign EVM rollup posting data to Celestia), where a Hub contract credits the deposit to the solver’s balance. Solvers replenish their capital by requesting a withdrawal from the Allocator, a contract on Aurora that uses NEAR’s MPC ‘chain signatures’ network to produce a signed payload accepted by the RelayDepository on the target chain.
From the perspective of each deposit chain, this entire settlement stack reduces to a 1-of-1 trust assumption: RelayDepository.execute() performs arbitrary external calls authorized by a single signature from the registered allocator address — on Base a plain address without contract code — protected only by a nonce and an expiration. The claims that this key is threshold-MPC-managed, that withdrawals are bounded by solver balances on the Hub, and that a Security Council multisig on Aurora can suspend withdrawers, all live offchain or on other chains and are not verifiable or enforced by the Depository. Moreover, the Depository’s owner — currently an EOA on Base — can replace the allocator at any time and without delay, taking direct control of all escrowed funds.
Filling is not permissionless: orders are filled by Relay-operated solver infrastructure, and withdrawal rights from the settlement protocol are granted by an APPROVED_WITHDRAWER_ROLE on the Aurora allocator. There is no onchain solver collateral or slashing; the user’s destination outcome depends entirely on the solver filling correctly and quickly.
There is no onchain refund path in any of the three flows. Funds sent through the RelayReceiver or the router flow are with the solver in the same transaction, and funds escrowed in the RelayDepository can only leave via an allocator-signed call. Failed or unfillable orders depend on Relay’s discretionary, oracle-attested refund process.
None of the onchain contracts are proxies — the RelayDepository, RelayReceiver, RelayRouterV3, and RelayApprovalProxyV3 are all immutable. This offers limited protection because the critical powers are held by keys rather than code: the Depository owner can swap the allocator (full control of the escrow), and the allocator key alone moves escrowed funds. The RelayApprovalProxyV3 owner can only sweep funds stuck in that contract; user token approvals to it cannot be spent by the owner.
Deposits emit events onchain (RelayNativeDeposit/RelayErc20Deposit in the Depository, FundsForwardedWithData in the RelayReceiver, FundsMovement in the router flow), but fills on the destination chain are ordinary transfers from solver liquidity and are not marked as protocol activity. Relay provides an explorer and an API for order tracking, and the Relay Chain acts as the protocol’s crosschain accounting ledger.
Symbol | Last 24h
Volume | Last 24h
transfer count | Last 24h avg.
transfer time | Last 24h avg.
transfer value | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Timestamp | Tokens | Value | Bridge | Transfer time | Chains | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Discovery rerun on the same block number with only config-related changes.
Discovery rerun on the same block number with only config-related changes.
| + | Status: CREATED |
| contract RelayDepository (base:0x4cD00E387622C35bDDB9b4c962C136462338BC31) [relay/RelayDepository] | |
| +++ description: Escrow entry point of the Relay settlement protocol: user deposits for crosschain intents are parked here, tagged only by an event that attributes them to an order id. The contract keeps no balance accounting and does not verify orders or fills - all accounting happens offchain and on the Hub contract on the Relay Chain. Funds leave the contract exclusively through execute(), which performs arbitrary external calls authorized by a single signature of the current allocator (replay-protected by nonce and expiration). | |
| + | Status: CREATED |
| contract RelayReceiver (base:0xa5F565650890fBA1824Ee0F21EbBbF660a179934) [relay/RelayReceiver] | |
| +++ description: Passthrough deposit contract of the legacy Relay flow: any native tokens sent to it are immediately forwarded to a solver address hardcoded at deployment, and the attached calldata is only emitted as an event that commits the payment to a Relay order id. The contract holds no funds and enforces nothing about the order - after the forward, the user's outcome depends entirely on the solver. ERC20 payments in this flow do not even touch this contract and are transferred to the solver directly. | |
| + | Status: CREATED |
| contract RelayRouterV3 (base:0xb92fe925DC43a0ECdE6c8b1a2709c170Ec4fFf4f) [relay/RelayRouterV3] | |
| +++ description: Stateless multicall router used to atomically execute the calls of a Relay quote (swaps, bridge deposits, transfers to the solver). It has no owner and no privileged roles, and it is not supposed to hold funds between transactions: anyone can sweep balances left in it via the public cleanup functions. | |
| + | Status: CREATED |
| contract RelayApprovalProxyV3 (base:0xCcC88a9d1B4ED6b0EABA998850414b24f1c315bE) [relay/RelayApprovalProxyV3] | |
| +++ description: ERC20 entry point of the Relay v3 flow: it pulls user tokens (via direct approvals or EIP-2612 / ERC-3009 / Permit2 signatures) and forwards them to the RelayRouterV3, where the calls of the Relay quote are executed atomically. Token pulls are only possible from msg.sender or with the token owner's signature, so user approvals to this contract cannot be spent by its owner. | |
Escrow entry point of the Relay settlement protocol: user deposits for crosschain intents are parked here, tagged only by an event that attributes them to an order id. The contract keeps no balance accounting and does not verify orders or fills - all accounting happens offchain and on the Hub contract on the Relay Chain. Funds leave the contract exclusively through execute(), which performs arbitrary external calls authorized by a single signature of the current allocator (replay-protected by nonce and expiration).
Passthrough deposit contract of the legacy Relay flow: any native tokens sent to it are immediately forwarded to a solver address hardcoded at deployment, and the attached calldata is only emitted as an event that commits the payment to a Relay order id. The contract holds no funds and enforces nothing about the order - after the forward, the user’s outcome depends entirely on the solver. ERC20 payments in this flow do not even touch this contract and are transferred to the solver directly.
Stateless multicall router used to atomically execute the calls of a Relay quote (swaps, bridge deposits, transfers to the solver). It has no owner and no privileged roles, and it is not supposed to hold funds between transactions: anyone can sweep balances left in it via the public cleanup functions.
ERC20 entry point of the Relay v3 flow: it pulls user tokens (via direct approvals or EIP-2612 / ERC-3009 / Permit2 signatures) and forwards them to the RelayRouterV3, where the calls of the Relay quote are executed atomically. Token pulls are only possible from msg.sender or with the token owner’s signature, so user approvals to this contract cannot be spent by its owner.