init static method

Future<SimpleAccount> init(
  1. EthPrivateKey credentials,
  2. String rpcUrl, {
  3. IPresetBuilderOpts? opts,
})

Initializes a SimpleAccount object and returns it.

Implementation

static Future<SimpleAccount> init(
  EthPrivateKey credentials,
  String rpcUrl, {
  IPresetBuilderOpts? opts,
}) async {
  final instance = SimpleAccount(credentials, rpcUrl, opts: opts);

  final List<String> inputArr = [
    instance.simpleAccountFactory.self.address.toString(),
    bytesToHex(
      instance.simpleAccountFactory.self.function('createAccount').encodeCall(
        [
          credentials.address,
          opts?.salt ?? BigInt.zero,
        ],
      ),
      include0x: true,
    ),
  ];
  instance.initCode =
      '0x${inputArr.map((hexStr) => hexStr.toString().substring(2)).join('')}';
  final smartContractAddress = await instance.simpleAccountFactory.getAddress(
    (
      owner: credentials.address,
      salt: opts?.salt ?? BigInt.zero,
    ),
  );
  instance.proxy = simple_account_impl.SimpleAccount(
    address: smartContractAddress,
    client: instance.simpleAccountFactory.client,
  );

  final baseInstance = instance
      .useDefaults({
        'sender': instance.proxy.self.address.toString(),
        'signature': bytesToHex(
          credentials.signPersonalMessageToUint8List(
            Uint8List.fromList('0xdead'.codeUnits),
          ),
          include0x: true,
        ),
      })
      .useMiddleware(instance.resolveAccount)
      .useMiddleware(getGasPrice(
        instance.simpleAccountFactory.client,
      ));

  final withPM = opts?.paymasterMiddleware != null
      ? baseInstance.useMiddleware(
          opts?.paymasterMiddleware as UserOperationMiddlewareFn)
      : baseInstance.useMiddleware(
          estimateUserOperationGas(
            instance.simpleAccountFactory.client,
          ),
        );

  return withPM.useMiddleware(signUserOpHash(instance.credentials))
      as SimpleAccount;
}