@owlprotocol/contracts-account-abstraction
Version:
ERC4337 Account Abstraction support for deploying relevant smart contracts and interacting with UserOps.
1,067 lines (1,066 loc) • 35.2 kB
JavaScript
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var bundlerRpcSchema_exports = {};
__export(bundlerRpcSchema_exports, {
getBundlerOpenRpcSchema: () => getBundlerOpenRpcSchema
});
module.exports = __toCommonJS(bundlerRpcSchema_exports);
var import_schema_utils_js = require("@open-rpc/schema-utils-js");
let bundlerOpenRpcSchema;
let bundlerRpcValidator;
async function getBundlerOpenRpcSchema() {
bundlerOpenRpcSchema = bundlerOpenRpcSchema ?? await (0, import_schema_utils_js.dereferenceDocument)(bundlerOpenRpcSchema_);
bundlerRpcValidator = bundlerRpcValidator ?? new import_schema_utils_js.MethodCallValidator(bundlerOpenRpcSchema);
return {
bundlerOpenRpcSchema,
bundlerRpcValidator
};
}
const bundlerOpenRpcSchema_ = {
openrpc: "1.2.4",
info: {
title: "Ethereum EIP-4337 bundler JSON-RPC Specification",
description: "A specification of the standard interface for EIP-4337 clients.",
license: {
name: "CC0-1.0",
url: "https://creativecommons.org/publicdomain/zero/1.0/legalcode"
},
version: "0.0.0"
},
methods: [
{
name: "eth_chainId",
summary: "Returns the chain ID of the current network.",
params: [],
result: {
name: "Chain ID",
schema: {
title: "hex encoded unsigned integer",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
}
}
},
{
name: "eth_supportedEntryPoints",
summary: "Returns an array of the entryPoint addresses supported by the client",
params: [],
result: {
name: "Supported EntryPoints",
schema: {
title: "hex encoded address",
type: "array",
items: {
title: "hex encoded address",
type: "string",
pattern: "^0x[0-9,a-f,A-F]{40}$"
}
}
}
},
{
name: "eth_coinbase",
summary: "Returns the client coinbase address.",
params: [],
result: {
name: "Coinbase address",
schema: {
title: "hex encoded address",
type: "string",
pattern: "^0x[0-9,a-f,A-F]{40}$"
}
}
},
{
name: "eth_estimateUserOperationGas",
summary: "Generates and returns an estimate of how much gas is necessary to allow the transaction to complete.",
params: [
{
name: "UserOperation",
required: true,
schema: {
type: "object",
title: "ERC-4337 User Operation",
required: [
"sender",
"nonce",
"callData",
"callGasLimit",
"verificationGasLimit",
"preVerificationGas",
"maxFeePerGas",
"maxPriorityFeePerGas",
"signature"
],
properties: {
sender: {
title: "sender",
type: "string",
pattern: "^0x[0-9,a-f,A-F]{40}$"
},
nonce: {
title: "nonce",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
},
factory: {
title: "factory",
type: "string",
pattern: "^0x[0-9,a-f,A-F]{40}$",
description: "Address of the account factory, only for new accounts"
},
factoryData: {
title: "factoryData",
type: "string",
pattern: "^0x[0-9a-f]*$",
description: "Data for the account factory, only if account factory is defined"
},
callData: {
title: "callData",
type: "string",
pattern: "^0x[0-9a-f]*$"
},
callGasLimit: {
title: "gas limit",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
},
verificationGasLimit: {
title: "verification gas limit",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
},
preVerificationGas: {
title: "preVerification gas",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
},
maxPriorityFeePerGas: {
title: "max priority fee per gas",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
],
description: "Maximum fee per gas the sender is willing to pay to miners in wei"
},
maxFeePerGas: {
title: "max fee per gas",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
],
description: "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei"
},
paymaster: {
title: "paymaster address",
type: "string",
pattern: "^0x[0-9,a-f,A-F]{40}$",
description: "The address of the Paymaster that will be requested to pay the UserOperation gas fees"
},
paymasterVerificationGasLimit: {
title: "paymaster verification gas limit",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
],
description: "The amount of gas to allocate for the paymaster validation code"
},
paymasterPostOpGasLimit: {
title: "paymaster postOp gas limit",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
],
description: "The amount of gas to allocate for the paymaster post-operation code"
},
paymasterData: {
title: "paymaster data",
type: "string",
pattern: "^0x[0-9a-f]*$"
},
signature: {
title: "signature",
type: "string",
pattern: "^0x[0-9a-f]*$"
}
}
}
}
],
result: {
name: "Gas info",
schema: {
type: "object",
title: "UserOperation Gas parameters",
required: ["callGasLimit", "preVerificationGas", "verificationGasLimit"],
properties: {
callGasLimit: {
title: "callGasLimit",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
},
preVerificationGas: {
title: "preVerificationGas",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
},
verificationGasLimit: {
title: "verificationGasLimit",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
}
}
}
}
},
{
name: "eth_sendUserOperation",
summary: "Signs and submits a transaction.",
params: [
{
name: "Transaction",
required: true,
schema: {
type: "object",
title: "ERC-4337 User Operation",
required: [
"sender",
"nonce",
"callData",
"callGasLimit",
"verificationGasLimit",
"preVerificationGas",
"maxFeePerGas",
"maxPriorityFeePerGas",
"signature"
],
properties: {
sender: {
title: "sender",
type: "string",
pattern: "^0x[0-9,a-f,A-F]{40}$"
},
nonce: {
title: "nonce",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
},
factory: {
title: "factory",
type: "string",
pattern: "^0x[0-9,a-f,A-F]{40}$",
description: "Address of the account factory, only for new accounts"
},
factoryData: {
title: "factoryData",
type: "string",
pattern: "^0x[0-9a-f]*$",
description: "Data for the account factory, only if account factory is defined"
},
callData: {
title: "callData",
type: "string",
pattern: "^0x[0-9a-f]*$"
},
callGasLimit: {
title: "gas limit",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
},
verificationGasLimit: {
title: "verification gas limit",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
},
preVerificationGas: {
title: "preVerification gas",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
},
maxPriorityFeePerGas: {
title: "max priority fee per gas",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
],
description: "Maximum fee per gas the sender is willing to pay to miners in wei"
},
maxFeePerGas: {
title: "max fee per gas",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
],
description: "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei"
},
paymaster: {
title: "paymaster address",
type: "string",
pattern: "^0x[0-9,a-f,A-F]{40}$",
description: "The address of the Paymaster that will be requested to pay the UserOperation gas fees"
},
paymasterVerificationGasLimit: {
title: "paymaster verification gas limit",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
],
description: "The amount of gas to allocate for the paymaster validation code"
},
paymasterPostOpGasLimit: {
title: "paymaster postOp gas limit",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
],
description: "The amount of gas to allocate for the paymaster post-operation code"
},
paymasterData: {
title: "paymaster data",
type: "string",
pattern: "^0x[0-9a-f]*$"
},
signature: {
title: "signature",
type: "string",
pattern: "^0x[0-9a-f]*$"
}
}
}
}
],
result: {
name: "Transaction hash",
schema: {
title: "32 byte hex value",
type: "string",
pattern: "^0x([0-9a-f][0-9a-f]){0,32}$"
}
}
},
{
name: "eth_getUserOperationByHash",
summary: "Returns the information about a transaction requested by transaction hash.",
params: [
{
name: "UserOperation hash",
required: true,
schema: {
title: "32 byte hex value",
type: "string",
pattern: "^0x([0-9a-f][0-9a-f]){0,32}$"
}
}
],
result: {
name: "Transaction information",
schema: {
type: "object",
title: "UserOperation transaction information",
required: ["userOperation", "entryPoint", "blockNumber", "blockHash", "transactionHash"],
properties: {
userOperation: {
type: "object",
title: "UserOperation",
required: [
"sender",
"nonce",
"callData",
"callGasLimit",
"verificationGasLimit",
"preVerificationGas",
"maxFeePerGas",
"maxPriorityFeePerGas",
"signature"
],
properties: {
sender: {
title: "sender",
type: "string",
pattern: "^0x[0-9,a-f,A-F]{40}$"
},
nonce: {
title: "nonce",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
},
factory: {
title: "factory",
type: "string",
pattern: "^0x[0-9,a-f,A-F]{40}$",
description: "Address of the account factory, only for new accounts"
},
factoryData: {
title: "factoryData",
type: "string",
pattern: "^0x[0-9a-f]*$",
description: "Data for the account factory, only if account factory is defined"
},
callData: {
title: "callData",
type: "string",
pattern: "^0x[0-9a-f]*$"
},
callGasLimit: {
title: "gas limit",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
},
verificationGasLimit: {
title: "verification gas limit",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
},
preVerificationGas: {
title: "preVerification gas",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
},
maxPriorityFeePerGas: {
title: "max priority fee per gas",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
],
description: "Maximum fee per gas the sender is willing to pay to miners in wei"
},
maxFeePerGas: {
title: "max fee per gas",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
],
description: "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei"
},
paymaster: {
title: "paymaster address",
type: "string",
pattern: "^0x[0-9,a-f,A-F]{40}$",
description: "The address of the Paymaster that will be requested to pay the UserOperation gas fees"
},
paymasterVerificationGasLimit: {
title: "paymaster verification gas limit",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
],
description: "The amount of gas to allocate for the paymaster validation code"
},
paymasterPostOpGasLimit: {
title: "paymaster postOp gas limit",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
],
description: "The amount of gas to allocate for the paymaster post-operation code"
},
paymasterData: {
title: "paymaster data",
type: "string",
pattern: "^0x[0-9a-f]*$"
},
signature: {
title: "signature",
type: "string",
pattern: "^0x[0-9a-f]*$"
}
}
},
entryPoint: {
title: "EntryPoint address",
type: "string",
pattern: "^0x[0-9,a-f,A-F]{40}$",
blockNumber: {
title: "Block Number",
$ref: "#/components/schemas/uint"
},
blockHash: {
title: "Block Hash",
$ref: "#/components/schemas/hash32"
},
transactionHash: {
title: "Transaction Hash",
$ref: "#/components/schemas/hash32"
}
}
}
}
}
},
{
name: "eth_getUserOperationReceipt",
summary: "Returns the receipt of a transaction by transaction hash.",
params: [
{
name: "Transaction hash",
schema: {
title: "32 byte hex value",
type: "string",
pattern: "^0x([0-9a-f][0-9a-f]){0,32}$"
}
}
],
result: {
name: "Receipt Information",
schema: {
type: "object",
title: "Receipt info",
required: [
"userOpHash",
"sender",
"nonce",
"actualGasCost",
"actualGasUsed",
"success",
"logs",
"receipt"
],
properties: {
userOpHash: {
title: "user op hash",
type: "string",
pattern: "^0x([0-9a-f][0-9a-f]){0,32}$"
},
sender: {
title: "sender",
type: "string",
pattern: "^0x[0-9,a-f,A-F]{40}$"
},
nonce: {
title: "nonce",
type: "string",
pattern: "^0x[0-9a-f]{0,64}$"
},
paymaster: {
title: "paymaster",
type: "string",
pattern: "^0x[0-9,a-f,A-F]{40}$"
},
actualGasCost: {
title: "actual (gas price * gas used) of the user operation",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
},
actualGasUsed: {
title: "actual gas used of the user operation",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
},
success: {
title: "user operation revert status",
type: "boolean"
},
reason: {
title: "If reverted, user operation revert reason",
type: "string"
},
logs: {
title: "logs",
type: "array",
items: {
title: "log",
type: "object",
required: ["transactionHash"],
properties: {
removed: {
title: "removed",
type: "boolean"
},
logIndex: {
title: "log index",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
},
transactionIndex: {
title: "transaction index",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
},
transactionHash: {
title: "transaction hash",
type: "string",
pattern: "^0x([0-9a-f][0-9a-f]){0,32}$"
},
blockHash: {
title: "block hash",
type: "string",
pattern: "^0x([0-9a-f][0-9a-f]){0,32}$"
},
blockNumber: {
title: "block number",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
},
address: {
title: "address",
type: "string",
pattern: "^0x[0-9,a-f,A-F]{40}$"
},
data: {
title: "data",
type: "string",
pattern: "^0x[0-9a-f]*$"
},
topics: {
title: "topics",
type: "array",
items: {
title: "32 hex encoded bytes",
type: "string",
pattern: "^0x([0-9a-f][0-9a-f]){0,32}$"
}
}
}
}
},
receipt: {
type: "object",
title: "Transaction Receipt",
required: [
"blockHash",
"blockNumber",
"from",
"cumulativeGasUsed",
"gasUsed",
"logs",
"logsBloom",
"transactionHash",
"transactionIndex",
"effectiveGasPrice"
],
description: "The TransactionReceipt object. Note that the returned TransactionReceipt is for the entire bundle, not only for this UserOperation.",
properties: {
transactionHash: {
title: "transaction hash",
type: "string",
pattern: "^0x([0-9a-f][0-9a-f]){0,32}$"
},
transactionIndex: {
title: "transaction index",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
},
blockHash: {
title: "block hash",
type: "string",
pattern: "^0x([0-9a-f][0-9a-f]){0,32}$"
},
blockNumber: {
title: "block number",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
},
from: {
title: "from",
type: "string",
pattern: "^0x[0-9,a-f,A-F]{40}$"
},
to: {
title: "to",
type: "string",
pattern: "^0x[0-9,a-f,A-F]{40}$",
description: "Address of the receiver or null in a contract creation transaction."
},
cumulativeGasUsed: {
title: "cumulative gas used",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
],
description: "The sum of gas used by this transaction and all preceding transactions in the same block."
},
gasUsed: {
title: "gas used",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
],
description: "The amount of gas used for this specific transaction alone."
},
contractAddress: {
title: "contract address",
description: "The contract address created, if the transaction was a contract creation, otherwise null.",
oneOf: [
{
title: "hex encoded address",
type: "string",
pattern: "^0x[0-9,a-f,A-F]{40}$"
},
{
name: null,
type: "null"
}
]
},
logs: {
title: "logs",
type: "array",
items: {
title: "log",
type: "object",
required: ["transactionHash"],
properties: {
removed: {
title: "removed",
type: "boolean"
},
logIndex: {
title: "log index",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
},
transactionIndex: {
title: "transaction index",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
},
transactionHash: {
title: "transaction hash",
type: "string",
pattern: "^0x([0-9a-f][0-9a-f]){0,32}$"
},
blockHash: {
title: "block hash",
type: "string",
pattern: "^0x([0-9a-f][0-9a-f]){0,32}$"
},
blockNumber: {
title: "block number",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
]
},
address: {
title: "address",
type: "string",
pattern: "^0x[0-9,a-f,A-F]{40}$"
},
data: {
title: "data",
type: "string",
pattern: "^0x[0-9a-f]*$"
},
topics: {
title: "topics",
type: "array",
items: {
title: "32 hex encoded bytes",
type: "string",
pattern: "^0x([0-9a-f][0-9a-f]){0,32}$"
}
}
}
}
},
logsBloom: {
title: "logs bloom",
type: "string",
pattern: "^0x[0-9a-f]{512}$"
},
root: {
title: "state root",
type: "string",
pattern: "^0x([0-9a-f][0-9a-f]){0,32}$",
description: "The post-transaction state root. Only specified for transactions included before the Byzantium upgrade."
},
status: {
title: "status",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
],
description: "Either 1 (success) or 0 (failure). Only specified for transactions included after the Byzantium upgrade."
},
effectiveGasPrice: {
title: "effective gas price",
oneOf: [
{
type: "string",
pattern: "^0x([1-9a-f]+[0-9a-f]*|0)$"
},
{
type: "number"
}
],
description: "The actual value per gas deducted from the senders account. Before EIP-1559, this is equal to the transaction's gas price. After, it is equal to baseFeePerGas + min(maxFeePerGas - baseFeePerGas, maxPriorityFeePerGas)."
}
}
}
}
}
}
}
],
components: {}
};