Transaction Relaying

The relay action enables co-signed transaction execution, where the XOXNO relayer adds its signature to transactions before broadcasting. This supports gasless transactions and meta-transaction patterns using MultiversX Relayer V3 format.

Overview

Transaction relaying allows:

  • Gasless transactions - Users sign, relayer pays gas

  • Meta-transactions - Execute on behalf of users

  • Relayer V3 format - Native MultiversX relayer support

Relayer Addresses

Shard
Relayer Address

0

erd1l0x0n5yxsfcy93gm0vyvx9m9f7cte9h9vuq4am33ugpw3d5r3hvqx6f59h

1

erd12yxd5phejzw83gn8qh6jfz6q9a0ekyyhkfd3c49r03mxw25l3a5swq3nf7

2

erd13jxp0yjh7gjvzgrg5mj7e8rzhn5lzcye45l0p6e5996d543r7vrq9e50za

How It Works

  1. Determine sender shard - Calculate which shard the sender address belongs to

  2. Select relayer address - Use the relayer address for that shard

  3. Build transaction with relayer field - Include the relayer address in the transaction

  4. User signs transaction - User signs the complete transaction (including relayer field)

  5. Send to relayer - Submit via WebSocket relay action

  6. Relayer adds signature - Backend appends relayerSignature

  7. Broadcast - Transaction sent to P2P network

Shard Calculation

The sender's shard is determined by the last byte of their address:

Relay Request

The relayer field is mandatory - you must include the correct relayer address:

Transaction Fields

Field
Type
Required
Description

nonce

number

Yes

Sender's transaction counter

value

string

Yes

EGLD value in atomic units

receiver

string

Yes

Receiver's bech32 address

sender

string

Yes

Sender's bech32 address

gasPrice

number

Yes

Gas price in atomic units

gasLimit

number

Yes

Maximum gas units

data

string

No

Transaction data payload

chainID

string

Yes

Chain identifier

version

number

Yes

Transaction version

signature

string

Yes

User's signature (hex)

relayer

string

Yes

Relayer address for sender's shard

The user must sign the transaction including the relayer field. The backend only appends relayerSignature.

Batch Relay

Response

Success

Partial Success

Complete Integration Example

Transaction Signing Flow

The user must sign the complete transaction including the relayer field:

Error Handling

Common Errors

Error
Cause
Solution

invalid relayer address

Wrong relayer for sender's shard

Use correct relayer from table above

relayer field missing

Transaction missing relayer

Include relayer in transaction

invalid user signature

User didn't sign with relayer field

Re-sign including relayer

nonce too low

Transaction already processed

Get fresh nonce

Relay vs Broadcast

Aspect
Relay
Broadcast

relayer field

Required

Not needed

User signs

With relayer field

Without relayer field

Backend adds

relayerSignature

Nothing

Gas payer

Relayer

User

Use case

Gasless, meta-tx

Standard tx

Rate Limits

Limit
Value

Relay requests per second

100

Max batch size

100 transactions

Pending relays per sender

10

Last updated

Was this helpful?