Skip to main content
Use Relayer V3 when the user signs a transaction with a relayer field and XOXNO co-signs, pays gas, and broadcasts it.

Availability

Relayer V3 is gated access. Your app must be approved before relay or POST /v1/sign succeeds.

Broadcast Vs Relay

ActionWho signsWho pays gasUse when
broadcastUser or backend signerUserYou already have a fully signed transaction.
relayUser first, XOXNO secondXOXNOYour approved integration sponsors the user’s gas.

Flow

1

Derive sender shard

Compute the sender shard from the bech32 public key and select the matching Relayer address.
2

Build transaction with relayer

Set the transaction relayer field before the user signs.
3

User signs

The user signature must cover the transaction body including relayer.
4

Relay

Send the relay control message or call POST /v1/sign. The Relayer validates shard match, co-signs, and broadcasts.
5

Verify

Track the returned hash with tx-status/{hash} or Gateway status.
Do not add the relayer field after user signing. That changes the signed payload and invalidates the signature.

Shard Relayer Addresses

ShardRelayer address
0erd1l0x0n5yxsfcy93gm0vyvx9m9f7cte9h9vuq4am33ugpw3d5r3hvqx6f59h
1erd12yxd5phejzw83gn8qh6jfz6q9a0ekyyhkfd3c49r03mxw25l3a5swq3nf7
2erd13jxp0yjh7gjvzgrg5mj7e8rzhn5lzcye45l0p6e5996d543r7vrq9e50za
Using a Relayer address from the wrong shard returns shard mismatch. Derive the sender shard before building the transaction.

Required Transaction Fields

FieldRequirement
senderUser bech32 address.
receiverTarget account or contract.
gasPriceMinimum 1000000000. The Relayer pays the fee after co-signing.
gasLimitMust cover execution.
signatureUser signature over the transaction including relayer.
relayerShard-matched Relayer address.

Example Relay Payload

{
  "action": "relay",
  "requestId": "relay-001",
  "tx": {
    "nonce": 42,
    "value": "0",
    "receiver": "erd1contract...",
    "sender": "erd1user...",
    "gasPrice": 1000000000,
    "gasLimit": 50000,
    "data": "c3dhcA==",
    "chainID": "1",
    "version": 2,
    "signature": "<user-signature>",
    "relayer": "erd1l0x0n5yxsfcy93gm0vyvx9m9f7cte9h9vuq4am33ugpw3d5r3hvqx6f59h"
  }
}
The payload above is an example. Replace placeholders with a transaction signed by the user after relayer was set.

Common Failures

SymptomCauseFix
shard mismatchSender shard and Relayer address shard differ.Select the Relayer address for the sender shard.
invalid signatureUser signed before relayer was added, or payload changed.Rebuild and ask the user to sign again.
unauthorized appIntegration is not approved for Relayer V3.Request access before shipping the flow.
signing capacity exceededSigning queue is full.Back off and retry.