From b6a328aaa0fed32e39157592212c20fae5ca5051 Mon Sep 17 00:00:00 2001 From: pgherveou Date: Thu, 16 Oct 2025 11:51:10 +0300 Subject: [PATCH 1/3] fixing --- .github/workflows/lint.yml | 47 +++++++++ .gitignore | 6 -- README.md | 11 +- abi/Errors.json | 106 +++++++++++++++++++ abi/Errors.ts | 106 +++++++++++++++++++ abi/EventExample.json | 34 ++++++ abi/EventExample.ts | 34 ++++++ abi/Flipper.json | 40 +++++++ abi/Flipper.ts | 40 +++++++ abi/FlipperCaller.json | 46 ++++++++ abi/FlipperCaller.ts | 46 ++++++++ abi/PiggyBank.json | 65 ++++++++++++ abi/PiggyBank.ts | 65 ++++++++++++ abi/PretraceFixture.json | 174 +++++++++++++++++++++++++++++++ abi/PretraceFixture.ts | 174 +++++++++++++++++++++++++++++++ abi/PretraceFixtureChild.json | 22 ++++ abi/PretraceFixtureChild.ts | 22 ++++ abi/Storage.json | 59 +++++++++++ abi/Storage.ts | 59 +++++++++++ abi/Tester.json | 72 +++++++++++++ abi/Tester.ts | 72 +++++++++++++ abi/TracingCallee.json | 39 +++++++ abi/TracingCallee.ts | 39 +++++++ abi/TracingCaller.json | 84 +++++++++++++++ abi/TracingCaller.ts | 84 +++++++++++++++ contracts/PiggyBank.sol | 32 ------ contracts/Storage.sol | 30 ------ evm/Errors.bin | Bin 0 -> 1889 bytes evm/EventExample.bin | Bin 0 -> 466 bytes evm/Flipper.bin | Bin 0 -> 353 bytes evm/FlipperCaller.bin | Bin 0 -> 995 bytes evm/PretraceFixture.bin | Bin 0 -> 5168 bytes evm/PretraceFixtureChild.bin | Bin 0 -> 335 bytes evm/Tester.bin | Bin 0 -> 2748 bytes evm/TracingCallee.bin | Bin 0 -> 695 bytes evm/TracingCaller.bin | Bin 0 -> 2825 bytes pvm/Errors.polkavm | Bin 0 -> 5261 bytes pvm/EventExample.polkavm | Bin 0 -> 2617 bytes pvm/Flipper.polkavm | Bin 0 -> 2424 bytes pvm/FlipperCaller.polkavm | Bin 0 -> 4475 bytes pvm/PiggyBank.polkavm | Bin 0 -> 5194 bytes pvm/PretraceFixture.polkavm | Bin 0 -> 16441 bytes pvm/PretraceFixtureChild.polkavm | Bin 0 -> 1867 bytes pvm/Storage.polkavm | Bin 0 -> 3011 bytes pvm/Tester.polkavm | Bin 0 -> 9358 bytes pvm/TracingCallee.polkavm | Bin 0 -> 2594 bytes pvm/TracingCaller.polkavm | Bin 0 -> 8453 bytes 47 files changed, 1537 insertions(+), 71 deletions(-) create mode 100644 .github/workflows/lint.yml create mode 100644 abi/Errors.json create mode 100644 abi/Errors.ts create mode 100644 abi/EventExample.json create mode 100644 abi/EventExample.ts create mode 100644 abi/Flipper.json create mode 100644 abi/Flipper.ts create mode 100644 abi/FlipperCaller.json create mode 100644 abi/FlipperCaller.ts create mode 100644 abi/PiggyBank.json create mode 100644 abi/PiggyBank.ts create mode 100644 abi/PretraceFixture.json create mode 100644 abi/PretraceFixture.ts create mode 100644 abi/PretraceFixtureChild.json create mode 100644 abi/PretraceFixtureChild.ts create mode 100644 abi/Storage.json create mode 100644 abi/Storage.ts create mode 100644 abi/Tester.json create mode 100644 abi/Tester.ts create mode 100644 abi/TracingCallee.json create mode 100644 abi/TracingCallee.ts create mode 100644 abi/TracingCaller.json create mode 100644 abi/TracingCaller.ts delete mode 100644 contracts/PiggyBank.sol delete mode 100644 contracts/Storage.sol create mode 100644 evm/Errors.bin create mode 100644 evm/EventExample.bin create mode 100644 evm/Flipper.bin create mode 100644 evm/FlipperCaller.bin create mode 100644 evm/PretraceFixture.bin create mode 100644 evm/PretraceFixtureChild.bin create mode 100644 evm/Tester.bin create mode 100644 evm/TracingCallee.bin create mode 100644 evm/TracingCaller.bin create mode 100644 pvm/Errors.polkavm create mode 100644 pvm/EventExample.polkavm create mode 100644 pvm/Flipper.polkavm create mode 100644 pvm/FlipperCaller.polkavm create mode 100644 pvm/PiggyBank.polkavm create mode 100644 pvm/PretraceFixture.polkavm create mode 100644 pvm/PretraceFixtureChild.polkavm create mode 100644 pvm/Storage.polkavm create mode 100644 pvm/Tester.polkavm create mode 100644 pvm/TracingCallee.polkavm create mode 100644 pvm/TracingCaller.polkavm diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..b3a4156 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,47 @@ +name: Lint + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + lint: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Deno + uses: denoland/setup-deno@v2 + with: + deno-version: v2.x + + - name: Run linter + run: deno task lint + + - name: Check contracts + run: | + echo "Download the resolc binary" + wget -O resolc https://github.com/paritytech/revive/releases/download/v0.3.0/resolc-x86_64-unknown-linux-musl -q + chmod +x resolc + sudo mv resolc /usr/local/bin + resolc --version + + echo "Installing solc" + wget https://github.com/ethereum/solidity/releases/download/v0.8.30/solc-static-linux -q + chmod +x solc-static-linux + sudo mv solc-static-linux /usr/local/bin/solc + + echo "Building fixture contracts" + deno task build + + echo "Verifying no new files were created (bytecode should be committed)" + if [ -n "$(git status --porcelain)" ]; then + echo "Error: Build created new or modified files. All bytecode should be committed." + git status + exit 1 + fi + echo "Success: All contract bytecode is up to date" diff --git a/.gitignore b/.gitignore index 96ccea9..529be5b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,6 @@ # Logs logs *.log -abi/* -pvm/* -evm/* npm-debug.log* yarn-debug.log* yarn-error.log* @@ -14,9 +11,6 @@ node_modules dist dist-ssr *.local -abi/* -evm/* -pvm/* !.gitkeep src/samples diff --git a/README.md b/README.md index 29e23d7..67b36bb 100644 --- a/README.md +++ b/README.md @@ -9,9 +9,6 @@ This repository contains a test suite for Ethereum rpc methods. ## Running Tests ```bash -# build the contracts -deno task build - # start revive and eth rpc, then run tests with pvm bytecode deno task test:pvm # start revive and eth rpc, then run tests with evm bytecode @@ -20,6 +17,14 @@ deno task test:evm deno task test:geth ``` +## Building contracts + +Contracts bytecode and abi is checked in into this repository, if you need to add new contracts, you can simply run the build command: + +```bash +deno task build +``` + ### Linting To check code formatting and run linter: diff --git a/abi/Errors.json b/abi/Errors.json new file mode 100644 index 0000000..2d8dccc --- /dev/null +++ b/abi/Errors.json @@ -0,0 +1,106 @@ +[ + { + "inputs": [ + { + "internalType": "string", + "name": "message", + "type": "string" + } + ], + "name": "CustomError", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "newState", + "type": "bool" + } + ], + "name": "setState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "state", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "triggerAssertError", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "triggerCustomError", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "triggerDivisionByZero", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "triggerOutOfBoundsError", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "triggerRequireError", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "triggerRevertError", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "valueMatch", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } +] \ No newline at end of file diff --git a/abi/Errors.ts b/abi/Errors.ts new file mode 100644 index 0000000..e5a95ee --- /dev/null +++ b/abi/Errors.ts @@ -0,0 +1,106 @@ +export const ErrorsAbi = [ + { + "inputs": [ + { + "internalType": "string", + "name": "message", + "type": "string" + } + ], + "name": "CustomError", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "newState", + "type": "bool" + } + ], + "name": "setState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "state", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "triggerAssertError", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "triggerCustomError", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "triggerDivisionByZero", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "triggerOutOfBoundsError", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "triggerRequireError", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "triggerRevertError", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "valueMatch", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } +] as const diff --git a/abi/EventExample.json b/abi/EventExample.json new file mode 100644 index 0000000..a64c920 --- /dev/null +++ b/abi/EventExample.json @@ -0,0 +1,34 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + } + ], + "name": "ExampleEvent", + "type": "event" + }, + { + "inputs": [], + "name": "triggerEvent", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/abi/EventExample.ts b/abi/EventExample.ts new file mode 100644 index 0000000..f346337 --- /dev/null +++ b/abi/EventExample.ts @@ -0,0 +1,34 @@ +export const EventExampleAbi = [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + } + ], + "name": "ExampleEvent", + "type": "event" + }, + { + "inputs": [], + "name": "triggerEvent", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] as const diff --git a/abi/Flipper.json b/abi/Flipper.json new file mode 100644 index 0000000..a4ce65a --- /dev/null +++ b/abi/Flipper.json @@ -0,0 +1,40 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "flip", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getValue", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "value", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/abi/Flipper.ts b/abi/Flipper.ts new file mode 100644 index 0000000..171fc60 --- /dev/null +++ b/abi/Flipper.ts @@ -0,0 +1,40 @@ +export const FlipperAbi = [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "flip", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getValue", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "value", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } +] as const diff --git a/abi/FlipperCaller.json b/abi/FlipperCaller.json new file mode 100644 index 0000000..c4ed422 --- /dev/null +++ b/abi/FlipperCaller.json @@ -0,0 +1,46 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_flipperAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "callFlip", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "callGetValue", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "flipperAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/abi/FlipperCaller.ts b/abi/FlipperCaller.ts new file mode 100644 index 0000000..1f8f756 --- /dev/null +++ b/abi/FlipperCaller.ts @@ -0,0 +1,46 @@ +export const FlipperCallerAbi = [ + { + "inputs": [ + { + "internalType": "address", + "name": "_flipperAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "callFlip", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "callGetValue", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "flipperAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } +] as const diff --git a/abi/PiggyBank.json b/abi/PiggyBank.json new file mode 100644 index 0000000..e665588 --- /dev/null +++ b/abi/PiggyBank.json @@ -0,0 +1,65 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "deposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [ + { + "internalType": "uint256", + "name": "remainingBal", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/abi/PiggyBank.ts b/abi/PiggyBank.ts new file mode 100644 index 0000000..0417398 --- /dev/null +++ b/abi/PiggyBank.ts @@ -0,0 +1,65 @@ +export const PiggyBankAbi = [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "deposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [ + { + "internalType": "uint256", + "name": "remainingBal", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } +] as const diff --git a/abi/PretraceFixture.json b/abi/PretraceFixture.json new file mode 100644 index 0000000..5b98f9e --- /dev/null +++ b/abi/PretraceFixture.json @@ -0,0 +1,174 @@ +[ + { + "inputs": [], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "balances", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "childAddr", + "type": "address" + } + ], + "name": "callContract", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "createChild", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "childAddr", + "type": "address" + } + ], + "name": "delegatecallContract", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getContractBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getExternalBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "readStorage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "str", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "value", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "string", + "name": "_str", + "type": "string" + } + ], + "name": "writeStorage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/abi/PretraceFixture.ts b/abi/PretraceFixture.ts new file mode 100644 index 0000000..153cda9 --- /dev/null +++ b/abi/PretraceFixture.ts @@ -0,0 +1,174 @@ +export const PretraceFixtureAbi = [ + { + "inputs": [], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "balances", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "childAddr", + "type": "address" + } + ], + "name": "callContract", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "createChild", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "childAddr", + "type": "address" + } + ], + "name": "delegatecallContract", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getContractBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getExternalBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "readStorage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "str", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "value", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "string", + "name": "_str", + "type": "string" + } + ], + "name": "writeStorage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] as const diff --git a/abi/PretraceFixtureChild.json b/abi/PretraceFixtureChild.json new file mode 100644 index 0000000..5c5ae09 --- /dev/null +++ b/abi/PretraceFixtureChild.json @@ -0,0 +1,22 @@ +[ + { + "inputs": [], + "name": "increment", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "value", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/abi/PretraceFixtureChild.ts b/abi/PretraceFixtureChild.ts new file mode 100644 index 0000000..93c2434 --- /dev/null +++ b/abi/PretraceFixtureChild.ts @@ -0,0 +1,22 @@ +export const PretraceFixtureChildAbi = [ + { + "inputs": [], + "name": "increment", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "value", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } +] as const diff --git a/abi/Storage.json b/abi/Storage.json new file mode 100644 index 0000000..137758f --- /dev/null +++ b/abi/Storage.json @@ -0,0 +1,59 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "n1", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "n2", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "num", + "type": "uint256" + } + ], + "name": "write_n1_read_n2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "num", + "type": "uint256" + } + ], + "name": "write_n2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/abi/Storage.ts b/abi/Storage.ts new file mode 100644 index 0000000..64e5f4a --- /dev/null +++ b/abi/Storage.ts @@ -0,0 +1,59 @@ +export const StorageAbi = [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "n1", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "n2", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "num", + "type": "uint256" + } + ], + "name": "write_n1_read_n2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "num", + "type": "uint256" + } + ], + "name": "write_n2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] as const diff --git a/abi/Tester.json b/abi/Tester.json new file mode 100644 index 0000000..73eebc8 --- /dev/null +++ b/abi/Tester.json @@ -0,0 +1,72 @@ +[ + { + "inputs": [], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "creator", + "type": "address" + } + ], + "name": "TesterDeployed", + "type": "event" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "v", + "type": "string" + } + ], + "name": "setName", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "v", + "type": "uint256" + } + ], + "name": "setValue", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "value", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/abi/Tester.ts b/abi/Tester.ts new file mode 100644 index 0000000..1ba70c7 --- /dev/null +++ b/abi/Tester.ts @@ -0,0 +1,72 @@ +export const TesterAbi = [ + { + "inputs": [], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "creator", + "type": "address" + } + ], + "name": "TesterDeployed", + "type": "event" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "v", + "type": "string" + } + ], + "name": "setName", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "v", + "type": "uint256" + } + ], + "name": "setValue", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "value", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } +] as const diff --git a/abi/TracingCallee.json b/abi/TracingCallee.json new file mode 100644 index 0000000..1d7e2d5 --- /dev/null +++ b/abi/TracingCallee.json @@ -0,0 +1,39 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "counter", + "type": "uint256" + } + ], + "name": "CalleeCalled", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "counter", + "type": "uint256" + } + ], + "name": "consumeGas", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "failingFunction", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } +] \ No newline at end of file diff --git a/abi/TracingCallee.ts b/abi/TracingCallee.ts new file mode 100644 index 0000000..0b0a60b --- /dev/null +++ b/abi/TracingCallee.ts @@ -0,0 +1,39 @@ +export const TracingCalleeAbi = [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "counter", + "type": "uint256" + } + ], + "name": "CalleeCalled", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "counter", + "type": "uint256" + } + ], + "name": "consumeGas", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "failingFunction", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } +] as const diff --git a/abi/TracingCaller.json b/abi/TracingCaller.json new file mode 100644 index 0000000..61e94f0 --- /dev/null +++ b/abi/TracingCaller.json @@ -0,0 +1,84 @@ +[ + { + "inputs": [ + { + "internalType": "address payable", + "name": "_callee", + "type": "address" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + } + ], + "name": "TraceEvent", + "type": "event" + }, + { + "inputs": [], + "name": "callee", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "create", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "create2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "counter", + "type": "uint256" + } + ], + "name": "start", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/abi/TracingCaller.ts b/abi/TracingCaller.ts new file mode 100644 index 0000000..6dc29ef --- /dev/null +++ b/abi/TracingCaller.ts @@ -0,0 +1,84 @@ +export const TracingCallerAbi = [ + { + "inputs": [ + { + "internalType": "address payable", + "name": "_callee", + "type": "address" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + } + ], + "name": "TraceEvent", + "type": "event" + }, + { + "inputs": [], + "name": "callee", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "create", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "create2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "counter", + "type": "uint256" + } + ], + "name": "start", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] as const diff --git a/contracts/PiggyBank.sol b/contracts/PiggyBank.sol deleted file mode 100644 index c50f551..0000000 --- a/contracts/PiggyBank.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -contract PiggyBank { - uint256 private balance; - address public owner; - - constructor() { - owner = msg.sender; - balance = 0; - } - - function deposit() public payable returns (uint256) { - balance += msg.value; - return balance; - } - - function getDeposit() public view returns (uint256) { - return balance; - } - - function withdraw( - uint256 withdrawAmount - ) public returns (uint256 remainingBal) { - require(msg.sender == owner, 'You are not the owner'); - balance -= withdrawAmount; - (bool success, ) = payable(msg.sender).call{value: withdrawAmount}(''); - require(success, 'Transfer failed'); - - return balance; - } -} diff --git a/contracts/Storage.sol b/contracts/Storage.sol deleted file mode 100644 index 4d6ed2f..0000000 --- a/contracts/Storage.sol +++ /dev/null @@ -1,30 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 - -pragma solidity >=0.8.2 <0.9.0; - -/** - * @title Storage - * @dev Store & retrieve value in a variable - * @custom:dev-run-script ./scripts/deploy_with_ethers.ts - */ -contract Storage { - uint256 public n1; - uint256 public n2; - - constructor() { - n1 = 42; - n2 = 100; - } - - /** - * @dev Store value in variable - * @param num value to store - */ - function write_n1_read_n2(uint256 num) public { - n1 = num + n2; - } - - function write_n2(uint256 num) public { - n2 = num; - } -} diff --git a/evm/Errors.bin b/evm/Errors.bin new file mode 100644 index 0000000000000000000000000000000000000000..2d17f6908ec3f19ee07e2bd8cbc70504d1b801f7 GIT binary patch literal 1889 zcmb7^UuYav6vpS?xibj?wF$e4OJf;AM4=cZwh_@nMT{aSv)ee+GKG7Oo3#xj*>*Rn z*oZrKHYxt0I!Q|vY13%INR^5-edt52)fcS~J}KB*6huMkgA#oZN#dEAoyn$}kPfr( z&AsRT&iT%{tZ>El+!i-2ZnZgIa7<`;%mt;LKgj17MX)DW&jwH?Y`#_e*zV?!OkX(E z49ZSBk||LBLV4=yuAvl=W|SYEq#Y<9LV4-Lk$+I;QU3kGzVj##+laCpH_wj!dIrzF zf?J)(Hol7TB+4Dx+cPN7p`3VW_C1te*-lUv76{7GT7}99Ag3%xiB?a?t7n1yoUDEt zuYL*CNLIg%SAPI{pXG?{Sx~M|`k>12!<|(9c?ZaCg1J4aBtDR)VD}5l0s2%-A?-B^ zxfAGAL?PWbQi6&}ZyX8B#N8Ol?na_Y6XI|j_dKX~)QICj+_QCcg~Yew$ag^P3eIyN zKiO!c()jrcGs+r|#7Pn$SCINmLS1k|xz5A1%?E8;-C+*2%LaN6Xvo2rb3uHQbKi75 zpuOloJ7+mlrfK>(^eri%Z`?$!^pFqwy>;o#D8rtm+9R9OKtI9)&VY{N3Fhg$Ud|N; z6$bGL-d>yny=F`N6oyCLp6UaxM<%fz)4`uBsLaX@K>tL@Jm?1lNO+iJgCH!LV}q3@ z*(b#k&9wT}bQ-(xj2V{V_u&muntUdfTB93OIXwLSCu%kgqy4y+nG3hGf_CF7u$u$x#|(1!(#osD8;3e=CIi-9|GYjEH*+?r0J5i_o~ zq(QxAgZe$FZ=+ET>Tl!T1Oau#1*1?Z6-!C8xkqwA zV}M;0ZB<}nK~i9sJz%e4r^7ymE#{GyQpJ=xVAmzEvzAjcy&}(nLTTiNG)j_3yGyht zd9-fKgRNRUkJcwa+qj(P=_khaC&mAd;5k7A%ZW~$bY&gEEpadh?V=anA@r|Zu7+~T z^gz2}gZ3S0FXQk%kNLHUSBA=ax(>kLXu;?&7RttOal{yck^EjGTvV1F>lv{rajbVD z5&v*kcdYkH&~LdZ$B)D&*5kN430}S%`O)%7acI?<=~wG!rvKuBKD(BKhDLPob?jjA z-Tr}n&y{y}v=|rqQ#0AZSli6&$CWparyeK2cW+*pJDtg#A3QjHY3{}Ta&a*KsM5Ge Gx&L2S{6}U0 literal 0 HcmV?d00001 diff --git a/evm/EventExample.bin b/evm/EventExample.bin new file mode 100644 index 0000000000000000000000000000000000000000..3f3274ef98e780c25ff7eb0cc9d8558e6e09bdae GIT binary patch literal 466 zcmYdjNN@-;X%J1|3y+Wg8y%3yxUC_PK_=cZ{`0>Cs9YigKSVNt#Y`ZPK{GtwG~t0v zL-N}v{o6$n8Fa&=L0S_TOcNQ*!=f3Y;}Z=mCj`VNI0OO>U<8`qkigv-l%T*^?~$65 zldn*oUzC%=fDJST1xyGqF8+@Nh}Da>nuoM&=70KN&b#i7lL)&Pv$o;-rW&Cn{gq35 z#ExHRZU)+z$gpqH#0iOvL1ED#`zJC_SQHQt79HO>AzWef z5HKMOD26Q5h%O+C!$&}MjiRCx0wzuf0NQ!8G2wVvbW>0OkQ1Mv(8M?)AmKxNGh<7_ zrLgEp6M@427Nuksq!mXf2`TJeW~*6MU$eMO`8rIR;|@r#pn$ literal 0 HcmV?d00001 diff --git a/evm/FlipperCaller.bin b/evm/FlipperCaller.bin new file mode 100644 index 0000000000000000000000000000000000000000..b31ee15cc76694493a38aced95035a0a3b25d522 GIT binary patch literal 995 zcmbV~OK4Ov6o!+`NJ}YH2Iopq>>zF`f`|_+GFt6M(8cZ0xwkfpg9guhhp8tXzg2Q= zsZ0gMSOOpQ%?I)o$Yqb)^Hz(&RSM*_$5B?30{f_dc8Wf+Qk5-U#E)zRa>5sfWo4(z zjs190z}5r4%H97o_X<4>lEtP{tY@I%n+864ik?w$zWv15MNn9$5}od;GKz$I})N9Jcv?c2C{OWLvw-RK5MRk)L6|+nf4fGA(<$Wlunz zfZAVjEt2%5^$q{lxCXBj`Q8mU(Zv90c^xOZs)2s-c#vr@Ly;ubB?`0%^m`K~olG_e zWW5?#vZdrySi(}x67&gJwx&f|nb=G#o5a-Frn*5ZoAH6&0Cqa0mCc5cPCO?rpoU-duJ!6rtdy&`&E8(uKjKG<_xXuJNcmPGYb|+^A{&_1EhTyIrtZc CliXSW literal 0 HcmV?d00001 diff --git a/evm/PretraceFixture.bin b/evm/PretraceFixture.bin new file mode 100644 index 0000000000000000000000000000000000000000..492961a2061a19ab3aaa3aac7ffa249f47e95b1b GIT binary patch literal 5168 zcmb_g3vd)?9lvk)lDo@2Br!RRedItK9@bWdKns%cXepHnY;G=h$g2DOJrW3w;SoBH z)7tFglJKz1UI3jc&`LX<7MzO3juxweWePJ44wm8!BWMPE)aSHN+79yY_wC-^CGm(< zyqWC%Z@>Tde?P-@K0DdSnKq^CTA5G0{97Z*6U=s=TEehf6h29FzGgRr9s^08`<>(N z_RjWoz7ak~QsI(qkT0LNNqRG_DkMLXRyCv9R`RxzR=XEH_~@Du2>7%lpTqr0K2E!G zL&#%2WQ|Lv-&Qy?<2tdL4DUAMc}3+3bCe+y`(%dLIP(1}t*WjhP*E|!Eukd}vS~cQ z8!QGQj;NYx-eN2Lc?Du?JZMS8`ntT=K0h7jyM2zHTt--9kB`^*&i{sj@` zuxa*?^pJ2F{0e_oL$6wrXJ)iq9m$h2W*n|lgVvh&1MVYiscpP&9>s{SW1Scdo6*q*+C+CBX8Ic2UTccwIKEwm)1*cy>N*z z2R;ySl&+J!SDUU~xXMMoa{shZe*FKy|S^IeA$c()*=o7KJ)DU$pB9S z+&5`epq8XcfCqXG9RfHP;6e4p9Ke+TkDrU~1-LZ>s%cfve&Wr0{I%rUjid2rr=A1& z2EaQ%{*8s87y~%@(wW}_oCa{#v*+glw;OiVu63>!@OJ0n;dpxy{4eTjIS(U<&;zQbpcB^YC7$ z3S_CH&55!U|LkGDO%;eW2lEOrgLgYWN_tDx1x)FVB5!GYk@sKSyVCS>T%?8G-4&&~ zS;6Ipkh>D;@A?J#>iSQ5oGQl`C~g8?=ANT# zO}Zu$yDfva$jpX%KC6kvP0_EK%w!YtKgaGR`C+KW(Fhd9R*-l<5a`{(*S`L=Z-fuJ zou85XoK018i>5*3i@J#7m(k~~&Io(ckd@)kc&TclcA}-?yU&qN_Olf`kXX{YoDxP$6Wa&H3uRWP2 zO}n>AR6X%Q49<5siF;IW7_}i-6h?bncP-2VWS;mM8gfk8PZIF%L}-5RJkXE8>6Vw z#02Eit(0G~l6hRs;|TKt%iD!1NHtO-g&DJPs$11mxjAFnGH*aqNhuDI-yp1 z4cf&}$_t@}BE=T#6uWFqXTnslw)0okk!IYRhbZuXNrBsn0}=(&1_fqfKB=Vucikuq zKNV9=U=5BIf+M_vcPK(Rxu%W+7;gfbC{TwfLZiTwIkSgRAS;FtZ!q!ZGYb3&BzD1K zNsojWmjcH$i{&T)Q@XS%aN5NaQv7L{6z}8cgojy_B3P55V6`Vju)&q$FN36@;AGr{ zYD1X^7dXs=6N)4~(>dQ3Z^*G43a$b9)f9x{stIEZnWKW6arguU(cCaATbOYyj5?CV zFk=OG z#UL8`m=JB}cPNmKot<~xskPME z)z-SUoQZ`Qit2~A@Q)PL5AOsaZ6x)>2Mh}L71h_wqGNBs5dVk$HZphEej91YP$Wg+ zt1#LByx&HC++A*F8~o0s$YTio$U*G40{ZX!Ek!O<YoiFl@@sAML}9Is{^UQ_+UVb~ z)o&!^ZFvDZe|BI1iXZ45mQJ8f){ z*lAJMfwcrXZFIohX=A^D^3F~h>+E$jE$pJcGpm%H1jr=RCRP*>rQ&7aB@;gfaqTUsZ!!Km`dH%Fl z?5^%w*1o!}YsuJ}#HV*uA6nu&``*r9{#{!3^LfW!UB7?-Z@1Szc6s>>`>ofG?qAlm zsv~=!FL=9eO6iic;?(`)XIyye<$-gXcEnq1HmSQN&KmoNO!ui%U85V09UXM(-@Zq? AQvd(} literal 0 HcmV?d00001 diff --git a/evm/PretraceFixtureChild.bin b/evm/PretraceFixtureChild.bin new file mode 100644 index 0000000000000000000000000000000000000000..e8bb62224014a53e58974254a8c847f8068ab99b GIT binary patch literal 335 zcmYdjNN@;BV2lqnX%I~i3XhNf8y%3ysNaytpb&2v|M_16NFF4|2a!u)F%w8I2#+^S zcp%e|Y`^4_t4M-Lcti4qxevNT68yrWK_(TM}x3>L-GP>-{{c3mNc$_@D&A1eTx#6`;f76RtLaOq>{yaIYD} zm=w?iGPI#dP&DClc*3WI1!2(;ga0i`$t*}Kj!+U((48xIB!c15w|R%&Fs1BsJ-er4 e*RI=hL~8z|TTOUz`1G!n;{2RsX9f;A24et=t9(WP literal 0 HcmV?d00001 diff --git a/evm/Tester.bin b/evm/Tester.bin new file mode 100644 index 0000000000000000000000000000000000000000..dfa0cb1b3f60146dc545ec919783ff23582d172b GIT binary patch literal 2748 zcmbVOZHN_B7@l*^%(!9X?&jXbwDyvkrACsjvEavw6rw5PwmYMZIOoML#6?RZl|FXn z+}ZUDaqjBc5>a556&Z*>qLdKJUn&xq{mMQN!J-5=G%($sGjs3msw-K;GWXp3zUTdZ z-e+Yf8=EF?=pE$AwSD%YTsvd(=O<@cy^Ai_k36`k_m7=*BQISYzj5!7)n}jlSvD@j zUsx2$J~=*!k`_mQm5mHGLpd~Rl6lrPXGLr4y8Om<>syx_gFR7`BUuuW(OFE0f9LuR ziT$o0L<_Ao&II*p5 zgOv7`pA@nAu1~D9qmZ7uoNz>(+wFuMxwy8|ah%=yr7KeQ(sv+sj@Y-vPQ}DN(KZh2 z7f!cp61xoJM^fZj;QDdgOl-01s}|VT4uZrc74ermN>*GXcc^|Q&rH|35}%@v5DHoDp;7|`Vo`)c76R-57FcI?Zj1k zDk?A-8?P;7eo(|weMKaGFc=Zb3QoM!^+$vSG^ku);wK6P;_teC(NU6fRa?GB{JbKg z+x1tKD;?>;t|73iWb8vOB$#R@<8Op0?pKI}Kd)PczM`L1$ZI%>>0S`mkeJ}9Eeyj5 z&H8qP`lai4v|vcz(FvndB<6Lb$p*gC6%y;ccpF=&S}<3v=pb*l2k*2}0-f$CXr*1L z5{VtMZd(pkkwu{ev&SUg%Gp-k5?u~F2yw{Jki?;&A?Ud&HDITNHDnC)0t~z(&8d}S z%=LnL`O~OynSJBD7*56lFI+Zr|CMKPY{ju; zwnWP$3!4F}gv_a~AIdt6Mp!gCmIb0nFe%s`SO!tLKa|$JUec{0_MC?smBbzfIE}E- zZ1O@=5m$>4VU$@hDFM`vnxm#fGL}FZ7OIFn;i*K(x*U|U(ne@`GhSi3yHMyb-9&5+ z;}u3I*1b_9(zC=v9y_Lyy=Yz-*n)`bdOH-|YIk9bzY= zcA4*B#I|Y4S-|8iAQ5v?p6bj+6o~+)iCv2TpaUAwrL|H9Kk+JD?nTZBAe~(u8jys0 zG4Tr5FYh4~RpVN>J8e0in_a|=^X6=bAdTwv?G+L6S^Zb@Di+m1P6*_*5pMu;0suT# z?TommfmaTzWc)uZYvN~7BIF-2?3O;Ps;XMJ?19TGDK5~K#!`_fXzw7 zkm&RW+y=TPc_g07E|X};oB-M>2vdDD@0kJ3Be9YM#Uyg*3ddGR9HqxEVsRWZ><*z| z5w&?c-5t6BBrtD%yIJYpSCjY{Y9A5btJh^ci7#T6c3U(LtQA_EmQ{QY?Q^BFDpuc@ zgWgu+PY8RkYqdwyNJ}od2AH{*QV&jb=KR~J&XgXR0h#x~*Z-zE^Y}ebow)@CHcx@- z^y%NJj;tYMaWZcJ1(<%}H5kFVC`*9RAVIU%~I4ZqnndU3;1clf8L W_ne&e>zU;n*0nC1ZB#sBO#TPr_|=;L literal 0 HcmV?d00001 diff --git a/evm/TracingCallee.bin b/evm/TracingCallee.bin new file mode 100644 index 0000000000000000000000000000000000000000..d4850151ceda433b79791e81e917a36c1c0666ec GIT binary patch literal 695 zcmaJ-O=uHA7@cpohvGqNNu_9wiy%_5h_p!&1jQdj@UUHEwsg>$kJQ+Om0GP z)OuISmax&73y}56ee&0;iZRuZ??SfQl{xjbFDTsYUs}i@8+L=j`)9=h9i@wGkc&Kh zT_$1?l0$Z=t;bHOjv#Mph>(poA_T<+GLH*J+gW6b@kz?a7HXaDqQOTl*^Vd+kX?@X z54lM0x@MZ%i6~Mq5)o|KL7)H{wvDXJg)w)v;-;8tEG3{j;UaVrDTJqC9pMJ$vO;Qw_~|6VyEIOl7{hUrMOgzHc(WEJ44o89 z=c*?sJl`r#l?xSbvTR}L0?yDKy^^0+BtvkL_Kdx1a}D7~92brKl&zJfXcrPclPtA1 z$rcU^q2 R)q6YcPnHUYS!b3F{sqf3@5BHA literal 0 HcmV?d00001 diff --git a/evm/TracingCaller.bin b/evm/TracingCaller.bin new file mode 100644 index 0000000000000000000000000000000000000000..42007d288213323010cd6cfe5feaed609d6aebbf GIT binary patch literal 2825 zcmbtWeQXp(6rb7MyFgK($kj^uI6*=n@?o&8sMQ8E3L3I^!CTS|?mVt{a(K4TE0|(p zclKIr(3mZS7(xx8K~Rw(CK@FK2}(>fO^OPd5F{i5F`_^PqFC_F?0vN5ieLN3-R#c$ z_|2R5e(y1xRfk!12!;*4PqpzkJ%@9O-#B%FOm269RzyrIb-ln-!V7;^fpi#Xvw6s& zrmf^A4-Yeq0$GPn_C-w8u-jF)*R(AQC@JEL3fouiC~?z;JuA1nPw6_)?-8=qI|yv2 z#MRqf9Yuip93aOdX66IX00(k4V)D^ICm6zn5aS^iZO-CAZ;6=e+ja4c1)UakQ~>A` z2G9jSzKfW`-r^Rgl>(g@F;Ofd>NsJPrf%lFc^)K_u~-mlYa3#zR4@v4b@h$GrLo|e zSVKKV%W`PgL${rcO9KUA4Co#Q=t_)|H09y<)|{(WnudWML4=#~hZ#D_2720>WA$8P z;+F5V13*T2r(#;gNFWOgtDK!2YezTQOWqp|WT9b4yMCDw#N~2a{`$q3S8&;e%S%6X zb>Z?YL&g=zGN#!Ts?3on=7@SZVgmUrViNpo0Cj@AO(4yBlZO9{ncyBIJ)_Ggn zT%Nb->NeKCD;4HiWtgN~Dk94XMJ|#~@SJrCC8hF?e#-0d+E5#mk8JQ)rsq&;3dxLT zSxWtugL+7^l=_2rH1x*Hk)_o0xb@WyETs)IKq~_EfMhAHRI-$MsxM0w416D|)D}3P z-I-?>t%ieE9WkA7mJgBPKuaMNwSX4NK>#g1K(PZAn{H6t34Sa9XMfH`9!?hrUt1nd^TNkpSa}nt#0s-w zriIyEq8Wn!R!8Oyb`yVTS}xb?j-$Fd=fwf=&oaP26MRQ8N#v<=ZG#Q>vJ8~XHjuIT zmg2RMyR&UXa2IxoN^BT{32>aWT&CS>&OY(hWF;*|dSO7_QedHM+ zXT%DbR5w`>ABpX2mw}xu#DX|AvS#Ul)Yr^U#FvkVvMye9V=fat|AWL(Dl@e#(Q0t=B`59m4t#G0M{%l*w6|x%NhF zVnsZ)c;cwwbJri4*;*XG{9|YN!B0OZ8~?RFy=KI*j^x$V(_VagT;gzTsy-Q=M}~|i rv-3*3E2?Tj^LKTxI6bZEjPvX!y{EQ(c=4V+YYq%Ql5F~;vyakW4a|az literal 0 HcmV?d00001 diff --git a/pvm/Errors.polkavm b/pvm/Errors.polkavm new file mode 100644 index 0000000000000000000000000000000000000000..336f3ff9d08205731e700f542eedd0a058cdf513 GIT binary patch literal 5261 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 I@q`WiFZOI4tpET3 literal 0 HcmV?d00001 diff --git a/pvm/EventExample.polkavm b/pvm/EventExample.polkavm new file mode 100644 index 0000000000000000000000000000000000000000..33703d276326a338d84e0f8fb57884da36eb6ac0 GIT binary patch literal 2617 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 F{|4DzQO^JX literal 0 HcmV?d00001 diff --git a/pvm/Flipper.polkavm b/pvm/Flipper.polkavm new file mode 100644 index 0000000000000000000000000000000000000000..d2d9753ee7e1c08f21fd1c7d23fed6ac404cff00 GIT binary patch literal 2424 zcmaJ>O>7&-6`mz2?T~hySw++iDaBr@RJ!(wH4%U+kd|S zsvm2}8KBHiwU%j-+JqUdbcvM6h%5n(4+UaJDxe;M%7_cN1rJ7n0z%P4`UBMMsi-Qe zZz)AG+@cG9+?lsC?|tu^_a=Su6@-`{H6BGpzl@;`RP+^pie1YwKnLIy;6*?Z&#6|%$G$$^Q<-1yLNb|O18IxwD{oEm>~0<4!V zU!IyA`rc@^;mEb@ue&ldI+Y!m93Ogf;``b0@oc6^^UQwN=lY$^HfOS9qq%&ueYe#! zI~PQ+DH-o2Z`J!Juj#ws8}ikBZB1Wm`g_xM)BDYTZKmprYF53hc4Le@=kUwExEe#= z(sZE7O!x#-L|zm;f_rN=t~6{1b#^+OMHw0_U;@^Lu?1Ph5g6+A3N`+gQrddNR7c!vLl-x+}RT<8$$ab7tW1O-AVR_7$vz}n$gtH!F;<&SJ zGV#2#ZZOf|tWzf1opr)Q*jdAjhn&>}r2%*R;am@{v(!ZXgi!3sy6c?f&NnJ26eaON<}`<-%v@@*__ zP-`x?lCwFbJWN0ku3K8d(qfioTAIm=7U&`KtIltKL1xX87|o;X6&tt351lcxZj67 z-2wRf+1vh?FuavGCdgBo-keoWBar72CzuCkrj&q3c}YdkS50b~H2c#8@4#ncmy?Hx z2Opqna0`KaU&vz=QCv+{sR2r*N#NFwrS)4{+R}P0Em_i&0acNDTGDXqRn^ke-) z73%Yxs_!wdzRmxZ6$mBK_e}!wZ8VQsQbOcc6~r z{(yORJFdFpG$EfpF0r_}&qt|h8#`4UdH7g@PsR8Zvl>i#+~gzwgs6`ITWCN3Etq@` z;aWfZcf1+o>vlE#mhSsVDd`Xp2NdNky+i3c`|>}QzW#Gq%piv`zzARv77Z#5sm2sZ zp?E_hiVP1b2XghP_fW&-dENUP*zLfsYXBQiRH|;qw5X&>TX;vp1PaGhAdZu9M87!P zOgS?J-JPk$k;nWUtaFg0*N_a^NVXLbTpjhR{yOv+TtTyqYorFpG=cig-ul}gfBhar zy#vv11C{{`zPg=hV-Dfvfc18N&hJecG`6w4sKCPT!e6r~@bg zt`BC0(NIWknLeDh4nC2Cy^s*u{Wd0@#_r&UljD zSDzx+@znh20dM84;fuOA)c9`xr776t{@$AFEJCu;mfpbHJ8TZHH3(gz~$D-@*LjstzWKJZWNl3aRf4 z2?gsjf3Rys`e9ER&yq8H%f`_XFjf|aV=h@P~pl@)k* z-GX7u%(d8!7j8zh&d$nAG-CZ0!lhGIr6tu;w&B4M&o}Bli>WVFdOBs#3^`NBVEtxK zv`jiXJI_QbODU_TrxLwawCxcX;F~R}t{bUTrL}M54WqL&tX+>To?kqFvu*K=2|Idv gdO9`j`jSmnTD0rEi5bSGBv)NF|4h6+hp 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 PJIp4qG6Zq4SEBy`lDe!F literal 0 HcmV?d00001 diff --git a/pvm/PiggyBank.polkavm b/pvm/PiggyBank.polkavm new file mode 100644 index 0000000000000000000000000000000000000000..f501efae336881f604c805bbd8d10b9d412ac117 GIT binary patch literal 5194 zcmaJ^du&_RdB2yhdoL+lhl(E8avoO-rP5iDv0>2CUYf9q(C`{*aLwAO(zrEcQzm6A zp(4xCCC?qo94aAcr>QK9zVG{euXC>U)VDcqYdhEY;|1=Q8n?`4?TRuoF{~U+J*|u+ zCzZ+6a}y(b4?H(Kv7L*LjExTORUFw1>#Q{npbb!f2Y`owM}a4Roxm6{1r&ifV9)T_ zn1x;O;mP4$ds5@+FYm@u!|^Zg4vc0-th zBa;Uwp8HbL?f2H|10%y@yP6LVK*Z>?&mNo{-aR(bSYbW6A@qgev4bPKCMSlUJFs_T zVqzrj^x9^gbXdw~cDUjr<726`>*(D<+sxvha0mE|{fG9S+aGh}948$A?)aUf&-s}1 zW#_oda2;`V3j@M4!tVr+cv(Cs-Q~XQ-r#w_v(uCCyzB|IJm2!yEx&0AubWx-ck3Qo zA6tKVeSQ7!*ZW(I*16UTt)H|$LR7MYe4lI<{hV!^`1g*WpmFxxl-uq9rK9A%M2Sc{ z;>GyEps2*l8nHR;hRz#lBV#kDy<8A$rdU2k%4g)-X?Lw68fmAIaTwHP7(#hoti2_b z&yey5a_xOj?UYoWS87F@k(P{%Xi&Fdc>ebsBeTw+Erzk)&|AyLM2IbaK*|NVRuv(? zTu^EzOz;{RV$e3jxWlpm&u?j25{*oULE8`{?&%`ZS?KBK!9Ww1CtVlPAtSHhA>?Oipmf=Z_IR2JTB~wqc?$j~1QB0lDsjO#+ zo)&f8JR8!Dd(5)|-MHI4>(`CD%(IGa+-aVbbz`G>mgq*ec}CRf2J?7Gr(NdpfKEHj z<9?lXn8y{JwwuRgo!(&{Cpv92kBNH5Yc7QJOslyN&@=1J1;3tIXD%puro~)WEEy*Wxd*yv&M(9THgq-kMJxOBJXr({2KX&@R;*QoRAy>sP%>#2Z#} za;{s+Z43vc>p{WoWL+U92iOKb>sGM3V6CV7WI9S{QlyE}wnavUSck@-&l|hVfTngf z!7?JFgiXmT2k*022rI~`$;qe$DS9HJWn^iDr*Yno!&;Zb0U z=a#O9qQhwtmA+cl#a!W@>B8DmA&%qwf|8H3ZFb}5XNRP3h#2{x7~pKVscK$$kb`@g zr8IqzciZ`I2nwprDQLtcX+#|7OWx%#C<*bjBf!&6KVRwy^KhZ+9a6oT>J4YPpb)M; zFRI>%M%-_Fu6lLVJFa?@syCMFin&{O)-}##ooz_6?igya_NIUw-6nK3ttbQqJ}3pb zcDLl`_@FC*8c(<#TZ9m2-zHO2rf>zjQVra89ey7Xv3o)0-I-rn~-8TNk#7`XC9)ITj zH-7Y(ZQJ98|C)bioR2ysh26kw30R3cUaOJG4aC6A*|AX2oSccw3m`$SlWC4A6a6_ZUrH60)xg96$}xE z8DLpTWbF+WzWOz=u(OjU$ClvrQ;5Q8)J0o=5KM|LhPk7hot9%P5uxQ|gU~qQZe<27 z>$j*>KUMp$Io1A4z(ruqnMEtGob2Q!h`$E$7a@L)yNym1Dw=dG8Ztlt5#U@r zatwSp@bT~b15`H|L@7=wmzG>P2T+9Y!NW;jkNwFP%AZ|$5WcFr3+uoxBp%83lX zc8u)-3hhXl(mpV(u;dV}h)`#zZxLv)0(9kC^zm>1dG`Y^fzcA`=>$*#79F|7qNB+U zDR2VpmcXt8c8j;O`>pc^yL|y#1I?_6_;41?J5CP7KP*{dLHS)l( zuCd)i){TuF*4Uvi-RDQ8m*lnS>{^^>V<>uM^_)~chf*7=9};O&wyHK6t{=9uc!=&M zs{>Mfz~S@|>13aUS$tXM+imAnvdq3_Fdh0t>- zry-W~ujm3j7j-`k>q0;P@B<1gRh)6O&%m*3%yI?-{9+yf4Y0iBw>#qGjV5U1E* zNBy+OMgy55i5FQigk*5i3N(aiMMI|0N~Dn);YfeX`RdeX;(|^qCPynXKmo{dWmADS z%TxElcPKxnm0SfS=s{yIjb@$AgB#r+E}v1%GYX2wno(P735wUTSGy5%w}_ApMTH6% zl|-A`Uk8)(KowX9BWxhaW%&NV9iOnoH7iM2;t~dw^~FZ!U`C^?m$7r8IX%RG%o5nR zlIJ-#TIJY2Y*lSvi#emh-`G$&G_lB8^_)P$qC+K4K)m$?4Sb1fl(a@d*FMI956?8R zW#toWM3Qx+kldo*32Wg__}SJ__VC#sW4L^V?WlK_3p3^7qv9B07I5{b)Tc zRCV|C{94s5R#jVlR;rrfYQ=-@ec_b5`ktGPMe6T)=pL>53+dIjUoBtwiBMaxzxv9D zUvG)F)a>;E`>NPd7ljM&2y9GSU9s0!T0VT(gIrsEyQTJU%Y}2EsON1v-3^cL$5yu_ z($fSd4=YLODVfH@G#1jxBfgK>z7QP1_D5 zJj5nIN7t}{hkyN%6{>yVM*2k1$J(W}>({Sy_^U5SY=3C()Le0!r15bbhmff7IG=k{ zi5F=yk}J@p7B@9AK!1<4$|M(^xv3m}vFi)igBP910Eqor{`%+sR@8hJ2Qh?l@M~AW zf@g=(pM~rpoS!sM6n6Uj{IPB4|I|;=2cF8hqG5rqOT8yWo zI^s4&_i1#0gpNV>x7t5KZX*-GsFrcJd#vd^&@Oy-la(%@naq{v-rOc+a(OhRA&Az1 zFppFY<08V-eG#O$Mk4QCW&0vl^Rc9cOH=<^*M;WVM{;=|DizZMfWo(yk_s;TaO&1q zuY!8JaQ3FkG-_U(%fm}^`KS=GA*WGFe6D#IbW4p}|CQ$OpUvSn&Eemg!#_8Ne?SoJ z2qLg%Zx<|f&(p}02q~K7H9I~T$rIkIC^t+v4=mfgK>??lWn5S78hP@gD>u$-kG40? zYvG36T){to?N5Rbr zV9|!snzm{XHx;~%8hC5sW(LUGI)cLMc$>vd0dKee;K~+ov277WtHB_{%Q`j38|o%T zo|{TxpAHJ|VnqxqVp#Fi{Wo~{uX9}uA~(;SdY1FIG>@RT#9YK-E4u-ZjsH)bOU+NhAp*rNUGsO6x(aQ@vU7J9<=og^t~00 zsI$KR_kVlerZ;?>HmQ}Z>el~z>a1^*x&tr$YM;7ecGlOYZjH_!JBCrc504!^zLq!C z(a3b65NVs8_NhmG>cFPH?c!^5m@+s$7?~}IMuw=0JNW?b?(Sx(T z*;!oN+uN(YPP{#hHw8=J5no&15g+gM{>rj%)8L_qudP@hUaX9aMw_JDyk0C(!R?mf zJ~aw)J$;*0H5$dM!FKNv-;wFa?BMJZcVN1;-q&Us-Bygu%}huCX>ec=Rx|``w^sO6 z*y59#7rovEAMfkvi*D`NR*Uo=Aq|ebz1ae0w1qjf4+dcF_BLVlcp4_sn(=hHEFlBO}ixhSei8W z{pU*NBk6nZ_d>?Hx_9o(IcLtt|C|{qkA0qy`&>l*PtcL?4v{eu%xlRki<>{_{-P_s zZqciYcbt9SWZE}b=G@QTc>Me~*M9HG5AGfMjIr(1smA?Z{EhSYOYeMk(R&NW&A&7h zUAkj;Va=)+mh7&3V$ZH^ySETuT~ouhC*&OsPdxGDo?YIiZQJF&yXqS1_HL`MYpQee zXH8Apc4+rG=W`l#XeP8`v}I_k(bl6qi1rBDm(iX;dlD^(_6*uTpnV%Hfi{WuL$vMN znzrrQQJ4GJ+Wf?hZB0$QZS`&2yKU=^=9adb-$dXy^>urG0dmFx5 zx3#J6iM_k)_CC3L*Ug!4{mzHqQ@5>YYxd?I4Bqh7uRghV+xDh9^$mU}H{Da)nx3rN zx_9@sU3;FW+r7Kamv7R%_)RS*>cx`g$4Rli36n7&c}hJKZy!4NQ*jbArb z7k;_$slr2r|5o^RVcwj_=QPiW&-wP8^qe2hA#?NR9-I5p+|SJW!n{AtTP{5y{Y;Wf z%S|tt^2}c_zhqu9|NZ%eMei3$#opq-F5Xi-RQyu$uZyo0e{aFN3ydWTOA;k_Sst`} z*%GlFv5Z^3XL--^UzSG}Ze95Gg&!^yOJ6Hpzv$qi^NU_z^w<)%lb&ucbDaE z>)o60-g9@)-Ot~hxci59zvKAS>ibupTK)ai|FPPz<_BwZPTA>p2An@~n(q0+JtyyZ z@tzaiyP`dE?1UVpa_qdEJYt*}HAIgHgXf<=DL>zRZwU72SD zlGoX4knBtsF7$3`R9Mr|rtfGMJE)XG!=m`868nY)l2jz^8KK$V{3TY}e1a_!o6iTRCD1Mf+QdL0cA+xRu{3tU5$L!hcEKL# zSQ5J+2RatVE?5E`i((g~Ku2lpycnPhV<#&Ev?O-Y5ugiVC+z`R96KooXi@B>B|zuL zPD%l4j-3z#?WWjZWuSdtY|s&CpBo#r2ioVv2IW9|VQdi78e@Y}pxqEVEC$;2v2bOe zO&1G00&NAcuszV09}CNYHf=0y3AE+K!k|$T3xQ05Nir+8umw`YWak_YQK^O&D|CS; zQe4|*%J`mQ-4+&>SdYj;kk;Ym6U`xNvCvWp0-+^dQ>EAB@S5yilk73MQaBR&j(`M&nyIH%)sKi<=tP?V4 z2P77+DLBO-(R8*ZyLD>_gpxI& zt|tXUzVKOH3v4W3r%0k+kqqm!5mWG^ND0xUSg+Aqv6bCh2atpjGDh2Nf2bvvC z7J|g7b4C2Jph$(oA31eFl1J-nI$ND&uAzW6)HpS;R|hT>v((}6uCNHyFA20>6e4~i z&_*ISF|E1jBkzi9#Jl1uT87_~BmNAouMkBl`T`!-U^WHKgXR)C>s^Au43@xHWG4~W z*&15!VrLav?_p;>ScLm@c*I6sw6XHh5|>fV!&eudJ5rMAYRk|Dhp&%Qs{tvUt(}LR zq6>5z46MO2rZ3v5iN-}CR9Y~htPWry)8fBGQi!dXjjlOf+kWwMj!}0ExrFE zR)3K&f0D3n`1Iyc{!x;_{`33w_~%bE)yXf%{JMf62R|7g7$P1xXRdALMJ)^9aZ%;15fyNQ-~) zp?5*RyP(Cppw{ZtX(Rqx?*hLf-Er^8SMvH^NA$$%I4WCZlK0EAE3@ZzKxmq){ z-r@UNXB!+8Qy0nSV4Ez=BQ@`74q`1Lfu-qyjx|;$+x6)Y!*r{GH7Utcx@h~l*pYnh zs1L7;h4K**l9eL$SEeh)WKf?RG_Z{#^G+Fzw9%0^7^V}3=7DBwdR$};o@7jnwdO~| z>)==MZgQnAy;7g_h`66@H_%3Vx?KlbqV+N-k!F1VgYL9&9Z2udu?ELfubA%DPj~BC zlRf=1Xp^Uoi|ONr>2AZ+%Q|@J={5sBLr;tJ1&O|BsWLnU+t7GdNN6G&^x97}zO!^k z4XstE&qKGn6v_JS57|x&^LbdU!gka|oI>bcA=yGwdAd-m!2B*yl^t>af#U#-`lXOfp*tK>Sc6tX%xw}X?6|1uJ`DJFfVQ+uyoO> zH{{uyuW`e1ii)(N`@_zFQ|Ht>i5<(10CSy6R|Hy|5$J-n5GlTjd*oWg)O$^J9+8F_ zUF7g;Z+S@LEf1o#Xmb7o_e0O(MgY@SZ2gmyJ0x14AouZ$M@zIi`^d7aD)_$UEwOk@ zByR~6D@MG!NIj7{TgN^Cb!3%6E955G7d@q^-n4r3_%{vq4ykIBuDRmO{`^Q|rBuD? z)mNV$GuWrhRhzn=|MGYLPORFbtxPSuYfjascRv00%6enfrqBQP(!2guQ?=Kg8@+(?zc?KfU}Kp*a1zIY5frStgaXC*B>Jfh#_3;jFSh9 z+#xq6NawIYCsc!y_sb&nt^&9_Mf%KzKSIe0Sh$AuC~Uunb-PkW3RA-(_aGSeRAKaW z8P`=}f&CxK=uS9=#t@+m++{clpj2pbL6M%jjh@UuTtpZspbeD;wEi^Qc4h3p428^} zAPmbyyG2$X#|HzM?cGwO9{jeh_O7(&dsoV67Bndz@?h%AYd`fTivIiySG4=@_)~6K zJ>`!4$RNr0milMBrL|}^Xvz$q2oMZp7a2G`B3ddAh31;IAwT;lyE6OoqbKB4kAeB) zv#+QuX!$EKBR~|ynSF5^e=!v(bc!b};NeEWCjdCTK@-tr-|7+P;$&QLzQ zO-1wASrD24QRiZWjrMXHQ^VXraU$MWdW+glF3paR`4G!wfYPf=7-=JUES4l(?O1FK zpBOKez$eCxo<MnPP)iA1}A~@YV z)fN@U?=Wm0+h55JI9QLJb<2vm+GOXpS9S;DLLTA*8p+Gr+fdspB7cE4SOB;n?na0j z22Y!YpeS1w|6Vaawt6Ku_;;3cc0*Rz;PtPfWi%XG;o^#hLKo>y-oNJE-znzD6}A5v z^tVCY=yDNlOj87Wf{P?v^H*L)zrWF|{q`^EjJnr~3el|9*C1Rq!ehrl$jE6@#I29i z?bx-A#?||Afbt-e&(d^kENJGr0aJ})l9 zCO@l(A60$m16*@E&t{D*bKL-}#uZ_8Bn-b9h1Ns#EDEjX#vcXu+-a#=KLouA>eRLM zZFvtMRmaZ4LK3}T32co9p=?ilu$)`jhQ(ZGA`L`GqqVA=jQY9fqtO^m)P%rAGVFiGlUjH>&-==u|IPmWQ9G2&2umf4>|>;3=pee}*(*{wf~Pq14b$0r6yNAB&wF8sGkks9l+ zg5CU2vfE@-*{xobV>kaVv77%%c0d1~x7-glYtd@ZlpMRkPq16dl72Q(!zPv6H0Dms zc!SlIi@bM+z+wdCR{%CRbES#4?m&n&BzEa711 z>}(WPyW3{ttGcuFCY#wsg=^r8DnXlaTv~2f)cUL5iZSA?05GlqFs^{%sK_QmRLiK8 z*f4Z0K1LWUjGc(z?x~wF+YJ`CmS&yvPmv*ELH4G8dsA(NtlG+1t+iy8)}GZ_N5o$# zdF@EN>}j-%Xh~SM>gd1A6E>3~J#_}F3mZ7U8X6|BaVS6%T9(r=t{8OO&z(O_)>6bg zIss(KBgL~h+u4Wo017>+C{p14J6NNI`DIp*6w!`=$iWBT3=A<_4~eN^QC=8n!Vs^o zW-lYndIdSwB&LoB*hmX)sHGzg>TjX(O1i^OUvcH8*(T8K0s68Bxl{Yx|71-Two_() zN2FV3+Y_X#9Epx=cv> zMWh}%bV3+tKQzcA!qX+}TumMuRREEL8rl%jP=7BlBd+UXJROx8nR?f|B7peSf>w(v z3a?Dm;@YoKq})&b={HF9^t}2sPwD#^4;sv)X;nD@!5ymvG{E93!K@Lc~+6YKlBa zcK;IYQDEIMKmeFZcP~DB@rjkK58)H53#By_B9|T_&8^XZ%>704VV(gXD*&9o1&8n) zPlqQD=#a)eAOeE$9E$lvM0Fuhtsd5daE`)rKy{WV{ivm16}a%V{_T9utS?S?A{CR5 zlArwgM*ehFgZwGaTWUw%B%@i-B;-%0)ntgt7)dP^A`f9ZkyM?RQ`AWLUumi0B{5Vm0n^5Goc!t<`8G50QtisIuB$!wx8{ho_y2^%z;P zgk#-L&qrKkImtyot+P8`2ftluK;#eAYam{qiE!Rrzl5n!$a z7b2n#{540ra-3YhqF7ImZR#7Z;0@s2Ye;IZqGiZ@=m;*Zpyw%)LeJ-kMeTXmtRmi8 zj(Aa=q5d?I;fp!6%QyR|Kgl%+FGE{6+C6jyr2@F|3|boPV$PkD>rQey8`lxn)LKEl zVts+o#eDIG%(K=3WOm35$*DL}evuUZ0x(<0;x%kUVcR`AHtagsbMVOJ9^=7^P)FwJ z*M-X!h1f*6e6p~ru)zMdITbaen22N-8#d50zG!hZq<+t|R+KppmAbVCJ2(;@oUKaS zYINwR->yS8ucHlUkhmhhL?(Z6!yhEb-~IANEk^{3CurBe-&HhJ1oH#hy(TsbqJLvPk7A=|%#-Q_3drzTsT@ zE?*!u(0nX-D3`x01+)2k@cM1}yHcRm44&^Uu-hce?+fIr0@$?S1^~(w`8z~^r8BS( z^q}@?m}mdJ1Z9KJGiYhFi@DT_%s8>HeVcbKP^>SLxusm$oa%_YGW9u~eFX|L+?mUe ztc|BqIoLHR>R1xOdhJ?4Dy|Qm6$YZ**fbJt5ZUWj)hHj_8yR1g9@i(2pz`ENpD|7! zHYWGObHqt{znQ%wc)g3~iEcR`1v$yN(UWI(EdOOWh-4 zM(Vc=bXVzm=dpeXFiMVe+tS_eiJqjWM{P8@8;-v=z1x7AbMl-nIjozC8q?9j>Cr;k z;7^AQ(?l)!Bzp|$9zBCw#Lgx4Ig*<}S`CWEbcdbpRFdnA$x(Dnkl_C0(ZcjmJ%~=< zDTdkw)Uz+Qi=n6xniMX>tS0oA2h}Y8-{)n8Rtur=y2uT5tYhOImUOX+N;c`>s2GTN zq6Ww}s|5Ry*~PGquafl7bI{DYGNkja459^ezJS->qC<4ez!bUCJPSPXujJD|XAK#= zc?Ckain{VO9pE$!_B8Z6j$-H-dJl1xNAD!*hcm;v?N6gvaZ$&*5t9!jN$LfCs9heI z92i8&I24kxEmCc`$m_?Eo~2wo{z@J=k}+d?f8O-rJXY&SI!IJp7dw{^kRDB}i=D_{ zn`eQ?&`LxDmy)bRNgRr~BS_LcV$x$sju@wo7}7`d({X*aJnyTZ+v6nJp-I17INe&9 zoWvVLBzkIHtRg=(X^2|Y61^Qm6;cGZ^Z^WmUYe<6g>-v}q>pK)lNuk2DvoqeWVQBW zki=fkUuzJF29)uVCCN|53;BDZ=sTS}nwNe>pA3T;iS4W$NFW6mNM7zD%m-Vp50cB> z+JW%p9)wmvX|ALw-EgK8YTbYTI+SU6-M`(CE%dKNO+%ABrlH%x;xPjhEE&_N8vtsZ zsUze2E^TT-cn9fwu>%kyH@5(G;*~R4tH9JT5%2OnfHSju0I$+9k-j3)m$3)%dEYog z9f^WMS_|j115OAsQ{+kVFYmCX7KSej4>$`Ew-DN-*8a8G+W!zq2J+IKVv=d>bOxIt z2ZzBr*VS6XJbFq|4EYMne|S(^uTRpGAH zV~N-5u-J45=sJUxC_qOg-vGtd4&0-!jh@XKz!-Ml1nL9P4L~dPE$Q95r`v^rNrB5X zmCy~eLp-&7F_SBiF8OIwkR&Jan6Cz~n_zE+ZC8>nXsQie+H{LCdB!j`sAHHjJyczweF9GPNdl$PU^=@5u&>_Q5{bLZ;t_YgQv;U2;1Dm zehS0l@_wB>_%>^dk;n-lG%PTzLvl}EYHe1~f$Sy=4;N4`iVt5e$7T^Grx{!em^vb+ z6Wsr?2Jm&n2s2}>R)q_P->FFx`_O#W=vS<1GB}^}Nqa0bEYbZU z?FKZ#@Y7@{!?xFG*$#!P6o~U<15Jz6JYvaob!B`Tc)*;RFr+8c@R{bZxMmt^3DZmO zF(O>BTB!YYWlEz@YYfvz3{!hFseb*$9^-V(FtJ~s-Vbl5Oo&GK`-%O=32KBQO^oAa z%|y4(_b`3ULMJ3TjuDY)pC-6T$EywhXkeUQk0QTC_GY+fAy)YIeY{N1(Rmh|1G5Hl zTNMof8U~GEGR)VmJuLZpa^QknX5E7Jmo;a+y!ZQAU)54N)fP#Y&|vYj^YPN_t0=fQyB z29vLsA?<%B|7#ux0adyRKqI16GrtUZ?=5(GE!%J5Ckt?}pW_Y*B@{ zf|j|hdYnP^_}V9{$MVm}zyDaV{s(zqs?vQ+r{d`}UcQJnmIwOAaFImH4E9w#eT6)a z{=Xt7Q02sL&|3uOAR@xTpUg*Yst;Bv-U`T`W+^r>0Q(!7yx1g|UkKd-5GsD=ADY zdyhj+MgAiR;y#C?JZ`BepsKbg1Vq|`vu|G`k4wCN=x7j!1488TqlP!ElBwK_Dx0rEbs-YWQmfNtzyqG){)X?z-KdhJf|YoP*Cxkj$tdva?d6qmfZELr1QmHg=WJ;Vba0G9V`RsvnU5e2Xh%pFoLi@y+;E`zyrh7DP#JSVfqEQJ-$1H zqXAWhgE&Znkkncx&>b)|L{&w;PVT+TYM}=B#&8$zFDdd3e+K0GR~+n2oin7*8K>h$ z*62yD71MDIYjQD;y-yV;R~dlE)BD9_oEKSBXZa3fD#15AxUY!;%qH??5&wiJ0PzcK z@)}{UVIg0;h%lK($jszIr6ACWD`1kFCK0~$Ls@O2?Hj${czuicP3l?|5&hXHN6 z3$8gv5IMR3jdaTCP5?86)tDyD)JO>{RH?&lP#eR#ohH5^jzoJz-y}T%Cl4XFQEaqw zfg`^AY`!!0==IbvXX0aG#uG~0fn}6(@=L?-bm+!0)PzKyJZMG*`-f=4bve*a;+h~7V-zp`w^X>n^^Vn z7FKVk<1rYSg^t5?CjzWqrl^(ENz|CK_4J$^pM`8gkfBC+QOrKshb?cHB5Q>^el&Y5 z-~~S$tz{Q#aKb6I>Ms<@tHtYrcag`t$mLyB$sKbxh-~vNa>$$yx*bG7(G2EDDJ?Ia}O9)h+6%p~#55n+Rw{x*KJ29It_Q8Hf%HSLyn5s=1o(>?Jsqj!|VUNiFg z)mdG&?#HAv3aJ(fskB<5tFPg&De_$5m9!7b0|r2}B1?kxhw6Y3n+o*c-C9(gOz^Wm zQwalyb|Zjxu))Rv(nEDiAJZeFNuD&OCkxXj4ao_fI3n9EGLFseESxnA^b8DE8UDJn z)x{;^wOg>A&p)NyrE4m5a!&AD7GR{BTnbO=f2wC|Je7pKlc67$G*S(vF|V3 z{LV|!D=y*;N)m0X;MU`7V<`Wm3pg-dAees$H;x{s(S`~(s7Kg_aE+Z|*&_Ttg-QqS zSSp-$cezl|iH4kIuEGV@T!7l{sEg@tFZ zp@=>Wa0Up4io95OQ)~aWun#N7rDFf}bs%-196wrZ-mRq90+0prI7N2|UrgcPBYG%k zt~`@Ux(nAHU?W+$FU9Hud`;HF@dP~L%`LiX$t%#$Y zhJ$aY1qY4{{#&OapL7uq@D(Sba8NR6ui1l}Vv378gut@8{F5rIP#6}kcVoYQBa zgkM7^kZ4T88^TX}R|Sc8alpH{g^t6z>W6?Q#w10y3!740$rZUm_*RN5g(}E)?}UDJ`EjJ_}V%Idg(?#9L6hm zp*eEfOFR?ZhVPZwVp=0qUz*L(kZXSpp@F}Dk1!|2ldDjMFM@9$Hkrcw5&4WTyUA23 z*ng3q-DIj1GWlw@a%<+s!Nms5uvU2cQZ^#2##tT>i`i8u979zI?l^`+&Am9%fD{$_ zo;!?*orSM)5ba%w()vnN&R3#xzVZr0s1^_T(OeZ{w_OFYhFR=}p3!UY(TI{q3%QHW zl`0MtP8~I%$c7>j4??KD@I)}F(WDcGWQ75M1~@L+qvg?IYEn!CC+*Q)Mly(6Q+h-* ztpAH)X~CN zr_gm?7)*p-61pb7ekrcKWH(&CpubdU48`Puc9R{*!l%|S~%Ty75w-+3eZ>i~#O z4JZ}~a#Z9;gy-J)e@ITrN=}C4fToLqsuv_lq&Nf7;dcor^;hX|M1FzAFxU4~q+|$T z+@;9X!u;>Cg|NoOr?Ev;$;<$fW(S)OU7v4{)GwtAAW~|nHtX8Q%QUV}qsilir6nTqq-*r}EXA2#v20bgS{Ny2wYLP)C zHC~hAHF+Wy7h5RPg&^!P;l=Oq?U7PDNMM%AlwZ8%D8-;GGpmp^AK zFZaebdpG~(uKl)h@1uBV_b&H7+P~4;-#>8tM1|K|-M_iN-?l;2f3Bgr)Ldru9uJA; zvf~4`GON{KDl_4u)avc;bvwLj?J3ahoxW3z5_yWL$O36I@wPFlIQf6HdKR;uz? zy`DbrVE^%c^spaK+9CtTXDM2axz+1B^>4Y?YCUGttGCQ1{O7W6?1{zAPggt>3WbWo zqS;jD4%wE6t(%vbJT9$S%Km3E^*v;@RoSc!Hml9_-0?1($?6Ubx;LsavRbX0P)Knf z1C>^j)zF8rJQ|PN+~+pC`a`x6ugz`kvzPXT(7nH?s>|ax6^B9WJ)ptcZ#VZ@IW4AR zo<28T-RSnX#WLnS*1P$*2h6(pO^-Ef0}D2Hf0vEV781+6xUc@j9}%p$-5{hij7iK7 zTKgZeZZubI-s~}Nv>)^ELEI1^-tF_ad-(Td;K>$NC&p`5E2O^B%;o$bm^jww!DK~Y z%p-Bi^nJFnu-zQ?m~hL_<&QBp^1;v<^kF=k8IQVDdDyIY*=^g{@9wt+u`1|;!H;82 z2Rt%Hdj{S6Z9VP-_{587z5Mm;;G9d)f63z}-fAzN6}h|IT8N{lqRMTB9IPNJ6w>zD zHkhky5S>T++(WmB@*%6nV;$jB2C;z#;v|#J8WK4P$EuFmxInN_{WuD!RoBUE_S#Hd zceQDQtxxW^VSKz7l09aV)yibZSY);`sF{iP_S+cfW*%zcQ9Ruve0_CYQn5+-7TRNQVY7H~_y2me3^pV-@jH@s&2gYnq#r`lR=HDjDIygKRO z5BvL%LuW7{-WsqyXX~?#^hg__@D=?gyvKFStq$04+pMlWdgG?oT7|Ct9{1+uk&xBA zA-5>r0qdbH*3GsJwsIEo*vk7okY$#17}|qH?mm0JHEey*YK9azVSP{>D@c&7W_Lde zg$RVle{Au*fbg!!1=YI0lqLq%@uMyTttB3sq+ z9%wCA!W>3NHwOO!db_z2f;as04%qra_8_QmcbQFnczMV=XoK$tBLkSC+^h7Her7A* z5URC@A97nGxXT~%|8HFDt=1~FTR$xLSzD>eG}70jg=O$DFf1pV&!!)=3ARZ80JAq@ zZvX%Q literal 0 HcmV?d00001 diff --git a/pvm/PretraceFixtureChild.polkavm b/pvm/PretraceFixtureChild.polkavm new file mode 100644 index 0000000000000000000000000000000000000000..40c703682cf80a7aace8b34c1edef0e38a86dc10 GIT binary patch literal 1867 zcmZuxUu;uV7(e%}-90S>&z-cr>n7aQGOxskN<-`(kP1U~X4JbH$b2wcVYS^D+_?>Q z+B4!f-Jk`GqF?h2opbK* z``zF7oonuW6`@xYRQ*W`x*kE-(4=efeO#GY2WSCo25bey0SUlcfc?p#q2B)FSh9D& zHJp7M4Oz+l$I<9OE|pG=^^T5NBgu4XG?g6c9Z8KH9yv4$vjYbY9v(~X8%kA)Dl-rE z9Z3!yPW6tBBoB?gof;WQ^}AJh`iQH-JAJgiKQ%mLW$TZhCi3)m?ImQ$UX7|T83 z%tTmjoik&w+*)TwXSoJv2GXu^W(do9owJx_Jx(#kvWioTux!0kG+5T{6m^z$IYo_S z>zpEJl$`>|lmyX*PZNG(tHu^&tFxT+aG%Njowl!UN?qa{WIuVEoEh3r>5!B)7LgjfrsPO^9 zGnl9C?pZ;4gwGU^PwiVJpq5>Xh#VH2h;dEi!F_R>h=OK~Syw>DGnTM!0%42?s&bk! zU(dA|Z;J31gE!WsRCKJ-K}!9jT-8LUvLxYoev#pPVdGR`d2b9MX;akWLUOwoE*DRF zwqdwSQB07WA74D7Y(ZeppPXRsn>s9cWoa862)Wy>n8f8VN&Qc-+;^W72XWsSWcy|j z*hf{3s)S0DD5}K!VT?_J%Xe41mJjG&MG}FC&|)>CmK?nFm9lg~=~n!;{Dr6@MLkip z&g(LIsoFzTld7FmjZ>9Tb(pFds`g2CAZ}}YCh=aq*Ip67S9`ZXuYy;|CTaNlUYC*}iL1r49VF?KYxqw*YYTD{o_G zu0gPfOhSHJiB`PeX|26-eZ=F`hS@0Fxu=@rzy`{eQ`w+0itcl~u?JEd)!MB4}e z1CW$YBMBU^4cb0`>-So%=A)H6K` z41JKpKe!^&^GFPQi^Sm9NF0C#Z5jHu|CoJ6DlABgKYN$T4TYQ1;<<*~=RAuaEBrL! zCow;@l=Cj#ShIB5%TH+C-sfnW1Kei-1;8Zam;`?9)XF1Ip*>v2rF*am%3Aaf{m@A5WO%J zrXPgqj%V#K4S8DSol70(yPgh(cDahUwe|Ctb)u^8g*Q=SkFn<)RsFTI6!v_9zredX t!aGXgVt9&Zp{=1%sG|cml>jiFn(OF5>U6j?MXs9(+Il`r6I~^Q{snPrBaHw6 literal 0 HcmV?d00001 diff --git a/pvm/Storage.polkavm b/pvm/Storage.polkavm new file mode 100644 index 0000000000000000000000000000000000000000..d587442e23d5fbaf38bb5abe10c5bc92c59dbd74 GIT binary patch literal 3011 zcmaJ@U2GKB6~41O_S{)JaA(20W1F9`vvvm;Ra>@+ma4QXMAf~PQjJ|8ra!_?)}1wR zvW{)=?B0>$+=X}-f&y-)J6Jq8Y6!-TDwG!txRt9sWT8Azu@5WggVl$MM_Q>8PQmFJ z+X6z25I7mwLJz8OZgU{iBCRMl-{GX8%Zk-{9fl{?VhuZ;gO; z;LSIWj`qDa*uUz?v#g&x);D;x|M2K=-&-TU?jIiRPt_>CVxQ>wEv9Qz{X>J9Z0#vg z^%c*58;uA#|2zIm{yOpdqA8AubK(v0do{nTA+_<^7HOv>;$FOhLvoj#mWSls7$aX7 zepQS~QRL5$1#0w8(NP{Sf>}eVm^vE6TB>9aUya|k1UqZzd^Yo!3b^9p(kv-mS1Z>7 zl^JYjYwVn8vs&AhO6PFpl3cn@O1IR?pX(}D<=R=$ubC8;!~RVJj& zSY{@(JJZ2_uChaf^Ylgw-~juwQfbyyVZx_7pvm+`SAS{iU>2ytV(!(1J z4)K)UXA)S8&WCvpb4K`>%JZN;f1mJzni@unW=Hs7-d^@ z7FaFna@HKE`(RxV1=on2CREq);;2{Ac_f&o$g08yofDh5@O zR7p_9qRJ3e(p2f~aKZ^k?KMdK!U}D15p6jGC;-NhKwIYF;WA(bFpW}9cpN$EG&0DB z(<{3@vIo_7>NP(+!10*0${X^=F*%@L{C7<9o()27tmLhjw4ROND2tDrF!HmZI6E3; z$8@J5;rIF`MB6QawhsY%*XTRxUf84sgKWO^DCUXB%=m6^{aIKn`|{>Es2xM0fFQhU zo)@}*(zbo&<$H*>&--ZmWxxzz8qQ7oKrrVG!N=Tuh#(JcK7b|4&HJ$E98NG(bIe8HoG?h! zAHU>g74h_K#0ScVA6Y~&LMkWa3fwgqMH8#zq$G7qONg5qGpAwEnF(o`QD$C-aGoX3 z%z2~_1GTOB+0MTLwTF<<1HgU25>Q)uO6>tqdkEC-1GS}Rsr|$Av`TFmJg9!!P5>By z{DNa91SgIB2HEoRBX0HxtK1A&fLjt4;Ff>|xM?6aaNG8`WzbUKSK@p=%CGADn)Z#{ zx}+%tYItq2){fAN9qaewiJ=j=-MjhE+RwbQf$*0BGk|FU$|kIp4MP2ovUN#!pN~*} z-f-o4!zUnz<_sW#l|0Q$*ps|OKm@M^SV#G_mZ>1rahn z{F|3HcGC7Z6d?-G0U8uTds>VrpO3F=^Yn7=c}|Tj&+Y4<2({LX2g5HmuO89wuT~KD zskMDIZ!UtAVnA>PA?+^~5idiV-GFwxS@qfkBzyq4FVLM!Xtnp*HI-c@Y#y^K(9d4Y zp`Rn41I6_U!L=3jV%|*n)*QnDKG6e}=M#q46cY(%s(c~|o#BL+j*l%tZ=~LaTMO)m z0BIjpd!e6TN~C+icl+O$`9J~gz&PTsxro1U2JyjY`FuS$)w1QU=5hJ``a9TKOd#5CRBwoGbyOXG^iumql z_|8-S{#&>=19qMLj(v*RCBi;dyQE*x&=3u!X{dKI%nXFyX33vIX3T_XWDxz}LmKL# zA%lhzN=y=+bb^MG2I=_W!}Zzrqq^1EmiSuBMxg$w8QSgw;WK~&U>pX-I1t`>Z29YA z{$Rz6^qt4cFpUio{ns*|W6dg`!>n23bA&bPd=~x^Mfq>}6lP6)im)ck&#A1D?DDnj zZM)Q+q?3{V`@6qw$A!p_9dxFXc7F5G$;b|R0AA{}jUJesjI`0t?#bC%SZN2C#g<6@ z1v-#CUMNJ)1}7u0Oh)7jA4X`9779dZX+4hXyEdKZIGqgcXie_Ja!conT5D^QqR`e8 z1vpaN*Ls#HXCt)rY;s?#peTPS6yWT>eFc0r841epW-{_#w|pT;6y-DoQ99c`?9`oo zGrl8>D*+z50Nn OD0>eCWUzHlis(OGq`Aug literal 0 HcmV?d00001 diff --git a/pvm/Tester.polkavm b/pvm/Tester.polkavm new file mode 100644 index 0000000000000000000000000000000000000000..fb92e9c4f88427db50be2f8dfbc5e8354050507f GIT binary patch literal 9358 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 Gh5R22C*w2# literal 0 HcmV?d00001 diff --git a/pvm/TracingCallee.polkavm b/pvm/TracingCallee.polkavm new file mode 100644 index 0000000000000000000000000000000000000000..c8d73834ca2b97956f9c6472538db739d63cd603 GIT binary patch literal 2594 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 Date: Thu, 16 Oct 2025 11:54:14 +0300 Subject: [PATCH 2/3] fmt --- .github/workflows/lint.yml | 84 ++++---- README.md | 12 +- abi/Errors.json | 210 ++++++++++---------- abi/Errors.ts | 208 ++++++++++---------- abi/EventExample.json | 66 +++---- abi/EventExample.ts | 64 +++--- abi/Flipper.json | 78 ++++---- abi/Flipper.ts | 76 ++++---- abi/FlipperCaller.json | 90 ++++----- abi/FlipperCaller.ts | 88 ++++----- abi/PiggyBank.json | 128 ++++++------ abi/PiggyBank.ts | 126 ++++++------ abi/PretraceFixture.json | 346 ++++++++++++++++----------------- abi/PretraceFixture.ts | 344 ++++++++++++++++---------------- abi/PretraceFixtureChild.json | 42 ++-- abi/PretraceFixtureChild.ts | 40 ++-- abi/Storage.json | 116 +++++------ abi/Storage.ts | 114 +++++------ abi/Tester.json | 142 +++++++------- abi/Tester.ts | 140 ++++++------- abi/TracingCallee.json | 76 ++++---- abi/TracingCallee.ts | 74 +++---- abi/TracingCaller.json | 166 ++++++++-------- abi/TracingCaller.ts | 164 ++++++++-------- src/methods.test.ts | 13 +- src/test-setup.ts | 6 +- src/tracing-call-trace.test.ts | 5 +- src/tracing-prestate.test.ts | 83 ++++---- src/util.ts | 28 +-- 29 files changed, 1563 insertions(+), 1566 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index b3a4156..a58a8da 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -1,47 +1,47 @@ name: Lint on: - push: - branches: [main] - pull_request: - branches: [main] + push: + branches: [main] + pull_request: + branches: [main] jobs: - lint: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup Deno - uses: denoland/setup-deno@v2 - with: - deno-version: v2.x - - - name: Run linter - run: deno task lint - - - name: Check contracts - run: | - echo "Download the resolc binary" - wget -O resolc https://github.com/paritytech/revive/releases/download/v0.3.0/resolc-x86_64-unknown-linux-musl -q - chmod +x resolc - sudo mv resolc /usr/local/bin - resolc --version - - echo "Installing solc" - wget https://github.com/ethereum/solidity/releases/download/v0.8.30/solc-static-linux -q - chmod +x solc-static-linux - sudo mv solc-static-linux /usr/local/bin/solc - - echo "Building fixture contracts" - deno task build - - echo "Verifying no new files were created (bytecode should be committed)" - if [ -n "$(git status --porcelain)" ]; then - echo "Error: Build created new or modified files. All bytecode should be committed." - git status - exit 1 - fi - echo "Success: All contract bytecode is up to date" + lint: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Deno + uses: denoland/setup-deno@v2 + with: + deno-version: v2.x + + - name: Run linter + run: deno task lint + + - name: Check contracts + run: | + echo "Download the resolc binary" + wget -O resolc https://github.com/paritytech/revive/releases/download/v0.3.0/resolc-x86_64-unknown-linux-musl -q + chmod +x resolc + sudo mv resolc /usr/local/bin + resolc --version + + echo "Installing solc" + wget https://github.com/ethereum/solidity/releases/download/v0.8.30/solc-static-linux -q + chmod +x solc-static-linux + sudo mv solc-static-linux /usr/local/bin/solc + + echo "Building fixture contracts" + deno task build + + echo "Verifying no new files were created (bytecode should be committed)" + if [ -n "$(git status --porcelain)" ]; then + echo "Error: Build created new or modified files. All bytecode should be committed." + git status + exit 1 + fi + echo "Success: All contract bytecode is up to date" diff --git a/README.md b/README.md index 67b36bb..d0a48e4 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This repository contains a test suite for Ethereum rpc methods. ## Prerequisites -- [Deno](https://deno.land/) runtime installed (v1.40 or higher recommended) +- [Deno](https://deno.land/) runtime installed (v1.40 or higher recommended) ## Running Tests @@ -37,8 +37,8 @@ deno task lint Tests are configured via environment variables: -- `START_GETH=1` - Automatically start Geth -- `START_REVIVE_DEV_NODE=1` - Automatically start Revive dev node -- `START_ETH_RPC=1` - Automatically start ETH RPC server -- `USE_GETH=1` - Run tests against Geth (uses EVM bytecode) -- `USE_ETH_RPC=1` - Run tests against ETH RPC with both PVM and EVM bytecode +- `START_GETH=1` - Automatically start Geth +- `START_REVIVE_DEV_NODE=1` - Automatically start Revive dev node +- `START_ETH_RPC=1` - Automatically start ETH RPC server +- `USE_GETH=1` - Run tests against Geth (uses EVM bytecode) +- `USE_ETH_RPC=1` - Run tests against ETH RPC with both PVM and EVM bytecode diff --git a/abi/Errors.json b/abi/Errors.json index 2d8dccc..22e9076 100644 --- a/abi/Errors.json +++ b/abi/Errors.json @@ -1,106 +1,106 @@ [ - { - "inputs": [ - { - "internalType": "string", - "name": "message", - "type": "string" - } - ], - "name": "CustomError", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "newState", - "type": "bool" - } - ], - "name": "setState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "state", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "triggerAssertError", - "outputs": [], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "triggerCustomError", - "outputs": [], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "triggerDivisionByZero", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "triggerOutOfBoundsError", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "triggerRequireError", - "outputs": [], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "triggerRevertError", - "outputs": [], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "valueMatch", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } -] \ No newline at end of file + { + "inputs": [ + { + "internalType": "string", + "name": "message", + "type": "string" + } + ], + "name": "CustomError", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "newState", + "type": "bool" + } + ], + "name": "setState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "state", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "triggerAssertError", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "triggerCustomError", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "triggerDivisionByZero", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "triggerOutOfBoundsError", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "triggerRequireError", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "triggerRevertError", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "valueMatch", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } +] diff --git a/abi/Errors.ts b/abi/Errors.ts index e5a95ee..36e8816 100644 --- a/abi/Errors.ts +++ b/abi/Errors.ts @@ -1,106 +1,106 @@ export const ErrorsAbi = [ - { - "inputs": [ - { - "internalType": "string", - "name": "message", - "type": "string" - } - ], - "name": "CustomError", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "newState", - "type": "bool" - } - ], - "name": "setState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "state", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "triggerAssertError", - "outputs": [], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "triggerCustomError", - "outputs": [], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "triggerDivisionByZero", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "triggerOutOfBoundsError", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "triggerRequireError", - "outputs": [], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "triggerRevertError", - "outputs": [], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "valueMatch", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } + { + 'inputs': [ + { + 'internalType': 'string', + 'name': 'message', + 'type': 'string', + }, + ], + 'name': 'CustomError', + 'type': 'error', + }, + { + 'inputs': [ + { + 'internalType': 'bool', + 'name': 'newState', + 'type': 'bool', + }, + ], + 'name': 'setState', + 'outputs': [], + 'stateMutability': 'nonpayable', + 'type': 'function', + }, + { + 'inputs': [], + 'name': 'state', + 'outputs': [ + { + 'internalType': 'bool', + 'name': '', + 'type': 'bool', + }, + ], + 'stateMutability': 'view', + 'type': 'function', + }, + { + 'inputs': [], + 'name': 'triggerAssertError', + 'outputs': [], + 'stateMutability': 'pure', + 'type': 'function', + }, + { + 'inputs': [], + 'name': 'triggerCustomError', + 'outputs': [], + 'stateMutability': 'pure', + 'type': 'function', + }, + { + 'inputs': [], + 'name': 'triggerDivisionByZero', + 'outputs': [ + { + 'internalType': 'uint256', + 'name': '', + 'type': 'uint256', + }, + ], + 'stateMutability': 'pure', + 'type': 'function', + }, + { + 'inputs': [], + 'name': 'triggerOutOfBoundsError', + 'outputs': [ + { + 'internalType': 'uint256', + 'name': '', + 'type': 'uint256', + }, + ], + 'stateMutability': 'pure', + 'type': 'function', + }, + { + 'inputs': [], + 'name': 'triggerRequireError', + 'outputs': [], + 'stateMutability': 'pure', + 'type': 'function', + }, + { + 'inputs': [], + 'name': 'triggerRevertError', + 'outputs': [], + 'stateMutability': 'pure', + 'type': 'function', + }, + { + 'inputs': [ + { + 'internalType': 'uint256', + 'name': 'value', + 'type': 'uint256', + }, + ], + 'name': 'valueMatch', + 'outputs': [], + 'stateMutability': 'payable', + 'type': 'function', + }, ] as const diff --git a/abi/EventExample.json b/abi/EventExample.json index a64c920..aed83c0 100644 --- a/abi/EventExample.json +++ b/abi/EventExample.json @@ -1,34 +1,34 @@ [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "message", - "type": "string" - } - ], - "name": "ExampleEvent", - "type": "event" - }, - { - "inputs": [], - "name": "triggerEvent", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] \ No newline at end of file + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + } + ], + "name": "ExampleEvent", + "type": "event" + }, + { + "inputs": [], + "name": "triggerEvent", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/abi/EventExample.ts b/abi/EventExample.ts index f346337..66e88f9 100644 --- a/abi/EventExample.ts +++ b/abi/EventExample.ts @@ -1,34 +1,34 @@ export const EventExampleAbi = [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "message", - "type": "string" - } - ], - "name": "ExampleEvent", - "type": "event" - }, - { - "inputs": [], - "name": "triggerEvent", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } + { + 'anonymous': false, + 'inputs': [ + { + 'indexed': true, + 'internalType': 'address', + 'name': 'sender', + 'type': 'address', + }, + { + 'indexed': false, + 'internalType': 'uint256', + 'name': 'value', + 'type': 'uint256', + }, + { + 'indexed': false, + 'internalType': 'string', + 'name': 'message', + 'type': 'string', + }, + ], + 'name': 'ExampleEvent', + 'type': 'event', + }, + { + 'inputs': [], + 'name': 'triggerEvent', + 'outputs': [], + 'stateMutability': 'nonpayable', + 'type': 'function', + }, ] as const diff --git a/abi/Flipper.json b/abi/Flipper.json index a4ce65a..844fea8 100644 --- a/abi/Flipper.json +++ b/abi/Flipper.json @@ -1,40 +1,40 @@ [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "flip", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getValue", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "value", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] \ No newline at end of file + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "flip", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getValue", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "value", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/abi/Flipper.ts b/abi/Flipper.ts index 171fc60..8ef3a50 100644 --- a/abi/Flipper.ts +++ b/abi/Flipper.ts @@ -1,40 +1,40 @@ export const FlipperAbi = [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "flip", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getValue", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "value", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } + { + 'inputs': [], + 'stateMutability': 'nonpayable', + 'type': 'constructor', + }, + { + 'inputs': [], + 'name': 'flip', + 'outputs': [], + 'stateMutability': 'nonpayable', + 'type': 'function', + }, + { + 'inputs': [], + 'name': 'getValue', + 'outputs': [ + { + 'internalType': 'bool', + 'name': '', + 'type': 'bool', + }, + ], + 'stateMutability': 'view', + 'type': 'function', + }, + { + 'inputs': [], + 'name': 'value', + 'outputs': [ + { + 'internalType': 'bool', + 'name': '', + 'type': 'bool', + }, + ], + 'stateMutability': 'view', + 'type': 'function', + }, ] as const diff --git a/abi/FlipperCaller.json b/abi/FlipperCaller.json index c4ed422..6061ffd 100644 --- a/abi/FlipperCaller.json +++ b/abi/FlipperCaller.json @@ -1,46 +1,46 @@ [ - { - "inputs": [ - { - "internalType": "address", - "name": "_flipperAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "callFlip", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "callGetValue", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "flipperAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } -] \ No newline at end of file + { + "inputs": [ + { + "internalType": "address", + "name": "_flipperAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "callFlip", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "callGetValue", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "flipperAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/abi/FlipperCaller.ts b/abi/FlipperCaller.ts index 1f8f756..81d2ebe 100644 --- a/abi/FlipperCaller.ts +++ b/abi/FlipperCaller.ts @@ -1,46 +1,46 @@ export const FlipperCallerAbi = [ - { - "inputs": [ - { - "internalType": "address", - "name": "_flipperAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "callFlip", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "callGetValue", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "flipperAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } + { + 'inputs': [ + { + 'internalType': 'address', + 'name': '_flipperAddress', + 'type': 'address', + }, + ], + 'stateMutability': 'nonpayable', + 'type': 'constructor', + }, + { + 'inputs': [], + 'name': 'callFlip', + 'outputs': [], + 'stateMutability': 'nonpayable', + 'type': 'function', + }, + { + 'inputs': [], + 'name': 'callGetValue', + 'outputs': [ + { + 'internalType': 'bool', + 'name': '', + 'type': 'bool', + }, + ], + 'stateMutability': 'view', + 'type': 'function', + }, + { + 'inputs': [], + 'name': 'flipperAddress', + 'outputs': [ + { + 'internalType': 'address', + 'name': '', + 'type': 'address', + }, + ], + 'stateMutability': 'view', + 'type': 'function', + }, ] as const diff --git a/abi/PiggyBank.json b/abi/PiggyBank.json index e665588..f338585 100644 --- a/abi/PiggyBank.json +++ b/abi/PiggyBank.json @@ -1,65 +1,65 @@ [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "deposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "getDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "withdrawAmount", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [ - { - "internalType": "uint256", - "name": "remainingBal", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } -] \ No newline at end of file + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "deposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [ + { + "internalType": "uint256", + "name": "remainingBal", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/abi/PiggyBank.ts b/abi/PiggyBank.ts index 0417398..44c91f3 100644 --- a/abi/PiggyBank.ts +++ b/abi/PiggyBank.ts @@ -1,65 +1,65 @@ export const PiggyBankAbi = [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "deposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "getDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "withdrawAmount", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [ - { - "internalType": "uint256", - "name": "remainingBal", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } + { + 'inputs': [], + 'stateMutability': 'nonpayable', + 'type': 'constructor', + }, + { + 'inputs': [], + 'name': 'deposit', + 'outputs': [ + { + 'internalType': 'uint256', + 'name': '', + 'type': 'uint256', + }, + ], + 'stateMutability': 'payable', + 'type': 'function', + }, + { + 'inputs': [], + 'name': 'getDeposit', + 'outputs': [ + { + 'internalType': 'uint256', + 'name': '', + 'type': 'uint256', + }, + ], + 'stateMutability': 'view', + 'type': 'function', + }, + { + 'inputs': [], + 'name': 'owner', + 'outputs': [ + { + 'internalType': 'address', + 'name': '', + 'type': 'address', + }, + ], + 'stateMutability': 'view', + 'type': 'function', + }, + { + 'inputs': [ + { + 'internalType': 'uint256', + 'name': 'withdrawAmount', + 'type': 'uint256', + }, + ], + 'name': 'withdraw', + 'outputs': [ + { + 'internalType': 'uint256', + 'name': 'remainingBal', + 'type': 'uint256', + }, + ], + 'stateMutability': 'nonpayable', + 'type': 'function', + }, ] as const diff --git a/abi/PretraceFixture.json b/abi/PretraceFixture.json index 5b98f9e..1b4d466 100644 --- a/abi/PretraceFixture.json +++ b/abi/PretraceFixture.json @@ -1,174 +1,174 @@ [ - { - "inputs": [], - "stateMutability": "payable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "childAddr", - "type": "address" - } - ], - "name": "callContract", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "createChild", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "childAddr", - "type": "address" - } - ], - "name": "delegatecallContract", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "deposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "getContractBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "getExternalBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "readStorage", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "str", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "value", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_str", - "type": "string" - } - ], - "name": "writeStorage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] \ No newline at end of file + { + "inputs": [], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "balances", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "childAddr", + "type": "address" + } + ], + "name": "callContract", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "createChild", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "childAddr", + "type": "address" + } + ], + "name": "delegatecallContract", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getContractBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getExternalBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "readStorage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "str", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "value", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "string", + "name": "_str", + "type": "string" + } + ], + "name": "writeStorage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/abi/PretraceFixture.ts b/abi/PretraceFixture.ts index 153cda9..2dbea5d 100644 --- a/abi/PretraceFixture.ts +++ b/abi/PretraceFixture.ts @@ -1,174 +1,174 @@ export const PretraceFixtureAbi = [ - { - "inputs": [], - "stateMutability": "payable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "childAddr", - "type": "address" - } - ], - "name": "callContract", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "createChild", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "childAddr", - "type": "address" - } - ], - "name": "delegatecallContract", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "deposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "getContractBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "getExternalBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "readStorage", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "str", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "value", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_str", - "type": "string" - } - ], - "name": "writeStorage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } + { + 'inputs': [], + 'stateMutability': 'payable', + 'type': 'constructor', + }, + { + 'inputs': [ + { + 'internalType': 'address', + 'name': '', + 'type': 'address', + }, + ], + 'name': 'balances', + 'outputs': [ + { + 'internalType': 'uint256', + 'name': '', + 'type': 'uint256', + }, + ], + 'stateMutability': 'view', + 'type': 'function', + }, + { + 'inputs': [ + { + 'internalType': 'address', + 'name': 'childAddr', + 'type': 'address', + }, + ], + 'name': 'callContract', + 'outputs': [], + 'stateMutability': 'nonpayable', + 'type': 'function', + }, + { + 'inputs': [], + 'name': 'createChild', + 'outputs': [ + { + 'internalType': 'address', + 'name': '', + 'type': 'address', + }, + ], + 'stateMutability': 'nonpayable', + 'type': 'function', + }, + { + 'inputs': [ + { + 'internalType': 'address', + 'name': 'childAddr', + 'type': 'address', + }, + ], + 'name': 'delegatecallContract', + 'outputs': [], + 'stateMutability': 'nonpayable', + 'type': 'function', + }, + { + 'inputs': [], + 'name': 'deposit', + 'outputs': [], + 'stateMutability': 'payable', + 'type': 'function', + }, + { + 'inputs': [], + 'name': 'getContractBalance', + 'outputs': [ + { + 'internalType': 'uint256', + 'name': '', + 'type': 'uint256', + }, + ], + 'stateMutability': 'view', + 'type': 'function', + }, + { + 'inputs': [ + { + 'internalType': 'address', + 'name': 'account', + 'type': 'address', + }, + ], + 'name': 'getExternalBalance', + 'outputs': [ + { + 'internalType': 'uint256', + 'name': '', + 'type': 'uint256', + }, + ], + 'stateMutability': 'view', + 'type': 'function', + }, + { + 'inputs': [], + 'name': 'readStorage', + 'outputs': [ + { + 'internalType': 'uint256', + 'name': '', + 'type': 'uint256', + }, + ], + 'stateMutability': 'view', + 'type': 'function', + }, + { + 'inputs': [], + 'name': 'str', + 'outputs': [ + { + 'internalType': 'string', + 'name': '', + 'type': 'string', + }, + ], + 'stateMutability': 'view', + 'type': 'function', + }, + { + 'inputs': [], + 'name': 'value', + 'outputs': [ + { + 'internalType': 'uint256', + 'name': '', + 'type': 'uint256', + }, + ], + 'stateMutability': 'view', + 'type': 'function', + }, + { + 'inputs': [ + { + 'internalType': 'uint256', + 'name': 'amount', + 'type': 'uint256', + }, + ], + 'name': 'withdraw', + 'outputs': [], + 'stateMutability': 'nonpayable', + 'type': 'function', + }, + { + 'inputs': [ + { + 'internalType': 'uint256', + 'name': '_value', + 'type': 'uint256', + }, + { + 'internalType': 'string', + 'name': '_str', + 'type': 'string', + }, + ], + 'name': 'writeStorage', + 'outputs': [], + 'stateMutability': 'nonpayable', + 'type': 'function', + }, ] as const diff --git a/abi/PretraceFixtureChild.json b/abi/PretraceFixtureChild.json index 5c5ae09..a002fe8 100644 --- a/abi/PretraceFixtureChild.json +++ b/abi/PretraceFixtureChild.json @@ -1,22 +1,22 @@ [ - { - "inputs": [], - "name": "increment", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "value", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } -] \ No newline at end of file + { + "inputs": [], + "name": "increment", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "value", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/abi/PretraceFixtureChild.ts b/abi/PretraceFixtureChild.ts index 93c2434..32b6741 100644 --- a/abi/PretraceFixtureChild.ts +++ b/abi/PretraceFixtureChild.ts @@ -1,22 +1,22 @@ export const PretraceFixtureChildAbi = [ - { - "inputs": [], - "name": "increment", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "value", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } + { + 'inputs': [], + 'name': 'increment', + 'outputs': [], + 'stateMutability': 'nonpayable', + 'type': 'function', + }, + { + 'inputs': [], + 'name': 'value', + 'outputs': [ + { + 'internalType': 'uint256', + 'name': '', + 'type': 'uint256', + }, + ], + 'stateMutability': 'view', + 'type': 'function', + }, ] as const diff --git a/abi/Storage.json b/abi/Storage.json index 137758f..1e97d0b 100644 --- a/abi/Storage.json +++ b/abi/Storage.json @@ -1,59 +1,59 @@ [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "n1", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "n2", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "num", - "type": "uint256" - } - ], - "name": "write_n1_read_n2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "num", - "type": "uint256" - } - ], - "name": "write_n2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] \ No newline at end of file + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "n1", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "n2", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "num", + "type": "uint256" + } + ], + "name": "write_n1_read_n2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "num", + "type": "uint256" + } + ], + "name": "write_n2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/abi/Storage.ts b/abi/Storage.ts index 64e5f4a..13875d6 100644 --- a/abi/Storage.ts +++ b/abi/Storage.ts @@ -1,59 +1,59 @@ export const StorageAbi = [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "n1", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "n2", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "num", - "type": "uint256" - } - ], - "name": "write_n1_read_n2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "num", - "type": "uint256" - } - ], - "name": "write_n2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } + { + 'inputs': [], + 'stateMutability': 'nonpayable', + 'type': 'constructor', + }, + { + 'inputs': [], + 'name': 'n1', + 'outputs': [ + { + 'internalType': 'uint256', + 'name': '', + 'type': 'uint256', + }, + ], + 'stateMutability': 'view', + 'type': 'function', + }, + { + 'inputs': [], + 'name': 'n2', + 'outputs': [ + { + 'internalType': 'uint256', + 'name': '', + 'type': 'uint256', + }, + ], + 'stateMutability': 'view', + 'type': 'function', + }, + { + 'inputs': [ + { + 'internalType': 'uint256', + 'name': 'num', + 'type': 'uint256', + }, + ], + 'name': 'write_n1_read_n2', + 'outputs': [], + 'stateMutability': 'nonpayable', + 'type': 'function', + }, + { + 'inputs': [ + { + 'internalType': 'uint256', + 'name': 'num', + 'type': 'uint256', + }, + ], + 'name': 'write_n2', + 'outputs': [], + 'stateMutability': 'nonpayable', + 'type': 'function', + }, ] as const diff --git a/abi/Tester.json b/abi/Tester.json index 73eebc8..1c2cb13 100644 --- a/abi/Tester.json +++ b/abi/Tester.json @@ -1,72 +1,72 @@ [ - { - "inputs": [], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creator", - "type": "address" - } - ], - "name": "TesterDeployed", - "type": "event" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "v", - "type": "string" - } - ], - "name": "setName", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "v", - "type": "uint256" - } - ], - "name": "setValue", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "value", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } -] \ No newline at end of file + { + "inputs": [], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "creator", + "type": "address" + } + ], + "name": "TesterDeployed", + "type": "event" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "v", + "type": "string" + } + ], + "name": "setName", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "v", + "type": "uint256" + } + ], + "name": "setValue", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "value", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/abi/Tester.ts b/abi/Tester.ts index 1ba70c7..4b3e7ed 100644 --- a/abi/Tester.ts +++ b/abi/Tester.ts @@ -1,72 +1,72 @@ export const TesterAbi = [ - { - "inputs": [], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creator", - "type": "address" - } - ], - "name": "TesterDeployed", - "type": "event" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "v", - "type": "string" - } - ], - "name": "setName", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "v", - "type": "uint256" - } - ], - "name": "setValue", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "value", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } + { + 'inputs': [], + 'stateMutability': 'payable', + 'type': 'constructor', + }, + { + 'anonymous': false, + 'inputs': [ + { + 'indexed': true, + 'internalType': 'address', + 'name': 'creator', + 'type': 'address', + }, + ], + 'name': 'TesterDeployed', + 'type': 'event', + }, + { + 'inputs': [], + 'name': 'name', + 'outputs': [ + { + 'internalType': 'string', + 'name': '', + 'type': 'string', + }, + ], + 'stateMutability': 'view', + 'type': 'function', + }, + { + 'inputs': [ + { + 'internalType': 'string', + 'name': 'v', + 'type': 'string', + }, + ], + 'name': 'setName', + 'outputs': [], + 'stateMutability': 'nonpayable', + 'type': 'function', + }, + { + 'inputs': [ + { + 'internalType': 'uint256', + 'name': 'v', + 'type': 'uint256', + }, + ], + 'name': 'setValue', + 'outputs': [], + 'stateMutability': 'nonpayable', + 'type': 'function', + }, + { + 'inputs': [], + 'name': 'value', + 'outputs': [ + { + 'internalType': 'uint256', + 'name': '', + 'type': 'uint256', + }, + ], + 'stateMutability': 'view', + 'type': 'function', + }, ] as const diff --git a/abi/TracingCallee.json b/abi/TracingCallee.json index 1d7e2d5..16a5abf 100644 --- a/abi/TracingCallee.json +++ b/abi/TracingCallee.json @@ -1,39 +1,39 @@ [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "counter", - "type": "uint256" - } - ], - "name": "CalleeCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "counter", - "type": "uint256" - } - ], - "name": "consumeGas", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "failingFunction", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } -] \ No newline at end of file + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "counter", + "type": "uint256" + } + ], + "name": "CalleeCalled", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "counter", + "type": "uint256" + } + ], + "name": "consumeGas", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "failingFunction", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } +] diff --git a/abi/TracingCallee.ts b/abi/TracingCallee.ts index 0b0a60b..cdb3018 100644 --- a/abi/TracingCallee.ts +++ b/abi/TracingCallee.ts @@ -1,39 +1,39 @@ export const TracingCalleeAbi = [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "counter", - "type": "uint256" - } - ], - "name": "CalleeCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "counter", - "type": "uint256" - } - ], - "name": "consumeGas", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "failingFunction", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } + { + 'anonymous': false, + 'inputs': [ + { + 'indexed': false, + 'internalType': 'uint256', + 'name': 'counter', + 'type': 'uint256', + }, + ], + 'name': 'CalleeCalled', + 'type': 'event', + }, + { + 'inputs': [ + { + 'internalType': 'uint256', + 'name': 'counter', + 'type': 'uint256', + }, + ], + 'name': 'consumeGas', + 'outputs': [], + 'stateMutability': 'nonpayable', + 'type': 'function', + }, + { + 'inputs': [], + 'name': 'failingFunction', + 'outputs': [], + 'stateMutability': 'payable', + 'type': 'function', + }, + { + 'stateMutability': 'payable', + 'type': 'receive', + }, ] as const diff --git a/abi/TracingCaller.json b/abi/TracingCaller.json index 61e94f0..f43c4bd 100644 --- a/abi/TracingCaller.json +++ b/abi/TracingCaller.json @@ -1,84 +1,84 @@ [ - { - "inputs": [ - { - "internalType": "address payable", - "name": "_callee", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "message", - "type": "string" - } - ], - "name": "TraceEvent", - "type": "event" - }, - { - "inputs": [], - "name": "callee", - "outputs": [ - { - "internalType": "address payable", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "create", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "create2", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "counter", - "type": "uint256" - } - ], - "name": "start", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] \ No newline at end of file + { + "inputs": [ + { + "internalType": "address payable", + "name": "_callee", + "type": "address" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + } + ], + "name": "TraceEvent", + "type": "event" + }, + { + "inputs": [], + "name": "callee", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "create", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "create2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "counter", + "type": "uint256" + } + ], + "name": "start", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/abi/TracingCaller.ts b/abi/TracingCaller.ts index 6dc29ef..c494048 100644 --- a/abi/TracingCaller.ts +++ b/abi/TracingCaller.ts @@ -1,84 +1,84 @@ export const TracingCallerAbi = [ - { - "inputs": [ - { - "internalType": "address payable", - "name": "_callee", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "message", - "type": "string" - } - ], - "name": "TraceEvent", - "type": "event" - }, - { - "inputs": [], - "name": "callee", - "outputs": [ - { - "internalType": "address payable", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "create", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "create2", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "counter", - "type": "uint256" - } - ], - "name": "start", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } + { + 'inputs': [ + { + 'internalType': 'address payable', + 'name': '_callee', + 'type': 'address', + }, + ], + 'stateMutability': 'payable', + 'type': 'constructor', + }, + { + 'anonymous': false, + 'inputs': [ + { + 'indexed': false, + 'internalType': 'uint256', + 'name': 'value', + 'type': 'uint256', + }, + { + 'indexed': false, + 'internalType': 'string', + 'name': 'message', + 'type': 'string', + }, + ], + 'name': 'TraceEvent', + 'type': 'event', + }, + { + 'inputs': [], + 'name': 'callee', + 'outputs': [ + { + 'internalType': 'address payable', + 'name': '', + 'type': 'address', + }, + ], + 'stateMutability': 'view', + 'type': 'function', + }, + { + 'inputs': [], + 'name': 'create', + 'outputs': [ + { + 'internalType': 'address', + 'name': '', + 'type': 'address', + }, + ], + 'stateMutability': 'nonpayable', + 'type': 'function', + }, + { + 'inputs': [], + 'name': 'create2', + 'outputs': [ + { + 'internalType': 'address', + 'name': '', + 'type': 'address', + }, + ], + 'stateMutability': 'nonpayable', + 'type': 'function', + }, + { + 'inputs': [ + { + 'internalType': 'uint256', + 'name': 'counter', + 'type': 'uint256', + }, + ], + 'name': 'start', + 'outputs': [], + 'stateMutability': 'nonpayable', + 'type': 'function', + }, ] as const diff --git a/src/methods.test.ts b/src/methods.test.ts index 9a83ae5..a63517e 100644 --- a/src/methods.test.ts +++ b/src/methods.test.ts @@ -22,8 +22,7 @@ const getTesterReceipt = memoizedTx(env, () => abi: TesterAbi, bytecode: getByteCode('Tester', env.evm), value: parseEther('2'), - }) -) + })) const getTesterAddr = () => getTesterReceipt().then((r) => r.contractAddress!) Deno.test('eth_accounts', opts, async () => { @@ -109,7 +108,7 @@ Deno.test( expect(byNumber).toEqual(byHash) expect(byNumber).toBeGreaterThanOrEqual(1) - } + }, ) Deno.test('eth_getCode', opts, async () => { @@ -173,7 +172,7 @@ Deno.test('eth_getStorageAt', opts, async () => { // revive store value as little endian. When this change in the compiler, or the runtime API, we can amend this test expect(storage).toEqual( - '0x48656c6c6f20776f726c64000000000000000000000000000000000000000016' + '0x48656c6c6f20776f726c64000000000000000000000000000000000000000016', ) }) @@ -199,12 +198,12 @@ Deno.test( index, }) expect(byBlockNumber).toEqual(byTxHash) - } + }, ) Deno.test('eth_getTransactionCount', opts, async () => { const count = await env.serverWallet.getTransactionCount( - env.serverWallet.account + env.serverWallet.account, ) expect(count).toBeGreaterThanOrEqual(1) }) @@ -284,6 +283,6 @@ Deno.test('eth_feeHistory', opts, async () => { expect(feeHistory.reward?.length).toEqual(feeHistory.gasUsedRatio.length) expect(feeHistory.baseFeePerGas).toHaveLength( - feeHistory.gasUsedRatio.length + 1 + feeHistory.gasUsedRatio.length + 1, ) }) diff --git a/src/test-setup.ts b/src/test-setup.ts index 1573b4e..79377d3 100644 --- a/src/test-setup.ts +++ b/src/test-setup.ts @@ -41,8 +41,7 @@ export async function setupTests() { ] await killProcessOnPort(9944) - const nodePath = - Deno.env.get('REVIVE_DEV_NODE_PATH') ?? + const nodePath = Deno.env.get('REVIVE_DEV_NODE_PATH') ?? `${Deno.env.get('HOME')}/polkadot-sdk/target/debug/revive-dev-node` console.log('🚀 Start dev-node ...') const devNodeProcess = new Deno.Command(nodePath, { @@ -62,8 +61,7 @@ export async function setupTests() { ] await killProcessOnPort(8545) - const ethRpcPath = - Deno.env.get('ETH_RPC_PATH') ?? + const ethRpcPath = Deno.env.get('ETH_RPC_PATH') ?? `${Deno.env.get('HOME')}/polkadot-sdk/target/debug/eth-rpc` console.log('🚀 Start eth-rpc ...') const ethRpcProcess = new Deno.Command(ethRpcPath, { diff --git a/src/tracing-call-trace.test.ts b/src/tracing-call-trace.test.ts index 7e54a2c..ea66b22 100644 --- a/src/tracing-call-trace.test.ts +++ b/src/tracing-call-trace.test.ts @@ -9,10 +9,7 @@ import { } from './util.ts' import { assertSnapshot } from '@std/testing/snapshot' import { expect } from '@std/expect' -import { - encodeFunctionData, - parseEther, -} from 'viem' +import { encodeFunctionData, parseEther } from 'viem' import { TracingCallerAbi } from '../abi/TracingCaller.ts' import { TracingCalleeAbi } from '../abi/TracingCallee.ts' diff --git a/src/tracing-prestate.test.ts b/src/tracing-prestate.test.ts index d0033d4..8c20b81 100644 --- a/src/tracing-prestate.test.ts +++ b/src/tracing-prestate.test.ts @@ -18,12 +18,14 @@ import { PretraceFixtureChildAbi } from '../abi/PretraceFixtureChild.ts' // Initialize test environment const env = await getEnv() -const getPretraceFixture = memoizedTx(env, () => - env.accountWallet.deployContract({ - abi: PretraceFixtureAbi, - bytecode: getByteCode('PretraceFixture', env.evm), - value: parseEther('10'), - }) +const getPretraceFixture = memoizedTx( + env, + () => + env.accountWallet.deployContract({ + abi: PretraceFixtureAbi, + bytecode: getByteCode('PretraceFixture', env.evm), + value: parseEther('10'), + }), ) const getAddr = () => getPretraceFixture().then((r) => r.contractAddress!) @@ -33,8 +35,7 @@ const getAddr2 = memoizedDeploy(env, () => env.accountWallet.deployContract({ abi: PretraceFixtureChildAbi, bytecode: getByteCode('PretraceFixtureChild', env.evm), - }) -) + })) const getBlock = memoized(async () => { await getPretraceFixture() @@ -50,7 +51,7 @@ const getVisitor = async (): Promise => { const { miner: coinbaseAddr } = block const walletbalanceStorageSlot = computeMappingSlot( env.accountWallet.account.address, - 1 + 1, ) const mappedKeys = { [walletbalanceStorageSlot]: ``, @@ -95,7 +96,7 @@ const matchFixture = async ( t: Deno.TestContext, res: unknown, fixtureName: string, - diffMode: string + diffMode: string, ) => { const visitor = await getVisitor() if (Deno.env.get('DEBUG')) { @@ -104,7 +105,7 @@ const matchFixture = async ( await Deno.mkdir(dir, { recursive: true }) await Deno.writeTextFile( `${dir}${fixtureName}.${env.chain.name}.${diffMode}.json`, - JSON.stringify(res, null, 2) + JSON.stringify(res, null, 2), ) } @@ -118,8 +119,8 @@ const withDiffModes = ( testFn: ( t: Deno.TestContext, config: { diffMode: boolean }, - diffMode: string - ) => Promise + diffMode: string, + ) => Promise, ) => { return async (t: Deno.TestContext) => { for (const config of [{ diffMode: true }, { diffMode: false }]) { @@ -140,10 +141,10 @@ Deno.test( const res = await env.debugClient.traceTransaction( receiptHash, 'prestateTracer', - config + config, ) await matchFixture(t, res, 'deploy_contract', diffMode) - }) + }), ) Deno.test( @@ -164,11 +165,11 @@ Deno.test( config, ( await getBlock() - ).hash! + ).hash!, ) await matchFixture(t, res, 'write_storage', diffMode) - }) + }), ) Deno.test( @@ -188,11 +189,11 @@ Deno.test( config, ( await getBlock() - ).hash! + ).hash!, ) await matchFixture(t, res, 'write_storage_from_0', diffMode) - }) + }), ) Deno.test( @@ -212,11 +213,11 @@ Deno.test( config, ( await getBlock() - ).hash! + ).hash!, ) await matchFixture(t, res, 'read_storage', diffMode) - }) + }), ) Deno.test( @@ -237,11 +238,11 @@ Deno.test( config, ( await getBlock() - ).hash! + ).hash!, ) await matchFixture(t, res, 'deposit', diffMode) - }) + }), ) Deno.test( @@ -262,11 +263,11 @@ Deno.test( config, ( await getBlock() - ).hash! + ).hash!, ) await matchFixture(t, res, 'withdraw', diffMode) - }) + }), ) Deno.test( @@ -286,11 +287,11 @@ Deno.test( config, ( await getBlock() - ).hash! + ).hash!, ) await matchFixture(t, res, 'get_balance', diffMode) - }) + }), ) Deno.test( @@ -311,7 +312,7 @@ Deno.test( config, ( await getBlock() - ).hash! + ).hash!, )) as Record // Geth is missing addr2 just add it back to make test pass @@ -322,7 +323,7 @@ Deno.test( } await matchFixture(t, res, 'get_external_balance', diffMode) - }) + }), ) Deno.test( @@ -343,11 +344,11 @@ Deno.test( config, ( await getBlock() - ).hash! + ).hash!, ) await matchFixture(t, res, 'instantiate_child', diffMode) - }) + }), ) Deno.test( @@ -365,11 +366,11 @@ Deno.test( }), }, 'prestateTracer', - config + config, ) await matchFixture(t, res, 'call_contract', diffMode) - }) + }), ) Deno.test( @@ -390,11 +391,11 @@ Deno.test( config, ( await getBlock() - ).hash! + ).hash!, ) await matchFixture(t, res, 'delegate_call_contract', diffMode) - }) + }), ) Deno.test( @@ -402,7 +403,7 @@ Deno.test( opts, withDiffModes(async (t, config, diffMode) => { const nonce = await env.accountWallet.getTransactionCount( - env.accountWallet.account + env.accountWallet.account, ) const value = await env.accountWallet.readContract({ @@ -429,7 +430,7 @@ Deno.test( const receipts = await Promise.all( hashes.map((hash) => env.accountWallet.waitForTransactionReceipt(hash) - ) + ), ) expect(receipts).toHaveLength(2) @@ -441,14 +442,14 @@ Deno.test( const res = await env.debugClient.traceBlock( receipts[0].blockNumber, 'prestateTracer', - config + config, ) await matchFixture( t, res, 'trace_block_write_storage_twice', - diffMode + diffMode, ) } @@ -457,10 +458,10 @@ Deno.test( const res = await env.debugClient.traceTransaction( receipts[1].transactionHash, 'prestateTracer', - config + config, ) await matchFixture(t, res, 'trace_tx_write_storage_twice', diffMode) } - }) + }), ) diff --git a/src/util.ts b/src/util.ts index 4e58090..ef88419 100644 --- a/src/util.ts +++ b/src/util.ts @@ -27,9 +27,11 @@ export function getByteCode(name: string, evm: boolean): Hex { const bytecode = evm ? Deno.readFileSync(`evm/${name}.bin`) : Deno.readFileSync(`pvm/${name}.polkavm`) - return `0x${Array.from(bytecode) - .map((b: number) => b.toString(16).padStart(2, '0')) - .join('')}` as Hex + return `0x${ + Array.from(bytecode) + .map((b: number) => b.toString(16).padStart(2, '0')) + .join('') + }` as Hex } export type JsonRpcError = { @@ -86,7 +88,7 @@ function getEnvName(): EnvName { return 'revive-evm' } else { throw new Error( - 'No environment specified. Set USE_GETH or USE_REVIVE (pvm|evm)' + 'No environment specified. Set USE_GETH or USE_REVIVE (pvm|evm)', ) } } @@ -148,7 +150,7 @@ export async function getEnv() { async waitForTransactionReceipt( hash: Hex, pollingInterval = 100, - timeout = 30000 + timeout = 30000, ): Promise { const startTime = Date.now() while (true) { @@ -159,7 +161,7 @@ export async function getEnv() { const errorStr = String(error) if ( !errorStr.includes( - 'transaction indexing is in progress' + 'transaction indexing is in progress', ) && !errorStr.includes('transaction not found') && !errorStr.includes('TransactionReceiptNotFoundError') @@ -170,7 +172,7 @@ export async function getEnv() { } if (Date.now() - startTime > timeout) { throw new Error( - `Transaction receipt timeout after ${timeout}ms for hash ${hash}` + `Transaction receipt timeout after ${timeout}ms for hash ${hash}`, ) } await new Promise((resolve) => @@ -197,7 +199,7 @@ export async function getEnv() { const accountWallet = createWalletClient({ account: privateKeyToAccount( '0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133', - { nonceManager } + { nonceManager }, ), transport, chain, @@ -222,7 +224,7 @@ export async function getEnv() { const emptyWallet = createWalletClient({ account: privateKeyToAccount( '0x4450c571bae82da0528ecf76fcf7079e12ecc46dc873c9cacb6db8b75ed22f41', - { nonceManager } + { nonceManager }, ), transport, chain, @@ -249,7 +251,7 @@ export async function getEnv() { traceTransaction( txHash: Hex, tracer: Tracer, - tracerConfig?: TracerConfig[Tracer] + tracerConfig?: TracerConfig[Tracer], ): Promise { return client.request({ method: 'debug_traceTransaction' as 'eth_chainId', @@ -259,7 +261,7 @@ export async function getEnv() { traceBlock( blockNumber: bigint, tracer: Tracer, - tracerConfig?: TracerConfig[Tracer] + tracerConfig?: TracerConfig[Tracer], ): Promise { return client.request({ method: 'debug_traceBlockByNumber' as 'eth_chainId', @@ -274,7 +276,7 @@ export async function getEnv() { args: TransactionRequest, tracer: Tracer, tracerConfig: TracerConfig[Tracer], - blockOrTag: 'latest' | Hex = 'latest' + blockOrTag: 'latest' | Hex = 'latest', ): Promise { return client.request({ method: 'debug_traceCall' as 'eth_chainId', @@ -349,7 +351,7 @@ export function waitForHealth(url: string) { export function visit( obj: unknown, - callback: (key: string, value: unknown) => [string, unknown] | null + callback: (key: string, value: unknown) => [string, unknown] | null, ): unknown { if (Array.isArray(obj)) { return obj.map((item) => visit(item, callback)) From 846a0afdf4d63016bfa74fd38005565f9f511fb2 Mon Sep 17 00:00:00 2001 From: pgherveou Date: Thu, 16 Oct 2025 11:56:11 +0300 Subject: [PATCH 3/3] fix --- .github/workflows/lint.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index a58a8da..e17baa4 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -37,6 +37,7 @@ jobs: echo "Building fixture contracts" deno task build + deno fmt echo "Verifying no new files were created (bytecode should be committed)" if [ -n "$(git status --porcelain)" ]; then