@biconomy/abstractjs
Version:
SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.
123 lines • 5.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.setupMultiVersionAccounts = setupMultiVersionAccounts;
exports.setupSingleVersion = setupSingleVersion;
exports.setupAccountsWithSigner = setupAccountsWithSigner;
const viem_1 = require("viem");
const chains_1 = require("viem/chains");
const toMultiChainNexusAccount_1 = require("../../account/toMultiChainNexusAccount.js");
const toP256Signer_1 = require("../../account/utils/toP256Signer.js");
const createMeeClient_1 = require("../../clients/createMeeClient.js");
const constants_1 = require("../../constants/index.js");
const modules_1 = require("../../modules/index.js");
const TESTNET_RPC_URLS = {
[chains_1.optimismSepolia.id]: `https://opt-sepolia.g.alchemy.com/v2/${process.env.ALCHEMY_API_KEY}`,
[chains_1.baseSepolia.id]: `https://base-sepolia.g.alchemy.com/v2/${process.env.ALCHEMY_API_KEY}`
};
const MIN_BALANCE = (0, viem_1.parseEther)("0.0005");
const FUNDING_AMOUNT = (0, viem_1.parseEther)("0.001");
async function fundAccountsIfNeeded(mcNexus, eoaAccount) {
for (const deployment of mcNexus.deployments) {
const chain = deployment.client.chain;
if (!chain)
continue;
const publicClient = deployment.client;
const balance = await publicClient.getBalance({
address: deployment.address
});
if (balance < MIN_BALANCE) {
console.log(`Funding ${deployment.address} on ${chain.name} (balance: ${balance})`);
const walletClient = (0, viem_1.createWalletClient)({
account: eoaAccount,
chain,
transport: (0, viem_1.http)(TESTNET_RPC_URLS[chain.id])
});
const hash = await walletClient.sendTransaction({
to: deployment.address,
value: FUNDING_AMOUNT
});
await publicClient.waitForTransactionReceipt({ hash });
console.log(`Funded ${deployment.address} on ${chain.name} (tx: ${hash})`);
}
}
}
async function setupMultiVersionAccounts(options) {
const { eoaAccount, versions = [constants_1.MEEVersion.V2_0_0, constants_1.MEEVersion.V2_2_1, constants_1.MEEVersion.V3_0_0], chains = [chains_1.baseSepolia, chains_1.optimismSepolia], index = 333n, apiKey } = options;
const accountConfigs = [];
for (const version of versions) {
const mcNexus = await (0, toMultiChainNexusAccount_1.toMultichainNexusAccount)({
signer: eoaAccount,
index,
chainConfigurations: chains.map((chain) => ({
chain,
transport: (0, viem_1.http)(TESTNET_RPC_URLS[chain.id]),
version: (0, modules_1.getMEEVersion)(version)
}))
});
await fundAccountsIfNeeded(mcNexus, eoaAccount);
const meeClient = await (0, createMeeClient_1.createMeeClient)({
account: mcNexus,
...(apiKey && { apiKey })
});
const versionName = version === constants_1.MEEVersion.V2_0_0
? "V2.0.0 (MeeK1, no 712 for simple mode)"
: version === constants_1.MEEVersion.V2_2_1
? "V2.2.1 (MeeK1, TypedData for simple mode)"
: version === constants_1.MEEVersion.V3_0_0
? "V3.0.0 (StxValidator)"
: version;
accountConfigs.push({
name: versionName,
version,
mcNexus,
meeClient,
eoaAccount
});
}
return accountConfigs;
}
async function setupSingleVersion(eoaAccount, version, chains = [chains_1.baseSepolia, chains_1.optimismSepolia]) {
const configs = await setupMultiVersionAccounts({
eoaAccount,
versions: [version],
chains
});
return configs[0];
}
async function setupAccountsWithSigner(options) {
const { signer, eoaAccount, versions = [constants_1.MEEVersion.V3_0_0], chains = [chains_1.baseSepolia, chains_1.optimismSepolia], index = 1n, apiKey } = options;
const accountConfigs = [];
for (const version of versions) {
const mcNexus = await (0, toMultiChainNexusAccount_1.toMultichainNexusAccount)({
signer,
index,
chainConfigurations: chains.map((chain) => ({
chain,
transport: (0, viem_1.http)(TESTNET_RPC_URLS[chain.id]),
version: (0, modules_1.getMEEVersion)(version)
}))
});
await fundAccountsIfNeeded(mcNexus, eoaAccount);
const meeClient = await (0, createMeeClient_1.createMeeClient)({
account: mcNexus,
...(apiKey && { apiKey })
});
const signerType = (0, toP256Signer_1.isP256Signer)(signer) ? " with P256" : "";
const versionName = version === constants_1.MEEVersion.V2_0_0
? `V2.0.0 (MeeK1, no 712 for simple mode)${signerType}`
: version === constants_1.MEEVersion.V2_2_1
? `V2.2.1 (MeeK1, TypedData for simple mode)${signerType}`
: version === constants_1.MEEVersion.V3_0_0
? `V3.0.0 (StxValidator)${signerType}`
: version;
accountConfigs.push({
name: versionName,
version,
mcNexus,
meeClient,
eoaAccount
});
}
return accountConfigs;
}
//# sourceMappingURL=setupMultiVersion.js.map