Registering as Relayer
Every Aura validator is an implicit relayer — fee-bearing unsigned extrinsics are included in blocks as part of normal block authorship. No special node configuration or relay service is required.
To receive fee attribution and be able to claim accumulated fees, a validator must register an EVM H160 address on-chain via pallet-relayer. This registration is restricted to active Aura validators.
Prerequisites
The node must be running as a validator with an Aura key in the keystore. The register_relayer extrinsic is rejected for non-validators.
Any secp256k1 address the validator controls. Used exclusively for claiming fees via claim_relay_fees_to_evm.
Step 1 — Generate an EVM address
Generate a secp256k1 key pair. Any Ethereum key derivation tool works. Using cast (Foundry):
cast wallet new
Example output:
Successfully created new keypair.
Address: 0xABCDEF...
Private key: 0xdeadbeef...
Keep the private key secure. The H160 address is what gets registered on-chain.
This address receives tokens from fee claims. Treat the private key as a hot wallet — do not reuse it across networks.
Step 2 — Submit the registration extrinsic
Call register_relayer(evm_address) from the validator's Substrate account. This can be done via:
Polkadot.js Apps
- Go to Developer → Extrinsics
- Select the validator's account
- Select
relayer → registerRelayer - Enter the H160 address (40-char hex, without
0x) - Submit and sign
ts-sdk
import { RelayerStatusModule } from '@orbinum/sdk';
// Check registration first
const statusModule = new RelayerStatusModule(api);
const isRegistered = await statusModule.isRelayer(validatorSs58);
The extrinsic writes two on-chain indexes:
RelayerByAccount[AccountId] → H160— used when claiming fees to EVMRelayerRegistry[H160] → AccountId— used to attribute fees from executed operations
pallet-relayer calls T::IsValidator::contains(&who) before accepting the registration. Non-validators receive a NotValidator error.
Step 3 — Verify registration
After the extrinsic is finalized, check registration via chain state or the SDK:
# Query via RPC
curl -sX POST http://localhost:9944 \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "state_call",
"params": ["ShieldedPoolApi_get_merkle_tree_info", "0x"]
}'
Or in the app — validators see the Relayer Dashboard panel in the wallet view once registered and with pending fees.
Claiming accumulated fees
Fees accumulate in PendingRelayerFees[AccountId][asset_id] as blocks are authored. Two claim paths are available:
claim_shielded_fees — call index 16
- Requires a disclosure ZK proof
- Funds are fully private and spendable as any note
- Available in the Relayer Dashboard (app UI)
claim_relay_fees_to_evm — call index 17
- No ZK proof required
- Tokens go directly to the registered H160 account
- Visible on-chain as a public transfer
See Fee Lifecycle for a full walkthrough of both paths.
Unregistering
To stop receiving fee attribution, call unregister_relayer(). This removes both on-chain indexes. Any fees already accumulated in PendingRelayerFees remain claimable after unregistration.
pallet-relayer: relevant extrinsics
| Extrinsic | Who calls | Purpose |
|---|---|---|
register_relayer(evm_address) | Validator | Binds H160 → AccountId in both registry maps |
unregister_relayer() | Validator | Removes registration; stops fee attribution |
set_min_relay_fee(fee) | Governance (ManageOrigin) | Adjusts the minimum fee required in ZK proofs |
On-chain events reference
Key events emitted by pallet-relayer:
| Event | Meaning |
|---|---|
RelayerRegistered { evm_address, account } | On-chain registration completed |
RelayFeesConsumed { relayer, asset_id, amount } | Fees deducted from pending balance (claim step) |
Key events emitted by pallet-shielded-pool:
| Event | Meaning |
|---|---|
ValidatorFeesClaimed { validator, asset_id, amount, ... } | Fees received as private note |
RelayFeesClaimedToEvm { validator, evm_address, asset_id, amount } | Fees sent to H160 EVM account |
Related
- How It Works — end-to-end relay flow
- Fee Lifecycle — how fees accumulate and are claimed