standard · execution

LUKSO LSP25 Execute Relay Call Standard

LSP·25 · Execution

Gasless execution on the account itself — controller signs, relayer submits.

LSP·25 interface solidity
function executeRelayCall(
  bytes calldata signature,
  uint256 nonce,
  uint256 validityTimestamps,
  bytes calldata payload
) external payable returns (bytes memory);

// Nonce uses high 128 bits as channel, low 128 bits as sequence — parallel relay streams.
function getNonce(address from, uint128 channel) external view returns (uint256);

LSP25 puts relay execution on the account contract. The signing controller is constrained by LSP6 permissions, the same permissions that apply to direct calls. The relayer is just infrastructure — it can’t escalate authority by virtue of paying gas.

The nonce channels are the under-appreciated detail. Channel 0 is the default linear stream; higher channels let you sign and submit independent payloads in parallel (one channel per device, one per app session, etc.) without serializing through a single nonce counter.

What it solves.

What it does not solve.

Anti-overselling is a feature.

  • LSP25 doesn't decide who pays. That's the relayer's policy.
  • Replay protection is per-channel — pick channels deliberately for parallel flows.
  • It doesn't make the underlying call permissionless. LSP6 still gates what the signing controller may do.

Companions.

Standards this composes with.

Read the source.