diff --git a/examples/call/commands/common.ts b/examples/call/commands/common.ts
new file mode 100644
index 00000000..396c290a
--- /dev/null
+++ b/examples/call/commands/common.ts
@@ -0,0 +1,105 @@
+import path from "path";
+import fs from "fs";
+import { ethers } from "ethers";
+import { Command } from "commander";
+import ZRC20ABI from "@zetachain/protocol-contracts/abi/ZRC20.sol/ZRC20.json";
+
+export const getAbi = (name: string) => {
+ const abiPath = path.resolve(
+ __dirname,
+ path.join("..", "artifacts", "contracts", `${name}.sol`, `${name}.json`)
+ );
+ return JSON.parse(fs.readFileSync(abiPath, "utf8"));
+};
+
+export const createRevertOptions = (options: {
+ abortAddress: string;
+ callOnRevert: boolean;
+ onRevertGasLimit: string;
+ revertAddress: string;
+ revertMessage: string;
+}) => {
+ return {
+ abortAddress: options.abortAddress,
+ callOnRevert: options.callOnRevert,
+ onRevertGasLimit: BigInt(options.onRevertGasLimit),
+ revertAddress: options.revertAddress,
+ revertMessage: ethers.hexlify(ethers.toUtf8Bytes(options.revertMessage)),
+ };
+};
+
+export const approveZRC20 = async (
+ zrc20Address: string,
+ contract: string,
+ amount: string,
+ signer: ethers.Wallet,
+ gasLimit?: number
+) => {
+ const zrc20 = new ethers.Contract(zrc20Address, ZRC20ABI.abi, signer);
+ const [gasZRC20, gasFee] = gasLimit
+ ? await zrc20.withdrawGasFeeWithGasLimit(gasLimit)
+ : await zrc20.withdrawGasFee();
+
+ const zrc20TransferTx = await zrc20.approve(contract, gasFee);
+ await zrc20TransferTx.wait();
+
+ const decimals = await zrc20.decimals();
+ if (gasZRC20 === zrc20.target) {
+ const targetTokenApprove = await zrc20.approve(
+ contract,
+ gasFee + ethers.parseUnits(amount, decimals)
+ );
+ await targetTokenApprove.wait();
+ } else {
+ const targetTokenApprove = await zrc20.approve(
+ contract,
+ ethers.parseUnits(amount, decimals)
+ );
+ await targetTokenApprove.wait();
+ const gasZRC20Contract = new ethers.Contract(
+ gasZRC20,
+ ZRC20ABI.abi,
+ signer
+ );
+ const gasFeeApprove = await gasZRC20Contract.approve(contract, gasFee);
+ await gasFeeApprove.wait();
+ }
+ return { decimals };
+};
+
+export const createCommand = (name: string) => {
+ return new Command(name)
+ .requiredOption(
+ "-c, --contract
",
+ "The address of the deployed contract"
+ )
+ .requiredOption(
+ "-r, --receiver ",
+ "The address of the receiver contract"
+ )
+ .option("--call-on-revert", "Whether to call on revert", false)
+ .option(
+ "--revert-address ",
+ "Revert address",
+ "0x0000000000000000000000000000000000000000"
+ )
+ .option(
+ "--abort-address ",
+ "Abort address",
+ "0x0000000000000000000000000000000000000000"
+ )
+ .option("--revert-message ", "Revert message", "0x")
+ .option(
+ "--on-revert-gas-limit ",
+ "Gas limit for revert tx",
+ "500000"
+ )
+ .option("-n, --name ", "Contract name")
+ .option(
+ "--rpc ",
+ "RPC endpoint",
+ "https://zetachain-athens-evm.blockpi.network/v1/rpc/public"
+ )
+ .option("--gas-limit ", "Gas limit for the transaction", "1000000")
+ .option("--private-key ", "Private key to sign the transaction");
+};
diff --git a/examples/call/commands/connected/call.ts b/examples/call/commands/connected/call.ts
new file mode 100644
index 00000000..e6ca4cc4
--- /dev/null
+++ b/examples/call/commands/connected/call.ts
@@ -0,0 +1,31 @@
+import { ethers } from "ethers";
+
+import { createCommand, createRevertOptions, getAbi } from "../common";
+
+const main = async (options: any) => {
+ const provider = new ethers.JsonRpcProvider(options.rpc);
+ const signer = new ethers.Wallet(options.privateKey, provider);
+
+ const message = ethers.AbiCoder.defaultAbiCoder().encode(
+ options.types,
+ options.values
+ );
+
+ const { abi } = getAbi(options.name);
+ const contract = new ethers.Contract(options.contract, abi, signer);
+
+ const tx = await contract.call(
+ options.receiver,
+ message,
+ createRevertOptions(options),
+ { gasLimit: options.gasLimit }
+ );
+ await tx.wait();
+
+ console.log(`✅ Transaction sent: ${tx.hash}`);
+};
+
+export const connectedCallCommand = createCommand("connected-call")
+ .requiredOption("-t, --types ", "Parameter types as JSON string")
+ .requiredOption("-v, --values ", "The values of the parameters")
+ .action(main);
diff --git a/examples/call/commands/connected/deposit.ts b/examples/call/commands/connected/deposit.ts
new file mode 100644
index 00000000..f124446e
--- /dev/null
+++ b/examples/call/commands/connected/deposit.ts
@@ -0,0 +1,24 @@
+import { ethers } from "ethers";
+
+import { createCommand, createRevertOptions, getAbi } from "../common";
+
+const main = async (options: any) => {
+ const provider = new ethers.JsonRpcProvider(options.rpc);
+ const signer = new ethers.Wallet(options.privateKey, provider);
+
+ const { abi } = getAbi(options.name);
+ const contract = new ethers.Contract(options.contract, abi, signer);
+
+ const tx = await contract.deposit(
+ options.receiver,
+ createRevertOptions(options),
+ { value: ethers.parseEther(options.amount), gasLimit: options.gasLimit }
+ );
+ await tx.wait();
+
+ console.log(`✅ Transaction sent: ${tx.hash}`);
+};
+
+export const connectedDepositCommand = createCommand("connected-deposit")
+ .requiredOption("-a, --amount ", "Amount to deposit")
+ .action(main);
diff --git a/examples/call/commands/connected/depositAndCall.ts b/examples/call/commands/connected/depositAndCall.ts
new file mode 100644
index 00000000..e861eb09
--- /dev/null
+++ b/examples/call/commands/connected/depositAndCall.ts
@@ -0,0 +1,34 @@
+import { ethers } from "ethers";
+
+import { createCommand, createRevertOptions, getAbi } from "../common";
+
+const main = async (options: any) => {
+ const provider = new ethers.JsonRpcProvider(options.rpc);
+ const signer = new ethers.Wallet(options.privateKey, provider);
+
+ const message = ethers.AbiCoder.defaultAbiCoder().encode(
+ options.types,
+ options.values
+ );
+
+ const { abi } = getAbi(options.name);
+ const contract = new ethers.Contract(options.contract, abi, signer);
+
+ const tx = await contract.depositAndCall(
+ options.receiver,
+ message,
+ createRevertOptions(options),
+ { value: ethers.parseEther(options.amount), gasLimit: options.gasLimit }
+ );
+ await tx.wait();
+
+ console.log(`✅ Transaction sent: ${tx.hash}`);
+};
+
+export const connectedDepositAndCallCommand = createCommand(
+ "connected-deposit-and-call"
+)
+ .requiredOption("-t, --types ", "Parameter types as JSON string")
+ .requiredOption("-v, --values ", "The values of the parameters")
+ .requiredOption("-a, --amount ", "Amount to deposit")
+ .action(main);
diff --git a/examples/call/commands/index.ts b/examples/call/commands/index.ts
new file mode 100755
index 00000000..0447ef09
--- /dev/null
+++ b/examples/call/commands/index.ts
@@ -0,0 +1,22 @@
+#!/usr/bin/env npx tsx
+import { Command } from "commander";
+
+import { connectedCallCommand } from "./connected/call";
+import { connectedDepositCommand } from "./connected/deposit";
+import { connectedDepositAndCallCommand } from "./connected/depositAndCall";
+import { universalCallCommand } from "./universal/call";
+import { universalWithdrawCommand } from "./universal/withdraw";
+import { universalWithdrawAndCallCommand } from "./universal/withdrawAndCall";
+
+const program = new Command()
+ .helpCommand(false)
+ .addCommand(connectedCallCommand)
+ .addCommand(connectedDepositCommand)
+ .addCommand(connectedDepositAndCallCommand)
+ .addCommand(universalCallCommand)
+ .addCommand(universalWithdrawCommand)
+ .addCommand(universalWithdrawAndCallCommand);
+
+if (require.main === module) program.parse();
+
+export default program;
diff --git a/examples/call/commands/universal/call.ts b/examples/call/commands/universal/call.ts
new file mode 100644
index 00000000..68f19df4
--- /dev/null
+++ b/examples/call/commands/universal/call.ts
@@ -0,0 +1,56 @@
+import { ethers } from "ethers";
+
+import { createCommand, createRevertOptions, getAbi } from "../common";
+import ZRC20ABI from "@zetachain/protocol-contracts/abi/ZRC20.sol/ZRC20.json";
+
+const main = async (options: any) => {
+ const provider = new ethers.JsonRpcProvider(options.rpc);
+ const signer = new ethers.Wallet(options.privateKey, provider);
+
+ const message = ethers.AbiCoder.defaultAbiCoder().encode(
+ options.types,
+ options.values
+ );
+
+ const functionSignature = ethers.id(options.function).slice(0, 10);
+
+ const payload = ethers.hexlify(ethers.concat([functionSignature, message]));
+
+ const { abi } = getAbi(options.name);
+ const contract = new ethers.Contract(options.contract, abi, signer);
+
+ const zrc20 = new ethers.Contract(options.zrc20, ZRC20ABI.abi, signer);
+ const [, gasFee] = await zrc20.withdrawGasFeeWithGasLimit(
+ options.callOptionsGasLimit
+ );
+ const zrc20TransferTx = await zrc20.approve(options.contract, gasFee);
+
+ await zrc20TransferTx.wait();
+
+ const tx = await contract.call(
+ options.receiver,
+ options.zrc20,
+ payload,
+ {
+ gasLimit: options.callOptionsGasLimit,
+ isArbitraryCall: options.callOptionsIsArbitraryCall,
+ },
+ createRevertOptions(options),
+ { gasLimit: options.gasLimit }
+ );
+ await tx.wait();
+
+ console.log(`✅ Transaction sent: ${tx.hash}`);
+};
+
+export const universalCallCommand = createCommand("universal-call")
+ .requiredOption("-t, --types ", "Parameter types as JSON string")
+ .requiredOption("-v, --values ", "The values of the parameters")
+ .option("--call-options-is-arbitrary-call", "Call any function", false)
+ .option("--call-options-gas-limit", "The gas limit for the call", "500000")
+ .option(
+ "--function ",
+ `Function to call (example: "hello(string)")`
+ )
+ .option("--zrc20 ", "The address of ZRC-20 to pay fees")
+ .action(main);
diff --git a/examples/call/commands/universal/withdraw.ts b/examples/call/commands/universal/withdraw.ts
new file mode 100644
index 00000000..e4acb223
--- /dev/null
+++ b/examples/call/commands/universal/withdraw.ts
@@ -0,0 +1,39 @@
+import { ethers } from "ethers";
+
+import {
+ approveZRC20,
+ createCommand,
+ createRevertOptions,
+ getAbi,
+} from "../common";
+
+const main = async (options: any) => {
+ const provider = new ethers.JsonRpcProvider(options.rpc);
+ const signer = new ethers.Wallet(options.privateKey, provider);
+
+ const { abi } = getAbi(options.name);
+ const contract = new ethers.Contract(options.contract, abi, signer);
+
+ const { decimals } = await approveZRC20(
+ options.zrc20,
+ options.contract,
+ options.amount,
+ signer
+ );
+
+ const tx = await contract.withdraw(
+ options.receiver,
+ ethers.parseUnits(options.amount, decimals),
+ options.zrc20,
+ createRevertOptions(options),
+ { gasLimit: options.gasLimit }
+ );
+ await tx.wait();
+
+ console.log(`✅ Transaction sent: ${tx.hash}`);
+};
+
+export const universalWithdrawCommand = createCommand("universal-withdraw")
+ .requiredOption("--amount ", "Amount to withdraw")
+ .option("--zrc20 ", "The address of ZRC-20 to pay fees")
+ .action(main);
diff --git a/examples/call/commands/universal/withdrawAndCall.ts b/examples/call/commands/universal/withdrawAndCall.ts
new file mode 100644
index 00000000..d3729562
--- /dev/null
+++ b/examples/call/commands/universal/withdrawAndCall.ts
@@ -0,0 +1,64 @@
+import { ethers } from "ethers";
+
+import {
+ approveZRC20,
+ createCommand,
+ createRevertOptions,
+ getAbi,
+} from "../common";
+
+const main = async (options: any) => {
+ const provider = new ethers.JsonRpcProvider(options.rpc);
+ const signer = new ethers.Wallet(options.privateKey, provider);
+
+ const message = ethers.AbiCoder.defaultAbiCoder().encode(
+ options.types,
+ options.values
+ );
+
+ const functionSignature = ethers.id(options.function).slice(0, 10);
+
+ const payload = ethers.hexlify(ethers.concat([functionSignature, message]));
+
+ const { abi } = getAbi(options.name);
+ const contract = new ethers.Contract(options.contract, abi, signer);
+
+ const { decimals } = await approveZRC20(
+ options.zrc20,
+ options.contract,
+ options.amount,
+ signer,
+ options.callOptionsGasLimit
+ );
+
+ const tx = await contract.withdrawAndCall(
+ options.receiver,
+ ethers.parseUnits(options.amount, decimals),
+ options.zrc20,
+ payload,
+ {
+ gasLimit: options.callOptionsGasLimit,
+ isArbitraryCall: options.callOptionsIsArbitraryCall,
+ },
+ createRevertOptions(options),
+ { gasLimit: options.gasLimit }
+ );
+ await tx.wait();
+
+ console.log(`✅ Transaction sent: ${tx.hash}`);
+};
+
+export const universalWithdrawAndCallCommand = createCommand(
+ "universal-withdraw-and-call"
+)
+ .requiredOption("-t, --types ", "Parameter types as JSON string")
+ .requiredOption("-v, --values ", "The values of the parameters")
+ .option("--call-options-is-arbitrary-call", "Call any function", false)
+ .option("--call-options-gas-limit", "The gas limit for the call", "500000")
+ .option(
+ "--function ",
+ `Function to call (example: "hello(string)")`
+ )
+ .requiredOption("--amount ", "Amount to withdraw")
+ .option("--zrc20 ", "The address of ZRC-20 to pay fees")
+ .action(main);
diff --git a/examples/call/package.json b/examples/call/package.json
index 8723deba..0afbf917 100644
--- a/examples/call/package.json
+++ b/examples/call/package.json
@@ -42,12 +42,13 @@
"eslint-plugin-simple-import-sort": "^10.0.0",
"eslint-plugin-sort-keys-fix": "^1.1.2",
"eslint-plugin-typescript-sort-keys": "^2.3.0",
- "ethers": "^5.4.7",
+ "ethers": "^6.14.4",
"hardhat": "^2.17.2",
"hardhat-gas-reporter": "^1.0.8",
"prettier": "^2.8.8",
"solidity-coverage": "^0.8.0",
"ts-node": ">=8.0.0",
+ "tsx": "^4.20.3",
"typechain": "^8.1.0",
"typescript": ">=4.5.0"
},
diff --git a/examples/call/yarn.lock b/examples/call/yarn.lock
index a944412a..15db6fcd 100644
--- a/examples/call/yarn.lock
+++ b/examples/call/yarn.lock
@@ -133,6 +133,132 @@
dependencies:
"@jridgewell/trace-mapping" "0.3.9"
+<<<<<<< HEAD
+"@esbuild/aix-ppc64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz#4e0f91776c2b340e75558f60552195f6fad09f18"
+ integrity sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==
+
+"@esbuild/android-arm64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz#bc766407f1718923f6b8079c8c61bf86ac3a6a4f"
+ integrity sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==
+
+"@esbuild/android-arm@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz#4290d6d3407bae3883ad2cded1081a234473ce26"
+ integrity sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==
+
+"@esbuild/android-x64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz#40c11d9cbca4f2406548c8a9895d321bc3b35eff"
+ integrity sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==
+
+"@esbuild/darwin-arm64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz#49d8bf8b1df95f759ac81eb1d0736018006d7e34"
+ integrity sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==
+
+"@esbuild/darwin-x64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz#e27a5d92a14886ef1d492fd50fc61a2d4d87e418"
+ integrity sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==
+
+"@esbuild/freebsd-arm64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz#97cede59d638840ca104e605cdb9f1b118ba0b1c"
+ integrity sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==
+
+"@esbuild/freebsd-x64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz#71c77812042a1a8190c3d581e140d15b876b9c6f"
+ integrity sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==
+
+"@esbuild/linux-arm64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz#f7b7c8f97eff8ffd2e47f6c67eb5c9765f2181b8"
+ integrity sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==
+
+"@esbuild/linux-arm@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz#2a0be71b6cd8201fa559aea45598dffabc05d911"
+ integrity sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==
+
+"@esbuild/linux-ia32@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz#763414463cd9ea6fa1f96555d2762f9f84c61783"
+ integrity sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==
+
+"@esbuild/linux-loong64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz#428cf2213ff786a502a52c96cf29d1fcf1eb8506"
+ integrity sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==
+
+"@esbuild/linux-mips64el@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz#5cbcc7fd841b4cd53358afd33527cd394e325d96"
+ integrity sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==
+
+"@esbuild/linux-ppc64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz#0d954ab39ce4f5e50f00c4f8c4fd38f976c13ad9"
+ integrity sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==
+
+"@esbuild/linux-riscv64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz#0e7dd30730505abd8088321e8497e94b547bfb1e"
+ integrity sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==
+
+"@esbuild/linux-s390x@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz#5669af81327a398a336d7e40e320b5bbd6e6e72d"
+ integrity sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==
+
+"@esbuild/linux-x64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz#b2357dd153aa49038967ddc1ffd90c68a9d2a0d4"
+ integrity sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==
+
+"@esbuild/netbsd-arm64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz#53b4dfb8fe1cee93777c9e366893bd3daa6ba63d"
+ integrity sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==
+
+"@esbuild/netbsd-x64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz#a0206f6314ce7dc8713b7732703d0f58de1d1e79"
+ integrity sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==
+
+"@esbuild/openbsd-arm64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz#2a796c87c44e8de78001d808c77d948a21ec22fd"
+ integrity sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==
+
+"@esbuild/openbsd-x64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz#28d0cd8909b7fa3953af998f2b2ed34f576728f0"
+ integrity sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==
+
+"@esbuild/sunos-x64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz#a28164f5b997e8247d407e36c90d3fd5ddbe0dc5"
+ integrity sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==
+
+"@esbuild/win32-arm64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz#6eadbead38e8bd12f633a5190e45eff80e24007e"
+ integrity sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==
+
+"@esbuild/win32-ia32@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz#bab6288005482f9ed2adb9ded7e88eba9a62cc0d"
+ integrity sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==
+
+"@esbuild/win32-x64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz#7fc114af5f6563f19f73324b5d5ff36ece0803d1"
+ integrity sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==
+=======
"@emnapi/core@^1.4.3":
version "1.4.4"
resolved "https://registry.npmjs.org/@emnapi/core/-/core-1.4.4.tgz#76620673f3033626c6d79b1420d69f06a6bb153c"
@@ -154,6 +280,7 @@
integrity sha512-8K5IFFsQqF9wQNJptGbS6FNKgUTsSRYnTqNCG1vPP8jFdjSv18n2mQfJpkt2Oibo9iBEzcDnDxNwKTzC7svlJw==
dependencies:
tslib "^2.4.0"
+>>>>>>> update-cli
"@eslint-community/eslint-utils@^4.2.0":
version "4.7.0"
@@ -5229,6 +5356,37 @@ es6-promisify@^5.0.0:
dependencies:
es6-promise "^4.0.3"
+esbuild@~0.25.0:
+ version "0.25.5"
+ resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz#71075054993fdfae76c66586f9b9c1f8d7edd430"
+ integrity sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==
+ optionalDependencies:
+ "@esbuild/aix-ppc64" "0.25.5"
+ "@esbuild/android-arm" "0.25.5"
+ "@esbuild/android-arm64" "0.25.5"
+ "@esbuild/android-x64" "0.25.5"
+ "@esbuild/darwin-arm64" "0.25.5"
+ "@esbuild/darwin-x64" "0.25.5"
+ "@esbuild/freebsd-arm64" "0.25.5"
+ "@esbuild/freebsd-x64" "0.25.5"
+ "@esbuild/linux-arm" "0.25.5"
+ "@esbuild/linux-arm64" "0.25.5"
+ "@esbuild/linux-ia32" "0.25.5"
+ "@esbuild/linux-loong64" "0.25.5"
+ "@esbuild/linux-mips64el" "0.25.5"
+ "@esbuild/linux-ppc64" "0.25.5"
+ "@esbuild/linux-riscv64" "0.25.5"
+ "@esbuild/linux-s390x" "0.25.5"
+ "@esbuild/linux-x64" "0.25.5"
+ "@esbuild/netbsd-arm64" "0.25.5"
+ "@esbuild/netbsd-x64" "0.25.5"
+ "@esbuild/openbsd-arm64" "0.25.5"
+ "@esbuild/openbsd-x64" "0.25.5"
+ "@esbuild/sunos-x64" "0.25.5"
+ "@esbuild/win32-arm64" "0.25.5"
+ "@esbuild/win32-ia32" "0.25.5"
+ "@esbuild/win32-x64" "0.25.5"
+
escalade@^3.1.1:
version "3.2.0"
resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
@@ -5677,10 +5835,17 @@ ethers@^5.4.7, ethers@^5.7.2:
"@ethersproject/web" "5.8.0"
"@ethersproject/wordlists" "5.8.0"
+<<<<<<< HEAD
+ethers@^6.14.4:
+ version "6.14.4"
+ resolved "https://registry.npmjs.org/ethers/-/ethers-6.14.4.tgz#0f6fbc562a8425c7c888da307fa71ef796be0c04"
+ integrity sha512-Jm/dzRs2Z9iBrT6e9TvGxyb5YVKAPLlpna7hjxH7KH/++DSh2T/JVmQUv7iHI5E55hDbp/gEVvstWYXVxXFzsA==
+=======
ethers@^6.13.2:
version "6.15.0"
resolved "https://registry.npmjs.org/ethers/-/ethers-6.15.0.tgz#2980f2a3baf0509749b7e21f8692fa8a8349c0e3"
integrity sha512-Kf/3ZW54L4UT0pZtsY/rf+EkBU7Qi5nnhonjUb8yTXcxH3cdcWrV2cRyk0Xk/4jK6OoHhxxZHriyhje20If2hQ==
+>>>>>>> update-cli
dependencies:
"@adraffy/ens-normalize" "1.10.1"
"@noble/curves" "1.2.0"
@@ -5972,7 +6137,7 @@ fs.realpath@^1.0.0:
resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
-fsevents@~2.3.2:
+fsevents@~2.3.2, fsevents@~2.3.3:
version "2.3.3"
resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
@@ -6054,6 +6219,13 @@ get-tsconfig@^4.10.0:
dependencies:
resolve-pkg-maps "^1.0.0"
+get-tsconfig@^4.7.5:
+ version "4.10.1"
+ resolved "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz#d34c1c01f47d65a606c37aa7a177bc3e56ab4b2e"
+ integrity sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==
+ dependencies:
+ resolve-pkg-maps "^1.0.0"
+
ghost-testrpc@^0.0.2:
version "0.0.2"
resolved "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz#c4de9557b1d1ae7b2d20bbe474a91378ca90ce92"
@@ -8887,7 +9059,26 @@ tsutils@^3.21.0:
dependencies:
tslib "^1.8.1"
+<<<<<<< HEAD
+tsx@^4.20.3:
+ version "4.20.3"
+ resolved "https://registry.npmjs.org/tsx/-/tsx-4.20.3.tgz#f913e4911d59ad177c1bcee19d1035ef8dd6e2fb"
+ integrity sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==
+ dependencies:
+ esbuild "~0.25.0"
+ get-tsconfig "^4.7.5"
+ optionalDependencies:
+ fsevents "~2.3.3"
+
+tweetnacl-util@^0.15.1:
+ version "0.15.1"
+ resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b"
+ integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==
+
+tweetnacl@1.0.3, tweetnacl@^1.0.3:
+=======
tweetnacl@1.0.3:
+>>>>>>> update-cli
version "1.0.3"
resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596"
integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==