Paymaster API V3 RPC Methods
JSON-RPC API reference for Candide's Paymaster V3 service. Visit the dashboard to get an API key for Candide's Paymaster.
EntryPoint v0.9
EntryPoint v0.9 is ABI-compatible with v0.8 and exposes the same Paymaster API methods with the same UserOperation shape. Pass the v0.9 EntryPoint address (0x433709009B8330FDa32311DF1C2AFA402eD8D009) as the entrypoint parameter.
Key v0.9 addition for the Paymaster API:
- Parallelizable Paymaster Signing: A two-phase signing flow lets the dApp send the paymaster data to the wallet for signing in parallel with the paymaster producing its own signature. This is opted into via the
signingPhasecontext parameter onpm_getPaymasterData, and eliminates the round-trip delay between the user signing and the paymaster signing.
Parallelizable Paymaster Signing
The two-phase flow uses a single context field, signingPhase, which can be "commit" or "finalize". It is only valid on pm_getPaymasterData calls against the EntryPoint v0.9 entrypoint.
- Commit phase — call
pm_getPaymasterDatawithcontext: { signingPhase: "commit", ... }. The paymaster reserves gas limits, computes the paymaster data and its signature, stores the signed result in a server-side commitment keyed bysender:nonce, and returns the unsigned paymaster data so the wallet can compute the UserOp hash and sign it in parallel. - Finalize phase — once the user has signed the UserOp, call
pm_getPaymasterDataagain withcontext: { signingPhase: "finalize", ... }and the same UserOp (unchanged between commit and finalize). The paymaster returns the previously committed signed paymaster data.
If anything about the UserOp changes between the two calls, the commitment lookup fails and the call is rejected.
pm_supportedERC20Tokens
Same semantics and response shape as the v0.8 method. Pass the v0.9 EntryPoint address as params[0].
{
"jsonrpc": "2.0",
"id": 0,
"method": "pm_supportedERC20Tokens",
"params": ["0x433709009B8330FDa32311DF1C2AFA402eD8D009"]
}
pm_sponsorUserOperation
Same semantics, UserOp shape, and response shape as the v0.8 method. Pass the v0.9 EntryPoint address.
- Request Types
- Response Type
| Parameter | Type | |||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| userOperation | Object
| |||||||||||||||||||||||||||||||||||||||||||||||||||
| entrypoint | string — EntryPoint v0.9 address | |||||||||||||||||||||||||||||||||||||||||||||||||||
| context | Object
|
| key | type | description | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
paymaster | string | Address of paymaster contract, (or empty, if account pays for itself) | |||||||||||||||
paymasterVerificationGasLimit | string | The amount of gas to allocate for the paymaster post-operation code | |||||||||||||||
paymasterPostOpGasLimit | string | The amount of gas to allocate for the paymaster post-operation code | |||||||||||||||
paymasterData | string | Data for paymaster (only if paymaster exists) | |||||||||||||||
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 | Extra gas to pay the bunder | |||||||||||||||
maxFeePerGas | string | Maximum fee per gas (similar to EIP-1559 max_fee_per_gas) | |||||||||||||||
maxPriorityFeePerGas | string | Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas) | |||||||||||||||
sponsorMetadata | | Information about the Gas Policy Sponsor |
pm_supportedEntryPoints
Returns the entryPoint addresses supported by the paymaster. The response array includes the v0.9 EntryPoint address (0x433709009B8330FDa32311DF1C2AFA402eD8D009) when supported. See the v0.8 reference.
pm_chainId
Same as v0.8 reference.
pm_getPaymasterStubData
ERC-7677 compatible method. Same semantics, UserOp shape, and response shape as the v0.8 method. Pass the v0.9 EntryPoint address. The signingPhase context parameter is not valid here; use pm_getPaymasterData for the two-phase flow.
pm_getPaymasterData
ERC-7677 compatible method. Same semantics, UserOp shape, and response shape as the v0.8 method. Pass the v0.9 EntryPoint address.
To opt into parallelizable paymaster signing, set context.signingPhase to "commit" for the first call and "finalize" for the second call (see Parallelizable Paymaster Signing above).
{
"jsonrpc": "2.0",
"id": 0,
"method": "pm_getPaymasterData",
"params": [
{
"sender": "0x2c298CcaFF..c236fCC66dB2",
"nonce": "0x17",
"factory": "0x..",
"factoryData": "0xf3....0000",
"callData": "0xf3....0000",
"callGasLimit": "0x12a87",
"verificationGasLimit": "0x1a332",
"preVerificationGas": "0xe95c",
"maxFeePerGas": "0x5f4ecdc0",
"maxPriorityFeePerGas": "0x59682f00",
"paymaster": "0x..",
"paymasterVerificationGasLimit": "0x..",
"paymasterPostOpGasLimit": "0x..",
"paymasterAndData": "0x",
"signature": "0x"
},
"0x433709009B8330FDa32311DF1C2AFA402eD8D009",
"0x01",
{ "signingPhase": "commit", "sponsorshipPolicyId": "1234" }
]
}
EntryPoint v0.8
EIP-7702 support is added with EntryPoint v0.8. You can use the Paymaster API to offer gas sponsorship to end users through full gas policies or by offering to pay gas in ERC-20 tokens. The Paymaster API for EntryPoint v0.8 is fully backward compatible and has no breaking changes from EntryPoint v0.7.
pm_supportedERC20Tokens
Gets supported ERC-20 tokens for gas payments, alongside the paymaster metadata.
Invocation
{ "method": "pm_supportedERC20Tokens", "params": [entrypoint: string] }
Return
{
"result": {
paymasterMetadata: {
name: string,
description: string,
icons: string[],
address: string,
sponsoredEventTopic: string,
dummyPaymasterAndData: {
paymaster: string,
paymasterData: string,
paymasterVerificationGasLimit: string,
paymasterPostOpGasLimit: string
},
},
tokens: [{
name: string,
symbol: string,
address: string,
decimals: number,
exchangeRate: string,
}]
}
}
- Example Request
- Example Response
- Response Types
{
"jsonrpc": "2.0",
"id": 0,
"method": "pm_supportedERC20Tokens",
"params": ["0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108"]
}
{
"jsonrpc": "2.0",
"id": 0,
"result": {
"paymasterMetadata": {
"name": "Candide Paymaster",
"description": "Candide Paymaster a fast, secure and feature-rich 4337 Paymaster",
"icons": [],
"address": "0x7e3393ebA62DA6f555a5341E079e0F6585CE8c56",
"sponsoredEventTopic": "0x13..fa1",
"dummyPaymasterAndData": {
"paymaster": "0x...",
"paymasterData": "0x...",
"paymasterVerificationGasLimit": "0x...",
"paymasterPostOpGasLimit": "0x..."
}
},
"tokens": [{
"name": "Maker DAI",
"symbol": "DAI",
"address": "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1",
"decimal": "0x12",
"exchangeRate": "0x0ddeb609310c89b1"
}]
}
}
| Parameter | Type | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| paymasterMetadata | Object
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| tokens | Object[]
|
pm_sponsorUserOperation
Sends a UserOperation to a paymaster for off-chain verification. If approved, it will return the paymasterData. It will also return gas overrides when the mode for gas sponsorship uses a Gas Policy.
- ERC-20 Gas Payments: No gas overrides are returned.
- Gas Policies: Mandatory
callGasLimit,verificationGasLimit,preVerificationGas,maxFeePerGas, andmaxPriorityFeePerGasfields are returned.
Supports two types of Gas Policies:
- Public Gas Policies: These are gas policies provided by third parties, which do not require a sponsorship policy ID.
- Private Gas Policies: These require a sponsorship policy ID and can be used if no public gas policy matches the user operation.
If the paymaster rejects the UserOperation, it returns a standard JSON-RPC error with the reason.
Invocation
{ "method": "pm_sponsorUserOperation", "params": [userOperation: object, entrypoint: string, context: object] }
Return
{
"result": {
paymaster: string,
paymasterData: string,
paymasterVerificationGasLimit: string,
paymasterPostOpGasLimit: string,
callGasLimit?: string,
verificationGasLimit?: string,
preVerificationGas?: string,
maxFeePerGas?: string,
maxPriorityFeePerGas?: string,
sponsorMetadata?: {
name: string,
description: string,
url: string,
icons: string[],
}
}
}
- Example Request
- Example Response
- Request Types
- Response Type
{
"jsonrpc": "2.0",
"id": 0,
"method": "pm_sponsorUserOperation",
"params": [
{
"sender": "0x2c298CcaFF..c236fCC66dB2",
"nonce": "0x17",
"factory": "0x..",
"factoryData": "0xf3....0000",
"callData": "0xf3....0000",
"callGasLimit": "0x12a87",
"verificationGasLimit": "0x1a332",
"preVerificationGas": "0xe95c",
"maxFeePerGas": "0x5f4ecdc0",
"maxPriorityFeePerGas": "0x59682f00",
"paymaster": "0x..",
"paymasterVerificationGasLimit": "0x..",
"paymasterPostOpGasLimit": "0x..",
"paymasterAndData": "0x",
"signature": "0x",
},
"0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108",
{ "sponsorshipPolicyId" : "1234" } // sponsorshipPolicyId key value field is optional if using a private gas policy.
]
}
{
"jsonrpc": "2.0",
"id": 0,
"result": {
"paymaster": "0x..",
"paymasterData": "0x..",
"paymasterVerificationGasLimit": "0x..",
"paymasterPostOpGasLimit": "0x..",
"callGasLimit": "0x...",
"verificationGasLimit": "0x...",
"preVerificationGas": "0x..",
"maxFeePerGas": "0x..",
"maxPriorityFeePerGas": "0x..",
"sponsorMetadata": {
"name": "Aave",
"description": "Open Source Liquidity Protocol",
"url": "https://app.aave.com/",
"icons": ["https://aave.com/aave-2030-header.svg"],
}
}
}
| Parameter | Type | ||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| userOperation | Object
| ||||||||||||||||||||||||||||||||||||||||||||||||
| entrypoint |
| ||||||||||||||||||||||||||||||||||||||||||||||||
| context | Object: This argument contains information about the specific paymaster implementation you are using. If use paying gas in ERC-20 Tokens, pass the token address.
|
| key | type | description | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
paymaster | string | Address of paymaster contract, (or empty, if account pays for itself) | |||||||||||||||
paymasterVerificationGasLimit | string | The amount of gas to allocate for the paymaster post-operation code | |||||||||||||||
paymasterPostOpGasLimit | string | The amount of gas to allocate for the paymaster post-operation code | |||||||||||||||
paymasterData | string | Data for paymaster (only if paymaster exists) | |||||||||||||||
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 | Extra gas to pay the bunder | |||||||||||||||
maxFeePerGas | string | Maximum fee per gas (similar to EIP-1559 max_fee_per_gas) | |||||||||||||||
maxPriorityFeePerGas | string | Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas) | |||||||||||||||
sponsorMetadata | | Information about the Gas Policy Sponsor |
pm_supportedEntryPoints
Returns the entryPoint addresses supported by the paymaster.
Invocation
{ "method": "pm_supportedEntryPoints", "params": [] }
Return
{ "result": string[] }
- Example Request
- Example Response
- Response Type
{
"jsonrpc": "2.0",
"id": 0,
"method": "pm_supportedEntryPoints",
"params": []
}
{
"jsonrpc": "2.0",
"id": 0,
"result": ["0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", "0x0000000071727de22e5e9d8baf0edac6f37da032", "0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108"] // Entrypoint addresses
}
| key | type | description |
|---|---|---|
entrypoints | string[] | The EntryPoint Addresses that the paymaster is supporting |
pm_chainId
Get Chain ID asks the paymaster service to return the chain_id it currently supports
Invocation
{ "method": "pm_chainId", "params": [] }
Return
{ "result": number }
- Example Request
- Example Response
- Response Type
{
"jsonrpc": "2.0",
"id": 0,
"method": "pm_chainId",
"params": []
}
{
"jsonrpc": "2.0",
"id": 0,
"result": 1
}
| Parameter | Type | Description |
|---|---|---|
| chainId | number | Chain ID that the paymaster supports |
pm_getPaymasterStubData
ERC-7677 compatible method. Equivalent to Candide's pm_sponsorUserOperation.
It can return isFinal: true if the stub data is sufficient and no further data is needed.
It receives a userOperation for off-chain verification. If approved, it will return the paymasterData. It will also return gas overrides when the mode for gas sponsorship uses a Gas Policy.
- ERC-20 Gas Payments: No gas overrides are returned.
- Gas Policies: Mandatory
callGasLimit,verificationGasLimit,preVerificationGas,maxFeePerGas, andmaxPriorityFeePerGasfields are returned.
Supports two types of Gas Policies:
- Public Gas Policies: These are gas policies provided by third parties, which do not require a sponsorship policy ID.
- Private Gas Policies: These require a sponsorship policy ID and can be used if no public gas policy matches the user operation.
If the paymaster rejects the UserOperation, it returns a standard JSON-RPC error with the reason
Invocation
{ "method": "pm_getPaymasterStubData", "params": [userOperation: object, entrypoint: string, chainId: string, context: object] }
Return
{
"result": {
paymaster: string,
paymasterData: string,
paymasterVerificationGasLimit: string,
paymasterPostOpGasLimit: string,
callGasLimit?: string,
verificationGasLimit?: string,
preVerificationGas?: string,
maxFeePerGas?: string,
maxPriorityFeePerGas?: string,
sponsor?: {
name: string,
description: string,
url: string,
icons: string[],
}
}
}
- Example Request
- Example Response
- Request Types
- Response Type
{
"jsonrpc": "2.0",
"id": 0,
"method": "pm_getPaymasterStubData",
"params": [
{
"sender": "0x2c298CcaFF..c236fCC66dB2",
"nonce": "0x17",
"factory": "0x..",
"factoryData": "0xf3....0000",
"callData": "0xf3....0000",
"callGasLimit": "0x12a87",
"verificationGasLimit": "0x1a332",
"preVerificationGas": "0xe95c",
"maxFeePerGas": "0x5f4ecdc0",
"maxPriorityFeePerGas": "0x59682f00",
"paymaster": "0x..",
"paymasterVerificationGasLimit": "0x..",
"paymasterPostOpGasLimit": "0x..",
"paymasterAndData": "0x",
"signature": "0x",
},
"0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108",
"0x01",
{ "sponsorshipPolicyId" : "1234" } // sponsorshipPolicyId key value field is optional if using a private gas policy.
]
}
{
"jsonrpc": "2.0",
"id": 0,
"result": {
"paymaster": "0x..",
"paymasterData": "0x..",
"paymasterVerificationGasLimit": "0x..",
"paymasterPostOpGasLimit": "0x..",
"callGasLimit": "0x...",
"verificationGasLimit": "0x...",
"preVerificationGas": "0x..",
"maxFeePerGas": "0x..",
"maxPriorityFeePerGas": "0x..",
"sponsor": {
"name": "Aave",
"description": "Open Source Liquidity Protocol",
"url": "https://app.aave.com/",
"icons": ["https://aave.com/aave-2030-header.svg"],
},
"isFinal": true,
}
}
| Parameter | Type | ||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| userOperation | Object
| ||||||||||||||||||||||||||||||||||||||||||||||||
| entrypoint |
| ||||||||||||||||||||||||||||||||||||||||||||||||
| chainId |
| ||||||||||||||||||||||||||||||||||||||||||||||||
| context | Object: This argument contains information about the specific paymaster implementation you are using. If use paying gas in ERC-20 Tokens, pass the token address.
|
| key | type | description | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
paymaster | string | Address of paymaster contract, (or empty, if account pays for itself) | |||||||||||||||
paymasterVerificationGasLimit | string | The amount of gas to allocate for the paymaster post-operation code | |||||||||||||||
paymasterPostOpGasLimit | string | The amount of gas to allocate for the paymaster post-operation code | |||||||||||||||
paymasterData | string | Data for paymaster (only if paymaster exists) | |||||||||||||||
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 | Extra gas to pay the bunder | |||||||||||||||
maxFeePerGas | string | Maximum fee per gas (similar to EIP-1559 max_fee_per_gas) | |||||||||||||||
maxPriorityFeePerGas | string | Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas) | |||||||||||||||
sponsor | | Information about the Gas Policy Sponsor |
pm_getPaymasterData
ERC-7677 compatible method. Equivalent to Candide's pm_sponsorUserOperation.
It receives a userOperation for off-chain verification. If approved, it will return the paymasterData. It will also return gas overrides when the mode for gas sponsorship uses a Gas Policy.
- ERC-20 Gas Payments: No gas overrides are returned.
- Gas Policies: Mandatory
callGasLimit,verificationGasLimit,preVerificationGas,maxFeePerGas, andmaxPriorityFeePerGasfields are returned.
Supports two types of Gas Policies:
- Public Gas Policies: These are gas policies provided by third parties, which do not require a sponsorship policy ID.
- Private Gas Policies: These require a sponsorship policy ID and can be used if no public gas policy matches the user operation.
If the paymaster rejects the UserOperation, it returns a standard JSON-RPC error with the reason
Invocation
{ "method": "pm_getPaymasterData", "params": [userOperation: object, entrypoint: string, chainId: string, context: object] }
Return
{
"result": {
paymaster: string,
paymasterData: string,
paymasterVerificationGasLimit: string,
paymasterPostOpGasLimit: string,
callGasLimit?: string,
verificationGasLimit?: string,
preVerificationGas?: string,
maxFeePerGas?: string,
maxPriorityFeePerGas?: string,
}
}
- Example Request
- Example Response
- Request Types
- Response Type
{
"jsonrpc": "2.0",
"id": 0,
"method": "pm_getPaymasterData",
"params": [
{
"sender": "0x2c298CcaFF..c236fCC66dB2",
"nonce": "0x17",
"factory": "0x..",
"factoryData": "0xf3....0000",
"callData": "0xf3....0000",
"callGasLimit": "0x12a87",
"verificationGasLimit": "0x1a332",
"preVerificationGas": "0xe95c",
"maxFeePerGas": "0x5f4ecdc0",
"maxPriorityFeePerGas": "0x59682f00",
"paymaster": "0x..",
"paymasterVerificationGasLimit": "0x..",
"paymasterPostOpGasLimit": "0x..",
"paymasterAndData": "0x",
"signature": "0x",
},
"0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108",
"0x01",
{ "sponsorshipPolicyId" : "1234" } // sponsorshipPolicyId key value field is optional if using a private gas policy.
]
}
{
"jsonrpc": "2.0",
"id": 0,
"result": {
"paymaster": "0x..",
"paymasterData": "0x..",
"paymasterVerificationGasLimit": "0x..",
"paymasterPostOpGasLimit": "0x..",
"callGasLimit": "0x...",
"verificationGasLimit": "0x...",
"preVerificationGas": "0x..",
"maxFeePerGas": "0x..",
"maxPriorityFeePerGas": "0x..",
}
}
| Parameter | Type | ||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| userOperation | Object
| ||||||||||||||||||||||||||||||||||||||||||||||||
| entrypoint |
| ||||||||||||||||||||||||||||||||||||||||||||||||
| chainId |
| ||||||||||||||||||||||||||||||||||||||||||||||||
| context | Object: This argument contains information about the specific paymaster implementation you are using. If use paying gas in ERC-20 Tokens, pass the token address.
|
| key | type | description |
|---|---|---|
paymaster | string | Address of paymaster contract, (or empty, if account pays for itself) |
paymasterVerificationGasLimit | string | The amount of gas to allocate for the paymaster post-operation code |
paymasterPostOpGasLimit | string | The amount of gas to allocate for the paymaster post-operation code |
paymasterData | string | Data for paymaster (only if paymaster exists) |
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 | Extra gas to pay the bunder |
maxFeePerGas | string | Maximum fee per gas (similar to EIP-1559 max_fee_per_gas) |
maxPriorityFeePerGas | string | Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas) |
Entrypoint V0.7
pm_supportedERC20Tokens
Gets supported ERC-20 Tokens for gas payments, along side the paymaster metadata
Invocation
{ "method": "pm_supportedERC20Tokens", "params": [entrypoint: string] }
Return
{
"result": {
paymasterMetadata: {
name: string,
description: string,
icons: string[],
address: string,
sponsoredEventTopic: string,
dummyPaymasterAndData: {
paymaster: string,
paymasterData: string,
paymasterVerificationGasLimit: string,
paymasterPostOpGasLimit: string
},
},
tokens: [{
name: string,
symbol: string,
address: string,
decimals: number,
exchangeRate: string,
}]
}
}
- Example Request
- Example Response
- Response Types
{
"jsonrpc": "2.0",
"id": 0,
"method": "pm_supportedERC20Tokens",
"params": ["0x0000000071727De22E5E9d8BAf0edAc6f37da032"]
}
{
"jsonrpc": "2.0",
"id": 0,
"result": {
"paymasterMetadata": {
"name": "Candide Paymaster",
"description": "Candide Paymaster a fast, secure and feature-rich 4337 Paymaster",
"icons": [],
"address": "0x7e3393ebA62DA6f555a5341E079e0F6585CE8c56",
"sponsoredEventTopic": "0x13..fa1",
"dummyPaymasterAndData": {
"paymaster": "0x...",
"paymasterData": "0x...",
"paymasterVerificationGasLimit": "0x...",
"paymasterPostOpGasLimit": "0x..."
}
},
"tokens": [{
"name": "Maker DAI",
"symbol": "DAI",
"address": "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1",
"decimal": "0x12",
"exchangeRate": "0x0ddeb609310c89b1"
}]
}
}
| Parameter | Type | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| paymasterMetadata | Object
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| tokens | Object[]
|
pm_sponsorUserOperation
Sends a UserOperation to a paymaster for off-chain verification. If approved, it will return the paymasterData. It will also return gas overrides when the mode for gas sponsorship uses a Gas Policy.
- ERC-20 Gas Payments: No gas overrides are returned.
- Gas Policies: Mandatory
callGasLimit,verificationGasLimit,preVerificationGas,maxFeePerGas, andmaxPriorityFeePerGasfields are returned.
Supports two types of Gas Policies:
- Public Gas Policies: These are gas policies provided by third parties, which do not require a sponsorship policy ID.
- Private Gas Policies: These require a sponsorship policy ID and can be used if no public gas policy matches the user operation.
If the paymaster rejects the UserOperation, it returns a standard JSON-RPC error with the reason.
Invocation
{ "method": "pm_sponsorUserOperation", "params": [userOperation: object, entrypoint: string, context: object] }
Return
{
"result": {
paymaster: string,
paymasterData: string,
paymasterVerificationGasLimit: string,
paymasterPostOpGasLimit: string,
callGasLimit?: string,
verificationGasLimit?: string,
preVerificationGas?: string,
maxFeePerGas?: string,
maxPriorityFeePerGas?: string,
sponsorMetadata?: {
name: string,
description: string,
url: string,
icons: string[],
}
}
}
- Example Request
- Example Response
- Request Types
- Response Type
{
"jsonrpc": "2.0",
"id": 0,
"method": "pm_sponsorUserOperation",
"params": [
{
"sender": "0x2c298CcaFF..c236fCC66dB2",
"nonce": "0x17",
"factory": "0x..",
"factoryData": "0xf3....0000",
"callData": "0xf3....0000",
"callGasLimit": "0x12a87",
"verificationGasLimit": "0x1a332",
"preVerificationGas": "0xe95c",
"maxFeePerGas": "0x5f4ecdc0",
"maxPriorityFeePerGas": "0x59682f00",
"paymaster": "0x..",
"paymasterVerificationGasLimit": "0x..",
"paymasterPostOpGasLimit": "0x..",
"paymasterAndData": "0x",
"signature": "0x",
},
"0x0000000071727De22E5E9d8BAf0edAc6f37da032",
{ "sponsorshipPolicyId" : "1234" } // sponsorshipPolicyId key value field is optional if using a private gas policy.
]
}
{
"jsonrpc": "2.0",
"id": 0,
"result": {
"paymaster": "0x..",
"paymasterData": "0x..",
"paymasterVerificationGasLimit": "0x..",
"paymasterPostOpGasLimit": "0x..",
"callGasLimit": "0x...",
"verificationGasLimit": "0x...",
"preVerificationGas": "0x..",
"maxFeePerGas": "0x..",
"maxPriorityFeePerGas": "0x..",
"sponsorMetadata": {
"name": "Aave",
"description": "Open Source Liquidity Protocol",
"url": "https://app.aave.com/",
"icons": ["https://aave.com/aave-2030-header.svg"],
}
}
}
| Parameter | Type | ||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| userOperation | Object
| ||||||||||||||||||||||||||||||||||||||||||||||||
| entrypoint |
| ||||||||||||||||||||||||||||||||||||||||||||||||
| context | Object: This argument contains information about the specific paymaster implementation you are using. If use paying gas in ERC-20 Tokens, pass the token address.
|
| key | type | description | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
paymaster | string | Address of paymaster contract, (or empty, if account pays for itself) | |||||||||||||||
paymasterVerificationGasLimit | string | The amount of gas to allocate for the paymaster post-operation code | |||||||||||||||
paymasterPostOpGasLimit | string | The amount of gas to allocate for the paymaster post-operation code | |||||||||||||||
paymasterData | string | Data for paymaster (only if paymaster exists) | |||||||||||||||
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 | Extra gas to pay the bunder | |||||||||||||||
maxFeePerGas | string | Maximum fee per gas (similar to EIP-1559 max_fee_per_gas) | |||||||||||||||
maxPriorityFeePerGas | string | Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas) | |||||||||||||||
sponsorMetadata | | Information about the Gas Policy Sponsor |
pm_supportedEntryPoints
Returns the entryPoint addresses supported by the paymaster.
Invocation
{ "method": "pm_supportedEntryPoints", "params": [] }
Return
{ "result": string[] }
- Example Request
- Example Response
- Response Type
{
"jsonrpc": "2.0",
"id": 0,
"method": "pm_supportedEntryPoints",
"params": []
}
{
"jsonrpc": "2.0",
"id": 0,
"result": ["0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", "0x0000000071727de22e5e9d8baf0edac6f37da032"] // Entrypoint addresses
}
| key | type | description |
|---|---|---|
entrypoints | string[] | The EntryPoint Addresses that the paymaster is supporting |
pm_chainId
Get Chain ID asks the paymaster service to return the chain_id it currently supports
Invocation
{ "method": "pm_chainId", "params": [] }
Return
{ "result": number }
- Example Request
- Example Response
- Response Type
{
"jsonrpc": "2.0",
"id": 0,
"method": "pm_chainId",
"params": []
}
{
"jsonrpc": "2.0",
"id": 0,
"result": 1
}
| Parameter | Type | Description |
|---|---|---|
| chainId | number | Chain ID that the paymaster supports |
pm_getPaymasterStubData
ERC-7677 compatible method. Equivalent to Candide's pm_sponsorUserOperation.
It can return isFinal: true if the stub data is sufficient and no further data is needed.
It receives a userOperation for off-chain verification. If approved, it will return the paymasterData. It will also return gas overrides when the mode for gas sponsorship uses a Gas Policy.
- ERC-20 Gas Payments: No gas overrides are returned.
- Gas Policies: Mandatory
callGasLimit,verificationGasLimit,preVerificationGas,maxFeePerGas, andmaxPriorityFeePerGasfields are returned.
Supports two types of Gas Policies:
- Public Gas Policies: These are gas policies provided by third parties, which do not require a sponsorship policy ID.
- Private Gas Policies: These require a sponsorship policy ID and can be used if no public gas policy matches the user operation.
If the paymaster rejects the UserOperation, it returns a standard JSON-RPC error with the reason
Invocation
{ "method": "pm_getPaymasterStubData", "params": [userOperation: object, entrypoint: string, chainId: string, context: object] }
Return
{
"result": {
paymaster: string,
paymasterData: string,
paymasterVerificationGasLimit: string,
paymasterPostOpGasLimit: string,
callGasLimit?: string,
verificationGasLimit?: string,
preVerificationGas?: string,
maxFeePerGas?: string,
maxPriorityFeePerGas?: string,
sponsor?: {
name: string,
description: string,
url: string,
icons: string[],
}
}
}
- Example Request
- Example Response
- Request Types
- Response Type
{
"jsonrpc": "2.0",
"id": 0,
"method": "pm_getPaymasterStubData",
"params": [
{
"sender": "0x2c298CcaFF..c236fCC66dB2",
"nonce": "0x17",
"factory": "0x..",
"factoryData": "0xf3....0000",
"callData": "0xf3....0000",
"callGasLimit": "0x12a87",
"verificationGasLimit": "0x1a332",
"preVerificationGas": "0xe95c",
"maxFeePerGas": "0x5f4ecdc0",
"maxPriorityFeePerGas": "0x59682f00",
"paymaster": "0x..",
"paymasterVerificationGasLimit": "0x..",
"paymasterPostOpGasLimit": "0x..",
"paymasterAndData": "0x",
"signature": "0x",
},
"0x0000000071727De22E5E9d8BAf0edAc6f37da032",
"0x01",
{ "sponsorshipPolicyId" : "1234" } // sponsorshipPolicyId key value field is optional if using a private gas policy.
]
}
{
"jsonrpc": "2.0",
"id": 0,
"result": {
"paymaster": "0x..",
"paymasterData": "0x..",
"paymasterVerificationGasLimit": "0x..",
"paymasterPostOpGasLimit": "0x..",
"callGasLimit": "0x...",
"verificationGasLimit": "0x...",
"preVerificationGas": "0x..",
"maxFeePerGas": "0x..",
"maxPriorityFeePerGas": "0x..",
"sponsor": {
"name": "Aave",
"description": "Open Source Liquidity Protocol",
"url": "https://app.aave.com/",
"icons": ["https://aave.com/aave-2030-header.svg"],
},
"isFinal": true,
}
}
| Parameter | Type | ||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| userOperation | Object
| ||||||||||||||||||||||||||||||||||||||||||||||||
| entrypoint |
| ||||||||||||||||||||||||||||||||||||||||||||||||
| chainId |
| ||||||||||||||||||||||||||||||||||||||||||||||||
| context | Object: This argument contains information about the specific paymaster implementation you are using. If use paying gas in ERC-20 Tokens, pass the token address.
|
| key | type | description | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
paymaster | string | Address of paymaster contract, (or empty, if account pays for itself) | |||||||||||||||
paymasterVerificationGasLimit | string | The amount of gas to allocate for the paymaster post-operation code | |||||||||||||||
paymasterPostOpGasLimit | string | The amount of gas to allocate for the paymaster post-operation code | |||||||||||||||
paymasterData | string | Data for paymaster (only if paymaster exists) | |||||||||||||||
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 | Extra gas to pay the bunder | |||||||||||||||
maxFeePerGas | string | Maximum fee per gas (similar to EIP-1559 max_fee_per_gas) | |||||||||||||||
maxPriorityFeePerGas | string | Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas) | |||||||||||||||
sponsor | | Information about the Gas Policy Sponsor |
pm_getPaymasterData
ERC-7677 compatible method. Equivalent to Candide's pm_sponsorUserOperation.
It receives a userOperation for off-chain verification. If approved, it will return the paymasterData. It will also return gas overrides when the mode for gas sponsorship uses a Gas Policy.
- ERC-20 Gas Payments: No gas overrides are returned.
- Gas Policies: Mandatory
callGasLimit,verificationGasLimit,preVerificationGas,maxFeePerGas, andmaxPriorityFeePerGasfields are returned.
Supports two types of Gas Policies:
- Public Gas Policies: These are gas policies provided by third parties, which do not require a sponsorship policy ID.
- Private Gas Policies: These require a sponsorship policy ID and can be used if no public gas policy matches the user operation.
If the paymaster rejects the UserOperation, it returns a standard JSON-RPC error with the reason
Invocation
{ "method": "pm_getPaymasterData", "params": [userOperation: object, entrypoint: string, chainId: string, context: object] }
Return
{
"result": {
paymaster: string,
paymasterData: string,
paymasterVerificationGasLimit: string,
paymasterPostOpGasLimit: string,
callGasLimit?: string,
verificationGasLimit?: string,
preVerificationGas?: string,
maxFeePerGas?: string,
maxPriorityFeePerGas?: string,
}
}
- Example Request
- Example Response
- Request Types
- Response Type
{
"jsonrpc": "2.0",
"id": 0,
"method": "pm_getPaymasterData",
"params": [
{
"sender": "0x2c298CcaFF..c236fCC66dB2",
"nonce": "0x17",
"factory": "0x..",
"factoryData": "0xf3....0000",
"callData": "0xf3....0000",
"callGasLimit": "0x12a87",
"verificationGasLimit": "0x1a332",
"preVerificationGas": "0xe95c",
"maxFeePerGas": "0x5f4ecdc0",
"maxPriorityFeePerGas": "0x59682f00",
"paymaster": "0x..",
"paymasterVerificationGasLimit": "0x..",
"paymasterPostOpGasLimit": "0x..",
"paymasterAndData": "0x",
"signature": "0x",
},
"0x0000000071727De22E5E9d8BAf0edAc6f37da032",
"0x01",
{ "sponsorshipPolicyId" : "1234" } // sponsorshipPolicyId key value field is optional if using a private gas policy.
]
}
{
"jsonrpc": "2.0",
"id": 0,
"result": {
"paymaster": "0x..",
"paymasterData": "0x..",
"paymasterVerificationGasLimit": "0x..",
"paymasterPostOpGasLimit": "0x..",
"callGasLimit": "0x...",
"verificationGasLimit": "0x...",
"preVerificationGas": "0x..",
"maxFeePerGas": "0x..",
"maxPriorityFeePerGas": "0x..",
}
}
| Parameter | Type | ||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| userOperation | Object
| ||||||||||||||||||||||||||||||||||||||||||||||||
| entrypoint |
| ||||||||||||||||||||||||||||||||||||||||||||||||
| chainId |
| ||||||||||||||||||||||||||||||||||||||||||||||||
| context | Object: This argument contains information about the specific paymaster implementation you are using. If use paying gas in ERC-20 Tokens, pass the token address.
|
| key | type | description |
|---|---|---|
paymaster | string | Address of paymaster contract, (or empty, if account pays for itself) |
paymasterVerificationGasLimit | string | The amount of gas to allocate for the paymaster post-operation code |
paymasterPostOpGasLimit | string | The amount of gas to allocate for the paymaster post-operation code |
paymasterData | string | Data for paymaster (only if paymaster exists) |
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 | Extra gas to pay the bunder |
maxFeePerGas | string | Maximum fee per gas (similar to EIP-1559 max_fee_per_gas) |
maxPriorityFeePerGas | string | Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas) |
Entrypoint V0.6
pm_supportedERC20Tokens
Gets supported ERC-20 Tokens for gas payments, along side the paymaster metadata
Invocation
{ "method": "pm_supportedERC20Tokens", "params": [entrypoint: string] }
Return
{
"result": {
paymasterMetadata: {
name: string,
description: string,
icons: string[],
address: string,
sponsoredEventTopic: string,
dummyPaymasterAndData: string,
},
tokens: [{
name: string,
symbol: string,
address: string,
decimals: number,
exchangeRate: string,
}]
}
}
- Example Request
- Example Response
- Response Types
{
"jsonrpc": "2.0",
"id": 0,
"method": "pm_supportedERC20Tokens",
"params": ["0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789"]
}
{
"jsonrpc": "2.0",
"id": 0,
"result": {
"paymasterMetadata": {
"name": "Candide Paymaster",
"description": "Candide Paymaster a fast, secure and feature-rich 4337 Paymaster",
"icons": [],
"address": "0x7e3393ebA62DA6f555a5341E079e0F6585CE8c56",
"sponsoredEventTopic": "0x13..fa1",
"dummyPaymasterAndData": "0x69...135",
},
"tokens": [{
"name": "Maker DAI",
"symbol": "DAI",
"address": "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1",
"decimal": "0x12",
"exchangeRate": "0x0ddeb609310c89b1"
}]
}
}
| Parameter | Type | |||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| paymasterMetadata | Object
| |||||||||||||||||||||
| tokens | Object[]
|
pm_sponsorUserOperation
Sends a UserOperation to a paymaster for off-chain verification. If approved, it will return the paymasterData. It will also return gas overrides when the mode for gas sponsorship uses a Gas Policy.
- ERC-20 Gas Payments: No gas overrides are returned.
- Gas Policies: Mandatory
callGasLimit,verificationGasLimit,preVerificationGas,maxFeePerGas, andmaxPriorityFeePerGasfields are returned.
Supports two types of Gas Policies:
- Public Gas Policies: These are gas policies provided by third parties, which do not require a sponsorship policy ID.
- Private Gas Policies: These require a sponsorship policy ID and can be used if no public gas policy matches the user operation.
If the paymaster rejects the UserOperation, it returns a standard JSON-RPC error with the reason.
Invocation
{ "method": "pm_sponsorUserOperation", "params": [userOperation: object, entrypoint: string, context: object] }
Return
{
"result": {
paymasterAndData: string,
callGasLimit?: string,
verificationGasLimit?: string,
preVerificationGas?: string,
maxFeePerGas?: string,
maxPriorityFeePerGas?: string,
sponsorMetadata?: {
name: string,
description: string,
url: string,
icons: string[],
}
}
}
- Example Request
- Example Response
- Request Types
- Response Type
{
"jsonrpc": "2.0",
"id": 0,
"method": "pm_sponsorUserOperation",
"params": [
{
"sender": "0x2c298CcaFF..c236fCC66dB2",
"nonce": "0x17",
"initCode": "0x",
"callData": "0xf3....0000",
"callGasLimit": "0x12a87",
"verificationGasLimit": "0x1a332",
"preVerificationGas": "0xe95c",
"maxFeePerGas": "0x5f4ecdc0",
"maxPriorityFeePerGas": "0x59682f00",
"paymasterAndData": "0x",
"signature": "0x",
},
"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789",
{ "sponsorshipPolicyId" : "1234" } // sponsorshipPolicyId key value field is optional if using a private gas policy.
]
}
{
"jsonrpc": "2.0",
"id": 0,
"result": {
"paymasterAndData": "0x....",
"callGasLimit": "0x...",
"verificationGasLimit": "0x...",
"preVerificationGas": "0x..",
"maxFeePerGas": "0x..",
"maxPriorityFeePerGas": "0x..",
"sponsorMetadata": {
"name": "Aave",
"description": "Open Source Liquidity Protocol",
"url": "https://app.aave.com/",
"icons": ["https://aave.com/aave-2030-header.svg"],
}
}
}
| Parameter | Type | ||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| userOperation | Object
| ||||||||||||||||||||||||||||||||||||
| entrypoint |
| ||||||||||||||||||||||||||||||||||||
| context | Object: This argument contains information about the specific paymaster implementation you are using. If use paying gas in ERC-20 Tokens, pass the token address.
|
| key | type | description |
|---|---|---|
paymasterAndData | string | Paymaster address and data required to pass paymaster contract validation |
callGasLimit | string? | The amount of gas to allocate the main execution call. Optional return. |
verificationGasLimit | string? | The amount of gas to allocate for the verification step. Optional return. |
preVerificationGas | string? | The amount of gas to pay for to compensate the bundler for pre-verification execution and calldata. Optional return. |
maxFeePerGas | string? | Maximum fee per gas (similar to EIP-1559 max_fee_per_gas). Optional Return. |
maxPriorityFeePerGas | string? | Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas). Optional Return |
pm_supportedEntryPoints
Returns the entryPoint addresses supported by the paymaster.
Invocation
{ "method": "pm_supportedEntryPoints", "params": [] }
Return
{ "result": string[] }
- Example Request
- Example Response
- Response Type
{
"jsonrpc": "2.0",
"id": 0,
"method": "pm_supportedEntryPoints",
"params": []
}
{
"jsonrpc": "2.0",
"id": 0,
"result": ["0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", "0x0000000071727de22e5e9d8baf0edac6f37da032"] // Entrypoint addresses
}
| key | type | description |
|---|---|---|
entrypoints | string[] | The EntryPoint Addresses that the paymaster is supporting |
pm_chainId
Get Chain ID asks the paymaster service to return the chain_id it currently supports
Invocation
{ "method": "pm_chainId", "params": [] }
Return
{ "result": number }
- Example Request
- Example Response
- Response Type
{
"jsonrpc": "2.0",
"id": 0,
"method": "pm_chainId",
"params": []
}
{
"jsonrpc": "2.0",
"id": 0,
"result": 1
}
| Parameter | Type | Description |
|---|---|---|
| chainId | number | Chain ID that the paymaster supports |
pm_getPaymasterStubData
ERC-7677 compatible method. Equivalent to Candide's pm_sponsorUserOperation.
It can return isFinal: true if the stub data is sufficient and no further data is needed.
Sends a UserOperation to a paymaster for off-chain verification. If approved, it will return the paymasterAndData. It will also return gas overrides when the mode for gas sponsorship uses a Gas Policy.
- ERC-20 Gas Payments: No gas overrides are returned.
- Gas Policies: Mandatory
callGasLimit,verificationGasLimit,preVerificationGas,maxFeePerGas, andmaxPriorityFeePerGasfields are returned.
Supports two types of Gas Policies:
- Public Gas Policies: These are gas policies provided by third parties, which do not require a sponsorship policy ID.
- Private Gas Policies: These require a sponsorship policy ID and can be used if no public gas policy matches the user operation.
If the paymaster rejects the UserOperation, it returns a standard JSON-RPC error with the reason.
Invocation
{ "method": "pm_getPaymasterStubData", "params": [userOperation: object, entrypoint: string, chainId: string, context: object] }
Return
{
"result": {
paymasterAndData: string,
callGasLimit?: string,
verificationGasLimit?: string,
preVerificationGas?: string,
maxFeePerGas?: string,
maxPriorityFeePerGas?: string,
sponsor?: {
name: string,
icon?: string,
}
}
}
- Example Request
- Example Response
- Request Types
- Response Type
{
"jsonrpc": "2.0",
"id": 0,
"method": "pm_getPaymasterStubData",
"params": [
{
"sender": "0x2c298CcaFF..c236fCC66dB2",
"nonce": "0x17",
"initCode": "0x",
"callData": "0xf3....0000",
"callGasLimit": "0x12a87",
"verificationGasLimit": "0x1a332",
"preVerificationGas": "0xe95c",
"maxFeePerGas": "0x5f4ecdc0",
"maxPriorityFeePerGas": "0x59682f00",
"paymasterAndData": "0x",
"signature": "0x",
},
"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789",
"0x01",
{ "sponsorshipPolicyId" : "1234" } // sponsorshipPolicyId key value field is optional if using a private gas policy.
]
}
{
"jsonrpc": "2.0",
"id": 0,
"result": {
"paymasterAndData": "0x....",
"callGasLimit": "0x...",
"verificationGasLimit": "0x...",
"preVerificationGas": "0x..",
"maxFeePerGas": "0x..",
"maxPriorityFeePerGas": "0x..",
"sponsor": {
"name": "Aave",
"description": "Open Source Liquidity Protocol",
"url": "https://app.aave.com/",
"icon": "https://aave.com/aave-2030-header.svg",
},
}
}
| Parameter | Type | ||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| userOperation | Object
| ||||||||||||||||||||||||||||||||||||
| entrypoint |
| ||||||||||||||||||||||||||||||||||||
| chainId |
| ||||||||||||||||||||||||||||||||||||
| context | Object: This argument contains information about the specific paymaster implementation you are using. If use paying gas in ERC-20 Tokens, pass the token address.
|
| key | type | description | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
paymasterAndData | string | Paymaster address and data required to pass paymaster contract validation | |||||||||||||||
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 (similar to EIP-1559 max_fee_per_gas) | |||||||||||||||
maxPriorityFeePerGas | string | Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas) | |||||||||||||||
isFinal | boolean | Indicates that the caller does not need to call pm_getPaymasterData | |||||||||||||||
sponsor | | Information about the Gas Policy Sponsor |
pm_getPaymasterData
ERC-7677 compatible method. Equivalent to Candide's pm_sponsorUserOperation.
Sends a UserOperation to a paymaster for off-chain verification. If approved, it will return the paymasterAndData. It will also return gas overrides when the mode for gas sponsorship uses a Gas Policy.
- ERC-20 Gas Payments: No gas overrides are returned.
- Gas Policies: Mandatory
callGasLimit,verificationGasLimit,preVerificationGas,maxFeePerGas, andmaxPriorityFeePerGasfields are returned.
Supports two types of Gas Policies:
- Public Gas Policies: These are gas policies provided by third parties, which do not require a sponsorship policy ID.
- Private Gas Policies: These require a sponsorship policy ID and can be used if no public gas policy matches the user operation.
If the paymaster rejects the UserOperation, it returns a standard JSON-RPC error with the reason.
Invocation
{ "method": "pm_getPaymasterData", "params": [userOperation: object, entrypoint: string, chainId: string, context: object] }
Return
{
"result": {
paymasterAndData: string,
callGasLimit?: string,
verificationGasLimit?: string,
preVerificationGas?: string,
maxFeePerGas?: string,
maxPriorityFeePerGas?: string,
}
}
- Example Request
- Example Response
- Request Types
- Response Type
{
"jsonrpc": "2.0",
"id": 0,
"method": "pm_getPaymasterData",
"params": [
{
"sender": "0x2c298CcaFF..c236fCC66dB2",
"nonce": "0x17",
"initCode": "0x",
"callData": "0xf3....0000",
"callGasLimit": "0x12a87",
"verificationGasLimit": "0x1a332",
"preVerificationGas": "0xe95c",
"maxFeePerGas": "0x5f4ecdc0",
"maxPriorityFeePerGas": "0x59682f00",
"paymasterAndData": "0x",
"signature": "0x",
},
"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789",
"0x01",
{ "sponsorshipPolicyId" : "1234" } // sponsorshipPolicyId key value field is optional if using a private gas policy.
]
}
{
"jsonrpc": "2.0",
"id": 0,
"result": {
"paymasterAndData": "0x....",
"callGasLimit": "0x...",
"verificationGasLimit": "0x...",
"preVerificationGas": "0x..",
"maxFeePerGas": "0x..",
"maxPriorityFeePerGas": "0x..",
"sponsor": {
"name": "Aave",
"description": "Open Source Liquidity Protocol",
"url": "https://app.aave.com/",
"icon": "https://aave.com/aave-2030-header.svg",
},
}
}
| Parameter | Type | ||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| userOperation | Object
| ||||||||||||||||||||||||||||||||||||
| entrypoint |
| ||||||||||||||||||||||||||||||||||||
| chainId |
| ||||||||||||||||||||||||||||||||||||
| context | Object: This argument contains information about the specific paymaster implementation you are using. If use paying gas in ERC-20 Tokens, pass the token address.
|
| key | type | description | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
paymasterAndData | string | Paymaster address and data required to pass paymaster contract validation | |||||||||||||||
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 (similar to EIP-1559 max_fee_per_gas) | |||||||||||||||
maxPriorityFeePerGas | string | Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas) | |||||||||||||||
sponsor | | Information about the Gas Policy Sponsor |