init static method
Future<SimpleAccount>
init(
- EthPrivateKey credentials,
- String rpcUrl, {
- 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;
}