Orders

Approve builder fee

Changed on

Approve a builder's maximum per-order fee ceiling. User signs the approval off-chain; server submits via Router.approveBuilderFee(). Gas sponsored by API service.

Set max_fee_bps=0 to revoke a previously granted approval.

Permit: Client signs an EIP-712 VerifyWitness permit; the server recovers the signer off-chain and matches it to permit.signer (server holds no keys).

Prerequisites:

  1. GET /v1/auth/eip712-domain — EIP-712 domain (name, version, chainId, verifyingContract = Authorization contract)
  2. GET /v1/nonce-state/{account} — nonce_anchor and current_bitmap_index (pass it as permit.nonce_bitmap_index; if 208 the anchor is full — use nonce_anchor+1 with bitmap index 0)
  3. GET /v1/system/config — router address (RISExUniversalRouter), used as the target field below

Action hash:

actionHash = keccak256(abi.encode(
  keccak256("RISE_APPROVE_BUILDER_FEE_V1"),  // bytes32 action selector
  uint16(builder_id),
  uint16(max_fee_bps)))

Permit digest (EIP-712):

VerifyWitness(address account,address target,bytes32 hash,uint48 nonceAnchor,uint8 nonceBitmap,uint32 deadline)

Sign as standard EIP-712 typed data (e.g. ethers signTypedData) with hash = actionHash, target = RISExUniversalRouter address (NOT the account, NOT the domain verifyingContract), nonceBitmap = permit.nonce_bitmap_index.

Signature: 64-byte EIP-2098 compact (r + yParityAndS) or 65-byte (r+s+v, auto-converted).

post/v1/orders/builder-fee/approve

Request

Request body

builder_idinteger

Builder ID (uint16)

max_fee_bpsinteger

Max builder fee in parts per million (denominator 1e6, uint16). 100 = 1 bps. 0 = revoke.

Example request

{
  "permit": {
    "account": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
    "signer": "0x1234567890123456789012345678901234567890",
    "nonce_anchor": "0"
  }
}

Response

A successful response.

tx_hashstring
block_numberstring uint64

Changes