Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
146 changes: 69 additions & 77 deletions packages/test/v0.7/multiChainECDSAValidator.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ import {
signUserOperations
} from "@zerodev/multi-chain-ecdsa-validator"
import { toMultiChainECDSAValidator } from "@zerodev/multi-chain-ecdsa-validator"
import {
type SendUserOperationsParameters,
sendUserOperations
} from "@zerodev/multi-chain-ecdsa-validator/actions/sendUserOperations.js"
import {
EIP1271Abi,
type KernelAccountClient,
Expand All @@ -24,6 +28,7 @@ import {
http,
type Address,
type Chain,
type Client,
type GetContractReturnType,
type Hex,
type PrivateKeyAccount,
Expand Down Expand Up @@ -94,7 +99,6 @@ const SEPOLIA_ZERODEV_RPC_URL = getBundlerRpc(
const SEPOLIA_ZERODEV_PAYMASTER_RPC_URL = getPaymasterRpc(
config["0.7"][sepolia.id].projectId
)

const OPTIMISM_SEPOLIA_ZERODEV_RPC_URL = getBundlerRpc(
config["0.7"][optimismSepolia.id].projectId
)
Expand Down Expand Up @@ -812,60 +816,51 @@ describe("MultiChainECDSAValidator", () => {
paymaster: opSepoliaZeroDevPaymasterClient
})

const sepoliaUserOp =
await sepoliaZerodevKernelClient.prepareUserOperation({
callData:
await sepoliaZerodevKernelClient.account.encodeCalls([
const clients: Client<Transport, Chain, SmartAccount>[] = [
{
...sepoliaZerodevKernelClient
},
{
...optimismSepoliaZerodevKernelClient
}
]

const userOps = await Promise.all(
clients.map(async (client) => {
return {
callData: await client.account.encodeCalls([
{
to: zeroAddress,
value: BigInt(0),
data: "0x"
}
])
}
})
)

const optimismSepoliaUserOp =
await optimismSepoliaZerodevKernelClient.prepareUserOperation({
callData:
await optimismSepoliaZerodevKernelClient.account.encodeCalls(
[
{
to: zeroAddress,
value: BigInt(0),
data: "0x"
}
]
)
})

const signedUserOps = await signUserOperations(
sepoliaZerodevKernelClient,
const userOpParams: SendUserOperationsParameters[] = [
{
userOperations: [
{ ...sepoliaUserOp, chainId: sepolia.id },
{
...optimismSepoliaUserOp,
chainId: optimismSepolia.id
}
]
...userOps[0],
chainId: sepolia.id
},
{
...userOps[1],
chainId: optimismSepolia.id
}
)
]

const sepoliaUserOpHash =
await sepoliaZerodevKernelClient.sendUserOperation({
...signedUserOps[0]
})
const userOpHashes = await sendUserOperations(clients, userOpParams)

console.log("userOpHashes", userOpHashes)
const sepoliaUserOpHash = userOpHashes[0]
const optimismSepoliaUserOpHash = userOpHashes[1]

console.log("sepoliaUserOpHash", sepoliaUserOpHash)
await sepoliaZerodevKernelClient.waitForUserOperationReceipt({
hash: sepoliaUserOpHash
})

const optimismSepoliaUserOpHash =
await optimismSepoliaZerodevKernelClient.sendUserOperation({
...signedUserOps[1]
})

console.log("optimismSepoliaUserOpHash", optimismSepoliaUserOpHash)
await optimismSepoliaZerodevKernelClient.waitForUserOperationReceipt(
{
Expand Down Expand Up @@ -963,55 +958,52 @@ describe("MultiChainECDSAValidator", () => {
paymaster: opSepoliaZeroDevPaymasterClient
})

const sepoliaUserOp =
await sepoliaZerodevKernelClient.prepareUserOperation({
callData: await sepoliaKernelAccount.encodeCalls([
{
to: zeroAddress,
value: BigInt(0),
data: "0x"
}
])
})
const clients: Client<Transport, Chain, SmartAccount>[] = [
{
...sepoliaZerodevKernelClient
},
{
...optimismSepoliaZerodevKernelClient
}
]

const optimismSepoliaUserOp =
await optimismSepoliaZerodevKernelClient.prepareUserOperation({
callData: await optimismSepoliaKernelAccount.encodeCalls([
{
to: zeroAddress,
value: BigInt(0),
data: "0x"
}
])
const userOps = await Promise.all(
clients.map(async (client) => {
return {
callData: await client.account.encodeCalls([
{
to: zeroAddress,
value: BigInt(0),
data: "0x"
}
])
}
})
)

const signedEnableUserOps = await ecdsaSignUserOpsWithEnable({
multiChainUserOpConfigsForEnable: [
{
account: sepoliaKernelAccount,
userOp: sepoliaUserOp
},
{
account: optimismSepoliaKernelAccount,
userOp: optimismSepoliaUserOp
}
]
})
const userOpParams: SendUserOperationsParameters[] = [
{
...userOps[0],
chainId: sepolia.id
},
{
...userOps[1],
chainId: optimismSepolia.id
}
]

const sepoliaUserOpHash =
await sepoliaZerodevKernelClient.sendUserOperation({
...signedEnableUserOps[0]
})
const userOpHashes = await sendUserOperations(clients, userOpParams)

console.log("userOpHashes", userOpHashes)

const sepoliaUserOpHash = userOpHashes[0]

console.log("sepoliaUserOpHash", sepoliaUserOpHash)
await sepoliaZerodevKernelClient.waitForUserOperationReceipt({
hash: sepoliaUserOpHash
})

const optimismSepoliaUserOpHash =
await optimismSepoliaZerodevKernelClient.sendUserOperation({
...signedEnableUserOps[1]
})
const optimismSepoliaUserOpHash = userOpHashes[1]

console.log("optimismSepoliaUserOpHash", optimismSepoliaUserOpHash)
await optimismSepoliaZerodevKernelClient.waitForUserOperationReceipt(
Expand Down
2 changes: 1 addition & 1 deletion packages/test/v0.7/utils/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export const Test_ERC20Address = "0x3870419Ba2BBf0127060bCB37f69A1b1C090992B"
const testingChain = allChains.sepolia.id
export const kernelVersion = "0.3.1"
export const index = 11111111111111111n // 432334375434333332434365532464445487823332432423423n
const DEFAULT_PROVIDER = "ALCHEMY"
const DEFAULT_PROVIDER = "PIMLICO"
const projectId = config["0.7"][testingChain].projectId

export const getEntryPoint = (): {
Expand Down
Loading