viem
Version:
193 lines (186 loc) • 7.05 kB
text/typescript
import type { Address } from 'abitype'
import type { Log } from '../../types/log.js'
import type { Hash, Hex } from '../../types/misc.js'
import type { TransactionReceipt } from '../../types/transaction.js'
import type { OneOf, UnionPartialBy } from '../../types/utils.js'
import type { EntryPointVersion } from './entryPointVersion.js'
/** @link https://eips.ethereum.org/EIPS/eip-4337#-eth_estimateuseroperationgas */
export type EstimateUserOperationGasReturnType<
entryPointVersion extends EntryPointVersion = EntryPointVersion,
uint256 = bigint,
> = OneOf<
| (entryPointVersion extends '0.7'
? {
preVerificationGas: uint256
verificationGasLimit: uint256
callGasLimit: uint256
paymasterVerificationGasLimit?: uint256 | undefined
paymasterPostOpGasLimit?: uint256 | undefined
}
: never)
| (entryPointVersion extends '0.6'
? {
preVerificationGas: uint256
verificationGasLimit: uint256
callGasLimit: uint256
}
: never)
>
/** @link https://eips.ethereum.org/EIPS/eip-4337#-eth_getuseroperationbyhash */
export type GetUserOperationByHashReturnType<
entryPointVersion extends EntryPointVersion = EntryPointVersion,
uint256 = bigint,
> = {
blockHash: Hash
blockNumber: uint256
entryPoint: Address
transactionHash: Hash
userOperation: UserOperation<entryPointVersion, uint256>
}
/** @link https://eips.ethereum.org/EIPS/eip-4337#entrypoint-definition */
export type PackedUserOperation = {
/** Concatenation of {@link UserOperation`verificationGasLimit`} (16 bytes) and {@link UserOperation`callGasLimit`} (16 bytes) */
accountGasLimits: Hex
/** The data to pass to the `sender` during the main execution call. */
callData: Hex
/** Concatenation of {@link UserOperation`factory`} and {@link UserOperation`factoryData`}. */
initCode: Hex
/** Concatenation of {@link UserOperation`maxPriorityFee`} (16 bytes) and {@link UserOperation`maxFeePerGas`} (16 bytes) */
gasFees: Hex
/** Anti-replay parameter. */
nonce: bigint
/** Concatenation of paymaster fields (or empty). */
paymasterAndData: Hex
/** Extra gas to pay the Bundler. */
preVerificationGas: bigint
/** The account making the operation. */
sender: Address
/** Data passed into the account to verify authorization. */
signature: Hex
}
/** @link https://eips.ethereum.org/EIPS/eip-4337#useroperation */
export type UserOperation<
entryPointVersion extends EntryPointVersion = EntryPointVersion,
uint256 = bigint,
> = OneOf<
| (entryPointVersion extends '0.7'
? {
/** The data to pass to the `sender` during the main execution call. */
callData: Hex
/** The amount of gas to allocate the main execution call */
callGasLimit: uint256
/** Account factory. Only for new accounts. */
factory?: Address | undefined
/** Data for account factory. */
factoryData?: Hex | undefined
/** Maximum fee per gas. */
maxFeePerGas: uint256
/** Maximum priority fee per gas. */
maxPriorityFeePerGas: uint256
/** Anti-replay parameter. */
nonce: uint256
/** Address of paymaster contract. */
paymaster?: Address | undefined
/** Data for paymaster. */
paymasterData?: Hex | undefined
/** The amount of gas to allocate for the paymaster post-operation code. */
paymasterPostOpGasLimit?: uint256 | undefined
/** The amount of gas to allocate for the paymaster validation code. */
paymasterVerificationGasLimit?: uint256 | undefined
/** Extra gas to pay the Bundler. */
preVerificationGas: uint256
/** The account making the operation. */
sender: Address
/** Data passed into the account to verify authorization. */
signature: Hex
/** The amount of gas to allocate for the verification step. */
verificationGasLimit: uint256
}
: never)
| (entryPointVersion extends '0.6'
? {
/** The data to pass to the `sender` during the main execution call. */
callData: Hex
/** The amount of gas to allocate the main execution call */
callGasLimit: uint256
/** Account init code. Only for new accounts. */
initCode?: Hex | undefined
/** Maximum fee per gas. */
maxFeePerGas: uint256
/** Maximum priority fee per gas. */
maxPriorityFeePerGas: uint256
/** Anti-replay parameter. */
nonce: uint256
/** Paymaster address with calldata. */
paymasterAndData?: Hex | undefined
/** Extra gas to pay the Bundler. */
preVerificationGas: uint256
/** The account making the operation. */
sender: Address
/** Data passed into the account to verify authorization. */
signature: Hex
/** The amount of gas to allocate for the verification step. */
verificationGasLimit: uint256
}
: never)
>
export type UserOperationRequest<
entryPointVersion extends EntryPointVersion = EntryPointVersion,
uint256 = bigint,
> = OneOf<
| (entryPointVersion extends '0.7'
? UnionPartialBy<
UserOperation<'0.7', uint256>,
// We are able to calculate these via `prepareUserOperation`.
| keyof EstimateUserOperationGasReturnType<'0.7'>
| 'callData'
| 'maxFeePerGas'
| 'maxPriorityFeePerGas'
| 'nonce'
| 'sender'
| 'signature'
>
: never)
| (entryPointVersion extends '0.6'
? UnionPartialBy<
UserOperation<'0.6', uint256>,
// We are able to calculate these via `prepareUserOperation`.
| keyof EstimateUserOperationGasReturnType<'0.6'>
| 'callData'
| 'maxFeePerGas'
| 'maxPriorityFeePerGas'
| 'nonce'
| 'sender'
| 'signature'
>
: never)
>
/** @link https://eips.ethereum.org/EIPS/eip-4337#-eth_getuseroperationreceipt */
export type UserOperationReceipt<
_entryPointVersion extends EntryPointVersion = EntryPointVersion,
uint256 = bigint,
int32 = number,
status = 'success' | 'reverted',
> = {
/** Actual gas cost. */
actualGasCost: uint256
/** Actual gas used. */
actualGasUsed: uint256
/** Entrypoint address. */
entryPoint: Address
/** Logs emitted during execution. */
logs: Log<uint256, int32, false>[]
/** Anti-replay parameter. */
nonce: uint256
/** Paymaster for the user operation. */
paymaster?: Address | undefined
/** Revert reason, if unsuccessful. */
reason?: string | undefined
/** Transaction receipt of the user operation execution. */
receipt: TransactionReceipt<uint256, int32, status>
sender: Address
/** If the user operation execution was successful. */
success: boolean
/** Hash of the user operation. */
userOpHash: Hash
}