buildUserOperation method

  1. @override
Future<UserOperation> buildUserOperation({
  1. required Call call,
  2. BigInt? maxFeePerGas,
  3. BigInt? maxPriorityFeePerGas,
  4. BigInt? nonce,
})
override

Builds a UserOperation for execution.

Implementation

@override
Future<UserOperation> buildUserOperation({
  required Call call,
  BigInt? maxFeePerGas,
  BigInt? maxPriorityFeePerGas,
  BigInt? nonce,
}) async {
  final sender = await getAddress();
  final callData = encodeCallData(call.to, call.value, call.data);
  final opNonce = nonce ?? await getNonce();

  // Init factory fields
  String? factory;
  String? factoryData;
  String? initCode;

  if (!await isDeployed()) {
    factory = await getFactory();
    factoryData = await getFactoryData();
    initCode = await getInitCode();
    if (initCode == '0x') initCode = null;
  }

  return UserOperation(
    sender: sender,
    nonce: opNonce,
    callData: callData,
    callGasLimit: BigInt.from(1000000), // Default high limit for estimation
    verificationGasLimit: BigInt.from(1000000),
    preVerificationGas: BigInt.from(100000),
    maxFeePerGas: maxFeePerGas ?? BigInt.zero,
    maxPriorityFeePerGas: maxPriorityFeePerGas ?? BigInt.zero,
    signature: '0x',
    factory: factory,
    factoryData: factoryData,
    initCode: initCode,
  );
}