Bundler Endpoint

As per ERC-4337, Bundler is a node (block builder) that can handle UserOperations, create a valid an EntryPoint.handleOps() transaction, and add it to the block while it is still valid. This can be achieved by a number of ways:

  • Bundler can act as a block builder itself

  • If the bundler is not a block builder, it MUST work with the block building infrastructure such as mev-boost or other kind of PBS (proposer-builder separation)

  • The bundler can also rely on an experimental eth_sendRawTransactionConditional RPC API if it is available.

Utilize the following API to send the bundle of user operations to the bundler.

/senduserops

Prepare the data, to send the bundle of user operations, to the bundler.

POST https://api.expand.network/aa/senduserops

Request Body

NameTypeDescription

rpc

String

Remote procedural call URL.

chainId

String

Refer to the Chain ID page for details.

signature*

String

Data passed into the account along with the nonce during the verification step.

paymasterAndData*

String

Address of paymaster sponsoring the transaction, followed by extra data to send to the paymaster. (empty for self-sponsored transaction)

maxPriorityFeePerGas*

String

Maximum priority fee per gas. (similar to EIP-1559 max_priority_fee_per_gas)

maxFeePerGas*

String

Maximum fee per gas. (similar to EIP-1559 max_fee_per_gas)

preVerificationGas*

String

The amount of gas to pay for to compensate the bundler for pre-verification execution and calldata.

verificationGasLimit*

String

The amount of gas to allocate for the verification step.

gasLimit*

String

Maximum gas limit provided by the sender, for the transaction.

callGasLimit*

String

The amount of gas to allocate the main execution call.

callData*

String

The data to pass to the sender during the main execution call.

initCode*

String

The initCode of the account. (needed if and only if the account is not yet on-chain and needs to be created)

sender*

String

The account making the operation.

userOps*

Array

The user operation object as per ERC-4337.

chainSymbol

String

Refer to the Chain ID page for details.

bundler*

String

Beneficiary address for bundle execution.

gas*

String

Gas limit for bundler transaction.

{
    "userOps": [
        {
            "sender": "0x03D3a52d79eeB5014dFe28258e8c0978Ecd8e65c",
            "nonce": "0",
            "initCode": "0x",
            "callData": "0x38ed173900000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000063056e00436da25bcf48a40dfbbdcc708935100600000000000000000000000000000000000000000000000000000000634d00ee0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000b4fbf271143f4fbf7b91a5ded31805e42b2208d600000000000000000000000011fe4b6ae13d2a6055c8d9cf65c55bac32b5d844",
            "callGasLimit": "260611",
            "gasLimit": "362451",
            "verificationGasLimit": "362451",
            "preVerificationGas": "53576",
            "maxFeePerGas": "29964445250",
            "maxPriorityFeePerGas": "100000000",
            "paymasterAndData": "0x",
            "signature": "0x06ba793e154877ba4beff535372f70be6d2ebb5503f374297658caa13a114b5b29b5a45cd4835176e637018823bba5990b6f043f93fe792a5bdb2a09958ecca61c"
        }
    ],
    "bundler": "0x6Fb447Ae94F5180254D436A693907a1f57696900",
    "gas": "516124"
}

Last updated