init static method

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

Initializes a EtherspotWallet object and returns it.

Implementation

static Future<EtherspotWallet> init(
  EthPrivateKey credentials,
  String rpcUrl, {
  IPresetBuilderOpts? opts,
}) async {
  final instance = EtherspotWallet(credentials, rpcUrl, opts: opts);
  final List<String> inputArr = [
    instance.etherspotWalletFactory.self.address.toString(),
    bytesToHex(
      instance.etherspotWalletFactory.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.etherspotWalletFactory.getAddress(
    (
      index: opts?.salt ?? BigInt.zero,
      owner: credentials.address,
    ),
  );
  instance.proxy = etherspot_wallet_impl.EtherspotWallet(
    address: smartContractAddress,
    client: instance.etherspotWalletFactory.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.etherspotWalletFactory.client,
      ));

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

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