diff --git a/.eslintignore b/.eslintignore index 53bb867ee8..bdeea5f1cf 100644 --- a/.eslintignore +++ b/.eslintignore @@ -6,6 +6,7 @@ site/.vitepress/cache/**/* /examples/* !/examples/ui-demo +/examples/ui-demo/contracts /examples/ui-demo/.next/* **/.turbo/* diff --git a/.vitest/package.json b/.vitest/package.json index fe39e5a084..7b14c02990 100644 --- a/.vitest/package.json +++ b/.vitest/package.json @@ -9,9 +9,9 @@ "prool": "^0.0.15", "tar": "^7.4.1", "typescript-template": "*", - "viem": "2.20.0" + "viem": "2.22.6" }, "dependencies": { "@aa-sdk/core": "^4.0.0-alpha.8" } -} +} \ No newline at end of file diff --git a/aa-sdk/core/package.json b/aa-sdk/core/package.json index f2e45bcf4d..a467a349ee 100644 --- a/aa-sdk/core/package.json +++ b/aa-sdk/core/package.json @@ -54,7 +54,7 @@ "zod": "^3.22.4" }, "peerDependencies": { - "viem": "^2.20.0" + "viem": "^2.22.6" }, "repository": { "type": "git", @@ -65,4 +65,4 @@ }, "homepage": "https://github.com/alchemyplatform/aa-sdk#readme", "gitHead": "ee46e8bb857de3b631044fa70714ea706d9e317d" -} +} \ No newline at end of file diff --git a/aa-sdk/core/src/middleware/defaults/7702signer.ts b/aa-sdk/core/src/middleware/defaults/7702signer.ts index 805c46c8bb..5b79bcd9ed 100644 --- a/aa-sdk/core/src/middleware/defaults/7702signer.ts +++ b/aa-sdk/core/src/middleware/defaults/7702signer.ts @@ -60,17 +60,13 @@ export const default7702UserOpSigner: ClientMiddlewareFn = async ( r, s, v, - yParity = v, + yParity = v ? v - 27n : undefined, } = await signer.signAuthorization({ chainId: client.chain.id, contractAddress: implAddress, nonce: accountNonce, }); - if (!yParity) { - throw new Error("incomplete signature!"); - } - return { ...uo, authorizationTuple: { diff --git a/aa-sdk/ethers/package.json b/aa-sdk/ethers/package.json index 8f85340d36..6a89d17a11 100644 --- a/aa-sdk/ethers/package.json +++ b/aa-sdk/ethers/package.json @@ -60,7 +60,7 @@ "@ethersproject/wallet": "^5.7.0" }, "peerDependencies": { - "viem": "^2.20.0" + "viem": "^2.22.6" }, "repository": { "type": "git", @@ -70,4 +70,4 @@ "url": "https://github.com/alchemyplatform/aa-sdk/issues" }, "gitHead": "ee46e8bb857de3b631044fa70714ea706d9e317d" -} +} \ No newline at end of file diff --git a/account-kit/core/package.json b/account-kit/core/package.json index 8b8393ded9..037c5707b4 100644 --- a/account-kit/core/package.json +++ b/account-kit/core/package.json @@ -54,7 +54,7 @@ "zustand": "^5.0.0-rc.2" }, "peerDependencies": { - "viem": "^2.20.0", + "viem": "^2.22.6", "wagmi": "^2.12.7" }, "publishConfig": { @@ -73,4 +73,4 @@ "optionalDependencies": { "alchemy-sdk": "^3.0.0" } -} +} \ No newline at end of file diff --git a/account-kit/infra/package.json b/account-kit/infra/package.json index 2912b185b3..1cf5c07545 100644 --- a/account-kit/infra/package.json +++ b/account-kit/infra/package.json @@ -50,7 +50,7 @@ "zod": "^3.22.4" }, "peerDependencies": { - "viem": "^2.20.0" + "viem": "^2.22.6" }, "publishConfig": { "access": "public", @@ -68,4 +68,4 @@ "optionalDependencies": { "alchemy-sdk": "^3.0.0" } -} +} \ No newline at end of file diff --git a/account-kit/plugingen/package.json b/account-kit/plugingen/package.json index ee59eda39a..a2bf76d1c2 100644 --- a/account-kit/plugingen/package.json +++ b/account-kit/plugingen/package.json @@ -76,6 +76,6 @@ "zod": "^3.22.4" }, "peerDependencies": { - "viem": "^2.20.0" + "viem": "^2.22.6" } -} +} \ No newline at end of file diff --git a/account-kit/react/package.json b/account-kit/react/package.json index f4c449b689..0ce5a55dd3 100644 --- a/account-kit/react/package.json +++ b/account-kit/react/package.json @@ -84,11 +84,11 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "tailwindcss": "^3.4.3", - "viem": "^2.20.0", + "viem": "^2.22.6", "wagmi": "^2.12.7" }, "resolutions": { - "viem": "2.20.0" + "viem": "2.22.6" }, "publishConfig": { "access": "public", diff --git a/account-kit/signer/package.json b/account-kit/signer/package.json index 911cadd005..b161c33bec 100644 --- a/account-kit/signer/package.json +++ b/account-kit/signer/package.json @@ -58,7 +58,7 @@ "zod": "^3.22.4" }, "peerDependencies": { - "viem": "^2.20.0" + "viem": "^2.22.6" }, "publishConfig": { "access": "public", @@ -73,4 +73,4 @@ }, "homepage": "https://github.com/alchemyplatform/aa-sdk#readme", "gitHead": "ee46e8bb857de3b631044fa70714ea706d9e317d" -} +} \ No newline at end of file diff --git a/account-kit/smart-contracts/package.json b/account-kit/smart-contracts/package.json index 2f5127ff58..1e1845ccb0 100644 --- a/account-kit/smart-contracts/package.json +++ b/account-kit/smart-contracts/package.json @@ -77,6 +77,6 @@ "@account-kit/infra": "^4.8.0" }, "peerDependencies": { - "viem": "^2.20.0" + "viem": "^2.22.6" } } diff --git a/examples/ui-demo/package.json b/examples/ui-demo/package.json index 19af52f773..1ad2bc242e 100644 --- a/examples/ui-demo/package.json +++ b/examples/ui-demo/package.json @@ -34,7 +34,7 @@ "react-dom": "^18", "react-syntax-highlighter": "^15.5.0", "tailwind-merge": "^2.3.0", - "viem": "^2.20.0", + "viem": "^2.22.6", "wagmi": "^2.12.7", "zod": "^3.0.0", "zustand": "^5.0.0-rc.2" @@ -52,4 +52,4 @@ "tailwindcss-animate": "^1.0.7", "typescript": "^5" } -} +} \ No newline at end of file diff --git a/examples/ui-demo/src/app/api/rpc-mekong/[...routes]/route.ts b/examples/ui-demo/src/app/api/bundler-odyssey/[...routes]/route.ts similarity index 81% rename from examples/ui-demo/src/app/api/rpc-mekong/[...routes]/route.ts rename to examples/ui-demo/src/app/api/bundler-odyssey/[...routes]/route.ts index f72b3891f3..059d4059b4 100644 --- a/examples/ui-demo/src/app/api/rpc-mekong/[...routes]/route.ts +++ b/examples/ui-demo/src/app/api/bundler-odyssey/[...routes]/route.ts @@ -12,7 +12,9 @@ export async function POST( }); const res = await fetch( - `https://rpc.mekong.ethpandaops.io/${params.routes.join("/")}`, + `http://internal-rundler-odyssey-prod-alb-567331340.us-east-1.elb.amazonaws.com:3000/${params.routes.join( + "/" + )}`, { method: "POST", body, diff --git a/examples/ui-demo/src/app/api/rpc-mekong/route.ts b/examples/ui-demo/src/app/api/bundler-odyssey/route.ts similarity index 71% rename from examples/ui-demo/src/app/api/rpc-mekong/route.ts rename to examples/ui-demo/src/app/api/bundler-odyssey/route.ts index 5203e17753..d26f19f51f 100644 --- a/examples/ui-demo/src/app/api/rpc-mekong/route.ts +++ b/examples/ui-demo/src/app/api/bundler-odyssey/route.ts @@ -10,13 +10,16 @@ export async function POST(req: NextRequest) { headers[key] = value; }); - const res = await fetch("https://rpc.mekong.ethpandaops.io", { - method: "POST", - headers: { - ...headers, - }, - body, - }); + const res = await fetch( + "http://internal-rundler-odyssey-prod-alb-567331340.us-east-1.elb.amazonaws.com:3000", + { + method: "POST", + headers: { + ...headers, + }, + body, + } + ); if (!res.ok) { return NextResponse.json(await res.json().catch((e) => ({})), { diff --git a/examples/ui-demo/src/app/page.tsx b/examples/ui-demo/src/app/page.tsx index d88304c44a..09754cd6c5 100644 --- a/examples/ui-demo/src/app/page.tsx +++ b/examples/ui-demo/src/app/page.tsx @@ -140,7 +140,6 @@ export default function Home() { isEOAUser={isEOAUser} isSmartWallet={walletType === WalletTypes.smart} /> - {user && !isEOAUser && } diff --git a/examples/ui-demo/src/components/shared/7702/Debug7702Button.tsx b/examples/ui-demo/src/components/shared/7702/Debug7702Button.tsx index 744bb7627c..3eaf1c2886 100644 --- a/examples/ui-demo/src/components/shared/7702/Debug7702Button.tsx +++ b/examples/ui-demo/src/components/shared/7702/Debug7702Button.tsx @@ -5,12 +5,12 @@ import { Button } from "../Button"; // useSmartAccountClient, // } from "@account-kit/react"; import { privateKeyToAccount } from "viem/accounts"; -import { createPublicClient } from "viem"; +import { createPublicClient, toRlp, fromRlp } from "viem"; import { createBundlerClientFromExisting, LocalAccountSigner, } from "@aa-sdk/core"; -import { mekong, splitMekongTransport } from "./transportSetup"; +import { odyssey, splitOdysseyTransport } from "./transportSetup"; import { send7702UO } from "./demoSend7702UO"; import { useSigner } from "@account-kit/react"; @@ -23,8 +23,8 @@ export const Debug7702Button = () => { const runFunc = async (local: boolean) => { const publicClient = createPublicClient({ - chain: mekong, - transport: splitMekongTransport, + chain: odyssey, + transport: splitOdysseyTransport, }); // console.log("reported chain id: ", await publicClient.getChainId()); @@ -61,7 +61,7 @@ export const Debug7702Button = () => { send7702UO( bundlerClient, - splitMekongTransport, + splitOdysseyTransport, new LocalAccountSigner(localAccount) ); } else { @@ -69,17 +69,59 @@ export const Debug7702Button = () => { console.error("No signer found"); return; } - send7702UO(bundlerClient, splitMekongTransport, signer); + send7702UO(bundlerClient, splitOdysseyTransport, signer); } }; const runLocal = () => runFunc(true); const runSigner = () => runFunc(false); + const rlpEncode = () => { + const chain_id = "0xde9fb"; + const address = "0x69007702764179f14f51cdce752f4f775d74e139"; + const nonce = "0x"; + const yParity = "0x1c"; + const r = + "0x2943f6154757e02a7c8264f9c2f79fac321beef60578746c61eb84a5fc4525d7"; + const s = + "0x6a23e53538e028c06f5b149e33424ea11358eecec44ecd8819fbf67ceb03a957"; + + // // result: 0xf85d830de9fb9469007702764179f14f51cdce752f4f775d74e1390001a02943f6154757e02a7c8264f9c2f79fac321beef60578746c61eb84a5fc4525d7a06a23e53538e028c06f5b149e33424ea11358eecec44ecd8819fbf67ceb03a957 + // // result 2: 0xf85ff85d830de9fb9469007702764179f14f51cdce752f4f775d74e1390001a02943f6154757e02a7c8264f9c2f79fac321beef60578746c61eb84a5fc4525d7a06a23e53538e028c06f5b149e33424ea11358eecec44ecd8819fbf67ceb03a957 + // // ext result: 0xf85d830de9fb9470d37dc45141e10c42f27e432458218ed4e1aab78080a084039480ba511822433b50a1dea5738e7a946ba187172c02f00076e4a87545a1a001dc4c5f78b6c81f5a695ee8725346a45bf9d1d1f7c1437532efd31a9769fda5 + + // const chain_id = "0xde9fb"; + // const address = "0x69007702764179f14f51cdce752f4f775d74e139"; + // const nonce = "0x0"; + // const yParity = "0x1c"; + // const r = "0x2943f6154757e02a7c8264f9c2f79fac321beef60578746c61eb84a5fc4525d7"; + // const s = "0x6a23e53538e028c06f5b149e33424ea11358eecec44ecd8819fbf67ceb03a957"; + + // // result: 0xf85d830de9fb9469007702764179f14f51cdce752f4f775d74e139001ca02943f6154757e02a7c8264f9c2f79fac321beef60578746c61eb84a5fc4525d7a06a23e53538e028c06f5b149e33424ea11358eecec44ecd8819fbf67ceb03a957 + + const encoded = toRlp([chain_id, address, nonce, yParity, r, s]); + + console.log("encoded: ", encoded); + }; + + const rlpDecode = () => { + // const input = "0xf85d830de9fb9470d37dc45141e10c42f27e432458218ed4e1aab78080a084039480ba511822433b50a1dea5738e7a946ba187172c02f00076e4a87545a1a001dc4c5f78b6c81f5a695ee8725346a45bf9d1d1f7c1437532efd31a9769fda5"; + + // From cast sign-auth with the local pkey + const input = + "0xf85d830de9fb9469007702764179f14f51cdce752f4f775d74e1398080a07e650c48b0033a147681165efb7fe9b6195f64f41f71f4b8e503657fd57c3609a00ad5d521d5bbfdcda9d3b9d7b9790cd6ed695d7d63ec08ef49de9631ea0e9b25"; + + // result: + + console.log(fromRlp(input)); + }; + return (
+ +
); }; diff --git a/examples/ui-demo/src/components/shared/7702/Wrapper.tsx b/examples/ui-demo/src/components/shared/7702/Wrapper.tsx index 6cfe87382a..e063c6bbd0 100644 --- a/examples/ui-demo/src/components/shared/7702/Wrapper.tsx +++ b/examples/ui-demo/src/components/shared/7702/Wrapper.tsx @@ -3,6 +3,7 @@ import { MintCard7702 } from "./MintCard7702"; import { TransactionsCard } from "./TransactionsCard"; import { useMint } from "./useMint"; import { useTransactions } from "./useTransaction"; +import { Debug7702Button } from "./Debug7702Button"; export const Wrapper7702 = () => { const { @@ -35,6 +36,7 @@ export const Wrapper7702 = () => { transactions={transactions} handleTransactions={handleTransactions} /> + ); }; diff --git a/examples/ui-demo/src/components/shared/7702/dca/abi/erc20Mintable.ts b/examples/ui-demo/src/components/shared/7702/dca/abi/erc20Mintable.ts new file mode 100644 index 0000000000..807101ac4c --- /dev/null +++ b/examples/ui-demo/src/components/shared/7702/dca/abi/erc20Mintable.ts @@ -0,0 +1,344 @@ +export const erc20MintableAbi = [ + { + type: "constructor", + inputs: [ + { + name: "name", + type: "string", + internalType: "string", + }, + { + name: "symbol", + type: "string", + internalType: "string", + }, + ], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "allowance", + inputs: [ + { + name: "owner", + type: "address", + internalType: "address", + }, + { + name: "spender", + type: "address", + internalType: "address", + }, + ], + outputs: [ + { + name: "", + type: "uint256", + internalType: "uint256", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "approve", + inputs: [ + { + name: "spender", + type: "address", + internalType: "address", + }, + { + name: "value", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "balanceOf", + inputs: [ + { + name: "account", + type: "address", + internalType: "address", + }, + ], + outputs: [ + { + name: "", + type: "uint256", + internalType: "uint256", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "decimals", + inputs: [], + outputs: [ + { + name: "", + type: "uint8", + internalType: "uint8", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "mint", + inputs: [ + { + name: "to", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "name", + inputs: [], + outputs: [ + { + name: "", + type: "string", + internalType: "string", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "symbol", + inputs: [], + outputs: [ + { + name: "", + type: "string", + internalType: "string", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "totalSupply", + inputs: [], + outputs: [ + { + name: "", + type: "uint256", + internalType: "uint256", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "transfer", + inputs: [ + { + name: "to", + type: "address", + internalType: "address", + }, + { + name: "value", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "transferFrom", + inputs: [ + { + name: "from", + type: "address", + internalType: "address", + }, + { + name: "to", + type: "address", + internalType: "address", + }, + { + name: "value", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "nonpayable", + }, + { + type: "event", + name: "Approval", + inputs: [ + { + name: "owner", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "spender", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "value", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Transfer", + inputs: [ + { + name: "from", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "to", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "value", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + ], + anonymous: false, + }, + { + type: "error", + name: "ERC20InsufficientAllowance", + inputs: [ + { + name: "spender", + type: "address", + internalType: "address", + }, + { + name: "allowance", + type: "uint256", + internalType: "uint256", + }, + { + name: "needed", + type: "uint256", + internalType: "uint256", + }, + ], + }, + { + type: "error", + name: "ERC20InsufficientBalance", + inputs: [ + { + name: "sender", + type: "address", + internalType: "address", + }, + { + name: "balance", + type: "uint256", + internalType: "uint256", + }, + { + name: "needed", + type: "uint256", + internalType: "uint256", + }, + ], + }, + { + type: "error", + name: "ERC20InvalidApprover", + inputs: [ + { + name: "approver", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "ERC20InvalidReceiver", + inputs: [ + { + name: "receiver", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "ERC20InvalidSender", + inputs: [ + { + name: "sender", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "ERC20InvalidSpender", + inputs: [ + { + name: "spender", + type: "address", + internalType: "address", + }, + ], + }, +] as const; diff --git a/examples/ui-demo/src/components/shared/7702/dca/abi/swap.ts b/examples/ui-demo/src/components/shared/7702/dca/abi/swap.ts new file mode 100644 index 0000000000..365b7d0c17 --- /dev/null +++ b/examples/ui-demo/src/components/shared/7702/dca/abi/swap.ts @@ -0,0 +1,87 @@ +export const swapAbi = [ + { + type: "constructor", + inputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "mint", + inputs: [ + { + name: "amount1", + type: "uint256", + internalType: "uint256", + }, + { + name: "amount2", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "swapUSDCtoWETH", + inputs: [ + { + name: "amountIn", + type: "uint256", + internalType: "uint256", + }, + { + name: "amountOut", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "swapWETHtoUSDC", + inputs: [ + { + name: "amountIn", + type: "uint256", + internalType: "uint256", + }, + { + name: "amountOut", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "usdc", + inputs: [], + outputs: [ + { + name: "", + type: "address", + internalType: "contract ERC20Mintable", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "weth", + inputs: [], + outputs: [ + { + name: "", + type: "address", + internalType: "contract ERC20Mintable", + }, + ], + stateMutability: "view", + }, +] as const; diff --git a/examples/ui-demo/src/components/shared/7702/dca/sessionKeyInit.ts b/examples/ui-demo/src/components/shared/7702/dca/sessionKeyInit.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/examples/ui-demo/src/components/shared/7702/demoSend7702UO.ts b/examples/ui-demo/src/components/shared/7702/demoSend7702UO.ts index c79537c966..4547f19176 100644 --- a/examples/ui-demo/src/components/shared/7702/demoSend7702UO.ts +++ b/examples/ui-demo/src/components/shared/7702/demoSend7702UO.ts @@ -2,11 +2,11 @@ import { zeroAddress, type PublicClient } from "viem"; import { type SmartAccountSigner, type BundlerClient } from "@aa-sdk/core"; -import { type AlchemyTransport } from "@account-kit/infra"; +import { alchemyFeeEstimator, type AlchemyTransport } from "@account-kit/infra"; import { createSMA7702AccountClient } from "@account-kit/smart-contracts/experimental"; -import { mekong } from "./transportSetup"; +import { odyssey } from "./transportSetup"; export const send7702UO = async ( client: PublicClient & BundlerClient, @@ -19,9 +19,10 @@ export const send7702UO = async ( ); const accountClient = await createSMA7702AccountClient({ - chain: mekong, + chain: odyssey, transport, signer, + feeEstimator: alchemyFeeEstimator(transport), }); const uoHash = await accountClient.sendUserOperation({ @@ -30,10 +31,20 @@ export const send7702UO = async ( data: "0x", value: BigInt(0), }, + overrides: { + maxFeePerGas: { + multiplier: 1.5, + }, + maxPriorityFeePerGas: { + multiplier: 1.5, + }, + }, }); const txnHash = await accountClient.waitForUserOperationTransaction(uoHash); - // const txnHash = await accountClient.waitForUserOperationTransaction({ hash: "0x4115f6006e0418bdaf42d71f124a31be50f473aeacc2915638c97a6a1d3a8750" }); + // const txnHash = await accountClient.waitForUserOperationTransaction({ + // hash: "0xc0752298b3d149e973974d14c4598d354e71e822db7600de28efb637ab03325c", + // }); console.log("txnHash: ", txnHash); }; diff --git a/examples/ui-demo/src/components/shared/7702/transportSetup.ts b/examples/ui-demo/src/components/shared/7702/transportSetup.ts index 6960f0350a..62022476f0 100644 --- a/examples/ui-demo/src/components/shared/7702/transportSetup.ts +++ b/examples/ui-demo/src/components/shared/7702/transportSetup.ts @@ -2,22 +2,43 @@ import type { Chain } from "viem"; import { defineChain } from "viem"; import { alchemy } from "@account-kit/infra"; -export const mekong: Chain = defineChain({ - id: 7078815900, - name: "Mekong Pectra Devnet", +// export const mekong: Chain = defineChain({ +// id: 7078815900, +// name: "Mekong Pectra Devnet", +// nativeCurrency: { name: "eth", symbol: "eth", decimals: 18 }, +// rpcUrls: { +// default: { +// http: ["https://rpc.mekong.ethpandaops.io"], +// }, +// alchemy: { +// http: ["https://rpc.mekong.ethpandaops.io"], +// }, +// }, +// blockExplorers: { +// default: { +// name: "Block Explorer", +// url: "https://explorer.mekong.ethpandaops.io", +// }, +// }, +// testnet: true, +// }); + +export const odyssey: Chain = defineChain({ + id: 911867, + name: "Odyssey", nativeCurrency: { name: "eth", symbol: "eth", decimals: 18 }, rpcUrls: { default: { - http: ["https://rpc.mekong.ethpandaops.io"], + http: ["https://odyssey.ithaca.xyz"], }, alchemy: { - http: ["https://rpc.mekong.ethpandaops.io"], + http: ["https://odyssey.ithaca.xyz"], }, }, blockExplorers: { default: { name: "Block Explorer", - url: "https://explorer.mekong.ethpandaops.io", + url: "https://odyssey-explorer.ithaca.xyz/", }, }, testnet: true, @@ -42,10 +63,17 @@ export const mekong: Chain = defineChain({ // fallback: http("/api/rpc-mekong"), // }) -export const splitMekongTransport = alchemy({ +// export const splitMekongTransport = alchemy({ +// alchemyConnection: { +// rpcUrl: +// "https://eth-mekong.g.alchemypreview.com/v2/HjEy_lTrJ0P2Y8BRFhAHm_1dVc0svdme", +// }, +// nodeRpcUrl: "/api/rpc-mekong", +// }); + +export const splitOdysseyTransport = alchemy({ alchemyConnection: { - rpcUrl: - "https://eth-mekong.g.alchemypreview.com/v2/HjEy_lTrJ0P2Y8BRFhAHm_1dVc0svdme", + rpcUrl: "/api/bundler-odyssey", }, - nodeRpcUrl: "/api/rpc-mekong", + nodeRpcUrl: "https://odyssey.ithaca.xyz", }); diff --git a/package.json b/package.json index 21d4b67145..a18d0034de 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ }, "resolutions": { "wagmi": "2.12.7", - "viem": "2.20.0" + "viem": "2.22.6" }, "scripts": { "generate": "turbo run generate", @@ -83,7 +83,7 @@ "prool": "^0.0.15", "tsx": "^4.19.2", "turbo": "^2.2.3", - "viem": "2.20.0", + "viem": "2.22.6", "vitest": "^2.0.4", "wagmi": "2.12.7", "webauthn-p256": "^0.0.10" @@ -104,4 +104,4 @@ "yarn lint:write" ] } -} +} \ No newline at end of file diff --git a/site/package.json b/site/package.json index 267bfc104e..f6f04ce657 100644 --- a/site/package.json +++ b/site/package.json @@ -31,8 +31,8 @@ "react": "^18.2.0", "react-native": "0.76.5", "react-dom": "^18.2.0", - "viem": "2.20.0", + "viem": "2.22.6", "vocs": "^1.0.0-alpha.62", "wagmi": "2.12.7" } -} +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 00390a71a7..ee359b75fc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17,10 +17,10 @@ resolved "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.0.tgz" integrity sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ== -"@adraffy/ens-normalize@1.10.0": - version "1.10.0" - resolved "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz" - integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== +"@adraffy/ens-normalize@^1.10.1": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.11.0.tgz#42cc67c5baa407ac25059fcd7d405cc5ecdb0c33" + integrity sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg== "@alloc/quick-lru@^5.2.0": version "5.2.0" @@ -4748,12 +4748,12 @@ dependencies: "@noble/hashes" "1.3.1" -"@noble/curves@1.4.0": - version "1.4.0" - resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.4.0.tgz" - integrity sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg== +"@noble/curves@1.7.0", "@noble/curves@~1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.7.0.tgz#0512360622439256df892f21d25b388f52505e45" + integrity sha512-UTMhXK9SeDhFJVrHeUJ5uZlI6ajXg10O6Ddocf9S6GjbSBVZsJo88HzKwXznNfGpMTRDyJkqMjNDPYgf0qFWnw== dependencies: - "@noble/hashes" "1.4.0" + "@noble/hashes" "1.6.0" "@noble/curves@^1.3.0": version "1.3.0" @@ -4769,12 +4769,12 @@ dependencies: "@noble/hashes" "1.4.0" -"@noble/curves@~1.4.0": - version "1.4.2" - resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz" - integrity sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw== +"@noble/curves@^1.6.0", "@noble/curves@~1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.0.tgz#fe035a23959e6aeadf695851b51a87465b5ba8f7" + integrity sha512-j84kjAbzEnQHaSIhRPUmB3/eVXu2k3dKPl2LOrR8fSOIL+89U+7lV117EWHtq/GHM3ReGHM46iRBdZfpc4HRUQ== dependencies: - "@noble/hashes" "1.4.0" + "@noble/hashes" "1.7.0" "@noble/hashes@1.3.1": version "1.3.1" @@ -4786,11 +4786,26 @@ resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz" integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== -"@noble/hashes@1.4.0", "@noble/hashes@^1.3.1", "@noble/hashes@^1.3.2", "@noble/hashes@^1.4.0", "@noble/hashes@~1.4.0": +"@noble/hashes@1.4.0", "@noble/hashes@^1.3.1", "@noble/hashes@^1.3.2", "@noble/hashes@^1.4.0": version "1.4.0" resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz" integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== +"@noble/hashes@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.6.0.tgz#d4bfb516ad6e7b5111c216a5cc7075f4cf19e6c5" + integrity sha512-YUULf0Uk4/mAA89w+k3+yUYh6NrEvxZa5T6SY3wlMvE2chHkxFUUIDI8/XW1QSC357iA5pSnqt7XEhvFOqmDyQ== + +"@noble/hashes@1.6.1", "@noble/hashes@~1.6.0": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.6.1.tgz#df6e5943edcea504bac61395926d6fd67869a0d5" + integrity sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w== + +"@noble/hashes@1.7.0", "@noble/hashes@~1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.0.tgz#5d9e33af2c7d04fee35de1519b80c958b2e35e39" + integrity sha512-HXydb0DgzTpDPwbVeDGCG1gIu7X6+AuU6Zl6av/E/KG8LMsvPntvq+w17CHRpKBmN6Ybdrt1eP3k4cj8DJa78w== + "@noble/hashes@^1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.5.0.tgz#abadc5ca20332db2b1b2aa3e496e9af1213570b0" @@ -6768,10 +6783,10 @@ resolved "https://registry.npmjs.org/@scure/base/-/base-1.1.4.tgz" integrity sha512-wznebWtt+ejH8el87yuD4i9xLSbYZXf1Pe4DY0o/zq/eg5I0VQVXVbFs6XIM0pNVCJ/uE3t5wI9kh90mdLUxtw== -"@scure/base@~1.1.6": - version "1.1.7" - resolved "https://registry.npmjs.org/@scure/base/-/base-1.1.7.tgz" - integrity sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g== +"@scure/base@~1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.1.tgz#dd0b2a533063ca612c17aa9ad26424a2ff5aa865" + integrity sha512-DGmGtC8Tt63J5GfHgfl5CuAXh96VF/LD8K9Hr/Gv0J2lAoRGlPOMpqMpMbCTOoOJMZCk2Xt+DskdDyn6dEFdzQ== "@scure/bip32@1.3.1": version "1.3.1" @@ -6782,14 +6797,23 @@ "@noble/hashes" "~1.3.1" "@scure/base" "~1.1.0" -"@scure/bip32@1.4.0": - version "1.4.0" - resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz" - integrity sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg== +"@scure/bip32@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.6.0.tgz#6dbc6b4af7c9101b351f41231a879d8da47e0891" + integrity sha512-82q1QfklrUUdXJzjuRU7iG7D7XiFx5PHYVS0+oeNKhyDLT7WPqs6pBcM2W5ZdwOwKCwoE1Vy1se+DHjcXwCYnA== + dependencies: + "@noble/curves" "~1.7.0" + "@noble/hashes" "~1.6.0" + "@scure/base" "~1.2.1" + +"@scure/bip32@^1.5.0": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.6.1.tgz#848eca1bc96f6b5ce6aa750798853fb142dace05" + integrity sha512-jSO+5Ud1E588Y+LFo8TaB8JVPNAZw/lGGao+1SepHDeTs2dFLurdNIAgUuDlwezqEjRjElkCJajVrtrZaBxvaQ== dependencies: - "@noble/curves" "~1.4.0" - "@noble/hashes" "~1.4.0" - "@scure/base" "~1.1.6" + "@noble/curves" "~1.8.0" + "@noble/hashes" "~1.7.0" + "@scure/base" "~1.2.1" "@scure/bip39@1.2.1": version "1.2.1" @@ -6799,13 +6823,21 @@ "@noble/hashes" "~1.3.0" "@scure/base" "~1.1.0" -"@scure/bip39@1.3.0": - version "1.3.0" - resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz" - integrity sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ== +"@scure/bip39@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.5.0.tgz#c8f9533dbd787641b047984356531d84485f19be" + integrity sha512-Dop+ASYhnrwm9+HA/HwXg7j2ZqM6yk2fyLWb5znexjctFY3+E+eU8cIWI0Pql0Qx4hPZCijlGq4OL71g+Uz30A== + dependencies: + "@noble/hashes" "~1.6.0" + "@scure/base" "~1.2.1" + +"@scure/bip39@^1.4.0": + version "1.5.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.5.1.tgz#a056868d672c7203a6035c808893742a79e151f6" + integrity sha512-GnlufVSP9UdAo/H2Patfv22VTtpNTyfi+I3qCKpvuB5l1KWzEYx+l2TNpBy9Ksh4xTs3Rn06tBlpWCi/1Vz8gw== dependencies: - "@noble/hashes" "~1.4.0" - "@scure/base" "~1.1.6" + "@noble/hashes" "~1.7.0" + "@scure/base" "~1.2.1" "@sec-ant/readable-stream@^0.4.1": version "0.4.1" @@ -9976,16 +10008,21 @@ abbrev@^2.0.0: resolved "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz" integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== -abitype@1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/abitype/-/abitype-1.0.5.tgz" - integrity sha512-YzDhti7cjlfaBhHutMaboYB21Ha3rXR9QTkNJFzYC4kC8YclaiwPBBBJY8ejFdu2wnJeZCVZSMlQJ7fi8S6hsw== +abitype@1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.7.tgz#876a0005d211e1c9132825d45bcee7b46416b284" + integrity sha512-ZfYYSktDQUwc2eduYu8C4wOs+RDPmnRYMh7zNfzeMtGGgb0U+6tLGjixUic6mXf5xKKCcgT5Qp6cv39tOARVFw== abitype@^0.8.3: version "0.8.11" resolved "https://registry.npmjs.org/abitype/-/abitype-0.8.11.tgz" integrity sha512-bM4v2dKvX08sZ9IU38IN5BKmN+ZkOSd2oI4a9f0ejHYZQYV6cDr7j+d95ga0z2XHG36Y4jzoG5Z7qDqxp7fi/A== +abitype@^1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.8.tgz#3554f28b2e9d6e9f35eb59878193eabd1b9f46ba" + integrity sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg== + abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" @@ -18032,10 +18069,10 @@ isobject@^3.0.1: resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -isows@1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/isows/-/isows-1.0.4.tgz" - integrity sha512-hEzjY+x9u9hPmBom9IIAqdJCwNLax+xrPb51vEPpERoFlIxgmZcHzsT5jKG06nvInKOBGvReAVz80Umed5CczQ== +isows@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.6.tgz#0da29d706fa51551c663c627ace42769850f86e7" + integrity sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw== issue-parser@6.0.0: version "6.0.0" @@ -22810,6 +22847,19 @@ outvariant@^1.4.0, outvariant@^1.4.2, outvariant@^1.4.3: resolved "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz" integrity sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA== +ox@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/ox/-/ox-0.6.0.tgz#ba8f89d68b5e8afe717c8a947ffacc0669ea155d" + integrity sha512-blUzTLidvUlshv0O02CnLFqBLidNzPoAZdIth894avUAotTuWziznv6IENv5idRuOSSP3dH8WzcYw84zVdu0Aw== + dependencies: + "@adraffy/ens-normalize" "^1.10.1" + "@noble/curves" "^1.6.0" + "@noble/hashes" "^1.5.0" + "@scure/bip32" "^1.5.0" + "@scure/bip39" "^1.4.0" + abitype "^1.0.6" + eventemitter3 "5.0.1" + p-cancelable@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" @@ -28383,20 +28433,20 @@ vfile@^6.0.0, vfile@^6.0.1: unist-util-stringify-position "^4.0.0" vfile-message "^4.0.0" -viem@2.20.0, viem@^2.1.1, viem@^2.20.0, viem@^2.21.40, viem@^2.21.41: - version "2.20.0" - resolved "https://registry.npmjs.org/viem/-/viem-2.20.0.tgz" - integrity sha512-cM4vs81HnSNbfceI1MLkx4pCVzbVjl9xiNSv5SCutYjUyFFOVSPDlEyhpg2iHinxx1NM4Qne3END5eLT8rvUdg== - dependencies: - "@adraffy/ens-normalize" "1.10.0" - "@noble/curves" "1.4.0" - "@noble/hashes" "1.4.0" - "@scure/bip32" "1.4.0" - "@scure/bip39" "1.3.0" - abitype "1.0.5" - isows "1.0.4" - webauthn-p256 "0.0.5" - ws "8.17.1" +viem@2.22.6, viem@^2.1.1, viem@^2.21.40, viem@^2.21.41, viem@^2.22.6: + version "2.22.6" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.22.6.tgz#724c66caed2c8bfd73748f099131e60d392e26ef" + integrity sha512-wbru5XP0Aa2QskBrZsv7VOriqRnAKn0tahs957xRPOM00ABN4AGAY9xM16UvIq+giRJU6oahXDhPrR1QaYymoA== + dependencies: + "@noble/curves" "1.7.0" + "@noble/hashes" "1.6.1" + "@scure/bip32" "1.6.0" + "@scure/bip39" "1.5.0" + abitype "1.0.7" + isows "1.0.6" + ox "0.6.0" + webauthn-p256 "0.0.10" + ws "8.18.0" vite-node@2.0.4: version "2.0.4" @@ -28636,17 +28686,9 @@ web-vitals@0.2.4: resolved "https://registry.npmjs.org/web-vitals/-/web-vitals-0.2.4.tgz" integrity sha512-6BjspCO9VriYy12z356nL6JBS0GYeEcA457YyRzD+dD6XYCQ75NKhcOHUMHentOE7OcVCIXXDvOm0jKFfQG2Gg== -webauthn-p256@0.0.5: - version "0.0.5" - resolved "https://registry.npmjs.org/webauthn-p256/-/webauthn-p256-0.0.5.tgz" - integrity sha512-drMGNWKdaixZNobeORVIqq7k5DsRC9FnG201K2QjeOoQLmtSDaSsVZdkg6n5jUALJKcAG++zBPJXmv6hy0nWFg== - dependencies: - "@noble/curves" "^1.4.0" - "@noble/hashes" "^1.4.0" - -webauthn-p256@^0.0.10: +webauthn-p256@0.0.10, webauthn-p256@^0.0.10: version "0.0.10" - resolved "https://registry.npmjs.org/webauthn-p256/-/webauthn-p256-0.0.10.tgz" + resolved "https://registry.yarnpkg.com/webauthn-p256/-/webauthn-p256-0.0.10.tgz#877e75abe8348d3e14485932968edf3325fd2fdd" integrity sha512-EeYD+gmIT80YkSIDb2iWq0lq2zbHo1CxHlQTeJ+KkCILWpVy3zASH3ByD4bopzfk0uCwXxLqKGLqp2W4O28VFA== dependencies: "@noble/curves" "^1.4.0" @@ -28974,10 +29016,10 @@ ws@7.4.6: resolved "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== -ws@8.17.1: - version "8.17.1" - resolved "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz" - integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== +ws@8.18.0, ws@^8.12.1, ws@^8.18.0, ws@^8.2.3: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== ws@^6.2.3: version "6.2.3" @@ -28996,11 +29038,6 @@ ws@^7.5.1: resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== -ws@^8.12.1, ws@^8.18.0, ws@^8.2.3: - version "8.18.0" - resolved "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz" - integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== - ws@~8.11.0: version "8.11.0" resolved "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz"