diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e07ada9..1ac21ed 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -9,16 +9,27 @@ on: jobs: test: - name: Foundry Tests + name: Foundry Tests Linux runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: submodules: recursive - + - uses: actions/setup-node@v4 with: node-version: 18 + + - name: Build CLI + run: | + npm install + mv build/axiom-std-cli-build.js build/axiom-std-cli-temp-build.js + cp src/test/AxiomCli.sol src/test/AxiomCli.sol.temp + npm run build + diff build/axiom-std-cli-build.js build/axiom-std-cli-temp-build.js + diff src/test/AxiomCli.sol src/test/AxiomCli.sol.temp + rm build/axiom-std-cli-temp-build.js + rm src/test/AxiomCli.sol.temp - name: Install Foundry uses: foundry-rs/foundry-toolchain@v1 @@ -29,10 +40,45 @@ jobs: - name: Check forge tree run: forge tree - - name: Install NPM packages - run: npm install + - name: Run Foundry tests + run: | + export PROVIDER_URI_SEPOLIA=${{ secrets.PROVIDER_URI_SEPOLIA }} + RUST_BACKTRACE=1 forge test -vvv + + test-mac: + name: Foundry Tests Mac + runs-on: macos-14 + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + + - uses: actions/setup-node@v4 + with: + node-version: 18 + + - name: Build CLI + run: | + npm install + mv build/axiom-std-cli-build.js build/axiom-std-cli-temp-build.js + cp src/test/AxiomCli.sol src/test/AxiomCli.sol.temp + npm run build + diff build/axiom-std-cli-build.js build/axiom-std-cli-temp-build.js + diff src/test/AxiomCli.sol src/test/AxiomCli.sol.temp + rm build/axiom-std-cli-temp-build.js + rm src/test/AxiomCli.sol.temp + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + + - name: Check forge version + run: forge --version + + - name: Check forge tree + run: forge tree - name: Run Foundry tests run: | export PROVIDER_URI_SEPOLIA=${{ secrets.PROVIDER_URI_SEPOLIA }} - RUST_BACKTRACE=1 forge test -vvv \ No newline at end of file + RUST_BACKTRACE=1 forge test -vvv + diff --git a/.gitignore b/.gitignore index 4fd0f8f..3e6ed2b 100644 --- a/.gitignore +++ b/.gitignore @@ -16,4 +16,4 @@ docs/ node_modules/ .axiom -dist \ No newline at end of file +dist diff --git a/axiom-std-marker b/axiom-std-marker new file mode 100644 index 0000000..e69de29 diff --git a/build/axiom-std-cli-build.js b/build/axiom-std-cli-build.js new file mode 100644 index 0000000..9c51c56 --- /dev/null +++ b/build/axiom-std-cli-build.js @@ -0,0 +1,181 @@ +"use strict"; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; + +// dist/utils.js +var require_utils = __commonJS({ + "dist/utils.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.getSolidityType = void 0; + var getSolidityType = (type) => { + switch (type) { + case "CircuitValue": + return "uint256"; + case "CircuitValue256": + return "uint256"; + case "CircuitValue[]": + return "uint256[]"; + case "CircuitValue256[]": + return "uint256[]"; + default: + throw new Error(`Unknown type ${type}`); + } + }; + exports2.getSolidityType = getSolidityType; + } +}); + +// dist/compile.js +var require_compile = __commonJS({ + "dist/compile.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + exports2.compile = void 0; + var js_12 = require("@axiom-crypto/circuit/js"); + var utils_12 = require("@axiom-crypto/circuit/cliHandler/utils"); + var viem_12 = require("viem"); + var utils_22 = require_utils(); + var compile = async (circuitPath, inputs2, providerUri2) => { + let circuitFunction = "circuit"; + const f = await (0, utils_12.getFunctionFromTs)(circuitPath, circuitFunction); + const provider2 = (0, utils_12.getProvider)(providerUri2); + const circuit2 = new js_12.AxiomBaseCircuit({ + f: f.circuit, + mock: true, + provider: provider2, + shouldTime: false, + inputSchema: f.inputSchema + }); + let abi2 = []; + let inputSchemaJson2 = JSON.parse(f.inputSchema); + let keys2 = Object.keys(inputSchemaJson2); + for (let i = 0; i < keys2.length; i++) { + abi2.push({ "name": keys2[i], "type": (0, utils_22.getSolidityType)(inputSchemaJson2[keys2[i]]) }); + } + const rawInputs2 = (0, viem_12.decodeAbiParameters)(abi2, inputs2); + const circuitInputs2 = {}; + for (let i = 0; i < keys2.length; i++) { + circuitInputs2[keys2[i]] = rawInputs2[i].toString(); + } + try { + const res = await circuit2.mockCompile(circuitInputs2); + const circuitFn = `const ${f.importName} = AXIOM_CLIENT_IMPORT +${f.circuit.toString()}`; + const encoder = new TextEncoder(); + const circuitBuild = encoder.encode(circuitFn); + const build = { + ...res, + circuit: Buffer.from(circuitBuild).toString("base64") + }; + console.log(JSON.stringify(build)); + } catch (e) { + console.error(e); + } + }; + exports2.compile = compile; + } +}); + +// dist/prove.js +var require_prove = __commonJS({ + "dist/prove.js"(exports, module) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.prove = void 0; + var js_1 = require("@axiom-crypto/circuit/js"); + var utils_1 = require("@axiom-crypto/circuit/cliHandler/utils"); + var utils_2 = require_utils(); + var viem_1 = require("viem"); + var core_1 = require("@axiom-crypto/core"); + var client_1 = require("@axiom-crypto/client"); + var utils_3 = require("@axiom-crypto/client/axiom/utils"); + var prove = async (compiledJson, inputs, providerUri, sourceChainId, callbackTarget, callbackExtraData, refundAddress, maxFeePerGas, callbackGasLimit, caller) => { + const decoder = new TextDecoder(); + const provider = (0, utils_1.getProvider)(providerUri); + let compiled = JSON.parse(compiledJson); + const decodedArray = Buffer.from(compiled.circuit, "base64"); + const raw = decoder.decode(decodedArray); + const AXIOM_CLIENT_IMPORT = require("@axiom-crypto/client"); + const circuit = new js_1.AxiomBaseCircuit({ + f: eval(raw), + mock: true, + // chainId: options.sourceChainId, + provider, + shouldTime: false, + inputSchema: compiled.inputSchema + }); + let abi = []; + let decodedInputSchema = Buffer.from(compiled.inputSchema, "base64"); + let inputSchemaJson = JSON.parse(decoder.decode(decodedInputSchema)); + let keys = Object.keys(inputSchemaJson); + for (let i = 0; i < keys.length; i++) { + abi.push({ "name": keys[i], "type": (0, utils_2.getSolidityType)(inputSchemaJson[keys[i]]) }); + } + const rawInputs = (0, viem_1.decodeAbiParameters)(abi, inputs); + const circuitInputs = {}; + for (let i = 0; i < keys.length; i++) { + circuitInputs[keys[i]] = rawInputs[i].toString(); + } + const axiom = new core_1.AxiomSdkCore({ + providerUri: provider, + chainId: sourceChainId, + version: "v2" + }); + try { + let computeQuery; + circuit.loadSavedMock(compiled); + computeQuery = await circuit.mockProve(circuitInputs); + const computeResults = circuit.getComputeResults(); + const dataQuery = circuit.getDataQuery(); + const res = { + sourceChainId: circuit.getChainId(), + computeQuery, + computeResults, + dataQuery + }; + let build = await (0, client_1.buildSendQuery)({ + axiom, + dataQuery: res.dataQuery, + computeQuery: res.computeQuery, + callback: { + target: callbackTarget, + extraData: callbackExtraData + }, + options: { + refundee: refundAddress, + maxFeePerGas, + callbackGasLimit: Number(callbackGasLimit) + }, + caller + }); + build.value = build.value.toString(); + const query = { + value: build.value, + mock: build.mock, + queryId: build.queryId, + args: (0, utils_3.argsArrToObj)(build.args), + calldata: build.calldata, + computeResults + }; + console.log(JSON.stringify(query)); + } catch (e) { + console.error(e); + } + }; + exports.prove = prove; + } +}); + +// dist/axiom-std-cli.js +Object.defineProperty(exports, "__esModule", { value: true }); +var commander_1 = require("commander"); +var compile_1 = require_compile(); +var prove_1 = require_prove(); +var program = new commander_1.Command("axiom-std"); +program.name("axiom-std").usage("axiom-std CLI"); +program.command("readCircuit").description("Read and compile a circuit").argument("", "path to the typescript circuit file").argument("", "inputs to the circuit").argument("", "provider to use").action(compile_1.compile); +program.command("prove").description("Prove a circuit").argument("", "compiled json string").argument("", "inputs to the circuit").argument("", "provider to use").argument("", "source chain id").argument("", "callback target").argument("", "callback extra data").argument("", "refund address").argument("", "max fee per gas").argument("", "callback gas limit").argument("", "caller").action(prove_1.prove); +program.parseAsync(process.argv); diff --git a/cli/index.ts b/cli/axiom-std-cli.ts similarity index 99% rename from cli/index.ts rename to cli/axiom-std-cli.ts index 1abbe92..0fbdf1b 100644 --- a/cli/index.ts +++ b/cli/axiom-std-cli.ts @@ -2,7 +2,6 @@ import { Command } from "commander"; import { compile } from "./compile"; import { prove } from "./prove"; - const program = new Command("axiom-std"); program.name("axiom-std").usage("axiom-std CLI"); diff --git a/cli/compile.ts b/cli/compile.ts index a4c2a11..59e6cbb 100644 --- a/cli/compile.ts +++ b/cli/compile.ts @@ -27,15 +27,13 @@ export const compile = async ( } // console.log(abi); // console.log(encodeAbiParameters(abi, [4205938, "0x8018fe32fCFd3d166E8b4c4E37105318A84BA11b"])) - const rawInputs = decodeAbiParameters(abi, inputs as `0x${string}`); + const rawInputs: any[] = decodeAbiParameters(abi, inputs as `0x${string}`); const circuitInputs: any = {}; for (let i = 0; i < keys.length; i++) { circuitInputs[keys[i]] = rawInputs[i].toString(); } // console.log(circuitInputs); - - try { const res = await circuit.mockCompile(circuitInputs); const circuitFn = `const ${f.importName} = AXIOM_CLIENT_IMPORT\n${f.circuit.toString()}`; diff --git a/cli/prove.ts b/cli/prove.ts index 7df6f10..d5759b4 100644 --- a/cli/prove.ts +++ b/cli/prove.ts @@ -7,8 +7,6 @@ import { AxiomSdkCore } from "@axiom-crypto/core"; import { buildSendQuery } from "@axiom-crypto/client"; import { argsArrToObj } from '@axiom-crypto/client/axiom/utils'; - - export const prove = async ( compiledJson: string, inputs: string, @@ -35,7 +33,6 @@ export const prove = async ( const raw = decoder.decode(decodedArray); const AXIOM_CLIENT_IMPORT = require("@axiom-crypto/client"); - const circuit = new AxiomBaseCircuit({ f: eval(raw), mock: true, @@ -54,7 +51,7 @@ export const prove = async ( } // console.log(abi); // console.log(encodeAbiParameters(abi, [4205938, "0x8018fe32fCFd3d166E8b4c4E37105318A84BA11b"])) - const rawInputs = decodeAbiParameters(abi, inputs as `0x${string}`); + const rawInputs: any[] = decodeAbiParameters(abi, inputs as `0x${string}`); const circuitInputs: any = {}; for (let i = 0; i < keys.length; i++) { circuitInputs[keys[i]] = rawInputs[i].toString(); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..8d42c10 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1262 @@ +{ + "name": "axiom-std", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "axiom-std", + "version": "0.1.0", + "license": "MIT", + "dependencies": { + "@axiom-crypto/circuit": "^2.0.3", + "@axiom-crypto/client": "2.0.3", + "@axiom-crypto/core": "^2.3.4", + "commander": "^11.1.0", + "dotenv": "^16.3.1", + "viem": "^2.5.0" + }, + "devDependencies": { + "@types/node": "18.15.13", + "esbuild": "^0.20.0", + "typescript": "^5.3.2" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz", + "integrity": "sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==" + }, + "node_modules/@axiom-crypto/circuit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@axiom-crypto/circuit/-/circuit-2.0.3.tgz", + "integrity": "sha512-CoutK1HVo4TI1hUlzxtHdl9DIYjMPCpQfpxOeKKqghZURADpj4pDWrQivKzxePjlBmbdX7NyS/Ox98tyzXYmeA==", + "dependencies": { + "@axiom-crypto/core": "2.3.4", + "@axiom-crypto/halo2-lib-js": "0.3.4", + "@axiom-crypto/halo2-wasm": "0.3.4", + "@axiom-crypto/tools": "2.0.0", + "commander": "^11.1.0", + "ethers": "^6.8.1", + "viem": "^1.19.9" + } + }, + "node_modules/@axiom-crypto/circuit/node_modules/abitype": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-0.9.8.tgz", + "integrity": "sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3 >=3.19.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/@axiom-crypto/circuit/node_modules/viem": { + "version": "1.21.4", + "resolved": "https://registry.npmjs.org/viem/-/viem-1.21.4.tgz", + "integrity": "sha512-BNVYdSaUjeS2zKQgPs+49e5JKocfo60Ib2yiXOWBT6LuVxY1I/6fFX3waEtpXvL1Xn4qu+BVitVtMh9lyThyhQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "dependencies": { + "@adraffy/ens-normalize": "1.10.0", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@scure/bip32": "1.3.2", + "@scure/bip39": "1.2.1", + "abitype": "0.9.8", + "isows": "1.0.3", + "ws": "8.13.0" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@axiom-crypto/circuit/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@axiom-crypto/client": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@axiom-crypto/client/-/client-2.0.3.tgz", + "integrity": "sha512-1QgDOoPtHpOnUO2Bp9FSKwffg8yZyaw4jKeeinnZ9BLSP5JXZ9auqv2ui7P6cZIbbGvnymr8KUwJTyg94FSD6g==", + "dependencies": { + "@axiom-crypto/circuit": "2.0.3", + "@axiom-crypto/core": "2.3.4", + "chalk": "^4.1.2", + "commander": "^11.1.0", + "prompts": "^2.4.2", + "viem": "^2.3.1" + }, + "bin": { + "axiom": "cli/index.js" + } + }, + "node_modules/@axiom-crypto/core": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@axiom-crypto/core/-/core-2.3.4.tgz", + "integrity": "sha512-3CcxPB2nEVcNblCMd4xf7ZzX9UL0T0UMYmDY5cmFGnKNQcnQcaSUOn3Ke5IVB9GSvsublKTRN7EWPhIOuNw9mA==", + "dependencies": { + "@axiom-crypto/tools": "2.0.0", + "axios": "^1.6.1", + "bs58": "^5.0.0", + "ethers": "^6.8.1", + "merkletreejs": "^0.3.11" + } + }, + "node_modules/@axiom-crypto/halo2-lib-js": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@axiom-crypto/halo2-lib-js/-/halo2-lib-js-0.3.4.tgz", + "integrity": "sha512-E/i7EqlcvjcfXZejL8HcpvFQIIMJxcMrVBXsdaDJGgEXVc6pEDJ07Hy3drLbhQ007ZJ8aultw3HSfD9gJRkh4w==", + "dependencies": { + "@axiom-crypto/halo2-wasm": "0.3.4", + "ethers": "^6.8.0", + "prettier": "1.18.2" + } + }, + "node_modules/@axiom-crypto/halo2-wasm": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@axiom-crypto/halo2-wasm/-/halo2-wasm-0.3.4.tgz", + "integrity": "sha512-SUHXnydtx5rY0gQ2zWy0Br6L3iaAFo5RH/AMnOCSM4Nb3inqinBEnXQgEPZ45+EFmeOfRi1xOVUBdo6keZlacQ==" + }, + "node_modules/@axiom-crypto/tools": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@axiom-crypto/tools/-/tools-2.0.0.tgz", + "integrity": "sha512-zoNlRRTyS98xysKrui2g+/f+A6+LiSi7wNw1m+xbCcDkY5/yz52VkbpGt+DTfo5FboiqTaXAq5f5CidNg4Z0mQ==", + "dependencies": { + "ethers": "^6.7.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.0.tgz", + "integrity": "sha512-fGFDEctNh0CcSwsiRPxiaqX0P5rq+AqE0SRhYGZ4PX46Lg1FNR6oCxJghf8YgY0WQEgQuh3lErUFE4KxLeRmmw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.0.tgz", + "integrity": "sha512-3bMAfInvByLHfJwYPJRlpTeaQA75n8C/QKpEaiS4HrFWFiJlNI0vzq/zCjBrhAYcPyVPG7Eo9dMrcQXuqmNk5g==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.0.tgz", + "integrity": "sha512-aVpnM4lURNkp0D3qPoAzSG92VXStYmoVPOgXveAUoQBWRSuQzt51yvSju29J6AHPmwY1BjH49uR29oyfH1ra8Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.0.tgz", + "integrity": "sha512-uK7wAnlRvjkCPzh8jJ+QejFyrP8ObKuR5cBIsQZ+qbMunwR8sbd8krmMbxTLSrDhiPZaJYKQAU5Y3iMDcZPhyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.0.tgz", + "integrity": "sha512-AjEcivGAlPs3UAcJedMa9qYg9eSfU6FnGHJjT8s346HSKkrcWlYezGE8VaO2xKfvvlZkgAhyvl06OJOxiMgOYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.0.tgz", + "integrity": "sha512-bsgTPoyYDnPv8ER0HqnJggXK6RyFy4PH4rtsId0V7Efa90u2+EifxytE9pZnsDgExgkARy24WUQGv9irVbTvIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.0.tgz", + "integrity": "sha512-kQ7jYdlKS335mpGbMW5tEe3IrQFIok9r84EM3PXB8qBFJPSc6dpWfrtsC/y1pyrz82xfUIn5ZrnSHQQsd6jebQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.0.tgz", + "integrity": "sha512-uG8B0WSepMRsBNVXAQcHf9+Ko/Tr+XqmK7Ptel9HVmnykupXdS4J7ovSQUIi0tQGIndhbqWLaIL/qO/cWhXKyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.0.tgz", + "integrity": "sha512-2ezuhdiZw8vuHf1HKSf4TIk80naTbP9At7sOqZmdVwvvMyuoDiZB49YZKLsLOfKIr77+I40dWpHVeY5JHpIEIg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.0.tgz", + "integrity": "sha512-uTtyYAP5veqi2z9b6Gr0NUoNv9F/rOzI8tOD5jKcCvRUn7T60Bb+42NDBCWNhMjkQzI0qqwXkQGo1SY41G52nw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.0.tgz", + "integrity": "sha512-c88wwtfs8tTffPaoJ+SQn3y+lKtgTzyjkD8NgsyCtCmtoIC8RDL7PrJU05an/e9VuAke6eJqGkoMhJK1RY6z4w==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.0.tgz", + "integrity": "sha512-lR2rr/128/6svngnVta6JN4gxSXle/yZEZL3o4XZ6esOqhyR4wsKyfu6qXAL04S4S5CgGfG+GYZnjFd4YiG3Aw==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.0.tgz", + "integrity": "sha512-9Sycc+1uUsDnJCelDf6ZNqgZQoK1mJvFtqf2MUz4ujTxGhvCWw+4chYfDLPepMEvVL9PDwn6HrXad5yOrNzIsQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.0.tgz", + "integrity": "sha512-CoWSaaAXOZd+CjbUTdXIJE/t7Oz+4g90A3VBCHLbfuc5yUQU/nFDLOzQsN0cdxgXd97lYW/psIIBdjzQIwTBGw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.0.tgz", + "integrity": "sha512-mlb1hg/eYRJUpv8h/x+4ShgoNLL8wgZ64SUr26KwglTYnwAWjkhR2GpoKftDbPOCnodA9t4Y/b68H4J9XmmPzA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.0.tgz", + "integrity": "sha512-fgf9ubb53xSnOBqyvWEY6ukBNRl1mVX1srPNu06B6mNsNK20JfH6xV6jECzrQ69/VMiTLvHMicQR/PgTOgqJUQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.0.tgz", + "integrity": "sha512-H9Eu6MGse++204XZcYsse1yFHmRXEWgadk2N58O/xd50P9EvFMLJTQLg+lB4E1cF2xhLZU5luSWtGTb0l9UeSg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.0.tgz", + "integrity": "sha512-lCT675rTN1v8Fo+RGrE5KjSnfY0x9Og4RN7t7lVrN3vMSjy34/+3na0q7RIfWDAj0e0rCh0OL+P88lu3Rt21MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.0.tgz", + "integrity": "sha512-HKoUGXz/TOVXKQ+67NhxyHv+aDSZf44QpWLa3I1lLvAwGq8x1k0T+e2HHSRvxWhfJrFxaaqre1+YyzQ99KixoA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.0.tgz", + "integrity": "sha512-GDwAqgHQm1mVoPppGsoq4WJwT3vhnz/2N62CzhvApFD1eJyTroob30FPpOZabN+FgCjhG+AgcZyOPIkR8dfD7g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.0.tgz", + "integrity": "sha512-0vYsP8aC4TvMlOQYozoksiaxjlvUcQrac+muDqj1Fxy6jh9l9CZJzj7zmh8JGfiV49cYLTorFLxg7593pGldwQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.0.tgz", + "integrity": "sha512-p98u4rIgfh4gdpV00IqknBD5pC84LCub+4a3MO+zjqvU5MVXOc3hqR2UgT2jI2nh3h8s9EQxmOsVI3tyzv1iFg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.0.tgz", + "integrity": "sha512-NgJnesu1RtWihtTtXGFMU5YSE6JyyHPMxCwBZK7a6/8d31GuSo9l0Ss7w1Jw5QnKUawG6UEehs883kcXf5fYwg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/util": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/base": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", + "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.2.tgz", + "integrity": "sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==", + "dependencies": { + "@noble/curves": "~1.2.0", + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", + "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", + "dependencies": { + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@types/node": { + "version": "18.15.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==" + }, + "node_modules/abitype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.0.0.tgz", + "integrity": "sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ==", + "funding": { + "url": "https://github.com/sponsors/wevm" + }, + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3 >=3.22.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==" + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", + "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "dependencies": { + "follow-redirects": "^1.15.4", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/base-x": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", + "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "engines": { + "node": "*" + } + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/buffer-reverse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz", + "integrity": "sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "engines": { + "node": ">=16" + } + }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dotenv": { + "version": "16.4.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.1.tgz", + "integrity": "sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.0.tgz", + "integrity": "sha512-6iwE3Y2RVYCME1jLpBqq7LQWK3MW6vjV2bZy6gt/WrqkY+WE74Spyc0ThAOYpMtITvnjX09CrC6ym7A/m9mebA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.0", + "@esbuild/android-arm": "0.20.0", + "@esbuild/android-arm64": "0.20.0", + "@esbuild/android-x64": "0.20.0", + "@esbuild/darwin-arm64": "0.20.0", + "@esbuild/darwin-x64": "0.20.0", + "@esbuild/freebsd-arm64": "0.20.0", + "@esbuild/freebsd-x64": "0.20.0", + "@esbuild/linux-arm": "0.20.0", + "@esbuild/linux-arm64": "0.20.0", + "@esbuild/linux-ia32": "0.20.0", + "@esbuild/linux-loong64": "0.20.0", + "@esbuild/linux-mips64el": "0.20.0", + "@esbuild/linux-ppc64": "0.20.0", + "@esbuild/linux-riscv64": "0.20.0", + "@esbuild/linux-s390x": "0.20.0", + "@esbuild/linux-x64": "0.20.0", + "@esbuild/netbsd-x64": "0.20.0", + "@esbuild/openbsd-x64": "0.20.0", + "@esbuild/sunos-x64": "0.20.0", + "@esbuild/win32-arm64": "0.20.0", + "@esbuild/win32-ia32": "0.20.0", + "@esbuild/win32-x64": "0.20.0" + } + }, + "node_modules/ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "dependencies": { + "js-sha3": "^0.8.0" + } + }, + "node_modules/ethereum-cryptography": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz", + "integrity": "sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==", + "dependencies": { + "@noble/curves": "1.3.0", + "@noble/hashes": "1.3.3", + "@scure/bip32": "1.3.3", + "@scure/bip39": "1.2.2" + } + }, + "node_modules/ethereum-cryptography/node_modules/@noble/curves": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", + "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", + "dependencies": { + "@noble/hashes": "1.3.3" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethereum-cryptography/node_modules/@noble/hashes": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", + "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethereum-cryptography/node_modules/@scure/bip32": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.3.tgz", + "integrity": "sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==", + "dependencies": { + "@noble/curves": "~1.3.0", + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.4" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethereum-cryptography/node_modules/@scure/bip39": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.2.tgz", + "integrity": "sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==", + "dependencies": { + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.4" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethers": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.10.0.tgz", + "integrity": "sha512-nMNwYHzs6V1FR3Y4cdfxSQmNgZsRj1RiTU25JwvnJLmyzw9z3SKxNc2XKDuiXXo/v9ds5Mp9m6HBabgYQQ26tA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@adraffy/ens-normalize": "1.10.0", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "18.15.13", + "aes-js": "4.0.0-beta.5", + "tslib": "2.4.0", + "ws": "8.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + }, + "node_modules/follow-redirects": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/isows": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.3.tgz", + "integrity": "sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" + } + }, + "node_modules/merkletreejs": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.3.11.tgz", + "integrity": "sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ==", + "dependencies": { + "bignumber.js": "^9.0.1", + "buffer-reverse": "^1.0.1", + "crypto-js": "^4.2.0", + "treeify": "^1.1.0", + "web3-utils": "^1.3.4" + }, + "engines": { + "node": ">= 7.6.0" + } + }, + "node_modules/micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==" + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + }, + "node_modules/prettier": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz", + "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/treeify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/viem": { + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/viem/-/viem-2.7.6.tgz", + "integrity": "sha512-43TF0VYcTeNef9dax1/BhqlRLXpAo6HAiQ68hrJ8XRhDOou73nHZEjeFl8Eai4UFFodKhu+PbRUFzuuoixOUfg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "dependencies": { + "@adraffy/ens-normalize": "1.10.0", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@scure/bip32": "1.3.2", + "@scure/bip39": "1.2.1", + "abitype": "1.0.0", + "isows": "1.0.3", + "ws": "8.13.0" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/viem/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/web3-utils": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", + "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==", + "dependencies": { + "@ethereumjs/util": "^8.1.0", + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereum-cryptography": "^2.1.2", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + } + } +} diff --git a/package.json b/package.json index 723754f..4f20971 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,8 @@ "description": "", "main": "index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "build": "tsc" + "updateShasum": "./script/replaceSha.sh", + "build": "tsc && esbuild dist/axiom-std-cli.js --bundle --platform=node --packages=external > build/axiom-std-cli-build.js && npm run updateShasum" }, "keywords": [], "author": "Intrinsic Technologies", @@ -20,6 +20,7 @@ }, "devDependencies": { "@types/node": "18.15.13", + "esbuild": "^0.20.0", "typescript": "^5.3.2" } } \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 8b3fb1d..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,574 +0,0 @@ -lockfileVersion: '6.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -dependencies: - '@axiom-crypto/circuit': - specifier: ^2.0.3 - version: 2.0.3(typescript@5.3.3) - '@axiom-crypto/client': - specifier: 2.0.3 - version: 2.0.3(typescript@5.3.3) - '@axiom-crypto/core': - specifier: ^2.3.4 - version: 2.3.4 - commander: - specifier: ^11.1.0 - version: 11.1.0 - dotenv: - specifier: ^16.3.1 - version: 16.3.1 - viem: - specifier: ^2.5.0 - version: 2.5.0(typescript@5.3.3) - -devDependencies: - '@types/node': - specifier: 18.15.13 - version: 18.15.13 - typescript: - specifier: ^5.3.2 - version: 5.3.3 - -packages: - - /@adraffy/ens-normalize@1.10.0: - resolution: {integrity: sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==} - dev: false - - /@axiom-crypto/circuit@2.0.3(typescript@5.3.3): - resolution: {integrity: sha512-CoutK1HVo4TI1hUlzxtHdl9DIYjMPCpQfpxOeKKqghZURADpj4pDWrQivKzxePjlBmbdX7NyS/Ox98tyzXYmeA==} - dependencies: - '@axiom-crypto/core': 2.3.4 - '@axiom-crypto/halo2-lib-js': 0.3.4 - '@axiom-crypto/halo2-wasm': 0.3.4 - '@axiom-crypto/tools': 2.0.0 - commander: 11.1.0 - ethers: 6.10.0 - viem: 1.21.4(typescript@5.3.3) - transitivePeerDependencies: - - bufferutil - - debug - - typescript - - utf-8-validate - - zod - dev: false - - /@axiom-crypto/client@2.0.3(typescript@5.3.3): - resolution: {integrity: sha512-1QgDOoPtHpOnUO2Bp9FSKwffg8yZyaw4jKeeinnZ9BLSP5JXZ9auqv2ui7P6cZIbbGvnymr8KUwJTyg94FSD6g==} - hasBin: true - dependencies: - '@axiom-crypto/circuit': 2.0.3(typescript@5.3.3) - '@axiom-crypto/core': 2.3.4 - chalk: 4.1.2 - commander: 11.1.0 - prompts: 2.4.2 - viem: 2.5.0(typescript@5.3.3) - transitivePeerDependencies: - - bufferutil - - debug - - typescript - - utf-8-validate - - zod - dev: false - - /@axiom-crypto/core@2.3.4: - resolution: {integrity: sha512-3CcxPB2nEVcNblCMd4xf7ZzX9UL0T0UMYmDY5cmFGnKNQcnQcaSUOn3Ke5IVB9GSvsublKTRN7EWPhIOuNw9mA==} - dependencies: - '@axiom-crypto/tools': 2.0.0 - axios: 1.6.5 - bs58: 5.0.0 - ethers: 6.10.0 - merkletreejs: 0.3.11 - transitivePeerDependencies: - - bufferutil - - debug - - utf-8-validate - dev: false - - /@axiom-crypto/halo2-lib-js@0.3.4: - resolution: {integrity: sha512-E/i7EqlcvjcfXZejL8HcpvFQIIMJxcMrVBXsdaDJGgEXVc6pEDJ07Hy3drLbhQ007ZJ8aultw3HSfD9gJRkh4w==} - dependencies: - '@axiom-crypto/halo2-wasm': 0.3.4 - ethers: 6.10.0 - prettier: 1.18.2 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /@axiom-crypto/halo2-wasm@0.3.4: - resolution: {integrity: sha512-SUHXnydtx5rY0gQ2zWy0Br6L3iaAFo5RH/AMnOCSM4Nb3inqinBEnXQgEPZ45+EFmeOfRi1xOVUBdo6keZlacQ==} - dev: false - - /@axiom-crypto/tools@2.0.0: - resolution: {integrity: sha512-zoNlRRTyS98xysKrui2g+/f+A6+LiSi7wNw1m+xbCcDkY5/yz52VkbpGt+DTfo5FboiqTaXAq5f5CidNg4Z0mQ==} - dependencies: - ethers: 6.10.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /@ethereumjs/rlp@4.0.1: - resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} - engines: {node: '>=14'} - hasBin: true - dev: false - - /@ethereumjs/util@8.1.0: - resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} - engines: {node: '>=14'} - dependencies: - '@ethereumjs/rlp': 4.0.1 - ethereum-cryptography: 2.1.2 - micro-ftch: 0.3.1 - dev: false - - /@noble/curves@1.1.0: - resolution: {integrity: sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==} - dependencies: - '@noble/hashes': 1.3.1 - dev: false - - /@noble/curves@1.2.0: - resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} - dependencies: - '@noble/hashes': 1.3.2 - dev: false - - /@noble/hashes@1.3.1: - resolution: {integrity: sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==} - engines: {node: '>= 16'} - dev: false - - /@noble/hashes@1.3.2: - resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} - engines: {node: '>= 16'} - dev: false - - /@scure/base@1.1.5: - resolution: {integrity: sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==} - dev: false - - /@scure/bip32@1.3.1: - resolution: {integrity: sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==} - dependencies: - '@noble/curves': 1.1.0 - '@noble/hashes': 1.3.2 - '@scure/base': 1.1.5 - dev: false - - /@scure/bip32@1.3.2: - resolution: {integrity: sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==} - dependencies: - '@noble/curves': 1.2.0 - '@noble/hashes': 1.3.2 - '@scure/base': 1.1.5 - dev: false - - /@scure/bip39@1.2.1: - resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} - dependencies: - '@noble/hashes': 1.3.2 - '@scure/base': 1.1.5 - dev: false - - /@types/node@18.15.13: - resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} - - /abitype@0.9.8(typescript@5.3.3): - resolution: {integrity: sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ==} - peerDependencies: - typescript: '>=5.0.4' - zod: ^3 >=3.19.1 - peerDependenciesMeta: - typescript: - optional: true - zod: - optional: true - dependencies: - typescript: 5.3.3 - dev: false - - /abitype@1.0.0(typescript@5.3.3): - resolution: {integrity: sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ==} - peerDependencies: - typescript: '>=5.0.4' - zod: ^3 >=3.22.0 - peerDependenciesMeta: - typescript: - optional: true - zod: - optional: true - dependencies: - typescript: 5.3.3 - dev: false - - /aes-js@4.0.0-beta.5: - resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} - dev: false - - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: false - - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: false - - /axios@1.6.5: - resolution: {integrity: sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==} - dependencies: - follow-redirects: 1.15.5 - form-data: 4.0.0 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - dev: false - - /base-x@4.0.0: - resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} - dev: false - - /bignumber.js@9.1.2: - resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} - dev: false - - /bn.js@4.11.6: - resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==} - dev: false - - /bn.js@5.2.1: - resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - dev: false - - /bs58@5.0.0: - resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} - dependencies: - base-x: 4.0.0 - dev: false - - /buffer-reverse@1.0.1: - resolution: {integrity: sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==} - dev: false - - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: false - - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: false - - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: false - - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - dependencies: - delayed-stream: 1.0.0 - dev: false - - /commander@11.1.0: - resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} - engines: {node: '>=16'} - dev: false - - /crypto-js@4.2.0: - resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} - dev: false - - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: false - - /dotenv@16.3.1: - resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} - engines: {node: '>=12'} - dev: false - - /ethereum-bloom-filters@1.0.10: - resolution: {integrity: sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==} - dependencies: - js-sha3: 0.8.0 - dev: false - - /ethereum-cryptography@2.1.2: - resolution: {integrity: sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug==} - dependencies: - '@noble/curves': 1.1.0 - '@noble/hashes': 1.3.1 - '@scure/bip32': 1.3.1 - '@scure/bip39': 1.2.1 - dev: false - - /ethers@6.10.0: - resolution: {integrity: sha512-nMNwYHzs6V1FR3Y4cdfxSQmNgZsRj1RiTU25JwvnJLmyzw9z3SKxNc2XKDuiXXo/v9ds5Mp9m6HBabgYQQ26tA==} - engines: {node: '>=14.0.0'} - dependencies: - '@adraffy/ens-normalize': 1.10.0 - '@noble/curves': 1.2.0 - '@noble/hashes': 1.3.2 - '@types/node': 18.15.13 - aes-js: 4.0.0-beta.5 - tslib: 2.4.0 - ws: 8.5.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /ethjs-unit@0.1.6: - resolution: {integrity: sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==} - engines: {node: '>=6.5.0', npm: '>=3'} - dependencies: - bn.js: 4.11.6 - number-to-bn: 1.7.0 - dev: false - - /follow-redirects@1.15.5: - resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: false - - /form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: false - - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: false - - /is-hex-prefixed@1.0.0: - resolution: {integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==} - engines: {node: '>=6.5.0', npm: '>=3'} - dev: false - - /isows@1.0.3(ws@8.13.0): - resolution: {integrity: sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==} - peerDependencies: - ws: '*' - dependencies: - ws: 8.13.0 - dev: false - - /js-sha3@0.8.0: - resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} - dev: false - - /kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - dev: false - - /merkletreejs@0.3.11: - resolution: {integrity: sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ==} - engines: {node: '>= 7.6.0'} - dependencies: - bignumber.js: 9.1.2 - buffer-reverse: 1.0.1 - crypto-js: 4.2.0 - treeify: 1.1.0 - web3-utils: 1.10.3 - dev: false - - /micro-ftch@0.3.1: - resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} - dev: false - - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: false - - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: false - - /number-to-bn@1.7.0: - resolution: {integrity: sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==} - engines: {node: '>=6.5.0', npm: '>=3'} - dependencies: - bn.js: 4.11.6 - strip-hex-prefix: 1.0.0 - dev: false - - /prettier@1.18.2: - resolution: {integrity: sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==} - engines: {node: '>=4'} - hasBin: true - dev: false - - /prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - dev: false - - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: false - - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - dependencies: - safe-buffer: 5.2.1 - dev: false - - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: false - - /sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - dev: false - - /strip-hex-prefix@1.0.0: - resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==} - engines: {node: '>=6.5.0', npm: '>=3'} - dependencies: - is-hex-prefixed: 1.0.0 - dev: false - - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - dev: false - - /treeify@1.1.0: - resolution: {integrity: sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==} - engines: {node: '>=0.6'} - dev: false - - /tslib@2.4.0: - resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} - dev: false - - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} - hasBin: true - - /utf8@3.0.0: - resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} - dev: false - - /viem@1.21.4(typescript@5.3.3): - resolution: {integrity: sha512-BNVYdSaUjeS2zKQgPs+49e5JKocfo60Ib2yiXOWBT6LuVxY1I/6fFX3waEtpXvL1Xn4qu+BVitVtMh9lyThyhQ==} - peerDependencies: - typescript: '>=5.0.4' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@adraffy/ens-normalize': 1.10.0 - '@noble/curves': 1.2.0 - '@noble/hashes': 1.3.2 - '@scure/bip32': 1.3.2 - '@scure/bip39': 1.2.1 - abitype: 0.9.8(typescript@5.3.3) - isows: 1.0.3(ws@8.13.0) - typescript: 5.3.3 - ws: 8.13.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - zod - dev: false - - /viem@2.5.0(typescript@5.3.3): - resolution: {integrity: sha512-ytHXIWtlgPs4mcsGxXjJrQ25v+N4dE2hBzgCU8CVv4iXNh3PRFRgyYa7igZlmxiMVzkfSHHADOtivS980JhilA==} - peerDependencies: - typescript: '>=5.0.4' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@adraffy/ens-normalize': 1.10.0 - '@noble/curves': 1.2.0 - '@noble/hashes': 1.3.2 - '@scure/bip32': 1.3.2 - '@scure/bip39': 1.2.1 - abitype: 1.0.0(typescript@5.3.3) - isows: 1.0.3(ws@8.13.0) - typescript: 5.3.3 - ws: 8.13.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - zod - dev: false - - /web3-utils@1.10.3: - resolution: {integrity: sha512-OqcUrEE16fDBbGoQtZXWdavsPzbGIDc5v3VrRTZ0XrIpefC/viZ1ZU9bGEemazyS0catk/3rkOOxpzTfY+XsyQ==} - engines: {node: '>=8.0.0'} - dependencies: - '@ethereumjs/util': 8.1.0 - bn.js: 5.2.1 - ethereum-bloom-filters: 1.0.10 - ethereum-cryptography: 2.1.2 - ethjs-unit: 0.1.6 - number-to-bn: 1.7.0 - randombytes: 2.1.0 - utf8: 3.0.0 - dev: false - - /ws@8.13.0: - resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false - - /ws@8.5.0: - resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false diff --git a/script/replaceSha.sh b/script/replaceSha.sh new file mode 100755 index 0000000..a63f537 --- /dev/null +++ b/script/replaceSha.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +new_sha=$(shasum -a 256 build/axiom-std-cli-build.js | awk '{print $1}') + +file_path="src/test/AxiomCli.sol" + +if [[ "$OSTYPE" == "darwin"* ]]; then + sed -i '' "s/hex\"[a-f0-9]*\"/hex\"$new_sha\"/" "$file_path" +else + sed -i "s/hex\"[a-f0-9]*\"/hex\"$new_sha\"/" "$file_path" +fi diff --git a/src/test/AxiomCli.sol b/src/test/AxiomCli.sol new file mode 100644 index 0000000..2b024ae --- /dev/null +++ b/src/test/AxiomCli.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +library AxiomCli { + + /// @dev The SHA256 hash of the Axiom CLI binary + bytes public constant CLI_SHASUM = hex"9cd1fe6fa610c3659d07642ef5f26187d2ace2cdd23402328bc4d364a08daf20"; +} \ No newline at end of file diff --git a/src/test/AxiomTest.sol b/src/test/AxiomTest.sol index 628b224..899facf 100644 --- a/src/test/AxiomTest.sol +++ b/src/test/AxiomTest.sol @@ -3,22 +3,58 @@ pragma solidity ^0.8.0; import "forge-std/Test.sol"; import "forge-std/console.sol"; -import "./AxiomVm.sol"; +// 🧩 MODULES +import {AxiomVm, Query, Axiom, QueryArgs, FulfillCallbackArgs} from "./AxiomVm.sol"; import { IAxiomV2Core } from "@axiom-crypto/v2-periphery/interfaces/core/IAxiomV2Core.sol"; import { IAxiomV2Query } from "@axiom-crypto/v2-periphery/interfaces/query/IAxiomV2Query.sol"; import { IAxiomV2Client } from "@axiom-crypto/v2-periphery/interfaces/client/IAxiomV2Client.sol"; import { AxiomV2Addresses } from "@axiom-crypto/v2-periphery/client/AxiomV2Addresses.sol"; +// ⭐️ TEST +/// @title AxiomTest +/// @dev An extension to the Foundry test contract that sets up an Axiom environment and provides +/// cheatcodes for testing Axiom client contracts abstract contract AxiomTest is Test { + /// @dev The address of the AxiomV2Core contract address public axiomV2CoreAddress; + + /// @dev The address of the AxiomV2Query contract address public axiomV2QueryAddress; + /// @dev The AxiomV2Core contract IAxiomV2Core public axiomV2Core; + + /// @dev The AxiomV2Query contract IAxiomV2Query public axiomV2Query; + /// @dev The AxiomVm contract AxiomVm axiomVm; + /// @dev Event emitted when a query is initiated on-chain + event QueryInitiatedOnchain( + address indexed caller, + bytes32 indexed queryHash, + uint256 indexed queryId, + bytes32 userSalt, + address refundee, + address target, + bytes extraData + ); + + /// @dev Event emitted when a query is initiated on-chain + event QueryFeeInfoRecorded( + uint256 indexed queryId, + address indexed payor, + uint32 deadlineBlockNumber, + uint64 maxFeePerGas, + uint32 callbackGasLimit, + uint256 amount + ); + + /// @dev Create a forked test environment and set up Axiom contracts + /// @param urlOrAlias The URL or alias of the fork to create + /// @param forkBlock The block number to fork from function _createSelectForkAndSetupAxiom(string memory urlOrAlias, uint256 forkBlock) internal { vm.createSelectFork(urlOrAlias, forkBlock); uint64 chainId = uint64(block.chainid); @@ -57,15 +93,43 @@ abstract contract AxiomTest is Test { axiomVm = new AxiomVm(axiomV2QueryAddress, urlOrAlias); } + /// @dev Create a query into Axiom with default parameters + /// @param _querySchema The query schema to use + /// @param input The input data for the query + /// @param callbackTarget The address of the contract to send a callback to function query(bytes32 _querySchema, bytes memory input, address callbackTarget) internal view returns (Query memory) { + return query( + _querySchema, + input, + callbackTarget, + bytes(""), + IAxiomV2Query.AxiomV2FeeData({ maxFeePerGas: 25 gwei, callbackGasLimit: 1_000_000, overrideAxiomQueryFee: 0 }) + ); + } + + /// @dev Create a query into Axiom with advanced parameters + /// @param _querySchema The query schema to use + /// @param input The input data for the query + /// @param callbackTarget The address of the contract to send a callback to + /// @param callbackExtraData Extra data to include in the callback + /// @param feeData The fee data for the query + function query( + bytes32 _querySchema, + bytes memory input, + address callbackTarget, + bytes memory callbackExtraData, + IAxiomV2Query.AxiomV2FeeData memory feeData + ) internal view returns (Query memory) { return Query({ querySchema: _querySchema, input: input, callbackTarget: callbackTarget, + callbackExtraData: callbackExtraData, + feeData: feeData, axiomVm: axiomVm, outputString: "" }); diff --git a/src/test/AxiomVm.sol b/src/test/AxiomVm.sol index 33c3d80..3cc4934 100644 --- a/src/test/AxiomVm.sol +++ b/src/test/AxiomVm.sol @@ -8,6 +8,18 @@ import { IAxiomV2Query } from "@axiom-crypto/v2-periphery/interfaces/query/IAxio import { IAxiomV2Client } from "@axiom-crypto/v2-periphery/interfaces/client/IAxiomV2Client.sol"; import { AxiomV2Addresses } from "@axiom-crypto/v2-periphery/client/AxiomV2Addresses.sol"; +import { AxiomCli } from "./AxiomCli.sol"; + +/// @dev Arguments for constructing a query into Axiom +/// @param sourceChainId The chain ID of the chain that the query is being sent from +/// @param dataQueryHash The hash of the data query +/// @param computeQuery The compute query +/// @param callback The callback +/// @param feeData The fee data +/// @param userSalt The user salt +/// @param refundee The refundee +/// @param dataQuery The data query +/// @param value The value to send with the query struct QueryArgs { uint64 sourceChainId; bytes32 dataQueryHash; @@ -20,6 +32,15 @@ struct QueryArgs { uint256 value; } +/// @dev Arguments for pranking a callback from Axiom +/// @param sourceChainId The chain ID of the chain that the query is being sent from +/// @param caller The address of the caller of the original query into Axiom +/// @param querySchema The query schema +/// @param queryId The query ID +/// @param axiomResults The results of the query +/// @param callbackExtraData The extra data to be passed to the callback contract +/// @param gasLimit The gas limit for the callback +/// @param callbackTarget The address of the callback contract struct FulfillCallbackArgs { uint64 sourceChainId; address caller; @@ -31,54 +52,66 @@ struct FulfillCallbackArgs { address callbackTarget; } +/// @dev A query into Axiom +/// @param querySchema The query schema +/// @param input The input data for the query +/// @param callbackTarget The address of the contract to send a callback to +/// @param callbackExtraData Extra data to include in the callback +/// @param feeData The fee data for the query +/// @param axiomVm The AxiomVm contract +/// @param outputString The output string from the query struct Query { bytes32 querySchema; bytes input; address callbackTarget; - string outputString; + bytes callbackExtraData; + IAxiomV2Query.AxiomV2FeeData feeData; AxiomVm axiomVm; + string outputString; } +/// @title Axiom +/// @dev A library to handle interactions between Query and the AxiomV2Query contract library Axiom { - function send(Query memory self) internal returns (bytes32[] memory) { - self.outputString = self.axiomVm.getArgsAndSendQuery(self.querySchema, self.input, self.callbackTarget); - return fulfill(self); + /// @dev Sends a query to Axiom + /// @param self The query to send + function send(Query memory self) internal { + self.outputString = self.axiomVm.getArgsAndSendQuery( + self.querySchema, self.input, self.callbackTarget, self.callbackExtraData, self.feeData + ); } - function fulfill(Query memory self) internal returns (bytes32[] memory) { - return fulfill( - self, - bytes(""), - IAxiomV2Query.AxiomV2FeeData({ maxFeePerGas: 25 gwei, callbackGasLimit: 1_000_000, overrideAxiomQueryFee: 0 }), - msg.sender - ); + /// @dev Pranks a callback from Axiom + /// @param self The query to fulfill the callback for + /// @return results The results of the query + function prankFulfill(Query memory self) internal returns (bytes32[] memory results) { + results = prankFulfill(self, msg.sender); } - function fulfill( - Query memory self, - bytes memory callbackExtraData, - IAxiomV2Query.AxiomV2FeeData memory feeData, - address caller - ) internal returns (bytes32[] memory) { + /// @dev Pranks a callback from Axiom + /// @param self The query to fulfill the callback for + /// @param caller The address of the caller of the original query into Axiom + /// @return results The results of the query + function prankFulfill(Query memory self, address caller) internal returns (bytes32[] memory results) { FulfillCallbackArgs memory args = self.axiomVm.fulfillCallbackArgs( - self.querySchema, self.input, self.callbackTarget, callbackExtraData, feeData, caller + self.querySchema, self.input, self.callbackTarget, self.callbackExtraData, self.feeData, caller ); self.axiomVm.prankCallback(args); - return args.axiomResults; + results = args.axiomResults; } } +/// @title AxiomVm +/// @dev A contract that provides cheatcodes for testing the AxiomV2Query contract contract AxiomVm is Test { - /// @dev Axiom CLI version to use - string constant CLI_VERSION = "2.0"; - string private constant CLI_VERSION_CHECK_CMD = string( - abi.encodePacked( - "npm list @axiom-crypto/client | grep -q '@axiom-crypto/client@", CLI_VERSION, "' && echo 1 || echo 0" - ) - ); - string private constant CLI_VERSION_ERROR = - string(abi.encodePacked("Axiom client v", CLI_VERSION, ".x not installed")); + /// @dev Path to the Axiom CLI + string CLI_PATH; + + /// @dev Command to run node scripts + string NODE_PATH; + + /// @dev The URL or alias of the JSON RPC provider string urlOrAlias; address public axiomV2QueryAddress; @@ -87,6 +120,42 @@ contract AxiomVm is Test { constructor(address _axiomV2QueryAddress, string memory _urlOrAlias) { axiomV2QueryAddress = _axiomV2QueryAddress; urlOrAlias = _urlOrAlias; + + string[] memory checkNpm = new string[](3); + checkNpm[0] = "sh"; + checkNpm[1] = "-c"; + checkNpm[2] = "command -v npm >/dev/null 2>&1 && echo 1 || echo 0"; + bytes memory npmOutput = vm.ffi(checkNpm); + require(_parseBoolean(string(npmOutput)), "NPM is required to run tests. Please install NPM and try again "); + NODE_PATH = "node"; + + string[] memory getDirectory = new string[](3); + getDirectory[0] = "sh"; + getDirectory[1] = "-c"; + getDirectory[2] = "find . -name axiom-std-marker -exec dirname {} \\;"; + bytes memory directory = vm.ffi(getDirectory); + + string[] memory bunInstall = new string[](3); + bunInstall[0] = "sh"; + bunInstall[1] = "-c"; + bunInstall[2] = string(abi.encodePacked("cd ", string(directory), " && npm install 2>/dev/null")); + vm.ffi(bunInstall); + + string[] memory cliPathFind = new string[](4); + cliPathFind[0] = "find"; + cliPathFind[1] = "."; + cliPathFind[2] = "-name"; + cliPathFind[3] = "axiom-std-cli-build.js"; + bytes memory path = vm.ffi(cliPathFind); + require(path.length > 0, "Axiom CLI not found."); + CLI_PATH = string(path); + + string[] memory checkCli = new string[](3); + checkCli[0] = "sh"; + checkCli[1] = "-c"; + checkCli[2] = string(abi.encodePacked("shasum -a 256 ", CLI_PATH, " | awk '{print $1}'")); + bytes memory sha = vm.ffi(checkCli); + require(keccak256(abi.encodePacked(sha)) == keccak256(abi.encodePacked(AxiomCli.CLI_SHASUM)), "Wrong CLI shasum. Make sure that there are no conflicting axiom-vm-cli.bin files in your folder."); } /** @@ -96,10 +165,9 @@ contract AxiomVm is Test { * @return querySchema */ function readCircuit(string memory _circuitPath, bytes memory input) public returns (bytes32 querySchema) { - _validateAxiomSetup(); string[] memory cli = new string[](6); - cli[0] = "node"; - cli[1] = "dist/index.js"; + cli[0] = NODE_PATH; + cli[1] = CLI_PATH; cli[2] = "readCircuit"; cli[3] = _circuitPath; cli[4] = vm.toString(input); @@ -113,11 +181,13 @@ contract AxiomVm is Test { /** * @dev Generates args for the sendQuery function + * @param querySchema the query schema * @param input path to the input file * @param callbackTarget the callback contract address * @param callbackExtraData extra data to be passed to the callback contract * @param feeData the fee data * @return args the sendQuery args + * @return queryString the query string */ function sendQueryArgs( bytes32 querySchema, @@ -130,6 +200,14 @@ contract AxiomVm is Test { args = parseQueryArgs(queryString); } + /** + * @dev Generates args for the sendQuery function with defaults for `callbackExtraData` and `feeData` + * @param querySchema the query schema + * @param input path to the input file + * @param callbackTarget the callback contract address + * @return args the sendQuery args + * @return queryString the query string + */ function sendQueryArgs(bytes32 querySchema, bytes memory input, address callbackTarget) public returns (QueryArgs memory args, string memory queryString) @@ -145,6 +223,8 @@ contract AxiomVm is Test { /** * @dev Generates arguments for the fulfillCallback function + * @param querySchema the query schema + * @param _queryString the query string * @param callbackTarget the callback contract address * @param feeData the fee data * @param caller the address of the caller @@ -174,6 +254,7 @@ contract AxiomVm is Test { /** * @dev Generates arguments for the fulfillCallback function + * @param querySchema the query schema * @param input path to the input file * @param callbackTarget the callback contract address * @param callbackExtraData extra data to be passed to the callback contract @@ -206,6 +287,7 @@ contract AxiomVm is Test { /** * @dev Generates the fulfill callback args and and fulfills the onchain query + * @param querySchema the query schema * @param input path to the input file * @param callbackTarget the callback contract address * @param callbackExtraData extra data to be passed to the callback contract @@ -238,6 +320,7 @@ contract AxiomVm is Test { /** * @dev Generates the fulfill callback args and fulfills the offchain query + * @param querySchema the query schema * @param input path to the input file * @param callbackTarget the callback contract address * @param callbackExtraData extra data to be passed to the callback contract @@ -259,8 +342,10 @@ contract AxiomVm is Test { /** * @dev Generates Query and sends a query to the AxiomV2Query contract. + * @param querySchema the query schema * @param input path to the input file * @param callbackTarget the callback contract address + * @return queryString the query string */ function getArgsAndSendQuery(bytes32 querySchema, bytes memory input, address callbackTarget) public @@ -281,24 +366,40 @@ contract AxiomVm is Test { ); } - function _parseBoolean(string memory value) internal pure returns (bool) { - return vm.parseUint(value) == 1; + /** + * @dev Generates Query and sends a query to the AxiomV2Query contract. + * @param querySchema the query schema + * @param input path to the input file + * @param callbackTarget the callback contract address + * @param callbackExtraData extra data to be passed to the callback contract + * @param feeData the fee data + * @return queryString the query string + */ + function getArgsAndSendQuery( + bytes32 querySchema, + bytes memory input, + address callbackTarget, + bytes memory callbackExtraData, + IAxiomV2Query.AxiomV2FeeData memory feeData + ) public returns (string memory queryString) { + (QueryArgs memory args, string memory _queryString) = + sendQueryArgs(querySchema, input, callbackTarget, callbackExtraData, feeData); + queryString = _queryString; + vm.prank(msg.sender); + IAxiomV2Query(axiomV2QueryAddress).sendQuery{ value: args.value }( + args.sourceChainId, + args.dataQueryHash, + args.computeQuery, + args.callback, + args.feeData, + args.userSalt, + args.refundee, + args.dataQuery + ); } - function _validateAxiomSetup() internal { - string[] memory npxCheck = new string[](3); - npxCheck[0] = "sh"; - npxCheck[1] = "-c"; - npxCheck[2] = "command -v npx >/dev/null 2>&1 && echo 1 || echo 0"; - bytes memory npxOutput = vm.ffi(npxCheck); - require(_parseBoolean(string(npxOutput)), "NPX is not installed."); - - string[] memory axiomCheck = new string[](3); - axiomCheck[0] = "sh"; - axiomCheck[1] = "-c"; - axiomCheck[2] = CLI_VERSION_CHECK_CMD; - bytes memory axiomOutput = vm.ffi(axiomCheck); - require(_parseBoolean(string(axiomOutput)), CLI_VERSION_ERROR); + function _parseBoolean(string memory value) internal pure returns (bool) { + return vm.parseUint(value) == 1; } function _run( @@ -308,11 +409,10 @@ contract AxiomVm is Test { bytes memory callbackExtraData, IAxiomV2Query.AxiomV2FeeData memory feeData ) internal returns (string memory output) { - _validateAxiomSetup(); require(bytes(compiledStrings[querySchema]).length > 0, "Circuit has not been compiled. Run `compile` first."); string[] memory cli = new string[](13); - cli[0] = "node"; - cli[1] = "dist/index.js"; + cli[0] = NODE_PATH; + cli[1] = CLI_PATH; cli[2] = "prove"; cli[3] = compiledStrings[querySchema]; cli[4] = vm.toString(input); diff --git a/test/AverageBalance.t.sol b/test/AverageBalance.t.sol index f6c90a7..05d9e02 100644 --- a/test/AverageBalance.t.sol +++ b/test/AverageBalance.t.sol @@ -17,9 +17,6 @@ contract AverageBalanceTest is AxiomTest { Input public defaultInput; bytes32 public querySchema; - bytes public callbackExtraData; - IAxiomV2Query.AxiomV2FeeData public feeData; - function setUp() public { _createSelectForkAndSetupAxiom("sepolia", 5_103_100); @@ -27,76 +24,56 @@ contract AverageBalanceTest is AxiomTest { Input({ blockNumber: 4_205_938, _address: uint256(uint160(0x8018fe32fCFd3d166E8b4c4E37105318A84BA11b)) }); querySchema = axiomVm.readCircuit("test/circuit/average.circuit.ts", abi.encode(defaultInput)); averageBalance = new AverageBalance(axiomV2QueryAddress, uint64(block.chainid), querySchema); - - feeData = IAxiomV2Query.AxiomV2FeeData({ - maxFeePerGas: 25 gwei, - callbackGasLimit: 1_000_000, - overrideAxiomQueryFee: 0 - }); - callbackExtraData = bytes(""); } - function test_e2e_example() public { + /// @dev Simple demonstration of testing an Axiom client contract using Axiom cheatcodes + function test_simple_example() public { + // create a query into Axiom with default parameters Query memory q = query(querySchema, abi.encode(defaultInput), address(averageBalance)); - bytes32[] memory results = q.send(); + + // send the query to Axiom + q.send(); + + // prank fulfillment of the query, returning the Axiom results + bytes32[] memory results = q.prankFulfill(); + + // parse Axiom results and verify length is as expected assertEq(results.length, 3); uint256 blockNumber = uint256(results[0]); address addr = address(uint160(uint256(results[1]))); uint256 avg = uint256(results[2]); + + // verify the average balance recorded in AverageBalance is as expected assertEq(avg, averageBalance.provenAverageBalances(blockNumber, addr)); } - function test_SendQuery() public { - axiomVm.getArgsAndSendQuery(querySchema, abi.encode(defaultInput), address(averageBalance)); - } + /// @dev Testing an Axiom client contract using Axiom cheatcodes with advanced parameters + function test_advanced_example() public { + // set up optional parameters for the query callback and fees + bytes memory callbackExtraData = bytes("deadbeef00000000000000000000000000000000000000000000000000000000"); + IAxiomV2Query.AxiomV2FeeData memory feeData = IAxiomV2Query.AxiomV2FeeData({ + maxFeePerGas: 35 gwei, + callbackGasLimit: 1_000_000, + overrideAxiomQueryFee: 0 + }); - function test_SendQueryWithArgs() public { - (QueryArgs memory args,) = axiomVm.sendQueryArgs( - querySchema, abi.encode(defaultInput), address(averageBalance), callbackExtraData, feeData - ); - axiomV2Query.sendQuery{ value: args.value }( - args.sourceChainId, - args.dataQueryHash, - args.computeQuery, - args.callback, - args.feeData, - args.userSalt, - args.refundee, - args.dataQuery - ); - } + // create a query into Axiom with custom `callbackExtraData` and `feeData` + Query memory q = + query(querySchema, abi.encode(defaultInput), address(averageBalance), callbackExtraData, feeData); - function test_callback() public { - axiomVm.prankCallback( - querySchema, abi.encode(defaultInput), address(averageBalance), callbackExtraData, feeData, msg.sender - ); - } + // send the query to Axiom + q.send(); - function test_callbackWithArgs() public { - FulfillCallbackArgs memory args = axiomVm.fulfillCallbackArgs( - querySchema, abi.encode(defaultInput), address(averageBalance), callbackExtraData, feeData, msg.sender - ); - axiomVm.prankCallback(args); - } + // prank fulfillment of the query, returning the Axiom results + bytes32[] memory results = q.prankFulfill(); - function test_offchainCallback() public { - axiomVm.prankOffchainCallback( - querySchema, abi.encode(defaultInput), address(averageBalance), callbackExtraData, feeData, msg.sender - ); - } + // parse Axiom results and verify length is as expected + assertEq(results.length, 3); + uint256 blockNumber = uint256(results[0]); + address addr = address(uint160(uint256(results[1]))); + uint256 avg = uint256(results[2]); - function test_offchainCallbackWithArgs() public { - FulfillCallbackArgs memory args = axiomVm.fulfillCallbackArgs( - querySchema, abi.encode(defaultInput), address(averageBalance), callbackExtraData, feeData, msg.sender - ); - axiomVm.prankOffchainCallback(args); + // verify the average balance recorded in AverageBalance is as expected + assertEq(avg, averageBalance.provenAverageBalances(blockNumber, addr)); } - - // function test_compileNotMocked() public { - // axiomVm.setMock(false); - // bytes32 querySchema = axiomVm.readCircuit("test/circuit/average.circuit.ts", inputPath); - // require( - // querySchema != bytes32(0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef), "compile failed" - // ); - // } } diff --git a/test/AxiomStd.t.sol b/test/AxiomStd.t.sol new file mode 100644 index 0000000..cc29650 --- /dev/null +++ b/test/AxiomStd.t.sol @@ -0,0 +1,93 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { FulfillCallbackArgs, QueryArgs } from "../src/test/AxiomVm.sol"; +import { AxiomTest } from "../src/test/AxiomTest.sol"; + +import { IAxiomV2Query } from "@axiom-crypto/v2-periphery/interfaces/query/IAxiomV2Query.sol"; + +import { AverageBalance } from "./example/AverageBalance.sol"; + +contract AxiomStdTest is AxiomTest { + struct Input { + uint256 blockNumber; + uint256 _address; + } + + AverageBalance public averageBalance; + Input public defaultInput; + bytes32 public querySchema; + + bytes public callbackExtraData; + IAxiomV2Query.AxiomV2FeeData public feeData; + + function setUp() public { + _createSelectForkAndSetupAxiom("sepolia", 5_103_100); + + defaultInput = + Input({ blockNumber: 4_205_938, _address: uint256(uint160(0x8018fe32fCFd3d166E8b4c4E37105318A84BA11b)) }); + querySchema = axiomVm.readCircuit("test/circuit/average.circuit.ts", abi.encode(defaultInput)); + averageBalance = new AverageBalance(axiomV2QueryAddress, uint64(block.chainid), querySchema); + + callbackExtraData = bytes(""); + feeData = IAxiomV2Query.AxiomV2FeeData({ + maxFeePerGas: 25 gwei, + callbackGasLimit: 1_000_000, + overrideAxiomQueryFee: 0 + }); + } + + function test_SendQuery() public { + axiomVm.getArgsAndSendQuery(querySchema, abi.encode(defaultInput), address(averageBalance)); + } + + function test_SendQueryWithArgs() public { + (QueryArgs memory args,) = axiomVm.sendQueryArgs( + querySchema, abi.encode(defaultInput), address(averageBalance), callbackExtraData, feeData + ); + axiomV2Query.sendQuery{ value: args.value }( + args.sourceChainId, + args.dataQueryHash, + args.computeQuery, + args.callback, + args.feeData, + args.userSalt, + args.refundee, + args.dataQuery + ); + } + + function test_callback() public { + axiomVm.prankCallback( + querySchema, abi.encode(defaultInput), address(averageBalance), callbackExtraData, feeData, msg.sender + ); + } + + function test_callbackWithArgs() public { + FulfillCallbackArgs memory args = axiomVm.fulfillCallbackArgs( + querySchema, abi.encode(defaultInput), address(averageBalance), callbackExtraData, feeData, msg.sender + ); + axiomVm.prankCallback(args); + } + + function test_offchainCallback() public { + axiomVm.prankOffchainCallback( + querySchema, abi.encode(defaultInput), address(averageBalance), callbackExtraData, feeData, msg.sender + ); + } + + function test_offchainCallbackWithArgs() public { + FulfillCallbackArgs memory args = axiomVm.fulfillCallbackArgs( + querySchema, abi.encode(defaultInput), address(averageBalance), callbackExtraData, feeData, msg.sender + ); + axiomVm.prankOffchainCallback(args); + } + + // function test_compileNotMocked() public { + // axiomVm.setMock(false); + // bytes32 querySchema = axiomVm.readCircuit("test/circuit/average.circuit.ts", inputPath); + // require( + // querySchema != bytes32(0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef), "compile failed" + // ); + // } +}