@owlprotocol/contracts-account-abstraction
Version:
ERC4337 Account Abstraction support for deploying relevant smart contracts and interacting with UserOps.
49 lines (42 loc) • 2.09 kB
text/typescript
import { expect, describe, test } from "vitest";
import { createPublicClient, createWalletClient, http, nonceManager } from "viem";
import { localhost } from "viem/chains";
import { entryPoint07Address } from "viem/account-abstraction";
import { getLocalAccount } from "@owlprotocol/viem-utils";
import { port } from "./test/constants.js";
import { setupERC4337Contracts, setupVerifyingPaymaster } from "./setupERC4337Contracts.js";
import { SIMPLE_ACCOUNT_FACTORY_ADDRESS } from "./constants.js";
describe("setupERC4337Contracts.test.ts", function () {
const chain = {
...localhost,
rpcUrls: {
default: {
http: [`http://127.0.0.1:${port}`],
},
},
};
const transport = http(chain.rpcUrls.default.http[0]);
const publicClient = createPublicClient({
chain,
transport,
});
const walletClient = createWalletClient({
account: getLocalAccount(0, { nonceManager }),
chain,
transport,
});
test("setupERC4337Contracts", async () => {
// Note: Contracts are actually deployed in vitest.setup.ts (shared across all tests)
const result = await setupERC4337Contracts(walletClient);
expect(await publicClient.getCode({ address: result.entrypoint.address })).toBeDefined();
expect(await publicClient.getCode({ address: result.simpleAccountFactory.address })).toBeDefined();
expect(await publicClient.getCode({ address: result.entrypointSimulations.address })).toBeDefined();
expect(await publicClient.getCode({ address: result.pimlicoEntrypointSimulations.address })).toBeDefined();
expect(result.entrypoint.address).toBe(entryPoint07Address);
expect(result.simpleAccountFactory.address).toBe(SIMPLE_ACCOUNT_FACTORY_ADDRESS);
const verifyingPaymaster = await setupVerifyingPaymaster(walletClient, {
verifyingSignerAddress: walletClient.account.address,
});
expect(await publicClient.getCode({ address: verifyingPaymaster.address })).toBeDefined();
});
});