Skip to main content

Services documentation

Use high performance APIs provided by Infura to scale your dapp or Snap.

eth_sendUserOperation

Submits a user operation to be included onchain and returns the user operation hash if successful (or queued). If the operation is not successful, it will return an error. This method uses 80 credits from your daily balance.

Parameters

  • userOperation: The user operation object containing the following fields:

    • sender: (string) - The address of the account making the operation.
    • nonce: (string) - Unique identifier for the request from this sender. This includes the key and sequence number.
    • factory: (string) [optional] - The factory contract address that will deploy the smart account if it doesn't exist yet.
    • factoryData: (string) [optional] - The data passed to the factory contract to deploy the smart account.
    • callData: (string) [optional] - The data to pass to the sender during the main execution call.
    • callGasLimit: (string) - The amount of gas to allocate the main execution call.
    • verificationGasLimit: (string) - The amount of gas to allocate for the verification step.
    • preVerificationGas: (string) - The amount of gas to pay for to compensate the bundler for pre-verification execution and calldata.
    • maxFeePerGas : (string) - Maximum fee per gas, in wei, the sender is willing to pay per gas.
    • maxPriorityFeePerGas: (string) - Maximum fee, in wei, the sender is willing to pay per gas above the base fee.
    • paymaster: (string) [optional] - Address of paymaster sponsoring the transaction, or null if none.
    • paymasterVerificationGasLimit: (string) [optional] - The amount of gas to allocate for the verification step of the paymaster, or null if no paymaster.
    • paymasterPostOpGasLimit: (string) [optional] - The amount of gas to allocate for the post-operation step of the paymaster, or null if no paymaster.
    • paymasterData: (string) [optional] - The data to pass to the paymaster during the verification step, or null if no paymaster.
    • signature: (string) - The signature data.
    • eip7702Auth: (object) [optional] - The EIP-7702 authorization data. SignedAuthorization Type:
      • address: (string) - The contract address for the authorization.
      • chainId: (string) - The chain ID.
      • nonce: (string) - The nonce.
      • r: (string) - The r component of the signature.
      • s: (string) - The s component of the signature.
      • v: (string) - The v component of the signature.
      • yParity: (string) - The y-parity value.
  • entryPoint: (string) - The entry point contract address (0x0000000071727De22E5E9d8BAf0edAc6f37da032).

Returns

The 32-bytehash of the user operation (userOpHash). This hash uniquely identifies the user operation and can be used to track its status.

Example

Replace <YOUR-API-KEY> with an API key from your MetaMask Developer dashboard.

Request

curl http://mainnet.infura.io/v3/<YOUR-API-KEY> \
-X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "eth_sendUserOperation",
"params": [
{
"sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149",
"nonce": "0x845ADB2C711129D4F3966735ED98A9F09FC4CE5700000000000000000000",
"factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5",
"factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419",
"callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000",
"callGasLimit": "0x13880",
"verificationGasLimit": "0x60B01",
"preVerificationGas": "0xD3E3",
"maxPriorityFeePerGas": "0x3B9ACA00",
"maxFeePerGas": "0x7A5CF70D5",
"paymaster": "0x",
"paymasterVerificationGasLimit": "0x0",
"paymasterPostOpGasLimit": "0x0",
"paymasterData": null,
"signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c"
},
"0x0000000071727De22E5E9d8BAf0edAc6f37da032"
],
"id": 1
}'

Response

{
"jsonrpc": "2.0",
"id": 1,
"result": "0x4c31ae84205a9c862dd8d0822f427fb516448451850ee6f65351951f6a2b2154"
}

Example

Replace <YOUR-API-KEY> with an API key from your MetaMask Developer dashboard.

Request

curl https://mainnet.infura.io/v3/<YOUR-API-KEY> \
-X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "eth_sendUserOperation",
"params": [
{
"sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149",
"nonce": "0x845ADB2C711129D4F3966735ED98A9F09FC4CE5700000000000000000000",
"factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5",
"factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419",
"callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000",
"callGasLimit": "0x13880",
"verificationGasLimit": "0x60B01",
"preVerificationGas": "0xD3E3",
"maxPriorityFeePerGas": "0x3B9ACA00",
"maxFeePerGas": "0x7A5CF70D5",
"paymaster": "0x",
"paymasterVerificationGasLimit": "0x0",
"paymasterPostOpGasLimit": "0x0",
"paymasterData": null,
"signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c"
},
"0x0000000071727De22E5E9d8BAf0edAc6f37da032"
],
"id": 1
}'

Response

{
"jsonrpc": "2.0",
"id": 1,
"result": "0x4c31ae84205a9c862dd8d0822f427fb516448451850ee6f65351951f6a2b2154"
}