# Etherlink Relay Runbook

Runbook for bridging to **Etherlink** (chain 42793) when CCIP does not support Etherlink (custom relay path) or as reference when CCIP is added.

## Branch: CCIP vs Custom Relay

- **If CCIP supports Etherlink**: Use official CCIP lane. Deploy receiver bridges on Etherlink per [DeployWETHBridges.s.sol](../../script/deploy/bridge/DeployWETHBridges.s.sol) and [execute-bridge-config.sh](../../scripts/deployment/execute-bridge-config.sh). Configure addDestination on source (138, 651940 if ever CCIP) with Etherlink chain selector and receiver addresses. Fund LINK. No custom relay needed.
- **If CCIP does not support Etherlink**: Use **custom relay** (this runbook). Same pattern as 138→Mainnet in [relay ARCHITECTURE](../relay/ARCHITECTURE.md).

## Custom Relay Path (when CCIP not available)

### Components

1. **Source chain(s)** (e.g. ChainID 138 or ALL Mainnet)
   - Bridge contract (UniversalCCIPBridge or WETH bridge) that locks tokens and emits events (e.g. MessageSent or equivalent).
2. **Relay service (off-chain)**
   - Event monitor: listen for bridge/router events for destination Etherlink (chainId 42793).
   - Message queue: queue detected messages; retry; idempotency.
   - Token mapping: source token address → Etherlink token address.
   - Submit on Etherlink: call relay-compatible receiver contract to mint/unlock and transfer to recipient.
3. **Etherlink (42793)**
   - **Relay-compatible receiver**: Contract that accepts relay-submitted payloads (sender, token, amount, recipient); mints or unlocks and transfers. Must be authorized (e.g. only relayer key can call).

### Receiver interface (Etherlink)

- Function: e.g. `relayMintOrUnlock(bytes32 messageId, address token, address recipient, uint256 amount)` or equivalent.
- Access control: only relayer (or authorized bridge) can call.
- Replay: use `messageId` (or source chain tx hash) for idempotency.

### Env

- `ETHERLINK_RPC_URL` (e.g. `https://node.mainnet.etherlink.com`).
- `ETHERLINK_RELAY_BRIDGE`: receiver contract on Etherlink.
- `ETHERLINK_RELAY_PRIVATE_KEY`: key that holds authority on receiver (or relayer role).

### Deployment on Etherlink (custom relay)

1. Deploy receiver contract (relay-compatible: accept relayMintOrUnlock-style calls).
2. Deploy or map wrapped token contracts if needed.
3. Configure relay service: source RPC, Etherlink RPC, receiver address, token mapping, private key.

## References

- [relay ARCHITECTURE](../relay/ARCHITECTURE.md) (138→Mainnet pattern).
- [TEZOS_CCIP_DON_PREREQUISITES](../../../docs/07-ccip/TEZOS_CCIP_DON_PREREQUISITES.md): verify CCIP first; if not listed, use this runbook.
