@alchemy/aa-core
Version:
viem based SDK that enables interactions with ERC-4337 Smart Accounts. ABIs are based off the definitions generated in @account-abstraction/contracts
94 lines (89 loc) • 2.54 kB
text/typescript
import { type Address, type Chain } from "viem";
import {
arbitrum,
arbitrumGoerli,
arbitrumSepolia,
base,
baseGoerli,
baseSepolia,
fraxtal,
fraxtalSepolia,
goerli,
mainnet,
optimism,
optimismGoerli,
optimismSepolia,
polygon,
polygonAmoy,
polygonMumbai,
sepolia,
zora,
zoraSepolia,
} from "../chains/index.js";
import { defaultEntryPointVersion } from "../entrypoint/index.js";
import type { EntryPointVersion } from "../entrypoint/types.js";
import { DefaultFactoryNotDefinedError } from "../errors/account.js";
import type { UserOperationFeeOptions } from "../types";
/**
* Utility method returning the default simple account factory address given a {@link Chain} object
*
* @param chain - a {@link Chain} object
* @param version - {@link EntryPointVersion} value that defaults to `defaultEntryPointVersion`
* @returns a {@link abi.Address} for the given chain
* @throws if the chain doesn't have an address currently deployed
*/
export const getDefaultSimpleAccountFactoryAddress = (
chain: Chain,
version: EntryPointVersion = defaultEntryPointVersion
): Address => {
switch (version) {
case "0.6.0":
switch (chain.id) {
case mainnet.id:
case polygon.id:
case polygonAmoy.id:
case optimism.id:
case optimismSepolia.id:
case arbitrum.id:
case arbitrumSepolia.id:
case base.id:
case baseGoerli.id:
case baseSepolia.id:
case fraxtal.id:
case fraxtalSepolia.id:
case zora.id:
case zoraSepolia.id:
return "0x15Ba39375ee2Ab563E8873C8390be6f2E2F50232";
case sepolia.id:
case goerli.id:
case polygonMumbai.id:
case optimismGoerli.id:
case arbitrumGoerli.id:
return "0x9406Cc6185a346906296840746125a0E44976454";
default:
break;
}
break;
case "0.7.0":
switch (chain.id) {
default:
return "0x91E60e0613810449d098b0b5Ec8b51A0FE8c8985";
}
}
throw new DefaultFactoryNotDefinedError("SimpleAccount", chain, version);
};
export const minPriorityFeePerBidDefaults = new Map<number, bigint>([
[arbitrum.id, 10_000_000n],
[arbitrumGoerli.id, 10_000_000n],
[arbitrumSepolia.id, 10_000_000n],
]);
export const getDefaultUserOperationFeeOptions = (
chain: Chain
): UserOperationFeeOptions => {
return {
maxPriorityFeePerGas: {
min: minPriorityFeePerBidDefaults.get(chain.id) ?? 100_000_000n,
multiplier: 1.33,
},
};
};