Skip to main content
import * as UserOperation from 'voltaire-effect/primitives/UserOperation'
import { Effect } from 'effect'

// Create
const userOp = await Effect.runPromise(UserOperation.from({
  sender: '0x...',
  nonce: 0n,
  initCode: '0x',
  callData: '0x...',
  callGasLimit: 100000n,
  verificationGasLimit: 100000n,
  preVerificationGas: 21000n,
  maxFeePerGas: 1000000000n,
  maxPriorityFeePerGas: 1000000000n,
  paymasterAndData: '0x',
  signature: '0x...',
}))

// Hash for signing
const userOpHash = await Effect.runPromise(
  UserOperation.hash(userOp, entryPointAddress, 1n)
)

// Pack for v0.7 format
const packed = await Effect.runPromise(UserOperation.pack(userOp))

Fields

FieldTypeDescription
senderAddressSmart contract wallet
noncebigintAnti-replay nonce
initCodeUint8ArrayFactory + init data
callDataUint8ArrayEncoded call(s)
callGasLimitbigintExecution gas
verificationGasLimitbigintVerification gas
preVerificationGasbigintBundler overhead
maxFeePerGasbigintEIP-1559 max fee
maxPriorityFeePerGasbigintEIP-1559 priority
paymasterAndDataUint8ArrayPaymaster + data
signatureUint8ArraySignature