Skip to main content
Run a relayer that queries a standalone attestor for 41002 and builds Besu proofs for 41001.

Before you begin

Complete the tutorial and standalone attestor guides, in order. Keep the standalone attestor for 41002 running. The tutorial’s keystore already holds a funded key, so this guide reuses it rather than importing another.

1. Relayer config

  1. Create a relayer configuration file:
  1. Write its configuration, reading the router and multicall addresses from your deployment:
  • No chain names a deployer, because this relayer deploys nothing.
  • The client type describes how that end verifies the opposite chain. The client on 41001 trusts the remote attestor for 41002. The client on 41002 verifies Besu proofs from 41001.
  • The signer on each client end is the key that submits on that end’s own chain, so one connection can use a different key per side.
  • autoRelay is set on each client end and governs packets leaving that end’s chain. It requires the chain’s ws endpoint.
  • The listen address and the database are this relayer’s own, so neither collides with the tutorial’s.

2. Validate the config

3. Relay a packet

  1. Start your relayer in a new terminal, and leave it running:
The relayer is running and waiting for packets. The readiness log confirms startup; use the gRPC health check to monitor ongoing API and database availability. It clears pending packets at startup, then every five minutes; relayer.clearOnStart and relayer.clearInterval change both.
  1. Back in your first terminal, send a transfer and keep the hash:
The relayer will pick up the packet automatically and relay it to the destination.
  1. Watch it settle:
It reads PACKET_STATE_PENDING until the receive and the acknowledgement have both landed, then PACKET_STATE_SUCCEEDED with all three transaction hashes.
  1. Confirm the balance on the destination chain:
The balance should be one token higher, meaning the packet was delivered successfully.