# Simple 7702 Account (EntryPoint v0.8)

The `Simple7702Account` targets **EntryPoint v0.8** and supports the full feature set including gas sponsorship and ERC-20 gas payments through the Candide paymaster.

<!-- -->

[EIP-7702 QuickStart](https://docs.candide.dev/wallet/guides/getting-started-eip-7702.md)

[Learn how to upgrade an EOA to a Smart Account with batch transactions and gas sponsorship capabilities](https://docs.candide.dev/wallet/guides/getting-started-eip-7702.md)

## Smart Contracts and Audits[​](#smart-contracts-and-audits "Direct link to Smart Contracts and Audits")

The contracts were developed by the Ethereum Foundation Account Abstraction Team and audited by Spearbit.

* [Smart Contracts](https://github.com/eth-infinitism/account-abstraction/blob/develop/contracts/accounts/Simple7702Account.sol)
* [Release](https://github.com/eth-infinitism/account-abstraction/releases/tag/v0.8.0)
* [Audit](https://github.com/eth-infinitism/account-abstraction/blob/develop/audits/SpearBit%20Account%20Abstraction%20Security%20Review%20-%20Mar%202024.pdf)

## How to Use[​](#how-to-use "Direct link to How to Use")

### Prerequisites[​](#prerequisites "Direct link to Prerequisites")

Before using `Simple7702Account`, you must have:

* **Node.js**: Version 18.0 or higher.
* **EIP-7702 Compatible Network**: Ethereum mainnet, Sepolia, Optimism, Base, or other EIP-7702 enabled chains.
* **Private Key Access**: Required for signing authorizations and user operations.

### Installation[​](#installation "Direct link to Installation")

```
npm install abstractionkit
```

### Usage[​](#usage "Direct link to Usage")

```
import { Simple7702Account } from "abstractionkit";

const delegatorPublicAddress = "0xBdbc5FBC9cA8C3F514D073eC3de840Ac84FC6D31"; // EOA public key
const smartAccount = new Simple7702Account(delegatorPublicAddress);
```

## Essential Methods[​](#essential-methods "Direct link to Essential Methods")

### createUserOperation[​](#createuseroperation "Direct link to createUserOperation")

Creates a UserOperation for EIP-7702 accounts that can be sent to bundlers for execution.

* example.ts
* Param Types
* Return Type

example.ts

```
import { Simple7702Account } from "abstractionkit";

const delegatorPublicAddress = "0xBdbc5FBC9cA8C3F514D073eC3de840Ac84FC6D31";
const smartAccount = new Simple7702Account(delegatorPublicAddress);

const transactions = [
  {
    to: "0x...",
    value: 0n,
    data: "0x...",
  },
];

const userOperation = await smartAccount.createUserOperation(
  transactions,
  "https://ethereum-sepolia-rpc.publicnode.com", // provider RPC
  "https://api.candide.dev/public/v3/sepolia", // bundler RPC
  {
    eip7702Auth:{
        chainId, // chainId at which the account will be authorized
    }
    // Optional overrides
    maxFeePerGas: 20000000000n,
    maxPriorityFeePerGas: 2000000000n,
  }
);
```

| key            | type                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | description                                            |
| :------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------- |
| `transactions` | `SimpleMetaTransaction[]`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | Array of transactions to include in the user operation |
| `providerRpc?` | `string`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | Optional JSON-RPC provider URL for blockchain queries  |
| `bundlerRpc?`  | `string`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | Optional bundler RPC URL for gas estimation            |
| `overrides?`   | `key	type	descriptioneip7702Auth?	key	type	descriptionchainId	string	Chain ID in hexadecimal format where the authorization is valid
address	string	Address to authorize for the EOA delegation
nonce	string	Authorization nonce in hexadecimal format
yParity	string	Y parity of the authorization signature
r	string	R component of the authorization signature
s	string	S component of the authorization signature	EIP-7702 authorization parameters for EOA delegation
nonce?	string	Anti-replay parameter (see Semi-abstracted Nonce Support)
callData?	string	The data to pass to the sender during the main execution call
callGasLimit?	bigint	The amount of gas to allocate the main execution call
verificationGasLimit?	bigint	The amount of gas to allocate for the verification step
preVerificationGas?	bigint	The amount of gas to pay for to compensate the bundler for pre-verification execution and calldata
maxFeePerGas?	bigint	Maximum fee per gas (similar to EIP-1559 max_fee_per_gas)
maxPriorityFeePerGas?	bigint	Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas)
callGasLimitPercentageMultiplier?	number	Set the callGasLimitPercentageMultiplier instead of estimating gas using the bundler
verificationGasLimitPercentageMultiplier?	number	Set the verificationGasLimitPercentageMultiplier instead of estimating gas using the bundler
preVerificationGasPercentageMultiplier?	number	Set the preVerificationGasPercentageMultiplier instead of estimating gas using the bundler
maxFeePerGasPercentageMultiplier?	number	Set the maxFeePerGasPercentageMultiplier instead of querying the current gas price from the RPC node
maxPriorityFeePerGasPercentageMultiplier?	number	Set the maxPriorityFeePerGasPercentageMultiplier instead of querying the current gas price from the RPC node
stateOverrideSet?	StateOverrideSet	Pass state override set for simulation
dummySignature?	string	Dummy signature for gas estimation` | Optional overrides for user operation creation         |

SimpleMetaTransaction

| key                     | type                                                                                                                                                                                                     | description                                                                   |
| :---------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------- |
| `SimpleMetaTransaction` | `key	type	descriptionto	string	Target contract address for the transaction
value	bigint	Value transferred in the transaction (usually 0n for contract interactions)
data	string	The call data for the transaction` | SimpleMetaTransaction is the type of transaction used with Simple7702Account. |

| key             | type                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | description                                 |
| :-------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------ |
| `userOperation` | `key	type	descriptionsender	string	The account making the operation
nonce	bigint	Anti-replay parameter (see Semi-abstracted Nonce Support)
factory	string \| null	Account factory address, only for new accounts (null if account already exists)
factoryData	string \| null	Data for account factory (null if account already exists)
callData	string	The data to pass to the sender during the main execution call
callGasLimit	bigint	The amount of gas to allocate the main execution call
verificationGasLimit	bigint	The amount of gas to allocate for the verification step
preVerificationGas	bigint	The amount of gas to pay for to compensate the bundler for pre-verification execution and calldata
maxFeePerGas	bigint	Maximum fee per gas (similar to EIP-1559 max_fee_per_gas)
maxPriorityFeePerGas	bigint	Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas)
paymaster	string \| null	Address of paymaster contract (null if account pays for itself)
paymasterVerificationGasLimit	bigint \| null	The amount of gas to allocate for the paymaster verification step (null if no paymaster)
paymasterPostOpGasLimit	bigint \| null	The amount of gas to allocate for the paymaster post-operation code (null if no paymaster)
paymasterData	string \| null	Data for paymaster (null if no paymaster)
eip7702Auth	Authorization7702Hex \| null	EIP-7702 authorization data for EOA delegation (null if not using EIP-7702)
signature	string	Data passed into the account to verify authorization. Resolves to '0x' when the user did not provide their signature yet` | The constructed user operation for EIP-7702 |

### signUserOperation[​](#signuseroperation "Direct link to signUserOperation")

Signs a UserOperation with the provided private key for the EIP-7702 account.

* example.ts
* Param Types
* Return Type

example.ts

```
const signature = smartAccount.signUserOperation(
  userOperation,
  "0x...private-key",
  11155111n // chain ID
);

userOperation.signature = signature;
```

| key             | type                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | description                                 |
| :-------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------ |
| `userOperation` | `key	type	descriptionsender	string	The account making the operation
nonce	bigint	Anti-replay parameter (see Semi-abstracted Nonce Support)
factory	string \| null	Account factory address, only for new accounts (null if account already exists)
factoryData	string \| null	Data for account factory (null if account already exists)
callData	string	The data to pass to the sender during the main execution call
callGasLimit	bigint	The amount of gas to allocate the main execution call
verificationGasLimit	bigint	The amount of gas to allocate for the verification step
preVerificationGas	bigint	The amount of gas to pay for to compensate the bundler for pre-verification execution and calldata
maxFeePerGas	bigint	Maximum fee per gas (similar to EIP-1559 max_fee_per_gas)
maxPriorityFeePerGas	bigint	Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas)
paymaster	string \| null	Address of paymaster contract (null if account pays for itself)
paymasterVerificationGasLimit	bigint \| null	The amount of gas to allocate for the paymaster verification step (null if no paymaster)
paymasterPostOpGasLimit	bigint \| null	The amount of gas to allocate for the paymaster post-operation code (null if no paymaster)
paymasterData	string \| null	Data for paymaster (null if no paymaster)
eip7702Auth	Authorization7702Hex \| null	EIP-7702 authorization data for EOA delegation (null if not using EIP-7702)
signature	string	Data passed into the account to verify authorization. Resolves to '0x' when the user did not provide their signature yet` | The user operation to sign                  |
| `privateKey`    | `string`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | Private key to sign the user operation with |
| `chainId`       | `bigint`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | Chain ID for the target blockchain          |

| key         | type     | description                          |
| :---------- | :------- | :----------------------------------- |
| `signature` | `string` | The signature for the user operation |

### sendUserOperation[​](#senduseroperation "Direct link to sendUserOperation")

Sends a signed UserOperation to the bundler for execution on-chain.

* example.ts
* Param Types
* Return Type

example.ts

```
const response = await smartAccount.sendUserOperation(
  userOperation,
  "https://api.candide.dev/public/v3/sepolia" // bundler URL
);

console.log("UserOperation hash:", response.userOperationHash);

// Wait for the transaction to be included
const receipt = await response.included();
console.log("Transaction receipt:", receipt);
```

| key             | type                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | description                                   |
| :-------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------- |
| `userOperation` | `key	type	descriptionsender	string	The account making the operation
nonce	bigint	Anti-replay parameter (see Semi-abstracted Nonce Support)
factory	string \| null	Account factory address, only for new accounts (null if account already exists)
factoryData	string \| null	Data for account factory (null if account already exists)
callData	string	The data to pass to the sender during the main execution call
callGasLimit	bigint	The amount of gas to allocate the main execution call
verificationGasLimit	bigint	The amount of gas to allocate for the verification step
preVerificationGas	bigint	The amount of gas to pay for to compensate the bundler for pre-verification execution and calldata
maxFeePerGas	bigint	Maximum fee per gas (similar to EIP-1559 max_fee_per_gas)
maxPriorityFeePerGas	bigint	Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas)
paymaster	string \| null	Address of paymaster contract (null if account pays for itself)
paymasterVerificationGasLimit	bigint \| null	The amount of gas to allocate for the paymaster verification step (null if no paymaster)
paymasterPostOpGasLimit	bigint \| null	The amount of gas to allocate for the paymaster post-operation code (null if no paymaster)
paymasterData	string \| null	Data for paymaster (null if no paymaster)
eip7702Auth	Authorization7702Hex \| null	EIP-7702 authorization data for EOA delegation (null if not using EIP-7702)
signature	string	Data passed into the account to verify authorization. Resolves to '0x' when the user did not provide their signature yet` | The signed user operation to send             |
| `bundlerRpc`    | `string`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | Bundler RPC URL to send the user operation to |

| key        | type                                                                                                                                                                                                                                                                                                                                                                                                                                       | description                                                 |
| :--------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------- |
| `response` | `key	type	descriptionuserOperationHash	string	The hash over the userOp (except signature), entryPoint and chainId
bundler	Bundler	The Bundler class
entrypointAddress	string	The entrypoint address where the useroperation got executed
included()	Promise<UserOperationReceiptResult \| BundlerJsonRpcError>	Waits for the user operation to be included onchain and returns the user operation receipt on success, or the bundler error on failture` | Response containing user operation hash and bundler details |

SendUseroperationResponse

| key                 | type                                                         | description                                                                                                                             |
| :------------------ | :----------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------- |
| `userOperationHash` | `string`                                                     | The hash over the userOp (except signature), entryPoint and chainId                                                                     |
| `bundler`           | `Bundler`                                                    | The Bundler class                                                                                                                       |
| `entrypointAddress` | `string`                                                     | The entrypoint address where the useroperation got executed                                                                             |
| `included()`        | `Promise<UserOperationReceiptResult \| BundlerJsonRpcError>` | Waits for the user operation to be included onchain and returns the user operation receipt on success, or the bundler error on failture |

BundlerJsonRpcError

| key       | type     | description                           |
| :-------- | :------- | :------------------------------------ |
| `code`    | `number` | Bundler RPC error code                |
| `message` | `string` | Bundler RPC error message description |

UserOperationReceiptResult

| key             | type                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | description                                                               |
| :-------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------------------------------------------ |
| `userOpHash`    | `string`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | The hash of the user operation.                                           |
| `entryPoint`    | `string`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | The address of the entry point contract that processed the operation.     |
| `sender`        | `string`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | The address of the sender of the user operation.                          |
| `nonce`         | `bigint`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | The nonce of the user operation.                                          |
| `paymaster`     | `string`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | The address of the paymaster that paid for the gas of the user operation. |
| `actualGasCost` | `bigint`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | The actual gas cost incurred for executing the user operation.            |
| `actualGasUsed` | `bigint`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | The actual amount of gas used for the user operation.                     |
| `success`       | `boolean`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | Indicates whether the user operation was successful.                      |
| `logs`          | `string`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | The logs produced during the execution of the user operation.             |
| `receipt`       | `key	type	descriptionblockHash	string	The hash of the block in which the transaction was included.
blockNumber	bigint	The number of the block in which the transaction was included.
from	string	The address that initiated the transaction.
cumulativeGasUsed	bigint	The total amount of gas used in the block up to and including this transaction.
gasUsed	bigint	The amount of gas used by this transaction.
logs	string	Logs generated by the transaction.
logsBloom	string	The bloom filter for the logs generated by the transaction.
transactionHash	string	The unique hash of the transaction.
transactionIndex	bigint	The index of the transaction within the block.
effectiveGasPrice	bigint	The effective gas price for the transaction. This field is optional and may not be present in all receipts.` | The detailed receipt of the user operation.                               |

## Advanced Methods[​](#advanced-methods "Direct link to Advanced Methods")

### createAccountCallData[​](#createaccountcalldata "Direct link to createAccountCallData")

Creates call data for a basic transaction with specified target, value, and data.

* example.ts
* Param Types
* Return Type

example.ts

```
const callData = Simple7702Account.createAccountCallData(
  "0x...", // to address
  1000000000000000000n, // value in wei
  "0x..." // transaction data
);
```

| key     | type     | description                          |
| :------ | :------- | :----------------------------------- |
| `to`    | `string` | Target address for the transaction   |
| `value` | `bigint` | Value to transfer in the transaction |
| `data`  | `string` | Call data for the transaction        |

| key        | type     | description                                   |
| :--------- | :------- | :-------------------------------------------- |
| `callData` | `string` | Encoded call data for the account transaction |

### createAccountCallDataSingleTransaction[​](#createaccountcalldatasingletransaction "Direct link to createAccountCallDataSingleTransaction")

Creates call data for a single SimpleMetaTransaction.

* example.ts
* Param Types
* Return Type

example.ts

```
const metaTransaction = {
  to: "0x...",
  value: 0n,
  data: "0x...",
};

const callData = Simple7702Account.createAccountCallDataSingleTransaction(metaTransaction);
```

| key               | type                                                                                                                                                                                                                                                                                                                         | description                                       |
| :---------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------ |
| `metaTransaction` | `key	type	descriptionSimpleMetaTransaction	key	type	descriptionto	string	Target contract address for the transaction
value	bigint	Value transferred in the transaction (usually 0n for contract interactions)
data	string	The call data for the transaction	SimpleMetaTransaction is the type of transaction used with Simple7702Account.` | The SimpleMetaTransaction to create call data for |

| key        | type     | description                                   |
| :--------- | :------- | :-------------------------------------------- |
| `callData` | `string` | Encoded call data for the account transaction |

### createAccountCallDataBatchTransactions[​](#createaccountcalldatabatchtransactions "Direct link to createAccountCallDataBatchTransactions")

Creates call data for batching multiple SimpleMetaTransactions together.

* example.ts
* Param Types
* Return Type

example.ts

```
const transactions = [
  { to: "0x...", value: 0n, data: "0x..." },
  { to: "0x...", value: 0n, data: "0x..." },
];

const callData = Simple7702Account.createAccountCallDataBatchTransactions(transactions);
```

| key            | type                      | description                                       |
| :------------- | :------------------------ | :------------------------------------------------ |
| `transactions` | `SimpleMetaTransaction[]` | Array of SimpleMetaTransactions to batch together |

| key        | type     | description                                   |
| :--------- | :------- | :-------------------------------------------- |
| `callData` | `string` | Encoded call data for the account transaction |

### prependTokenPaymasterApproveToCallDataStatic[​](#prependtokenpaymasterapprovetocalldatastatic "Direct link to prependTokenPaymasterApproveToCallDataStatic")

Prepends a token approval transaction to existing call data for use with token paymasters.

* example.ts
* Param Types
* Return Type

example.ts

```
const callDataWithApproval = Simple7702Account.prependTokenPaymasterApproveToCallDataStatic(
  "0x...", // existing call data
  "0xa0b86a33e6b3e96bb24b8e4b28e80e0fb3a4f4b6", // USDC token address
  "0x...", // paymaster address
  1000000n // approve amount (1 USDC)
);
```

| key                | type     | description                                   |
| :----------------- | :------- | :-------------------------------------------- |
| `callData`         | `string` | Existing call data to prepend the approval to |
| `tokenAddress`     | `string` | Address of the ERC-20 token to approve        |
| `paymasterAddress` | `string` | Address of the paymaster contract             |
| `approveAmount`    | `bigint` | Amount of tokens to approve for the paymaster |

| key        | type     | description                             |
| :--------- | :------- | :-------------------------------------- |
| `callData` | `string` | Call data with token approval prepended |

### prependTokenPaymasterApproveToCallData[​](#prependtokenpaymasterapprovetocalldata "Direct link to prependTokenPaymasterApproveToCallData")

Instance method to prepend token approval to call data for paymaster usage.

* example.ts
* Param Types
* Return Type

example.ts

```
const callDataWithApproval = smartAccount.prependTokenPaymasterApproveToCallData(
  "0x...", // existing call data
  "0xa0b86a33e6b3e96bb24b8e4b28e80e0fb3a4f4b6", // USDC token address
  "0x...", // paymaster address
  1000000n // approve amount
);
```

| key                | type     | description                                   |
| :----------------- | :------- | :-------------------------------------------- |
| `callData`         | `string` | Existing call data to prepend the approval to |
| `tokenAddress`     | `string` | Address of the ERC-20 token to approve        |
| `paymasterAddress` | `string` | Address of the paymaster contract             |
| `approveAmount`    | `bigint` | Amount of tokens to approve for the paymaster |

| key        | type     | description                             |
| :--------- | :------- | :-------------------------------------- |
| `callData` | `string` | Call data with token approval prepended |

### estimateUserOperationGas[​](#estimateuseroperationgas "Direct link to estimateUserOperationGas")

Estimates gas limits for a UserOperation using the bundler.

* example.ts
* Param Types
* Return Type

example.ts

```
const [callGasLimit, verificationGasLimit, preVerificationGas] =
  await smartAccount.estimateUserOperationGas(
    userOperation,
    "https://api.candide.dev/public/v3/sepolia",
    {
      // Optional overrides
      stateOverrideSet: {...},
      dummySignature: "0x...",
    }
  );
```

| key             | type                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | description                            |
| :-------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------- |
| `userOperation` | `key	type	descriptionsender	string	The account making the operation
nonce	bigint	Anti-replay parameter (see Semi-abstracted Nonce Support)
factory	string \| null	Account factory address, only for new accounts (null if account already exists)
factoryData	string \| null	Data for account factory (null if account already exists)
callData	string	The data to pass to the sender during the main execution call
callGasLimit	bigint	The amount of gas to allocate the main execution call
verificationGasLimit	bigint	The amount of gas to allocate for the verification step
preVerificationGas	bigint	The amount of gas to pay for to compensate the bundler for pre-verification execution and calldata
maxFeePerGas	bigint	Maximum fee per gas (similar to EIP-1559 max_fee_per_gas)
maxPriorityFeePerGas	bigint	Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas)
paymaster	string \| null	Address of paymaster contract (null if account pays for itself)
paymasterVerificationGasLimit	bigint \| null	The amount of gas to allocate for the paymaster verification step (null if no paymaster)
paymasterPostOpGasLimit	bigint \| null	The amount of gas to allocate for the paymaster post-operation code (null if no paymaster)
paymasterData	string \| null	Data for paymaster (null if no paymaster)
eip7702Auth	Authorization7702Hex \| null	EIP-7702 authorization data for EOA delegation (null if not using EIP-7702)
signature	string	Data passed into the account to verify authorization. Resolves to '0x' when the user did not provide their signature yet` | The user operation to estimate gas for |
| `bundlerRpc`    | `string`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | Bundler RPC URL for gas estimation     |
| `overrides?`    | `key	type	descriptionstateOverrideSet?	StateOverrideSet	State override set for simulation
dummySignature?	string	Dummy signature for gas estimation`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | Optional overrides for gas estimation  |

| key         | type                       | description                                                        |
| :---------- | :------------------------- | :----------------------------------------------------------------- |
| `gasLimits` | `[bigint, bigint, bigint]` | Tuple of \[callGasLimit, verificationGasLimit, preVerificationGas] |

## Error Handling & Common Issues[​](#error-handling--common-issues "Direct link to Error Handling & Common Issues")

### Common Errors[​](#common-errors "Direct link to Common Errors")

* Authorization Errors
* Gas Estimation Issues
* Network Mismatches

```
// Missing eip7702Auth on the first UserOperation authorization
const userOperation = await smartAccount.createUserOperation(
  transactions,
  providerRpc,
  bundlerRpc
  // Missing eip7702Auth causes delegation failure
);

// Correct usage
const userOperation = await smartAccount.createUserOperation(
  transactions,
  providerRpc,
  bundlerRpc,
  {
    eip7702Auth: { chainId: 11155111n }, // Required for EIP-7702
  }
);
```

```
// Insufficient gas prices
const userOperation = await smartAccount.createUserOperation(
  transactions,
  providerRpc,
  bundlerRpc,
  {
    eip7702Auth: { chainId: 11155111n },
    maxFeePerGas: 1000000000n, // Too low for current network conditions
    maxPriorityFeePerGas: 100000000n, // Too low for current network conditions
  }
);

// Add multipliers to the node
const userOperation = await smartAccount.createUserOperation(
  transactions,
  providerRpc,
  bundlerRpc,
  {
    eip7702Auth: { chainId: 11155111n },
    // Use higher gas prices
    maxFeePerGasMultiplier: 120, // 20% higher than current network conditions
    maxPriorityFeePerGasMultiplier: 150, // 50% higher than current network conditions
  }
);
```

```
// ChainId mismatch
const userOperation = await smartAccount.createUserOperation(
  transactions,
  "https://ethereum-sepolia-rpc.publicnode.com", // Sepolia RPC
  "https://api.candide.dev/public/v3/11155111", // Sepolia bundler
  {
    eip7702Auth: { chainId: 1n }, // Mainnet chainId
  }
);

// Matching network configuration
const userOperation = await smartAccount.createUserOperation(
  transactions,
  "https://ethereum-sepolia-rpc.publicnode.com", // Sepolia RPC
  "https://api.candide.dev/public/v3/11155111", // Sepolia bundler
  {
    eip7702Auth: { chainId: 11155111n }, // Sepolia chainId
  }
);
```

### Error Recovery[​](#error-recovery "Direct link to Error Recovery")

```
async function robustTransactionExecution() {
  try {
    const response = await smartAccount.sendUserOperation(userOperation, bundlerRpc);
    const receipt = await response.included();

    if (!receipt.success) {
      console.error("Transaction failed:", receipt.logs);
      // Handle transaction failure
    }

    return receipt;
  } catch (error) {
    if (error.code === -32500) {
      // Transaction rejected by entrypoint simulation
      console.error("Simulation failed, check transaction data");
    } else if (error.code === -32501) {
      // Paymaster rejection
      console.error("Paymaster rejected transaction");
    }
    throw error;
  }
}
```
