|
| 1 | +import { beforeAll, describe, expect, inject, test } from "vitest" |
| 2 | +import { |
| 3 | + type Chain, |
| 4 | + zeroAddress, |
| 5 | + type LocalAccount, |
| 6 | + isHex, |
| 7 | + isAddress, |
| 8 | + http |
| 9 | +} from "viem" |
| 10 | +import { base, baseSepolia, optimism, optimismSepolia } from "viem/chains" |
| 11 | +import { privateKeyToAccount, generatePrivateKey } from "viem/accounts" |
| 12 | +import { mcUSDC } from "../commons/tokens/stablecoins" |
| 13 | +import type { MultichainSmartAccount } from "./account" |
| 14 | +import { toMultichainNexusAccount } from "./nexus/multichain-nexus.account" |
| 15 | +import { toMeeCompliantNexusAccount } from "./nexus/nexus-mee-compliant" |
| 16 | + |
| 17 | +describe("accounts", async () => { |
| 18 | + let eoa: LocalAccount |
| 19 | + let mcNexusTestnet: MultichainSmartAccount |
| 20 | + let mcNexusMainnet: MultichainSmartAccount |
| 21 | + |
| 22 | + beforeAll(async () => { |
| 23 | + eoa = privateKeyToAccount(generatePrivateKey()) |
| 24 | + |
| 25 | + mcNexusTestnet = await toMultichainNexusAccount({ |
| 26 | + chains: [baseSepolia, optimismSepolia], |
| 27 | + signer: eoa |
| 28 | + }) |
| 29 | + |
| 30 | + mcNexusMainnet = await toMultichainNexusAccount({ |
| 31 | + chains: [base, optimism], |
| 32 | + signer: eoa |
| 33 | + }) |
| 34 | + }) |
| 35 | + |
| 36 | + test("should have configured accounts correctly", async () => { |
| 37 | + expect(mcNexusMainnet.deployments.length).toEqual(2) |
| 38 | + expect(mcNexusTestnet.deployments.length).toEqual(2) |
| 39 | + expect(mcNexusTestnet.deploymentOn(baseSepolia.id).address).toEqual( |
| 40 | + mcNexusTestnet.deploymentOn(optimismSepolia.id).address |
| 41 | + ) |
| 42 | + }) |
| 43 | + |
| 44 | + test("should sign message using MEE Compliant Nexus Account", async () => { |
| 45 | + const nexus = await toMeeCompliantNexusAccount({ |
| 46 | + chain: optimism, |
| 47 | + signer: eoa, |
| 48 | + transport: http() |
| 49 | + }) |
| 50 | + |
| 51 | + expect(isAddress(nexus.address)).toBeTruthy() |
| 52 | + |
| 53 | + const signed = await nexus.signMessage({ message: { raw: "0xABC" } }) |
| 54 | + expect(isHex(signed)).toBeTruthy() |
| 55 | + }) |
| 56 | + |
| 57 | + test("should read usdc balance on mainnet", async () => { |
| 58 | + const readAddress = mcNexusMainnet.deploymentOn(optimism.id).address |
| 59 | + const usdcBalanceOnChains = await mcUSDC.read({ |
| 60 | + account: mcNexusMainnet, |
| 61 | + functionName: "balanceOf", |
| 62 | + args: [readAddress], |
| 63 | + onChains: [base, optimism] |
| 64 | + }) |
| 65 | + |
| 66 | + expect(usdcBalanceOnChains.length).toEqual(2) |
| 67 | + }) |
| 68 | +}) |
0 commit comments