UNPKG

startale-aa-sdk

Version:

SDK for startale account integration with support for account abstraction, ERC-7579, ERC-4337.

75 lines 2.79 kB
import { encodeFunctionData, getAddress } from "viem"; import { sendUserOperation } from "viem/account-abstraction"; import { getAction, parseAccount } from "viem/utils"; import { AccountNotFoundError } from "../../../account/utils/AccountNotFound.js"; import { ACCOUNT_IMPLEMENTATION_ADDRESS } from "../../../constants/index.js"; /** * Upgrades a smart account to a new implementation. * * @param client - The client instance. * @param parameters - Parameters including the smart account, optional custom implementation address, and gas settings. * @returns The hash of the user operation as a hexadecimal string. * @throws {AccountNotFoundError} If the account is not found. * * @example * import { upgradeSmartAccount } from 'startale-aa-sdk' * * const userOpHash = await upgradeSmartAccount(startaleClient, { * // Optional custom implementation address * implementationAddress: '0x...', * // Optional initialization data * initData: '0x' * }) * console.log(userOpHash) // '0x...' */ export async function upgradeSmartAccount(client, parameters) { const { account: account_ = client.account, maxFeePerGas, maxPriorityFeePerGas, nonce, implementationAddress = ACCOUNT_IMPLEMENTATION_ADDRESS, initData = "0x", ...rest } = parameters ?? {}; if (!account_) { throw new AccountNotFoundError({ docsPath: "/startale-client/methods#upgradeSmartAccount" }); } const account = parseAccount(account_); const calls = await toUpgradeSmartAccountCalls(account, { implementationAddress, initData }); const sendUserOperationParams = { calls, maxFeePerGas, maxPriorityFeePerGas, nonce, account, ...rest }; return getAction(client, sendUserOperation, "sendUserOperation")(sendUserOperationParams); } export const toUpgradeSmartAccountCalls = async (account, { implementationAddress, initData }) => [ { to: account.address, value: BigInt(0), data: encodeFunctionData({ abi: [ { name: "upgradeToAndCall", type: "function", stateMutability: "payable", inputs: [ { type: "address", name: "newImplementation" }, { type: "bytes", name: "data" } ], outputs: [] } ], functionName: "upgradeToAndCall", args: [getAddress(implementationAddress), initData] }) } ]; //# sourceMappingURL=upgradeSmartAccount.js.map