diff --git a/.bumpversion.cfg b/.bumpversion.cfg deleted file mode 100644 index c8c897eb8..000000000 --- a/.bumpversion.cfg +++ /dev/null @@ -1,21 +0,0 @@ -[bumpversion] -current_version = 0.0.0-alpha.0 -commit = False -message = IN3 {new_version} - - Bump version: {current_version} → {new_version} -tag = False -parse = (?P\d+)\.(?P\d+)\.(?P\d+)(-(?Prc|alpha)\.(?P\d+))? -serialize = - {major}.{minor}.{patch}-{prerel}.{prerelver} - {major}.{minor}.{patch} - -[bumpversion:part:prerel] -optional_value = rel -values = - alpha - rc - rel - -[bumpversion:file:CMakeLists.txt] - diff --git a/.github/workflows/ccpp.yml b/.github/workflows/ccpp.yml index 7f042aa44..949a3b687 100644 --- a/.github/workflows/ccpp.yml +++ b/.github/workflows/ccpp.yml @@ -40,13 +40,15 @@ jobs: - name: build run: cd build; make - name: test - run: cd build; make ccov-all && make ccov-all-report + run: cd build; make test + - name: summary + run: cd build; ../scripts/lcov_report.sh | xargs llvm-cov report - name: export run: | apt-get update apt-get install -y curl cd build - cat ccov/binaries.list | xargs llvm-cov export -instr-profile ccov/all-merged.profdata -format=lcov "-ignore-filename-regex=.*(third|test).*" > coverage.info + ../scripts/lcov_report.sh | xargs llvm-cov export -format=lcov > coverage.info - uses: codecov/codecov-action@v1.0.3 with: token: ${{secrets.CODECOV_TOKEN}} diff --git a/.github/workflows/wasm.yml b/.github/workflows/wasm.yml index 86af95f29..ba1b23688 100644 --- a/.github/workflows/wasm.yml +++ b/.github/workflows/wasm.yml @@ -15,7 +15,7 @@ jobs: - name: make run: cd build; make - name: test - run: cd test/bindings/wasm; npm i; npm test + run: cd wasm/test; npm i; npm test asmjs: runs-on: ubuntu-latest @@ -29,4 +29,4 @@ jobs: - name: make run: cd build; make - name: test - run: cd test/bindings/wasm; npm i; npm test + run: cd wasm/test; npm i; npm test diff --git a/.gitignore b/.gitignore index d1256383f..b8cdc8e9c 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ _build cmake-build-debug/ .vscode/ .idea/ +.settings/ # Vim [._]*.s[a-v][a-z] [._]*.sw[a-p] @@ -24,3 +25,6 @@ cmake-build-debug/ bin/ .classpath .project +*.class +target/ +.cproject diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 731f8ccc9..34a630246 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -41,7 +41,8 @@ gcc8: paths: - x64_build/bin - x64_build/lib - - x64_build/docs/doc_doxygen + - x64_build/c/docs/doc_doxygen + - x64_build/java/docs/doc_doxygen win_mingw: image: docker.slock.it/build-images/cmake:gcc7-mingw @@ -74,8 +75,8 @@ clang50: image: docker.slock.it/build-images/cmake:clang50 extends: .conanbuild -clang9: - image: docker.slock.it/build-images/cmake:clang9 +clang10: + image: docker.slock.it/build-images/cmake:clang10 extends: .conanbuild mac_os: @@ -92,7 +93,8 @@ mac_os: artifacts: paths: - - mac_build/docs + - mac_build/c/docs + - mac_build/java/docs - mac_build/lib - mac_build/bin tags: @@ -149,14 +151,16 @@ java: script: - mkdir java_build - cd java_build - - cmake -DIN3_LIB=false -DCMAKE_BUILD_TYPE=Release -DJAVA=true -DBUILD_DOC=true .. - - cp ../mac_build/lib/libin3_jni.dylib ../src/bindings/java/in3/native/ - - cp ../win_build/lib/libin3_jni.so ../src/bindings/java/in3/native/in3_jni.dll - - cp ../x64_build/lib/libin3_jni.so ../src/bindings/java/in3/native/ - - cp ../arm7_build/lib/libin3_jni.so ../src/bindings/java/in3/native/libin3_jni_arm.so + - mkdir -p ../java/src/in3/native/ + - cp ../mac_build/lib/libin3_jni.dylib ../java/src/in3/native/ + - cp ../win_build/lib/libin3_jni.so ../java/src/in3/native/in3_jni.dll + - cp ../x64_build/lib/libin3_jni.so ../java/src/in3/native/ + - cp ../arm7_build/lib/libin3_jni.so ../java/src/in3/native/libin3_jni_arm.so + - cmake -DIN3_LIB=false -DJAVA_MULTI_LIBS=true -DCMAKE_BUILD_TYPE=Release -DJAVA=true -DBUILD_DOC=true .. - make in3j artifacts: paths: + - java/src/in3/native/ - java_build/lib # ##### test ###### @@ -169,22 +173,26 @@ coverage: script: - mkdir cov_build; cd cov_build - cmake -DIN3API=true -DIN3_LIB=false -DCMD=false -DUSE_CURL=false -DTEST=true -DCODE_COVERAGE=true -DUSE_SEGGER_RTT=false -DTRANSPORTS=false -DCMAKE_BUILD_TYPE=Debug .. - - make -j8 && make ccov-all && make ccov-all-report + - make -j8 && make ptest + - ../scripts/lcov_report.sh | xargs llvm-cov report + - ../scripts/lcov_report.sh | xargs llvm-cov show -show-line-counts-or-regions -output-dir=ccov/all-merged -format=html + - ../scripts/lcov_report.sh | xargs llvm-cov export -format=lcov > ccov/all-merged/lcov.info + artifacts: paths: - cov_build/ccov/all-merged clangcheck: stage: analysis - image: docker.slock.it/build-images/cmake:clang9 + image: docker.slock.it/build-images/cmake:clang10 allow_failure: false tags: - short-jobs script: - mkdir _build - cd _build - - scan-build-9 cmake -DTAG_VERSION=$CI_COMMIT_TAG -DCMAKE_BUILD_TYPE=DEBUG -DIN3_SERVER=true .. - - scan-build-9 --status-bugs --exclude ../src/third-party --force-analyze-debug-code -o ../report make + - scan-build-10 cmake -DTAG_VERSION=$CI_COMMIT_TAG -DCMAKE_BUILD_TYPE=DEBUG -DIN3_SERVER=true .. + - scan-build-10 --status-bugs --exclude ../c/src/third-party --force-analyze-debug-code -o ../report make artifacts: paths: - report @@ -200,7 +208,7 @@ cppcheck: - cd _build - cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=Release .. - cd .. - - cppcheck --project=_build/compile_commands.json -i/builds/in3/c/in3-core/test/unity -i/builds/in3/c/in3-core/src/third-party + - cppcheck --project=_build/compile_commands.json -i/builds/in3/c/in3-core/c/test/unity -i/builds/in3/c/in3-core/c/src/third-party valgrind: stage: analysis @@ -209,14 +217,14 @@ valgrind: tags: - short-jobs variables: - VALGRIND_OPTS: "-q --leak-check=full --show-leak-kinds=definite --suppressions=suppress.valgrind" + VALGRIND_OPTS: "-v -q --error-exitcode=1 --leak-check=full --show-leak-kinds=definite --suppressions=suppress.valgrind" script: - mkdir _build - cd _build - cmake -DCMAKE_BUILD_TYPE=Release -DTEST=true -DDEBUG=false .. - make - printf "{\n ignore_libcrypto_conditional_jump_errors\n Memcheck:Leak\n ...\n obj:*/libcrypto.so.*\n}\n" > suppress.valgrind - - for f in test/test*; do valgrind $VALGRIND_OPTS $(pwd)/$f || echo "Failed but ignored for now"; done + - for f in test/test*; do valgrind $VALGRIND_OPTS $(pwd)/$f; done test_c: image: docker.slock.it/build-images/cmake:gcc8 @@ -258,7 +266,7 @@ test_wasm: - short-jobs script: - mv wasm_build build - - cd test/bindings/wasm + - cd wasm/test - sh /prepare.sh - npm install - npm test @@ -272,17 +280,30 @@ test_asmjs: - short-jobs script: - mv asmjs_build build - - cd test/bindings/wasm + - cd wasm/test - sh /prepare.sh - npm install - npm test +test_qemu: + image: docker.io/zephyrprojectrtos/zephyr-build:v0.12 + stage: test + script: + - west init -m https://github.com/zephyrproject-rtos/zephyr --mr v2.0.0 + - export ZEPHYR_BASE=/builds/in3/c/in3-core + - source /builds/in3/c/in3-core/zephyr/zephyr-env.sh + - west build -b qemu_cortex_m3 c/test/qemu + - ./scripts/qemu.sh 2> /dev/null + java_linux: image: docker.slock.it/build-images/cmake:gcc8 stage: test + dependencies: + - java script: - - java -cp java_build/lib/in3.jar in3.IN3 eth_blockNumber - allow_failure: true + - mv java_build build + - cd java + - ./gradlew test tags: - short-jobs @@ -293,9 +314,9 @@ examples_linux: - gcc8 script: - mv x64_build build - - cd examples/c + - cd c/examples - ./build.sh - - cd ../java + - cd ../../java/examples - ./build.sh tags: - short-jobs @@ -307,9 +328,7 @@ examples_arm: - arm7 script: - mv arm7_build build - - cd examples/c - - ./build.sh - - cd ../java + - cd c/examples - ./build.sh tags: - arm @@ -318,32 +337,41 @@ examples_macos: stage: test dependencies: - mac_os + - wasm script: - mv mac_build build - - cd examples/c + - cd c/examples - ./build.sh - - cd ../java + - cd ../../java/examples + - ./build.sh + - cd ../.. + - mv build mac_build + - mv wasm_build build + - cd wasm/examples - ./build.sh tags: - mac-mini-runner java_arm: image: armv7/armhf-java8 - allow_failure: true dependencies: - java stage: test script: - - echo "SKIPPED" - # - java -cp java_build/lib/in3.jar in3.IN3 eth_blockNumber + - mv java_build build + - cd java + - ./gradlew test tags: - arm java_macos: stage: test - allow_failure: true + dependencies: + - java script: - - java -cp java_build/lib/in3.jar in3.IN3 eth_blockNumber + - mv java_build build + - cd java + - ./gradlew test tags: - mac-mini-runner @@ -365,18 +393,33 @@ docker: ##### analyse ##### -#include: -# - template: Code-Quality.gitlab-ci.yml +include: + - template: Code-Quality.gitlab-ci.yml -#code_quality: -# stage: analysis -# tags: -# - short-jobs -# artifacts: -# paths: [gl-code-quality-report.json] -# variables: -# CODE_QUALITY_IMAGE: "registry.gitlab.com/gitlab-org/security-products/codequality:latest" -# REPORT_STDOUT: STDOUT +code_quality: + only: + - /^v[0-9]+.[0-9]+.[0-9]+(\-RC[0-9]+)?$/ + except: + - branches + stage: analysis + tags: + - short-jobs + artifacts: + reports: + codequality: gl-code-quality-report.json + expire_in: 1 week + variables: + CODE_QUALITY_IMAGE: "registry.gitlab.com/gitlab-org/security-products/codequality:latest" + REPORT_STDOUT: STDOUT + +format: + stage: analysis + image: docker.slock.it/build-images/cmake:clang10 + tags: + - short-jobs + script: + - find c/src/core/ c/src/cmd/ c/src/api/ c/src/verifier/ c/src/transport/ \( -name "*.c" -o -name "*.h" \) | xargs clang-format-10 -i + - git diff --patch --exit-code cpd: stage: analysis @@ -384,9 +427,9 @@ cpd: tags: - short-jobs script: - - cpd --minimum-tokens 180 --language cpp --exclude src/third-party --files src - - cpd --minimum-tokens 150 --language java --files src/bindings/java - - cpd --minimum-tokens 150 --language python --files src/bindings/python + - cpd --minimum-tokens 180 --language cpp --exclude c/src/third-party --files c/src + - cpd --minimum-tokens 150 --language java --files java/src + - cpd --minimum-tokens 150 --language python --files python vulnerabilities: stage: analysis @@ -404,6 +447,27 @@ vulnerabilities: paths: - vulnerability_analysis.json +metrics: + stage: analysis + image: docker.slock.it/build-images/deployment + tags: + - short-jobs + dependencies: + - mac_os + - gcc8 + - wasm + - asmjs + script: + - echo "mac_cmd_size `stat -c %s mac_build/bin/in3` " > metrics.txt + - echo "wasm_min_size `stat -c %s wasm_build/bin/in3w_min.wasm` " >> metrics.txt + - echo "wasm_js_size `stat -c %s wasm_build/bin/in3.js` " >> metrics.txt + - echo "asmjs_js_size `stat -c %s asmjs_build/bin/in3.js` " >> metrics.txt + - echo "gcc8_size `stat -c %s x64_build/bin/in3` " >> metrics.txt + - echo "reported metrics"; cat metrics.txt + artifacts: + reports: + metrics: metrics.txt + ##### deploy ##### dockerhub-deploy: @@ -512,8 +576,8 @@ readthedocs: - git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@git.slock.it/tools/generator.git - cd generator - npm i && npm run build - - bin/slockit-doxygen ../x64_build/docs/doc_doxygen/xml "# API Reference C\n\n" > ../doc/docs/api-c.md - - bin/slockit-doxygen ../x64_build/docs/doc_doxygen/xml "# API Reference Java\n\n" java > ../doc/docs/api-java.md + - bin/slockit-doxygen ../x64_build/c/docs/doc_doxygen/xml "# API Reference C\n\n" > ../doc/docs/api-c.md + - bin/slockit-doxygen ../x64_build/java/docs/doc_doxygen/xml "# API Reference Java\n\n" java > ../doc/docs/api-java.md - cd ../doc/docs && make html && make latexpdf && make text artifacts: paths: @@ -541,16 +605,16 @@ release_mac_and_wasm: - cd in3-mac-wasm - cp -r ../mac_build/bin . - cp -r ../mac_build/lib . - - cp -r ../include ../examples ../src ../CMakeLists.txt ../compiler.cmake ../README.md ../LICENSE ../LICENSE.AGPL . + - cp -r ../c ../java ../CMakeLists.txt ../python ../wasm ../README.md ../LICENSE ../LICENSE.AGPL . - cp -r ../doc/build doc - cp -r ../wasm_build/module js-wasm - cp -r ../wasm_build/module js-asmjs - cd .. - - tar -zcv --exclude=in3-mac-wasm/src --exclude=in3-mac-wasm/include --exclude=in3-mac-wasm/js-wasm --exclude=in3-mac-wasm/js-asmjs --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_mac.tar.gz in3-mac-wasm/ + - tar -zcv --exclude=in3-mac-wasm/src --exclude=in3-mac-wasm/c/include --exclude=in3-mac-wasm/js-wasm --exclude=in3-mac-wasm/js-asmjs --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_mac.tar.gz in3-mac-wasm/ - IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:'"$PINATA_API_KEY" -H 'pinata_secret_api_key:'"$PINATA_SECRET_API_KEY" -F file=@in3_${CI_COMMIT_TAG}_mac.tar.gz -F 'pinataMetadata={"name":"in3_'${CI_COMMIT_TAG}'_mac.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}') - "IPFS_HASH=$(echo $IPFS_RESPONSE | sed -e 's/[{}]/''/g' | awk -v RS=',' -F: '/IpfsHash/ {print $2}')" - ghr -u slockIt -r in3-c $CI_COMMIT_TAG in3_${CI_COMMIT_TAG}_mac.tar.gz - - tar -zcv --exclude=in3-mac-wasm/src --exclude=in3-mac-wasm/include --exclude=in3-mac-wasm/bin --exclude=in3-mac-wasm/lib --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_wasm.tar.gz in3-mac-wasm/ + - tar -zcv --exclude=in3-mac-wasm/src --exclude=in3-mac-wasm/c/include --exclude=in3-mac-wasm/bin --exclude=in3-mac-wasm/lib --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_wasm.tar.gz in3-mac-wasm/ - IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:'"$PINATA_API_KEY" -H 'pinata_secret_api_key:'"$PINATA_SECRET_API_KEY" -F file=@in3_${CI_COMMIT_TAG}_wasm.tar.gz -F 'pinataMetadata={"name":"in3_'${CI_COMMIT_TAG}'_wasm.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}') - "IPFS_HASH=$(echo $IPFS_RESPONSE | sed -e 's/[{}]/''/g' | awk -v RS=',' -F: '/IpfsHash/ {print $2}')" - echo "Mac release:" $IPFS_HASH >> in3-mac-wasm/mac_release_ipfs_hash.txt @@ -581,12 +645,12 @@ release_x64: - cd in3-x64 - cp -r ../x64_build/bin . - cp -r ../x64_build/lib . - - cp -r ../include ../examples ../src ../CMakeLists.txt ../compiler.cmake ../README.md ../LICENSE ../LICENSE.AGPL . + - cp -r ../c ../java ../CMakeLists.txt ../python ../wasm ../README.md ../LICENSE ../LICENSE.AGPL . - cp -r ../doc/build doc - cp -r ../wasm_build/module js-wasm - cp -r ../asmjs_build/module js-asmjs - cd .. - - tar -zcv --exclude=in3-x64/src --exclude=in3-x64/include --exclude=in3-x64/js-asmjs --exclude=in3-x64/js-wasm --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_x64.tar.gz in3-x64/ + - tar -zcv --exclude=in3-x64/src --exclude=in3-x64/c/include --exclude=in3-x64/js-asmjs --exclude=in3-x64/js-wasm --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_x64.tar.gz in3-x64/ - IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:'"$PINATA_API_KEY" -H 'pinata_secret_api_key:'"$PINATA_SECRET_API_KEY" -F file=@in3_${CI_COMMIT_TAG}_x64.tar.gz -F 'pinataMetadata={"name":"in3_'${CI_COMMIT_TAG}'_mac.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}') - "IPFS_HASH=$(echo $IPFS_RESPONSE | sed -e 's/[{}]/''/g' | awk -v RS=',' -F: '/IpfsHash/ {print $2}')" - echo "x64 release:" $IPFS_HASH >> in3-x64/x64_release_ipfs_hash.txt @@ -618,12 +682,12 @@ release_x86: - cd in3-x86 - cp -r ../x86_build/bin . - cp -r ../x86_build/lib . - - cp -r ../include ../examples ../src ../CMakeLists.txt ../compiler.cmake ../README.md ../LICENSE ../LICENSE.AGPL . + - cp -r ../c ../java ../CMakeLists.txt ../python ../wasm ../README.md ../LICENSE ../LICENSE.AGPL . - cp -r ../doc/build doc - cp -r ../wasm_build/module js-wasm - cp -r ../wasm_build/module js-asmjs - cd .. - - tar -zcv --exclude=in3-x86/src --exclude=in3-x86/include --exclude=in3-x86/js-asmjs --exclude=in3-x86/js-wasm --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_x86.tar.gz in3-x86/ + - tar -zcv --exclude=in3-x86/src --exclude=in3-x86/c/include --exclude=in3-x86/js-asmjs --exclude=in3-x86/js-wasm --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_x86.tar.gz in3-x86/ - IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:'"$PINATA_API_KEY" -H 'pinata_secret_api_key:'"$PINATA_SECRET_API_KEY" -F file=@in3_${CI_COMMIT_TAG}_x86.tar.gz -F 'pinataMetadata={"name":"in3_'${CI_COMMIT_TAG}'_x86.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}') - "IPFS_HASH=$(echo $IPFS_RESPONSE | sed -e 's/[{}]/''/g' | awk -v RS=',' -F: '/IpfsHash/ {print $2}')" - echo "x86 release:" $IPFS_HASH >> in3-x86/x86_release_ipfs_hash.txt @@ -656,12 +720,12 @@ release_arm7: - mkdir doc - cp -r ../arm7_build/bin . - cp -r ../arm7_build/lib . - - cp -r ../include ../examples ../src ../CMakeLists.txt ../compiler.cmake ../README.md ../LICENSE ../LICENSE.AGPL . + - cp -r ../c ../java ../CMakeLists.txt ../python ../wasm ../README.md ../LICENSE ../LICENSE.AGPL . - cp -r ../doc/build doc - cp -r ../wasm_build/module js-wasm - cp -r ../wasm_build/module js-asmjs - cd .. - - tar -zcv --exclude=in3-arm7/src --exclude=in3-arm7/include --exclude=in3-arm7/js-asmjs --exclude=in3-arm7/js-wasm --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_arm7.tar.gz in3-arm7/ + - tar -zcv --exclude=in3-arm7/src --exclude=in3-arm7/c/include --exclude=in3-arm7/js-asmjs --exclude=in3-arm7/js-wasm --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_arm7.tar.gz in3-arm7/ - IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:'"$PINATA_API_KEY" -H 'pinata_secret_api_key:'"$PINATA_SECRET_API_KEY" -F file=@in3_${CI_COMMIT_TAG}_arm7.tar.gz -F 'pinataMetadata={"name":"in3_'${CI_COMMIT_TAG}'_arm7.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}') - "IPFS_HASH=$(echo $IPFS_RESPONSE | sed -e 's/[{}]/''/g' | awk -v RS=',' -F: '/IpfsHash/ {print $2}')" - echo "arm7 release:" $IPFS_HASH >> in3-arm7/arm7_release_ipfs_hash.txt @@ -698,12 +762,12 @@ release_win: - mv bin/rlp bin/rlp.exe - mv bin/json bin/json.exe - mv lib/libin3.so lib/in3.dll - - cp -r ../include ../examples ../src ../CMakeLists.txt ../compiler.cmake ../README.md ../LICENSE ../LICENSE.AGPL . + - cp -r ../c ../java ../CMakeLists.txt ../python ../wasm ../README.md ../LICENSE ../LICENSE.AGPL . - cp -r ../doc/build doc - cp -r ../wasm_build/module js-wasm - cp -r ../wasm_build/module js-asmjs - cd .. - - tar -zcv --exclude=in3-win/src --exclude=in3-win/include --exclude=in3-win/js-asmjs --exclude=in3-win/js-wasm --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_windows.tar.gz in3-win/ + - tar -zcv --exclude=in3-win/src --exclude=in3-win/c/include --exclude=in3-win/js-asmjs --exclude=in3-win/js-wasm --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_windows.tar.gz in3-win/ - IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:'"$PINATA_API_KEY" -H 'pinata_secret_api_key:'"$PINATA_SECRET_API_KEY" -F file=@in3_${CI_COMMIT_TAG}_windows.tar.gz -F 'pinataMetadata={"name":"in3_'${CI_COMMIT_TAG}'_windows.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}') - "IPFS_HASH=$(echo $IPFS_RESPONSE | sed -e 's/[{}]/''/g' | awk -v RS=',' -F: '/IpfsHash/ {print $2}')" - echo "windows release:" $IPFS_HASH >> in3-win/win_release_ipfs_hash.txt @@ -742,12 +806,12 @@ release_pip: dependencies: - mac_os script: - - rm -rf src/bindings/python/in3/bind/slibs/ - - mkdir src/bindings/python/in3/bind/slibs/ - - cp mac_build/lib/libin3.dylib src/bindings/python/in3/bind/slibs/. + - rm -rf python/in3/bind/slibs/ + - mkdir python/in3/bind/slibs/ + - cp mac_build/lib/libin3.dylib python/in3/bind/slibs/. - export version=${CI_COMMIT_TAG} - export download_url=https://github.com/slockit/in3-c/releases/download/${CI_COMMIT_TAG}/in3_${CI_COMMIT_TAG}_mac.tar.gz - - cd src/bindings/python + - cd python - cp $pypirc ~/.pypirc - ./publish.sh artifacts: @@ -797,6 +861,7 @@ pages: - readthedocs when: manual script: + - mv scripts/debian . - mv debian/changelog-in3 debian/changelog - mv debian/control-in3 debian/control - mv debian/rules-in3 debian/rules @@ -856,6 +921,7 @@ debian_package_deploy_disco: - readthedocs when: manual script: + - mv scripts/debian . - mv debian/changelog-dev debian/changelog - mv debian/control-dev debian/control - mv debian/rules-dev debian/rules diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs deleted file mode 100644 index e8895216f..000000000 --- a/.settings/org.eclipse.buildship.core.prefs +++ /dev/null @@ -1,2 +0,0 @@ -connection.project.dir= -eclipse.preferences.version=1 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index c388ffba4..000000000 --- a/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,13 +0,0 @@ -# -#Mon Jan 13 14:01:51 CET 2020 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.codegen.targetPlatform=13 -org.eclipse.jdt.core.compiler.source=13 -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.compliance=13 -org.eclipse.jdt.core.compiler.debug.sourceFile=generate diff --git a/.vscode/launch.json b/.vscode/launch.json index aca7efa1c..350db8d47 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -4,6 +4,18 @@ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ + { + "type": "lldb", + "request": "launch", + "name": "_runner_", + "program": "${workspaceFolder}/build/test/runner", + "cwd": "${workspaceFolder}", + "args": [ + "c/test/testdata/requests/in3_ens.json", + "-t", + "3" + ] + }, { "type": "lldb", "request": "launch", @@ -54,6 +66,13 @@ "program": "${workspaceFolder}/build/test/test_binary_encoding", "cwd": "${workspaceFolder}/build" }, + { + "type": "lldb", + "request": "launch", + "name": "run rpcapi test", + "program": "${workspaceFolder}/build/test/test_rpc_api", + "cwd": "${workspaceFolder}/build" + }, { "type": "lldb", "request": "launch", @@ -233,7 +252,7 @@ "name": "cmd", "type": "cppdbg", "request": "launch", - "program": "${workspaceFolder}/build/bin/in3", + "program": "${workspaceFolder}/build/bin/btc", "args": [ "-debug", "-c", @@ -246,6 +265,25 @@ "externalConsole": false, "MIMode": "lldb" }, + { + "name": "btc_v", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/bin/in3", + "args": [ + "-debug", + "-c", + "btc", + "getblock", + "0000000000000521e7f446a2929d03d8fd23c012d98ac53f2f8c9cd2d4f820a6", + "true" + ], + "stopAtEntry": true, + "cwd": "${workspaceFolder}/build", + "environment": [], + "externalConsole": false, + "MIMode": "lldb" + }, { "name": "rlp", "type": "cppdbg", @@ -344,6 +382,25 @@ "externalConsole": false, "MIMode": "lldb" }, + { + "name": "Keynames", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/test/runner", + "args": [ + "-m", + "22", + "../test/testdata/requests/eth_getBalance_not_existent.json" + ], + "stopAtEntry": true, + "cwd": "${workspaceFolder}/build", + "environment": [], + "externalConsole": false, + "MIMode": "lldb", + "logging": { + "trace": true + } + }, { "name": "vmrunner_", "type": "cppdbg", diff --git a/.vscode/settings.json b/.vscode/settings.json index 0d177b678..3542a6d66 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -84,7 +84,10 @@ "__node_handle": "c", "cstdlib": "c", "locale": "c", - "eth_call_response_binary.h": "c" + "eth_call_response_binary.h": "c", + "malloc.h": "c", + "memzero.h": "c", + "eth_basic.h": "c" }, "C_Cpp.errorSquiggles": "Disabled" } \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 3b0d9f062..2091f7301 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,42 +34,100 @@ cmake_minimum_required(VERSION 3.6.1) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/scripts/cmake_modules/") + # project name project(in3) -OPTION(TAG_VERSION "the tagged version, which should be used" 2.0.0) -OPTION(ETH_NANO "build minimal eth verification.(eth_getTransactionReceipt)" ON) -OPTION(ETH_BASIC "build basic eth verification.(all rpc-calls except eth_call)" ON) -OPTION(ETH_FULL "build full eth verification.(including eth_call)" ON) -OPTION(IN3API "build the USN-API which offer better interfaces and additional functions on top of the pure verification" ON) -OPTION(USE_PRECOMPUTED_EC "if true the secp256k1 curve uses precompiled tables to boost performance. turning this off makes ecrecover slower, but saves about 37kb." ON) -OPTION(ERR_MSG "if set human readable error messages will be inculded in th executable, otherwise only the error code is used. (saves about 19kB)" ON) + +# options +option(BUILD_DOC "generates the documenation with doxygen." OFF) +option(TAG_VERSION "the tagged version, which should be used" 2.0.0) +option(ETH_NANO "build minimal eth verification.(eth_getTransactionReceipt)" ON) +option(ETH_BASIC "build basic eth verification.(all rpc-calls except eth_call)" ON) +option(ETH_FULL "build full eth verification.(including eth_call)" ON) +option(IPFS "build IPFS verification" ON) +option(BTC "if true, the bitcoin verifiers will be build" OFF) +option(IN3API "build the USN-API which offer better interfaces and additional functions on top of the pure verification" ON) +option(USE_PRECOMPUTED_EC "if true the secp256k1 curve uses precompiled tables to boost performance. turning this off makes ecrecover slower, but saves about 37kb." ON) +option(ERR_MSG "if set human readable error messages will be inculded in th executable, otherwise only the error code is used. (saves about 19kB)" ON) +option(EVM_GAS "if true the gas costs are verified when validating a eth_call. This is a optimization since most calls are only interessted in the result. EVM_GAS would be required if the contract uses gas-dependend op-codes." true) +option(IN3_LIB "if true a shared anmd static library with all in3-modules will be build." ON) +option(TEST "builds the tests and also adds special memory-management, which detects memory leaks, but will cause slower performance" OFF) +option(FAST_MATH "Math optimizations used in the EVM. This will also increase the filesize." OFF) +option(SEGGER_RTT "Use the segger real time transfer terminal as the logging mechanism" OFF) +option(CURL_BLOCKING "if true the curl-request will block until the response is received" OFF) +option(JAVA "build the java-binding (shared-lib and jar-file)" OFF) +option(JAVA_MULTI_LIBS "embedds multiple shared libs in the jar" OFF) +option(WASM "Includes the WASM-Build. In order to build it you need emscripten as toolchain. Usually you also want to turn off other builds in this case." OFF) +option(ASMJS "compiles the code as asm.js." OFF) +option(WASM_EMBED "embedds the wasm as base64-encoded into the js-file" ON) +option(WASM_EMMALLOC "use ther smaller EMSCRIPTEN Malloc, which reduces the size about 10k, but may be a bit slower" ON) +option(WASM_SYNC "intiaializes the WASM synchronisly, which allows to require and use it the same function, but this will not be supported by chrome (4k limit)" OFF) +option(CODE_COVERAGE "Builds targets with code coverage instrumentation. (Requires GCC or Clang)" OFF) + if (USE_PRECOMPUTED_EC) ADD_DEFINITIONS(-DUSE_PRECOMPUTED_CP=1) else() ADD_DEFINITIONS(-DUSE_PRECOMPUTED_CP=0) endif() + +if (CURL_BLOCKING) + ADD_DEFINITIONS(-DCURL_BLOCKING) +endif() + + if (ERR_MSG) ADD_DEFINITIONS(-DERR_MSG) endif() -if(ETH_FULL) + +if(ETH_FULL) ADD_DEFINITIONS(-DETH_FULL) set(IN3_VERIFIER eth_full) -elseif(ETH_BASIC) +elseif(ETH_BASIC) ADD_DEFINITIONS(-DETH_BASIC) set(IN3_VERIFIER eth_basic) -elseif(ETH_NANO) +elseif(ETH_NANO) ADD_DEFINITIONS(-DETH_NANO) set(IN3_VERIFIER eth_nano) endif() -if(IN3API) + +if(IN3API) ADD_DEFINITIONS(-DETH_API) set(IN3_API eth_api) endif() +if(IPFS) + ADD_DEFINITIONS(-DIPFS) + set(IN3_VERIFIER ${IN3_VERIFIER} ipfs) +endif() + +if(CMAKE_BUILD_TYPE MATCHES Debug) + ADD_DEFINITIONS(-DDEBUG) +endif(CMAKE_BUILD_TYPE MATCHES Debug) -set(PROJECT_VERSION "0.1.0-alpha.0") +if(EVM_GAS) + MESSAGE(STATUS "Enable GAS in EVM") + ADD_DEFINITIONS(-DEVM_GAS) +endif(EVM_GAS) + +if(FAST_MATH) + MESSAGE(STATUS "Enable math optimizations (excutable size may increase)") + ADD_DEFINITIONS(-DIN3_MATH_FAST) +else() + MESSAGE(STATUS "Disable math optimizations (optimised for executable size)") + ADD_DEFINITIONS(-DIN3_MATH_LITE) +endif(FAST_MATH) + +if(SEGGER_RTT) + MESSAGE(STATUS "Enable segger RTT for logging") + ADD_DEFINITIONS(-DSEGGER_RTT) +endif(SEGGER_RTT) + +# handle version if (TAG_VERSION) set(PROJECT_VERSION "${TAG_VERSION}") -ENDIF(TAG_VERSION) +else(TAG_VERSION) + set(PROJECT_VERSION "2.2.2-local") +endif(TAG_VERSION) + MESSAGE(STATUS "Building version ${PROJECT_VERSION}") string(REPLACE "." ";" VERSION_LIST ${PROJECT_VERSION}) @@ -83,117 +141,35 @@ ADD_DEFINITIONS(-DIN3_VERSION_MINOR=${PROJECT_VERSION_MINOR}) ADD_DEFINITIONS(-DIN3_VERSION_PATCH=${PROJECT_VERSION_PATCH}) -IF (CMAKE_BUILD_TYPE MATCHES Debug) - ADD_DEFINITIONS(-DDEBUG) -ENDIF (CMAKE_BUILD_TYPE MATCHES Debug) - -OPTION(EVM_GAS "if true the gas costs are verified when validating a eth_call. This is a optimization since most calls are only interessted in the result. EVM_GAS would be required if the contract uses gas-dependend op-codes." true) -IF (EVM_GAS) - MESSAGE(STATUS "Enable GAS in EVM") - ADD_DEFINITIONS(-DEVM_GAS) -ENDIF (EVM_GAS) - -OPTION(IN3_LIB "if true a shared anmd static library with all in3-modules will be build." ON) +# define output dir structure +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) -OPTION(TEST "builds the tests and also adds special memory-management, which detects memory leaks, but will cause slower performance" OFF) -IF (TEST) +# build tests +if(TEST) MESSAGE(STATUS "Build Tests and add debug infos") ADD_DEFINITIONS(-DTEST) ADD_DEFINITIONS(-DLOG_USE_COLOR) ADD_DEFINITIONS(-DIN3_DONT_HASH_KEYS) ADD_DEFINITIONS(-DIN3_EXPORT_TEST=) ADD_DEFINITIONS(-DIN3_IMPORT_TEST=extern) + ADD_DEFINITIONS(-DDEBUG) SET(CMAKE_BUILD_TYPE Debug) enable_testing() - add_subdirectory(test) - add_custom_target(ptest COMMAND ${CMAKE_CTEST_COMMAND} -j 16) -ELSE () - ADD_DEFINITIONS(-DIN3_EXPORT_TEST=static) -ENDIF (TEST) - -OPTION(FAST_MATH "Math optimizations used in the EVM. This will also increase the filesize." OFF) -IF (FAST_MATH) - MESSAGE(STATUS "Enable math optimizations (excutable size may increase)") - ADD_DEFINITIONS(-DIN3_MATH_FAST) -ELSE () - MESSAGE(STATUS "Disable math optimizations (optimised for executable size)") - ADD_DEFINITIONS(-DIN3_MATH_LITE) -ENDIF (FAST_MATH) + add_subdirectory(c/test) + add_custom_target(ptest COMMAND ${CMAKE_CTEST_COMMAND} -j 8) +endif(TEST) -OPTION(SEGGER_RTT "Use the segger real time transfer terminal as the logging mechanism" OFF) -IF (SEGGER_RTT) - MESSAGE(STATUS "Enable segger RTT for logging") - ADD_DEFINITIONS(-DSEGGER_RTT) -ENDIF (SEGGER_RTT) -OPTION(FILTER_NODES "if true the nodelist is filtered against config node properties" OFF) -IF (FILTER_NODES) - MESSAGE(STATUS "Enable nodelist filter based on properties") - ADD_DEFINITIONS(-DFILTER_NODES) -ENDIF (FILTER_NODES) +add_subdirectory(c) -# substiture __FILENAME__ as it is used in DEBUG -#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__FILENAME__='\"$(subst ${CMAKE_SOURCE_DIR}/,,$(abspath $<))\"'") +IF (JAVA) + add_subdirectory(java) +ENDIF (JAVA) -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +IF (WASM) + add_subdirectory(wasm/src) +ENDIF (WASM) -include("${PROJECT_SOURCE_DIR}/compiler.cmake") - -# build modules -add_subdirectory(src/third-party) -add_subdirectory(src/core) -add_subdirectory(src/transport) -add_subdirectory(src/verifier) -add_subdirectory(src/bindings) -add_subdirectory(src/api) -add_subdirectory(src/cmd) -add_subdirectory(docs) - - -# create the library -if (IN3_LIB) - set(IN3_LIBS - $ - $ - $ - $ - $ - $ - $ - $ - $ - ) - # if we use curl, we include curl transport as well - if (USE_CURL) - set(IN3_LIBS ${IN3_LIBS} $) - endif() - - # create the libraries - add_library(in3_bundle STATIC ${IN3_LIBS} ) - add_library(in3_lib SHARED ${IN3_LIBS} ) - set_target_properties(in3_bundle PROPERTIES OUTPUT_NAME "in3") - set_target_properties(in3_lib PROPERTIES OUTPUT_NAME "in3") - - # for curl we need to add the dependency - if (USE_CURL) - target_link_libraries(in3_lib transport_curl) - endif() - - # install - INSTALL(TARGETS in3_bundle - DESTINATION "lib" - ) - INSTALL(TARGETS in3_lib - DESTINATION lib - PERMISSIONS - OWNER_READ OWNER_WRITE OWNER_EXECUTE - GROUP_READ GROUP_EXECUTE - WORLD_READ WORLD_EXECUTE) - INSTALL ( - DIRECTORY ${CMAKE_SOURCE_DIR}/include/ - DESTINATION include - FILES_MATCHING PATTERN "*.h*") - -endif() +add_subdirectory(python/docs) diff --git a/c/CMakeLists.txt b/c/CMakeLists.txt new file mode 100644 index 000000000..907052c56 --- /dev/null +++ b/c/CMakeLists.txt @@ -0,0 +1,95 @@ +############################################################################### +# This file is part of the Incubed project. +# Sources: https://github.com/slockit/in3-c +# +# Copyright (C) 2018-2019 slock.it GmbH, Blockchains LLC +# +# +# COMMERCIAL LICENSE USAGE +# +# Licensees holding a valid commercial license may use this file in accordance +# with the commercial license agreement provided with the Software or, alternatively, +# in accordance with the terms contained in a written agreement between you and +# slock.it GmbH/Blockchains LLC. For licensing terms and conditions or further +# information please contact slock.it at in3@slock.it. +# +# Alternatively, this file may be used under the AGPL license as follows: +# +# AGPL LICENSE USAGE +# +# This program is free software: you can redistribute it and/or modify it under the +# terms of the GNU Affero General Public License as published by the Free Software +# Foundation, either version 3 of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. +# [Permissions of this strong copyleft license are conditioned on making available +# complete source code of licensed works and modifications, which include larger +# works using a licensed work, under the same license. Copyright and license notices +# must be preserved. Contributors provide an express grant of patent rights.] +# You should have received a copy of the GNU Affero General Public License along +# with this program. If not, see . +############################################################################### + + +include("${PROJECT_SOURCE_DIR}/c/compiler.cmake") + +# build modules +add_subdirectory(src/third-party) +add_subdirectory(src/core) +add_subdirectory(src/transport) +add_subdirectory(src/verifier) +add_subdirectory(src/api) +add_subdirectory(src/cmd) +add_subdirectory(docs) + + +# create the library +if (IN3_LIB) + set(IN3_LIBS + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + ) + # if we use curl, we include curl transport as well + if (USE_CURL) + set(IN3_LIBS ${IN3_LIBS} $) + endif() + + # create the libraries + add_library(in3_bundle STATIC ${IN3_LIBS} ) + add_library(in3_lib SHARED ${IN3_LIBS} ) + set_target_properties(in3_bundle PROPERTIES OUTPUT_NAME "in3") + set_target_properties(in3_lib PROPERTIES OUTPUT_NAME "in3") + + # for curl we need to add the dependency + if (USE_CURL) + target_link_libraries(in3_lib transport_curl) + endif() + + # install + INSTALL(TARGETS in3_bundle + DESTINATION "lib" + ) + INSTALL(TARGETS in3_lib + DESTINATION lib + PERMISSIONS + OWNER_READ OWNER_WRITE OWNER_EXECUTE + GROUP_READ GROUP_EXECUTE + WORLD_READ WORLD_EXECUTE) + INSTALL ( + DIRECTORY ${CMAKE_SOURCE_DIR}/include/ + DESTINATION include + FILES_MATCHING PATTERN "*.h*") + +endif() diff --git a/compiler.cmake b/c/compiler.cmake similarity index 89% rename from compiler.cmake rename to c/compiler.cmake index f42619f53..56310a9d6 100644 --- a/compiler.cmake +++ b/c/compiler.cmake @@ -48,7 +48,10 @@ if(${CMAKE_VERSION} VERSION_GREATER "3.12.4") endif() if (CODE_COVERAGE) + add_compile_options(-fprofile-instr-generate -fcoverage-mapping) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-instr-generate -fcoverage-mapping") set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-instr-generate -fcoverage-mapping") + set (LDFLAGS "${LDFLAGS} -fprofile-instr-generate -fcoverage-mapping") + set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fprofile-instr-generate -fcoverage-mapping") endif() diff --git a/docs/0_home.md b/c/docs/0_home.md similarity index 100% rename from docs/0_home.md rename to c/docs/0_home.md diff --git a/docs/1_install.md b/c/docs/1_install.md similarity index 97% rename from docs/1_install.md rename to c/docs/1_install.md index 3efc34dcd..f3ea5df9d 100644 --- a/docs/1_install.md +++ b/c/docs/1_install.md @@ -84,13 +84,6 @@ Default-Value: `-DEVM_GAS=ON` Default-Value: `-DFAST_MATH=OFF` -#### FILTER_NODES - - if true the nodelist is filtered against config node properties - -Default-Value: `-DFILTER_NODES=OFF` - - #### IN3API build the USN-API which offer better interfaces and additional functions on top of the pure verification diff --git a/docs/2_examples.md b/c/docs/2_examples.md similarity index 92% rename from docs/2_examples.md rename to c/docs/2_examples.md index 5d086dd54..4ff7efc2b 100644 --- a/docs/2_examples.md +++ b/c/docs/2_examples.md @@ -2,7 +2,7 @@ ### call_a_function -source : [in3-c/examples/c/call_a_function.c](https://github.com/slockit/in3-c/blob/master/examples/c/call_a_function.c) +source : [in3-c/c/examples/call_a_function.c](https://github.com/slockit/in3-c/blob/master/c/examples/call_a_function.c) This example shows how to call functions on a smart contract eiither directly or using the api to encode the arguments @@ -124,7 +124,7 @@ in3_ret_t call_func_api(in3_t* c, address_t contract) { ### get_balance -source : [in3-c/examples/c/get_balance.c](https://github.com/slockit/in3-c/blob/master/examples/c/get_balance.c) +source : [in3-c/c/examples/get_balance.c](https://github.com/slockit/in3-c/blob/master/c/examples/get_balance.c) get the Balance with the API and also as direct RPC-call @@ -203,7 +203,7 @@ void get_balance_api(in3_t* in3) { ### get_block -source : [in3-c/examples/c/get_block.c](https://github.com/slockit/in3-c/blob/master/examples/c/get_block.c) +source : [in3-c/c/examples/get_block.c](https://github.com/slockit/in3-c/blob/master/c/examples/get_block.c) using the basic-module to get and verify a Block with the API and also as direct RPC-call @@ -284,7 +284,7 @@ void get_block_api(in3_t* in3) { ### get_logs -source : [in3-c/examples/c/get_logs.c](https://github.com/slockit/in3-c/blob/master/examples/c/get_logs.c) +source : [in3-c/c/examples/get_logs.c](https://github.com/slockit/in3-c/blob/master/c/examples/get_logs.c) fetching events and verify them with eth_getLogs @@ -399,7 +399,7 @@ void get_logs_api(in3_t* in3) { ### get_transaction -source : [in3-c/examples/c/get_transaction.c](https://github.com/slockit/in3-c/blob/master/examples/c/get_transaction.c) +source : [in3-c/c/examples/get_transaction.c](https://github.com/slockit/in3-c/blob/master/c/examples/get_transaction.c) checking the transaction data @@ -483,7 +483,7 @@ void get_tx_api(in3_t* in3) { ### get_transaction_receipt -source : [in3-c/examples/c/get_transaction_receipt.c](https://github.com/slockit/in3-c/blob/master/examples/c/get_transaction_receipt.c) +source : [in3-c/c/examples/get_transaction_receipt.c](https://github.com/slockit/in3-c/blob/master/c/examples/get_transaction_receipt.c) validating the result or receipt of an transaction @@ -566,9 +566,61 @@ void get_tx_receipt_api(in3_t* in3) { ``` +### ipfs_put_get + +source : [in3-c/c/examples/ipfs_put_get.c](https://github.com/slockit/in3-c/blob/master/c/examples/ipfs_put_get.c) + + using the IPFS module + + +```c +/// using the IPFS module + +#include // the core client +#include // transport implementation +#include // IPFS verifier +#include + +#define LOREM_IPSUM "Lorem ipsum dolor sit amet" + +int main() { + in3_register_ipfs(); + in3_register_curl(); + + in3_t* c = in3_for_chain(ETH_CHAIN_ID_IPFS); + char * result, *error; + char tmp[100]; + + in3_ret_t res = in3_client_rpc( + c, + "ipfs_put", + "[\"" LOREM_IPSUM "\", \"utf8\"]", + &result, + &error); + if (res != IN3_OK) + return -1; + + printf("IPFS hash: %s\n", result); + sprintf(tmp, "[%s, \"utf8\"]", result); + free(result); + result = NULL; + + res = in3_client_rpc( + c, + "ipfs_get", + tmp, + &result, + &error); + if (res != IN3_OK) + return -1; + + return strcmp(result, "\"" LOREM_IPSUM "\""); +} +``` + ### send_transaction -source : [in3-c/examples/c/send_transaction.c](https://github.com/slockit/in3-c/blob/master/examples/c/send_transaction.c) +source : [in3-c/c/examples/send_transaction.c](https://github.com/slockit/in3-c/blob/master/c/examples/send_transaction.c) sending a transaction including signing it with a private key @@ -671,7 +723,7 @@ void send_tx_api(in3_t* in3) { ### usn_device -source : [in3-c/examples/c/usn_device.c](https://github.com/slockit/in3-c/blob/master/examples/c/usn_device.c) +source : [in3-c/c/examples/usn_device.c](https://github.com/slockit/in3-c/blob/master/c/examples/usn_device.c) a example how to watch usn events and act upon it. @@ -751,7 +803,7 @@ int main(int argc, char* argv[]) { ### usn_rent -source : [in3-c/examples/c/usn_rent.c](https://github.com/slockit/in3-c/blob/master/examples/c/usn_rent.c) +source : [in3-c/c/examples/usn_rent.c](https://github.com/slockit/in3-c/blob/master/c/examples/usn_rent.c) how to send a rent transaction to a usn contract usinig the usn-api. diff --git a/docs/3_rpc.md b/c/docs/3_rpc.md similarity index 59% rename from docs/3_rpc.md rename to c/docs/3_rpc.md index dd852a158..955f487ab 100644 --- a/docs/3_rpc.md +++ b/c/docs/3_rpc.md @@ -20,55 +20,81 @@ Parameters: The config params support the following properties : -* **[autoUpdateList](https://github.com/slockit/in3/blob/master/src/types/types.ts#L255)** :`boolean` *(optional)* - if true the nodelist will be automaticly updated if the lastBlock is newer +* **autoUpdateList** :`bool` *(optional)* - if true the nodelist will be automaticly updated if the lastBlock is newer. example: true -* **[chainId](https://github.com/slockit/in3/blob/master/src/types/types.ts#L240)** :`string` - servers to filter for the given chain. The chain-id based on EIP-155. +* **chainId** :`uint32_t` or `string (mainnet/kovan/goerli)` - servers to filter for the given chain. The chain-id based on EIP-155. example: 0x1 -* **[finality](https://github.com/slockit/in3/blob/master/src/types/types.ts#L230)** :`number` *(optional)* - the number in percent needed in order reach finality (% of signature of the validators) +* **signatureCount** :`uint8_t` *(optional)* - number of signatures requested. + example: 2 + +* **finality** :`uint16_t` *(optional)* - the number in percent needed in order reach finality (% of signature of the validators). example: 50 -* **[includeCode](https://github.com/slockit/in3/blob/master/src/types/types.ts#L187)** :`boolean` *(optional)* - if true, the request should include the codes of all accounts. otherwise only the the codeHash is returned. In this case the client may ask by calling eth_getCode() afterwards +* **includeCode** :`bool` *(optional)* - if true, the request should include the codes of all accounts. otherwise only the the codeHash is returned. In this case the client may ask by calling eth_getCode() afterwards. example: true -* **[keepIn3](https://github.com/slockit/in3/blob/master/src/types/types.ts#L187)** :`boolean` *(optional)* - if true, requests sent to the input sream of the comandline util will be send theor responses in the same form as the server did. +* **maxAttempts** :`uint16_t` *(optional)* - max number of attempts in case a response is rejected. + example: 10 + +* **keepIn3** :`bool` *(optional)* - if true, requests sent to the input sream of the comandline util will be send theor responses in the same form as the server did. example: false -* **[key](https://github.com/slockit/in3/blob/master/src/types/types.ts#L169)** :`any` *(optional)* - the client key to sign requests +* **key** :`bytes32` *(optional)* - the client key to sign requests. example: 0x387a8233c96e1fc0ad5e284353276177af2186e7afa85296f106336e376669f7 -* **[maxAttempts](https://github.com/slockit/in3/blob/master/src/types/types.ts#L182)** :`number` *(optional)* - max number of attempts in case a response is rejected - example: 10 +* **useBinary** :`bool` *(optional)* - if true the client will use binary format. + example: false -* **[maxBlockCache](https://github.com/slockit/in3/blob/master/src/types/types.ts#L197)** :`number` *(optional)* - number of number of blocks cached in memory +* **useHttp** :`bool` *(optional)* - if true the client will try to use http instead of https. + example: false + +* **maxBlockCache** :`uint32_t` *(optional)* - number of number of blocks cached in memory. example: 100 -* **[maxCodeCache](https://github.com/slockit/in3/blob/master/src/types/types.ts#L192)** :`number` *(optional)* - number of max bytes used to cache the code in memory +* **maxCodeCache** :`uint32_t` *(optional)* - number of max bytes used to cache the code in memory. example: 100000 -* **[minDeposit](https://github.com/slockit/in3/blob/master/src/types/types.ts#L215)** :`number` - min stake of the server. Only nodes owning at least this amount will be chosen. +* **timeout** :`uint32_t` *(optional)* - specifies the number of milliseconds before the request times out. increasing may be helpful if the device uses a slow connection. + example: 100000 + +* **minDeposit** :`uint64_t` - min stake of the server. Only nodes owning at least this amount will be chosen. + +* **nodeProps** :`uint64_t` bitmask *(optional)* - used to identify the capabilities of the node. -* **[nodeLimit](https://github.com/slockit/in3/blob/master/src/types/types.ts#L155)** :`number` *(optional)* - the limit of nodes to store in the client. +* **nodeLimit** :`uint16_t` *(optional)* - the limit of nodes to store in the client. example: 150 -* **[proof](https://github.com/slockit/in3/blob/master/src/types/types.ts#L206)** :`'none'`|`'standard'`|`'full'` *(optional)* - if true the nodes should send a proof of the response +* **proof** :`string (none/standard/full)` *(optional)* - if true the nodes should send a proof of the response. example: true -* **[replaceLatestBlock](https://github.com/slockit/in3/blob/master/src/types/types.ts#L220)** :`number` *(optional)* - if specified, the blocknumber *latest* will be replaced by blockNumber- specified value +* **replaceLatestBlock** :`uint8_t` *(optional)* - if specified, the blocknumber *latest* will be replaced by blockNumber- specified value. example: 6 -* **[requestCount](https://github.com/slockit/in3/blob/master/src/types/types.ts#L225)** :`number` - the number of request send when getting a first answer +* **requestCount** :`uint8_t` - the number of request send when getting a first answer. example: 3 -* **[rpc](https://github.com/slockit/in3/blob/master/src/types/types.ts#L267)** :`string` *(optional)* - url of one or more rpc-endpoints to use. (list can be comma seperated) +* **rpc** :`string` *(optional)* - url of one or more rpc-endpoints to use. (list can be comma seperated) -* **[servers](https://github.com/slockit/in3/blob/master/src/types/types.ts#L271)** *(optional)* - the nodelist per chain +* **servers**/**nodes** : `collection of JSON objects with chain Id (hex string) as key` *(optional)* - the value of each JSON object defines the nodelist per chain and may contain the following fields: + + * **contract** :`address` - address of the registry contract. + * **whiteListContract** :`address` *(optional, cannot be combined with whiteList)* - address of the whiteList contract. + * **whiteList** :`array of addresses` *(optional, cannot be combined with whiteListContract)* - manual whitelist. + * **registryId** :`bytes32` - identifier of the registry. + * **needsUpdate** :`bool` *(optional)* - if set, the nodeList will be updated before next request. + * **avgBlockTime** :`uint16_t` *(optional)* - average block time (seconds) for this chain. + * **verifiedHashes** :`array of JSON objects` *(optional)* - if the client sends an array of blockhashes the server will not deliver any signatures or blockheaders for these blocks, but only return a string with a number. This is automaticly updated by the cache, but can be overriden per request. MUST contain the following fields: -* **[signatureCount](https://github.com/slockit/in3/blob/master/src/types/types.ts#L211)** :`number` *(optional)* - number of signatures requested - example: 2 + * **block** :`uint64_t` - block number. + * **hash** : `bytes32` - verified hash corresponding to block number. -* **[verifiedHashes](https://github.com/slockit/in3/blob/master/src/types/types.ts#L201)** :`string`[] *(optional)* - if the client sends a array of blockhashes the server will not deliver any signatures or blockheaders for these blocks, but only return a string with a number. This is automaticly updated by the cache, but can be overriden per request. + * **nodeList** :`array of JSON objects` *(optional)* - manual nodeList, each JSON object may contain the following fields: + + * **url** :`string` - URL of the node. + * **address** :`address` - address of the node. + * **props** :`uint64_t` bitmask *(optional)* - used to identify the capabilities of the node (defaults to 65535). Returns: @@ -80,29 +106,27 @@ Example: Request: ```js { - "method":"in3_config", - "params":[{ - "chainId":"0x5", - "maxAttempts":4, - "nodeLimit":10 - "servers":{ - "0x1": [ - "nodeList": [ - { - "address":"0x1234567890123456789012345678901234567890", - "url":"https://mybootnode-A.com", - "props":"0xFFFF", - }, - { - "address":"0x1234567890123456789012345678901234567890", - "url":"https://mybootnode-B.com", - "props":"0xFFFF", - } - ] - ] - } - - }] + "method": "in3_config", + "params": [{ + "chainId": "0x5", + "maxAttempts": 4, + "nodeLimit": 10, + "servers": { + "0x1": { + "nodeList": [{ + "address": "0x1234567890123456789012345678901234567890", + "url": "https://mybootnode-A.com", + "props": "0xFFFF" + }, + { + "address": "0x1234567890123456789012345678901234567890", + "url": "https://mybootnode-B.com", + "props": "0xFFFF" + } + ] + } + } + }] } ``` @@ -111,7 +135,7 @@ Response: ```js { "id": 1, - "result": true, + "result": true } ``` @@ -426,6 +450,62 @@ Response: ``` +### in3_decryptKey + +decrypts a JSON Keystore file as defined in the [Web3 Secret Storage Definition +](https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition). The result is the raw private key. + +Parameters: + +1. `key`: Object - Keydata as object as defined in the keystorefile +2. `passphrase`: String - the password to decrypt it. + +Returns: + +a raw private key (32 bytes) + + +Request: + +```js +{ + "method": "in3_decryptKey", + "params": [ + { + "version": 3, + "id": "f6b5c0b1-ba7a-4b67-9086-a01ea54ec638", + "address": "08aa30739030f362a8dd597fd3fcde283e36f4a1", + "crypto": { + "ciphertext": "d5c5aafdee81d25bb5ac4048c8c6954dd50c595ee918f120f5a2066951ef992d", + "cipherparams": { + "iv": "415440d2b1d6811d5c8a3f4c92c73f49" + }, + "cipher": "aes-128-ctr", + "kdf": "pbkdf2", + "kdfparams": { + "dklen": 32, + "salt": "691e9ad0da2b44404f65e0a60cf6aabe3e92d2c23b7410fd187eeeb2c1de4a0d", + "c": 16384, + "prf": "hmac-sha256" + }, + "mac": "de651c04fc67fd552002b4235fa23ab2178d3a500caa7070b554168e73359610" + } + }, + "test" + ] +} +``` + +Response: + +```js +{ + "id": 1, + "result": "0x1ff25594a5e12c1e31ebd8112bdf107d217c1393da8dc7fc9d57696263457546" +} +``` + + ### in3_cacheClear diff --git a/docs/CMakeLists.txt b/c/docs/CMakeLists.txt similarity index 86% rename from docs/CMakeLists.txt rename to c/docs/CMakeLists.txt index 0a82ad0e4..b1fb4c093 100644 --- a/docs/CMakeLists.txt +++ b/c/docs/CMakeLists.txt @@ -1,11 +1,10 @@ # first we can indicate the documentation build as an option and set it to ON by default -option(BUILD_DOC "generates the documenation with doxygen." OFF) if (BUILD_DOC) # check if Doxygen is installed find_package(Doxygen) if (DOXYGEN_FOUND) # set input and output files - set(DOXYGEN_IN ${CMAKE_CURRENT_SOURCE_DIR}/../docs/Doxyfile.in) + set(DOXYGEN_IN ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in) set(DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile) # request to configure the file diff --git a/docs/Doxyfile.in b/c/docs/Doxyfile.in similarity index 100% rename from docs/Doxyfile.in rename to c/docs/Doxyfile.in diff --git a/docs/build_examples.md_ b/c/docs/build_examples.md_ similarity index 100% rename from docs/build_examples.md_ rename to c/docs/build_examples.md_ diff --git a/docs/in3_image.png b/c/docs/in3_image.png similarity index 100% rename from docs/in3_image.png rename to c/docs/in3_image.png diff --git a/docs/options.awk b/c/docs/options.awk similarity index 100% rename from docs/options.awk rename to c/docs/options.awk diff --git a/examples/c/README.md b/c/examples/README.md similarity index 95% rename from examples/c/README.md rename to c/examples/README.md index 6a1770c00..85cb38022 100644 --- a/examples/c/README.md +++ b/c/examples/README.md @@ -19,6 +19,9 @@ - [get_transaction_receipt](./get_transaction_receipt.c) validating the result or receipt of an transaction +- [ipfs_put_get](./ipfs_put_get.c) + using the IPFS module + - [send_transaction](./send_transaction.c) sending a transaction including signing it with a private key diff --git a/examples/c/build.sh b/c/examples/build.sh similarity index 87% rename from examples/c/build.sh rename to c/examples/build.sh index 4e9394b2a..5b53e1a76 100755 --- a/examples/c/build.sh +++ b/c/examples/build.sh @@ -9,11 +9,11 @@ if [ ! -d /usr/local/include/in3 ]; then mkdir -p ../../build cd ../../build cmake .. && make - cd ../examples/c + cd ../c/examples fi # set the library path to use the local - BUILDARGS="-L../../build/lib/ -I../../include" + BUILDARGS="-L../../build/lib/ -I../../c/include" fi # now build the examples build diff --git a/examples/c/call_a_function.c b/c/examples/call_a_function.c similarity index 100% rename from examples/c/call_a_function.c rename to c/examples/call_a_function.c diff --git a/examples/c/get_balance.c b/c/examples/get_balance.c similarity index 100% rename from examples/c/get_balance.c rename to c/examples/get_balance.c diff --git a/examples/c/get_block.c b/c/examples/get_block.c similarity index 100% rename from examples/c/get_block.c rename to c/examples/get_block.c diff --git a/examples/c/get_logs.c b/c/examples/get_logs.c similarity index 100% rename from examples/c/get_logs.c rename to c/examples/get_logs.c diff --git a/examples/c/get_transaction.c b/c/examples/get_transaction.c similarity index 100% rename from examples/c/get_transaction.c rename to c/examples/get_transaction.c diff --git a/examples/c/get_transaction_receipt.c b/c/examples/get_transaction_receipt.c similarity index 100% rename from examples/c/get_transaction_receipt.c rename to c/examples/get_transaction_receipt.c diff --git a/c/examples/ipfs_put_get.c b/c/examples/ipfs_put_get.c new file mode 100644 index 000000000..3f9353ea6 --- /dev/null +++ b/c/examples/ipfs_put_get.c @@ -0,0 +1,82 @@ +/// using the IPFS module + +#include // the core client +#include // transport implementation +#include // IPFS verifier module +#include // IPFS API module +#include + +#define LOREM_IPSUM "Lorem ipsum dolor sit amet" +#define return_err(err) \ + do { \ + printf(__FILE__ ":%d::Error %s\n", __LINE__, err); \ + return; \ + } while (0) + +static void ipfs_rpc_example(in3_t* c) { + char *result, *error; + char tmp[100]; + + in3_ret_t res = in3_client_rpc( + c, + "ipfs_put", + "[\"" LOREM_IPSUM "\", \"utf8\"]", + &result, + &error); + if (res != IN3_OK) + return_err(in3_errmsg(res)); + + printf("IPFS hash: %s\n", result); + sprintf(tmp, "[%s, \"utf8\"]", result); + free(result); + result = NULL; + + res = in3_client_rpc( + c, + "ipfs_get", + tmp, + &result, + &error); + if (res != IN3_OK) + return_err(in3_errmsg(res)); + res = strcmp(result, "\"" LOREM_IPSUM "\""); + if (res) return_err("Content mismatch"); +} + +static void ipfs_api_example(in3_t* c) { + bytes_t b = {.data = (uint8_t*) LOREM_IPSUM, .len = strlen(LOREM_IPSUM)}; + char* multihash = ipfs_put(c, &b); + if (multihash == NULL) + return_err("ipfs_put API call error"); + printf("IPFS hash: %s\n", multihash); + + bytes_t* content = ipfs_get(c, multihash); + free(multihash); + if (content == NULL) + return_err("ipfs_get API call error"); + + int res = strncmp((char*) content->data, LOREM_IPSUM, content->len); + b_free(content); + if (res) + return_err("Content mismatch"); +} + +int main() { + // register a chain-verifier for IPFS-Support (only called once) + in3_register_ipfs(); + // use curl as the default for sending out requests (only called once) + in3_register_curl(); + + // create new incubed client + in3_t* c = in3_for_chain(ETH_CHAIN_ID_IPFS); + + // IPFS put/get using raw RPC calls + ipfs_rpc_example(c); + + // IPFS put/get using API + ipfs_api_example(c); + + // cleanup client after usage + in3_free(c); + return 0; +} diff --git a/examples/c/send_transaction.c b/c/examples/send_transaction.c similarity index 100% rename from examples/c/send_transaction.c rename to c/examples/send_transaction.c diff --git a/examples/c/usn_device.c b/c/examples/usn_device.c similarity index 100% rename from examples/c/usn_device.c rename to c/examples/usn_device.c diff --git a/examples/c/usn_rent.c b/c/examples/usn_rent.c similarity index 100% rename from examples/c/usn_rent.c rename to c/examples/usn_rent.c diff --git a/c/include/in3/api_utils.h b/c/include/in3/api_utils.h new file mode 100644 index 000000000..888e7c66a --- /dev/null +++ b/c/include/in3/api_utils.h @@ -0,0 +1,61 @@ +/******************************************************************************* + * This file is part of the Incubed project. + * Sources: https://github.com/slockit/in3-c + * + * Copyright (C) 2018-2019 slock.it GmbH, Blockchains LLC + * + * + * COMMERCIAL LICENSE USAGE + * + * Licensees holding a valid commercial license may use this file in accordance + * with the commercial license agreement provided with the Software or, alternatively, + * in accordance with the terms contained in a written agreement between you and + * slock.it GmbH/Blockchains LLC. For licensing terms and conditions or further + * information please contact slock.it at in3@slock.it. + * + * Alternatively, this file may be used under the AGPL license as follows: + * + * AGPL LICENSE USAGE + * + * This program is free software: you can redistribute it and/or modify it under the + * terms of the GNU Affero General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + * [Permissions of this strong copyleft license are conditioned on making available + * complete source code of licensed works and modifications, which include larger + * works using a licensed work, under the same license. Copyright and license notices + * must be preserved. Contributors provide an express grant of patent rights.] + * You should have received a copy of the GNU Affero General Public License along + * with this program. If not, see . + *******************************************************************************/ +// @PUBLIC_HEADER +/** @file + * Ethereum API utils. + * + * This header-file helper utils for use with API modules. + * */ + +#ifndef IN3_API_UTILS_H +#define IN3_API_UTILS_H + +/** + * function to set error. Will only be called internally. + * default implementation is NOT MT safe! + */ +typedef void (*set_error_fn)(int err, const char* msg); +void api_set_error_fn(set_error_fn fn); + +/** + * function to get last error message. + * default implementation is NOT MT safe! + */ +typedef char* (*get_error_fn)(void); +void api_get_error_fn(get_error_fn fn); + +/** returns current error or null if all is ok */ +char* api_last_error(); + +#endif //IN3_API_UTILS_H diff --git a/c/include/in3/btc.h b/c/include/in3/btc.h new file mode 100644 index 000000000..97704086a --- /dev/null +++ b/c/include/in3/btc.h @@ -0,0 +1,19 @@ +// @PUBLIC_HEADER +/** @file + * Bitcoin verification. + * */ + +#ifndef in3_btc_h__ +#define in3_btc_h__ + +#include "verifier.h" + +/** entry-function to execute the verification context. */ +in3_ret_t in3_verify_btc(in3_vctx_t* v); + +/** + * this function should only be called once and will register the bitcoin verifier. + */ +void in3_register_btc(); + +#endif // in3_btc_h__ diff --git a/include/in3/bytes.h b/c/include/in3/bytes.h similarity index 100% rename from include/in3/bytes.h rename to c/include/in3/bytes.h diff --git a/include/in3/chainspec.h b/c/include/in3/chainspec.h similarity index 100% rename from include/in3/chainspec.h rename to c/include/in3/chainspec.h diff --git a/include/in3/client.h b/c/include/in3/client.h similarity index 90% rename from include/in3/client.h rename to c/include/in3/client.h index 0da34005a..59c3d2014 100644 --- a/include/in3/client.h +++ b/c/include/in3/client.h @@ -59,8 +59,9 @@ #define ETH_CHAIN_ID_GOERLI 0x5 /**< chain_id for goerlii */ #define ETH_CHAIN_ID_EVAN 0x4b1 /**< chain_id for evan */ #define ETH_CHAIN_ID_IPFS 0x7d0 /**< chain_id for ipfs */ -#define ETH_CHAIN_ID_VOLTA 0x12046 /**< chain_id for volta */ +#define ETH_CHAIN_ID_BTC 0x99 /**< chain_id for btc */ #define ETH_CHAIN_ID_LOCAL 0xFFFF /**< chain_id for local chain */ +#define DEF_REPL_LATEST_BLK 6 /**< default replace_latest_block */ /** * type for a chain_id. @@ -106,12 +107,11 @@ typedef enum { */ typedef struct in3_request_config { chain_id_t chain_id; /**< the chain to be used. this is holding the integer-value of the hexstring. */ - uint8_t include_code; /**< if true the code needed will always be devlivered. */ + uint_fast8_t flags; /**< the current flags from the client. */ uint8_t use_full_proof; /**< this flaqg is set, if the proof is set to "PROOF_FULL" */ - uint8_t use_binary; /**< this flaqg is set, the client should use binary-format */ bytes_t* verified_hashes; /**< a list of blockhashes already verified. The Server will not send any proof for them again . */ uint16_t verified_hashes_length; /**< number of verified blockhashes*/ - uint16_t latest_block; /**< the last blocknumber the nodelistz changed */ + uint8_t latest_block; /**< the last blocknumber the nodelistz changed */ uint16_t finality; /**< number of signatures( in percent) needed in order to reach finality. */ in3_verification_t verification; /**< Verification-type */ bytes_t* client_signature; /**< the signature of the client with the client key */ @@ -128,18 +128,31 @@ typedef struct in3_request_config { typedef uint64_t in3_node_props_t; typedef enum { - NODE_PROP_PROOF = 0x1, /* filter out nodes which are providing no proof */ - NODE_PROP_MULTICHAIN = 0x2, /* filter out nodes other then which have capability of the same RPC endpoint may also accept requests for different chains */ - NODE_PROP_ARCHIVE = 0x4, /* filter out non-archive supporting nodes */ - NODE_PROP_HTTP = 0x8, /* filter out non-http nodes */ - NODE_PROP_BINARY = 0x10, /* filter out nodes that don't support binary encoding */ - NODE_PROP_ONION = 0x20, /* filter out non-onion nodes */ - NODE_PROP_SIGNER = 0x40, /* filter out non-signer nodes */ - NODE_PROP_DATA = 0x80, /* filter out non-data provider nodes */ - NODE_PROP_STATS = 0x100, /* filter out nodes that do not provide stats */ - NODE_PROP_MIN_BLOCK_HEIGHT = 0x400, /* filter out nodes that will sign blocks with lower min block height than specified */ + NODE_PROP_PROOF = 0x1, /**< filter out nodes which are providing no proof */ + NODE_PROP_MULTICHAIN = 0x2, /**< filter out nodes other then which have capability of the same RPC endpoint may also accept requests for different chains */ + NODE_PROP_ARCHIVE = 0x4, /**< filter out non-archive supporting nodes */ + NODE_PROP_HTTP = 0x8, /**< filter out non-http nodes */ + NODE_PROP_BINARY = 0x10, /**< filter out nodes that don't support binary encoding */ + NODE_PROP_ONION = 0x20, /**< filter out non-onion nodes */ + NODE_PROP_SIGNER = 0x40, /**< filter out non-signer nodes */ + NODE_PROP_DATA = 0x80, /**< filter out non-data provider nodes */ + NODE_PROP_STATS = 0x100, /**< filter out nodes that do not provide stats */ + NODE_PROP_MIN_BLOCK_HEIGHT = 0x400, /**< filter out nodes that will sign blocks with lower min block height than specified */ } in3_node_props_type_t; +/** + * a list of flags definiing the behavior of the incubed client. They should be used as bitmask for the flags-property. + */ +typedef enum { + FLAGS_KEEP_IN3 = 0x1, /**< the in3-section with the proof will also returned */ + FLAGS_AUTO_UPDATE_LIST = 0x2, /**< the nodelist will be automaticly updated if the last_block is newer */ + FLAGS_INCLUDE_CODE = 0x4, /**< the code is included when sending eth_call-requests */ + FLAGS_BINARY = 0x8, /**< the client will use binary format */ + FLAGS_HTTP = 0x10, /**< the client will try to use http instead of https */ + FLAGS_STATS = 0x20, /**< nodes will keep track of the stats (default=true) */ + +} in3_flags_type_t; + /** incubed node-configuration. * * These information are read from the Registry contract and stored in this struct representing a server or node. @@ -152,6 +165,7 @@ typedef struct in3_node { in3_node_props_t props; /**< used to identify the capabilities of the node. See in3_node_props_type_t in nodelist.h */ char* url; /**< the url of the node */ bool whitelisted; /**< boolean indicating if node exists in whiteList */ + bool boot_node; /**< internal - used to avoid filtering manually added nodes before first nodeList update */ } in3_node_t; /** @@ -236,9 +250,11 @@ typedef struct in3_chain { uint8_t version; /**< version of the chain */ in3_verified_hash_t* verified_hashes; /**< contains the list of already verified blockhashes */ in3_whitelist_t* whitelist; /**< if set the whitelist of the addresses. */ + uint16_t avg_block_time; /**< average block time (seconds) for this chain (calculated internally) */ struct { address_t node; /**< node that reported the last_block which necessitated a nodeList update */ uint64_t exp_last_block; /**< the last_block when the nodelist last changed reported by this node */ + uint64_t timestamp; /**< approx. time when nodelist must be updated (i.e. when reported last_block will be considered final) */ } * nodelist_upd8_params; } in3_chain_t; @@ -413,7 +429,7 @@ typedef struct in3_t_ { uint64_t min_deposit; /** if specified, the blocknumber *latest* will be replaced by blockNumber- specified value */ - uint16_t replace_latest_block; + uint8_t replace_latest_block; /** the number of signatures in percent required for the request*/ uint16_t finality; @@ -430,9 +446,6 @@ typedef struct in3_t_ { /** servers to filter for the given chain. The chain-id based on EIP-155.*/ chain_id_t chain_id; - /** if true the nodelist will be automaticly updated if the last_block is newer */ - uint8_t auto_update_list; - /** a cache handler offering 2 functions ( setItem(string,string), getItem(string) ) */ in3_storage_handler_t* cache; @@ -442,17 +455,8 @@ typedef struct in3_t_ { /** the transporthandler sending requests */ in3_transport_send transport; - /** includes the code when sending eth_call-requests */ - uint8_t include_code; - - /** if true the client will use binary format*/ - uint8_t use_binary; - - /** if true the client will try to use http instead of https*/ - uint8_t use_http; - - /** if true the in3-section with the proof will also returned*/ - uint8_t keep_in3; + /** a bit mask with flags defining the behavior of the incubed client. See the FLAG...-defines*/ + uint_fast8_t flags; /** chain spec and nodeList definitions*/ in3_chain_t* chains; @@ -631,7 +635,7 @@ in3_chain_t* in3_find_chain( * configures the clent based on a json-config. * * For details about the structure of ther config see https://in3.readthedocs.io/en/develop/api-ts.html#type-in3config - * + * Returns NULL on success, and error string on failure (to be freed by caller) - in which case the client state is undefined */ char* in3_configure( in3_t* c, /**< the incubed client */ diff --git a/include/in3/context.h b/c/include/in3/context.h similarity index 98% rename from include/in3/context.h rename to c/include/in3/context.h index 69ded0e6f..208a5e9ec 100644 --- a/include/in3/context.h +++ b/c/include/in3/context.h @@ -407,4 +407,13 @@ in3_ctx_t* in3_client_rpc_ctx( char* params /**< [in] params as string. */ ); +/** + * handles a failable context + * + * This context *MUST* be freed with ctx_free(ctx) after usage to release the resources. +*/ +in3_ret_t ctx_handle_failable( + in3_ctx_t* ctx /**< [in] the current request context. */ +); + #endif diff --git a/include/in3/data.h b/c/include/in3/data.h similarity index 100% rename from include/in3/data.h rename to c/include/in3/data.h diff --git a/include/in3/error.h b/c/include/in3/error.h similarity index 98% rename from include/in3/error.h rename to c/include/in3/error.h index 94f2d3ad7..3c7e8a64c 100644 --- a/include/in3/error.h +++ b/c/include/in3/error.h @@ -67,6 +67,7 @@ typedef enum { IN3_ETRANS = -14, /**< Transport error */ IN3_ERANGE = -15, /**< Not in range */ IN3_WAITING = -16, /**< the process can not be finished since we are waiting for responses */ + IN3_EIGNORE = -17, /**< Ignorable error */ } in3_ret_t; /** Optional type similar to C++ std::optional diff --git a/include/in3/eth_api.h b/c/include/in3/eth_api.h similarity index 98% rename from include/in3/eth_api.h rename to c/include/in3/eth_api.h index bbf7078da..0ba99d206 100644 --- a/include/in3/eth_api.h +++ b/c/include/in3/eth_api.h @@ -43,6 +43,7 @@ #define ETH_API_H #include "client.h" +#include "api_utils.h" #include /** Initializer macros for eth_blknum_t */ @@ -51,7 +52,10 @@ #define BLKNUM_EARLIEST() ((eth_blknum_t){.def = BLK_EARLIEST, .is_u64 = false}) #define BLKNUM_PENDING() ((eth_blknum_t){.def = BLK_PENDING, .is_u64 = false}) -/** +/**< The current error or null if all is ok */ +#define eth_last_error() api_last_error() + +/** * a 32 byte long integer used to store ethereum-numbers. * * use the as_long() or as_double() to convert this to a useable number. @@ -182,14 +186,13 @@ bytes_t* eth_sendTransaction(in3_t* in3, address_t from, address_t to, bytes_t* eth_sendRawTransaction(in3_t* in3, bytes_t data); /**< Creates new message call transaction or a contract creation for signed transactions. Returns (32 Bytes) - the transaction hash, or the zero hash if the transaction is not yet available. Free after use with b_free(). */ eth_tx_receipt_t* eth_getTransactionReceipt(in3_t* in3, bytes32_t tx_hash); /**< Returns the receipt of a transaction by transaction hash. Free result after use with eth_tx_receipt_free() */ char* eth_wait_for_receipt(in3_t* in3, bytes32_t tx_hash); /**< Waits for receipt of a transaction requested by transaction hash. */ -char* eth_last_error(); /**< The current error or null if all is ok */ // Helper functions long double as_double(uint256_t d); /**< Converts a uint256_t in a long double. Important: since a long double stores max 16 byte, there is no guarantee to have the full precision. */ uint64_t as_long(uint256_t d); /**< Converts a uint256_t in a long . Important: since a long double stores 8 byte, this will only use the last 8 byte of the value. */ uint256_t to_uint256(uint64_t value); /**< Converts a uint64_t into its uint256_t representation. */ in3_ret_t decrypt_key(d_token_t* key_data, char* password, bytes32_t dst); /**< Decrypts the private key from a json keystore file using PBKDF2 or SCRYPT (if enabled) */ -void log_free(eth_log_t* log); /**< Frees a eth_log_t object */ +void eth_log_free(eth_log_t* log); /**< Frees a eth_log_t object */ void eth_tx_receipt_free(eth_tx_receipt_t* txr); /**< Frees a eth_tx_receipt_t object */ // more helper diff --git a/include/in3/eth_basic.h b/c/include/in3/eth_basic.h similarity index 100% rename from include/in3/eth_basic.h rename to c/include/in3/eth_basic.h diff --git a/include/in3/eth_full.h b/c/include/in3/eth_full.h similarity index 100% rename from include/in3/eth_full.h rename to c/include/in3/eth_full.h diff --git a/include/in3/eth_nano.h b/c/include/in3/eth_nano.h similarity index 100% rename from include/in3/eth_nano.h rename to c/include/in3/eth_nano.h diff --git a/include/in3/in3_curl.h b/c/include/in3/in3_curl.h similarity index 100% rename from include/in3/in3_curl.h rename to c/include/in3/in3_curl.h diff --git a/include/in3/in3_http.h b/c/include/in3/in3_http.h similarity index 100% rename from include/in3/in3_http.h rename to c/include/in3/in3_http.h diff --git a/src/bindings/wasm/demo.html b/c/include/in3/ipfs.h similarity index 63% rename from src/bindings/wasm/demo.html rename to c/include/in3/ipfs.h index cb9038149..0671e4e39 100644 --- a/src/bindings/wasm/demo.html +++ b/c/include/in3/ipfs.h @@ -1,59 +1,55 @@ - + *******************************************************************************/ + +// @PUBLIC_HEADER +/** @file + * IPFS verification. + * */ +#ifndef IN3_IPFS_H +#define IN3_IPFS_H + +#include "verifier.h" - +/** verifies an IPFS hash. Supported encoding schemes - hex, utf8 and base64 */ +in3_ret_t ipfs_verify_hash(const char* content, const char* encoding, const char* requsted_hash); - - - +/** entry-function to execute the verification context. */ +in3_ret_t in3_verify_ipfs(in3_vctx_t* vc); - - IN3-Demo -
- result: -
-            ...waiting...
-        
-
- - +/** + * this function should only be called once and will register the IPFS verifier. + */ +void in3_register_ipfs(); - \ No newline at end of file +#endif //IN3_IPFS_H diff --git a/c/include/in3/ipfs_api.h b/c/include/in3/ipfs_api.h new file mode 100644 index 000000000..215643929 --- /dev/null +++ b/c/include/in3/ipfs_api.h @@ -0,0 +1,51 @@ +/******************************************************************************* + * This file is part of the Incubed project. + * Sources: https://github.com/slockit/in3-c + * + * Copyright (C) 2018-2019 slock.it GmbH, Blockchains LLC + * + * + * COMMERCIAL LICENSE USAGE + * + * Licensees holding a valid commercial license may use this file in accordance + * with the commercial license agreement provided with the Software or, alternatively, + * in accordance with the terms contained in a written agreement between you and + * slock.it GmbH/Blockchains LLC. For licensing terms and conditions or further + * information please contact slock.it at in3@slock.it. + * + * Alternatively, this file may be used under the AGPL license as follows: + * + * AGPL LICENSE USAGE + * + * This program is free software: you can redistribute it and/or modify it under the + * terms of the GNU Affero General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + * [Permissions of this strong copyleft license are conditioned on making available + * complete source code of licensed works and modifications, which include larger + * works using a licensed work, under the same license. Copyright and license notices + * must be preserved. Contributors provide an express grant of patent rights.] + * You should have received a copy of the GNU Affero General Public License along + * with this program. If not, see . + *******************************************************************************/ + +// @PUBLIC_HEADER +/** @file + * IPFS API. + * + * This header-file defines easy to use function, which are preparing the JSON-RPC-Request, which is then executed and verified by the incubed-client. + * */ + +#ifndef IN3_IPFS_API_H +#define IN3_IPFS_API_H + +#include "client.h" +#include "bytes.h" + +char* ipfs_put(in3_t* in3, const bytes_t* content); /**< Returns the IPFS multihash of stored content on success OR NULL on error (check api_last_error()). Result must be freed by caller. */ +bytes_t* ipfs_get(in3_t* in3, const char* multihash); /**< Returns the content associated with specified multihash on success OR NULL on error (check api_last_error()). Result must be freed by caller. */ + +#endif //IN3_IPFS_API_H diff --git a/include/in3/log.h b/c/include/in3/log.h similarity index 100% rename from include/in3/log.h rename to c/include/in3/log.h diff --git a/include/in3/rpc.h b/c/include/in3/rpc.h similarity index 100% rename from include/in3/rpc.h rename to c/include/in3/rpc.h diff --git a/include/in3/scache.h b/c/include/in3/scache.h similarity index 100% rename from include/in3/scache.h rename to c/include/in3/scache.h diff --git a/include/in3/signer.h b/c/include/in3/signer.h similarity index 100% rename from include/in3/signer.h rename to c/include/in3/signer.h diff --git a/src/core/util/stringbuilder.h b/c/include/in3/stringbuilder.h similarity index 79% rename from src/core/util/stringbuilder.h rename to c/include/in3/stringbuilder.h index b81634844..96c18a410 100644 --- a/src/core/util/stringbuilder.h +++ b/c/include/in3/stringbuilder.h @@ -64,11 +64,11 @@ sb_t* sb_new(const char* chars); /**< creates a new stringbuilder and copies the sb_t* sb_init(sb_t* sb); /**< initializes a stringbuilder by allocating memory. */ void sb_free(sb_t* sb); /**< frees all resources of the stringbuilder */ -sb_t* sb_add_char(sb_t* sb, char c); /**< add a single character */ -sb_t* sb_add_chars(sb_t* sb, const char* chars); /**< adds a string */ -sb_t* sb_add_range(sb_t* sb, const char* chars, int start, int len); /**< add a string range */ -sb_t* sb_add_key_value(sb_t* sb, const char* key, const char* value, int value_len, bool as_string); /**< adds a value with an optional key. if as_string is true the value will be quoted. */ -sb_t* sb_add_bytes(sb_t* sb, const char* prefix, const bytes_t* bytes, int len, bool as_array); /**< add bytes as 0x-prefixed hexcoded string (including an optional prefix), if len>1 is passed bytes maybe an array ( if as_array==true) */ -sb_t* sb_add_hexuint_l(sb_t* sb, uintmax_t uint, size_t l); /**< add a integer value as hexcoded, 0x-prefixed string*/ +sb_t* sb_add_char(sb_t* sb, char c); /**< add a single character */ +sb_t* sb_add_chars(sb_t* sb, const char* chars); /**< adds a string */ +sb_t* sb_add_range(sb_t* sb, const char* chars, int start, int len); /**< add a string range */ +sb_t* sb_add_key_value(sb_t* sb, const char* key, const char* value, int value_len, bool as_string); /**< adds a value with an optional key. if as_string is true the value will be quoted. */ +sb_t* sb_add_bytes(sb_t* sb, const char* prefix, const bytes_t* bytes, int len, bool as_array); /**< add bytes as 0x-prefixed hexcoded string (including an optional prefix), if len>1 is passed bytes maybe an array ( if as_array==true) */ +sb_t* sb_add_hexuint_l(sb_t* sb, uintmax_t uint, size_t l); /**< add a integer value as hexcoded, 0x-prefixed string*/ #endif diff --git a/include/in3/usn_api.h b/c/include/in3/usn_api.h similarity index 99% rename from include/in3/usn_api.h rename to c/include/in3/usn_api.h index 0fe99cee1..91f93ae0a 100644 --- a/include/in3/usn_api.h +++ b/c/include/in3/usn_api.h @@ -101,7 +101,7 @@ typedef struct { address_t contract; usn_device_t* devices; int len_devices; - chain_id_t chain_id; + chain_id_t chain_id; uint64_t now; uint64_t last_checked_block; usn_booking_handler booking_handler; diff --git a/include/in3/utils.h b/c/include/in3/utils.h similarity index 74% rename from include/in3/utils.h rename to c/include/in3/utils.h index 532e2273c..442115942 100644 --- a/include/in3/utils.h +++ b/c/include/in3/utils.h @@ -43,6 +43,12 @@ #include "bytes.h" #include +#ifdef __ZEPHYR__ +#include +#define _strtoull(str, endptr, base) strtoul(str, endptr, base) +#else +#define _strtoull(str, endptr, base) strtoull(str, endptr, base) +#endif /** simple swap macro for integral types */ #define SWAP(a, b) \ { \ @@ -64,12 +70,21 @@ */ #define IS_APPROX(n1, n2, err) ((n1 > n2) ? ((n1 - n2) <= err) : ((n2 - n1) <= err)) +/** + * simple macro to stringify other macro defs + * eg. usage - to concatenate a const with a string at compile time -> + * #define SOME_CONST_UINT 10U + * printf("Using default value of " STR(SOME_CONST_UINT)); + */ +#define STR_IMPL_(x) #x +#define STR(x) STR_IMPL_(x) + /** converts the bytes to a unsigned long (at least the last max len bytes) */ uint64_t bytes_to_long(const uint8_t* data, int len); /** converts the bytes to a unsigned int (at least the last max len bytes) */ static inline uint32_t bytes_to_int(const uint8_t* data, int len) { - if (data){ + if (data) { switch (len) { case 0: return 0; case 1: return data[0]; @@ -77,8 +92,8 @@ static inline uint32_t bytes_to_int(const uint8_t* data, int len) { case 3: return (((uint32_t) data[0]) << 16) | (((uint32_t) data[1]) << 8) | data[2]; default: return (((uint32_t) data[0]) << 24) | (((uint32_t) data[1]) << 16) | (((uint32_t) data[2]) << 8) | data[3]; } - } - else return 0; + } else + return 0; } /** converts a character into a uint64_t*/ uint64_t char_to_long(const char* a, int l); @@ -87,7 +102,7 @@ uint64_t char_to_long(const char* a, int l); uint8_t hexchar_to_int(char c); /** converts a uint64_t to string (char*); buffer-size min. 21 bytes */ -const unsigned char* u64_to_str(uint64_t value, char* pBuf, int szBuf); +const char* u64_to_str(uint64_t value, char* pBuf, int szBuf); /** * convert a c hex string to a byte array storing it into an existing buffer. @@ -133,17 +148,22 @@ void uint256_set(const uint8_t* src, wlen_t src_len, bytes32_t dst); * replaces a string and returns a copy. * @retval */ -char* str_replace(const char* orig, const char* rep, const char* with); +char* str_replace(char* orig, const char* rep, const char* with); /** * replaces a string at the given position. */ -char* str_replace_pos(const char* orig, size_t pos, size_t len, const char* rep); +char* str_replace_pos(char* orig, size_t pos, size_t len, const char* rep); /** * lightweight strstr() replacements */ -char* str_find(const char* haystack, const char* needle); +char* str_find(char* haystack, const char* needle); + +/** + * remove all html-tags in the text. + */ +char* str_remove_html(char* data); /** * current timestamp in ms. @@ -197,4 +217,49 @@ static inline bool memiszero(uint8_t* ptr, size_t l) { return !l; } +/** + * Pluggable functions: + * Mechanism to replace library functions with custom alternatives. This is particularly useful for + * embedded systems which have their own time or rand functions. + * + * eg. + * // define function with specified signature + * uint64_t my_time(void* t) { + * // ... + * } + * + * // then call in3_set_func_*() + * int main() { + * in3_set_func_time(my_time); + * // Henceforth, all library calls will use my_time() instead of the platform default time function + * } + */ + +/** + * time function + * defaults to k_uptime_get() for zeohyr and time(NULL) for other platforms + * expected to return a u64 value representative of time (from epoch/start) + */ +typedef uint64_t (*time_func)(void* t); +void in3_set_func_time(time_func fn); +uint64_t in3_time(void* t); + +/** + * rand function + * defaults to k_uptime_get() for zeohyr and rand() for other platforms + * expected to return a random number + */ +typedef int (*rand_func)(void* s); +void in3_set_func_rand(rand_func fn); +int in3_rand(void* s); + +/** + * srand function + * defaults to NOOP for zephyr and srand() for other platforms + * expected to set the seed for a new sequence of random numbers to be returned by in3_rand() + */ +typedef void (*srand_func)(unsigned int s); +void in3_set_func_srand(srand_func fn); +void in3_srand(unsigned int s); + #endif diff --git a/include/in3/verifier.h b/c/include/in3/verifier.h similarity index 100% rename from include/in3/verifier.h rename to c/include/in3/verifier.h diff --git a/c/src/api/CMakeLists.txt b/c/src/api/CMakeLists.txt new file mode 100644 index 000000000..13e53e433 --- /dev/null +++ b/c/src/api/CMakeLists.txt @@ -0,0 +1,46 @@ +############################################################################### +# This file is part of the Incubed project. +# Sources: https://github.com/slockit/in3-c +# +# Copyright (C) 2018-2019 slock.it GmbH, Blockchains LLC +# +# +# COMMERCIAL LICENSE USAGE +# +# Licensees holding a valid commercial license may use this file in accordance +# with the commercial license agreement provided with the Software or, alternatively, +# in accordance with the terms contained in a written agreement between you and +# slock.it GmbH/Blockchains LLC. For licensing terms and conditions or further +# information please contact slock.it at in3@slock.it. +# +# Alternatively, this file may be used under the AGPL license as follows: +# +# AGPL LICENSE USAGE +# +# This program is free software: you can redistribute it and/or modify it under the +# terms of the GNU Affero General Public License as published by the Free Software +# Foundation, either version 3 of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. +# [Permissions of this strong copyleft license are conditioned on making available +# complete source code of licensed works and modifications, which include larger +# works using a licensed work, under the same license. Copyright and license notices +# must be preserved. Contributors provide an express grant of patent rights.] +# You should have received a copy of the GNU Affero General Public License along +# with this program. If not, see . +############################################################################### + + +IF (IN3API) + add_library(in3_api_utils STATIC utils/api_utils_priv.c) + + add_subdirectory(eth1) + add_subdirectory(usn) + + IF (IPFS) + add_subdirectory(ipfs) + ENDIF (IPFS) +ENDIF (IN3API) + diff --git a/src/api/eth1/CMakeLists.txt b/c/src/api/eth1/CMakeLists.txt similarity index 94% rename from src/api/eth1/CMakeLists.txt rename to c/src/api/eth1/CMakeLists.txt index 7879a4bf6..f355d93d3 100644 --- a/src/api/eth1/CMakeLists.txt +++ b/c/src/api/eth1/CMakeLists.txt @@ -31,6 +31,7 @@ # You should have received a copy of the GNU Affero General Public License along # with this program. If not, see . ############################################################################### +include("${PROJECT_SOURCE_DIR}/c/compiler.cmake") OPTION(USE_SCRYPT "if scrypt is installed, it will link dynamicly to the shared scrypt lib." OFF) IF (USE_SCRYPT) @@ -43,8 +44,8 @@ IF (USE_SCRYPT) ADD_DEFINITIONS(-DSCRYPT) endif() endif() -add_library(eth_api_o OBJECT eth_api.c abi.c key.c rpc_api.c ens.c) +add_library(eth_api_o OBJECT eth_api.c abi.c key.c rpc_api.c ens.c ../utils/api_utils_priv.c) target_compile_definitions(eth_api_o PRIVATE -D_POSIX_C_SOURCE=199309L) add_library(eth_api STATIC $) -target_link_libraries(eth_api eth_nano ${LIBS}) \ No newline at end of file +target_link_libraries(eth_api eth_nano in3_api_utils ${LIBS}) \ No newline at end of file diff --git a/src/api/eth1/abi.c b/c/src/api/eth1/abi.c similarity index 98% rename from src/api/eth1/abi.c rename to c/src/api/eth1/abi.c index 0227e63b5..33e88cc88 100644 --- a/src/api/eth1/abi.c +++ b/c/src/api/eth1/abi.c @@ -163,7 +163,7 @@ char* escape_tuples(char* sig, size_t l, char** startb, char** ends) { *ends = memchr(sig_, ':', l); remove_parens(sig_ + (*startb - sig_) + 1, (*ends ? (unsigned) (*ends - *startb) : (l - (*startb - sig_))) - 2); if (*ends) { - *startb = memchr(*ends, '(', l); + *startb = memchr(*ends, '(', strlen(*ends)); if (*startb) remove_parens(sig_ + (*startb - sig_) + 1, strlen(sig_ + (*startb - sig_) + 2)); } *ends = memchr(sig_, ':', l); @@ -253,15 +253,14 @@ static int head_size(var_t* t, bool single) { var_t* s = NULL; for (i = 0, s = t + 1; i < t->type_len; i++, s = t_next(s)) a += head_size(s, false); } else if (t->type == A_BYTES || t->type == A_STRING) - a = word_size(t->type_len); + a = word_size(t->type_len) * 32; return single ? a : (a * f); } static int check_buffer(call_request_t* req, int pos) { if ((uint32_t) pos > req->call_data->b.len) { - if (bb_check_size(req->call_data, pos - - - req->call_data->b.len) < 0) return -1; + if (bb_check_size(req->call_data, pos - req->call_data->b.len) < 0) + return -1; req->call_data->b.len = pos; } return 0; @@ -355,7 +354,7 @@ static int encode(call_request_t* req, d_token_t* data, var_t* tuple, int head_p switch (d_type(d)) { case T_STRING: { char* tmp = d_string(d); - unsigned long long n = strtoull(tmp + 1, NULL, 10); + unsigned long long n = _strtoull(tmp + 1, NULL, 10); bitset_t* bs = bs_from_ull(n, 256); twos_complement(bs); bytes_t b = {.data = bs->bits.p, .len = 32}; diff --git a/src/api/eth1/abi.h b/c/src/api/eth1/abi.h similarity index 100% rename from src/api/eth1/abi.h rename to c/src/api/eth1/abi.h diff --git a/src/api/eth1/ens.c b/c/src/api/eth1/ens.c similarity index 98% rename from src/api/eth1/ens.c rename to c/src/api/eth1/ens.c index 57b4d46aa..dd7c0d07c 100644 --- a/src/api/eth1/ens.c +++ b/c/src/api/eth1/ens.c @@ -73,7 +73,7 @@ static void ens_hash(const char* domain, bytes32_t dst) { in3_ret_t ens_resolve(in3_ctx_t* parent, char* name, const address_t registry, in3_ens_type type, uint8_t* dst, int* res_len) { const int len = strlen(name); - if (*name == '0' && name[1] == 1 && len == 42) { + if (*name == '0' && name[1] == 'x' && len == 42) { hex_to_bytes(name, 40, dst, 20); return IN3_OK; } @@ -126,7 +126,7 @@ in3_ret_t ens_resolve(in3_ctx_t* parent, char* name, const address_t registry, i registry_address = alloca(43); bytes_to_hex(registry, 20, registry_address + 2); registry_address[0] = '0'; - registry_address[0] = 'x'; + registry_address[1] = 'x'; } else switch (parent->client->chain_id) { case ETH_CHAIN_ID_MAINNET: diff --git a/src/api/eth1/ens.h b/c/src/api/eth1/ens.h similarity index 100% rename from src/api/eth1/ens.h rename to c/src/api/eth1/ens.h diff --git a/src/api/eth1/eth_api.c b/c/src/api/eth1/eth_api.c similarity index 81% rename from src/api/eth1/eth_api.c rename to c/src/api/eth1/eth_api.c index af8f3217f..78e6b1348 100644 --- a/src/api/eth1/eth_api.c +++ b/c/src/api/eth1/eth_api.c @@ -39,72 +39,8 @@ #include "../../core/util/mem.h" #include "../../verifier/eth1/basic/filter.h" #include "../../verifier/eth1/nano/rlp.h" +#include "../utils/api_utils_priv.h" #include "abi.h" -#include -#include -#include -#include -#if defined(_WIN32) || defined(WIN32) -#include -#else -#include -#endif - -// create the params as stringbuilder -#define rpc_init sb_t* params = sb_new("[") - -// execute the request after the params have been set. -#define rpc_exec(METHOD, RETURN_TYPE, HANDLE_RESULT) \ - errno = 0; \ - in3_ctx_t* _ctx_ = in3_client_rpc_ctx(in3, (METHOD), sb_add_char(params, ']')->data); \ - d_token_t* result = get_result(_ctx_); \ - RETURN_TYPE _res_; \ - if (result) \ - _res_ = (HANDLE_RESULT); \ - else \ - memset(&_res_, 0, sizeof(RETURN_TYPE)); \ - ctx_free(_ctx_); \ - sb_free(params); \ - return _res_; - -#define params_add_key_pair(params, key, sb_add_func, quote_val, prefix_comma) \ - do { \ - if (prefix_comma) sb_add_chars(params, ", "); \ - sb_add_char(params, '\"'); \ - sb_add_chars(params, key); \ - sb_add_chars(params, "\": "); \ - if (quote_val) sb_add_char(params, '\"'); \ - sb_add_func; \ - if (quote_val) sb_add_char(params, '\"'); \ - } while (0) - -#define params_add_first_pair(params, key, sb_add_func, quote_val) params_add_key_pair(params, key, sb_add_func, quote_val, false) -#define params_add_next_pair(params, key, sb_add_func, quote_val) params_add_key_pair(params, key, sb_add_func, quote_val, true) - -// last error string -static char* last_error = NULL; -char* eth_last_error() { return last_error; } - -// sets the error and a message -static void set_errorn(int std_error, char* msg, int len) { - errno = std_error; - if (last_error) _free(last_error); - last_error = _malloc(len + 1); - memcpy(last_error, msg, len); - last_error[len] = 0; -} - -// sets the error and a message -static void set_error_intern(int std_error, char* msg) { - in3_log_error("Request failed due to %s - %s\n", strerror(std_error), msg); - set_errorn(std_error, msg, strlen(msg)); -} - -#ifdef ERR_MSG -#define set_error(e, msg) set_error_intern(e, msg) -#else -#define set_error(e, msg) set_error_intern(e, "E") -#endif /** copies bytes to a fixed length destination (leftpadding 0 if needed).*/ static void copy_fixed(uint8_t* dst, uint32_t len, bytes_t data) { @@ -152,27 +88,6 @@ static uint256_t uint256_from_bytes(bytes_t bytes) { return d; } -/** returns the result from a previously executed ctx*/ -static d_token_t* get_result(in3_ctx_t* ctx) { - if (ctx->error) { // error means something went wrong during verification or a timeout occured. - set_error(ETIMEDOUT, ctx->error); // so we copy the error as last_error - return NULL; - } else if (!ctx->responses) { - set_error(IN3_ERPC, "No response"); - return NULL; - } - - d_token_t* t = d_get(ctx->responses[0], K_RESULT); - if (t) return t; // everthing is good, we have a result - - // if no result, we expect an error - t = d_get(ctx->responses[0], K_ERROR); // we we have an error... - set_error(ETIMEDOUT, !t - ? "No result or error in response" - : (d_type(t) == T_OBJECT ? d_string(t) : d_get_stringk(t, K_MESSAGE))); - return NULL; -} - /** adds a number as hex */ static void params_add_number(sb_t* sb, uint64_t num) { char tmp[30]; @@ -212,10 +127,15 @@ static void params_add_bool(sb_t* sb, bool val) { if (sb->len > 1) sb_add_char(sb, ','); sb_add_chars(sb, val ? "true" : "false"); } +static size_t align(size_t val) { + const size_t add = val % sizeof(void*); + return add ? (sizeof(void*) - add + val) : val; +} /** copy the data from the token to a eth_tx_t-object */ static uint32_t write_tx(d_token_t* t, eth_tx_t* tx) { - bytes_t b = d_to_bytes(d_get(t, K_INPUT)); + bytes_t b = d_to_bytes(d_get(t, K_INPUT)); + tx->signature[64] = d_get_intk(t, K_V); tx->block_number = d_get_longk(t, K_BLOCK_NUMBER); tx->gas = d_get_longk(t, K_GAS); @@ -223,7 +143,7 @@ static uint32_t write_tx(d_token_t* t, eth_tx_t* tx) { tx->nonce = d_get_longk(t, K_NONCE); tx->data = bytes((uint8_t*) tx + sizeof(eth_tx_t), b.len); tx->transaction_index = d_get_intk(t, K_TRANSACTION_INDEX); - memcpy(tx + sizeof(eth_tx_t), b.data, b.len); // copy the data right after the tx-struct. + memcpy((uint8_t*) tx + sizeof(eth_tx_t), b.data, b.len); // copy the data right after the tx-struct. copy_fixed(tx->block_hash, 32, d_to_bytes(d_getl(t, K_BLOCK_HASH, 32))); copy_fixed(tx->from, 20, d_to_bytes(d_getl(t, K_FROM, 20))); copy_fixed(tx->to, 20, d_to_bytes(d_getl(t, K_TO, 20))); @@ -232,11 +152,10 @@ static uint32_t write_tx(d_token_t* t, eth_tx_t* tx) { copy_fixed(tx->signature, 32, d_to_bytes(d_getl(t, K_R, 32))); copy_fixed(tx->signature + 32, 32, d_to_bytes(d_getl(t, K_S, 32))); - return sizeof(eth_tx_t) + b.len; + return align(sizeof(eth_tx_t) + b.len); } - /** calculate the tx size as struct+data */ -static uint32_t get_tx_size(d_token_t* tx) { return d_to_bytes(d_get(tx, K_INPUT)).len + sizeof(eth_tx_t); } +static uint32_t get_tx_size(d_token_t* tx) { return align(d_to_bytes(d_get(tx, K_INPUT)).len) + sizeof(eth_tx_t); } /** * allocates memory for the block and all required lists like the transactions and copies the data. @@ -255,33 +174,33 @@ static uint32_t get_tx_size(d_token_t* tx) { return d_to_bytes(d_get(tx, K_INPUT static eth_block_t* eth_getBlock(d_token_t* result, bool include_tx) { if (result) { if (d_type(result) == T_NULL) - set_error(EAGAIN, "Block does not exist"); + api_set_error(EAGAIN, "Block does not exist"); else { d_token_t* sealed = d_get(result, K_SEAL_FIELDS); d_token_t* txs = d_get(result, K_TRANSACTIONS); bytes_t extra = d_to_bytes(d_get(result, K_EXTRA_DATA)); // calc size - uint32_t s = sizeof(eth_block_t); + uint32_t s = align(sizeof(eth_block_t)); if (include_tx) { for (d_iterator_t it = d_iter(txs); it.left; d_iter_next(&it)) s += get_tx_size(it.token); // add all struct-size for each transaction } else // or s += 32 * d_len(txs); // just the transaction hashes - s += extra.len; // extra-data + s += align(extra.len); // extra-data for (d_iterator_t sf = d_iter(sealed); sf.left; d_iter_next(&sf)) { bytes_t t = d_to_bytes(sf.token); rlp_decode(&t, 0, &t); - s += t.len + sizeof(bytes_t); // for each field in the selad-fields we need a bytes_t-struct in the array + the data itself + s += align(t.len) + align(sizeof(bytes_t)); // for each field in the selad-fields we need a bytes_t-struct in the array + the data itself } // copy data - eth_block_t* b = malloc(s); + eth_block_t* b = _calloc(1, s); if (!b) { - set_error(ENOMEM, "Not enough memory"); + api_set_error(ENOMEM, "Not enough memory"); return NULL; } - uint8_t* p = (uint8_t*) b + sizeof(eth_block_t); // pointer where we add the next data after the block-struct + uint8_t* p = (uint8_t*) b + align(sizeof(eth_block_t)); // pointer where we add the next data after the block-struct copy_fixed(b->author, 20, d_to_bytes(d_getl(result, K_AUTHOR, 20))); copy_fixed(b->difficulty.data, 32, d_to_bytes(d_get(result, K_DIFFICULTY))); copy_fixed(b->hash, 32, d_to_bytes(d_getl(result, K_HASH, 32))); @@ -303,15 +222,15 @@ static eth_block_t* eth_getBlock(d_token_t* result, bool include_tx) { b->seal_fields_count = d_len(sealed); b->extra_data = bytes(p, extra.len); memcpy(p, extra.data, extra.len); - p += extra.len; + p += align(extra.len); b->seal_fields = (void*) p; - p += sizeof(bytes_t) * b->seal_fields_count; + p += align(sizeof(bytes_t)) * b->seal_fields_count; for (d_iterator_t sfitr = d_iter(sealed); sfitr.left; d_iter_next(&sfitr)) { bytes_t sf = d_to_bytes(sfitr.token); rlp_decode(&sf, 0, &sf); b->seal_fields[b->seal_fields_count - sfitr.left] = bytes(p, sf.len); memcpy(p, sf.data, sf.len); - p += sf.len; + p += align(sf.len); } b->tx_data = include_tx ? (eth_tx_t*) p : NULL; @@ -420,6 +339,12 @@ static json_ctx_t* parse_call_result(call_request_t* req, d_token_t* result) { return res; } +static uint64_t* d_to_u64ptr(d_token_t* res) { + uint64_t* p = _malloc(sizeof(uint64_t)); + *p = d_long(res); + return p; +} + static void* eth_call_fn_intern(in3_t* in3, address_t contract, eth_blknum_t block, bool only_estimate, char* fn_sig, va_list ap) { rpc_init; int res = 0; @@ -470,7 +395,7 @@ static void* eth_call_fn_intern(in3_t* in3, address_t contract, eth_blknum_t blo sb_add_char(params, '}'); params_add_blk_num_t(params, block); } else { - set_error(0, req->error ? req->error : "Error parsing the request-data"); + api_set_error(0, req->error ? req->error : "Error parsing the request-data"); sb_free(params); req_free(req); return NULL; @@ -478,7 +403,7 @@ static void* eth_call_fn_intern(in3_t* in3, address_t contract, eth_blknum_t blo if (res >= 0) { if (only_estimate) { - rpc_exec("eth_estimateGas", d_token_t*, result); + rpc_exec("eth_estimateGas", uint64_t*, d_to_u64ptr(result)); } else { rpc_exec("eth_call", json_ctx_t*, parse_call_result(req, result)); } @@ -496,12 +421,14 @@ static char* wait_for_receipt(in3_t* in3, char* params, int timeout, int count) if (count) { #if defined(_WIN32) || defined(WIN32) Sleep(timeout); +#elif defined(__ZEPHYR__) + k_sleep(timeout); #else nanosleep((const struct timespec[]){{timeout / 1000, ((long) timeout % 1000) * 1000000L}}, NULL); #endif return wait_for_receipt(in3, params, timeout + timeout, count - 1); } else { - set_error(1, "timeout waiting for the receipt"); + api_set_error(1, "timeout waiting for the receipt"); return NULL; } } else { @@ -511,8 +438,8 @@ static char* wait_for_receipt(in3_t* in3, char* params, int timeout, int count) return c; } } + api_set_error(3, ctx->error ? ctx->error : "Error getting the Receipt!"); ctx_free(ctx); - set_error(3, ctx->error ? ctx->error : "Error getting the Receipt!"); return NULL; } @@ -560,14 +487,14 @@ in3_ret_t eth_getFilterChanges(in3_t* in3, size_t id, bytes32_t** block_hashes, char* fopt_ = filter_opt_set_fromBlock(f->options, f->last_block, !f->is_first_usage); *logs = eth_getLogs(in3, fopt_); _free(fopt_); - f->last_block = blkno + 1; + f->last_block = blkno + 1; f->is_first_usage = false; return 0; } case FILTER_BLOCK: if (blkno > f->last_block) { uint64_t blkcount = blkno - f->last_block; - *block_hashes = malloc(sizeof(bytes32_t) * blkcount); + *block_hashes = _malloc(sizeof(bytes32_t) * blkcount); for (uint64_t i = f->last_block + 1, j = 0; i <= blkno; i++, j++) { eth_block_t* blk = eth_getBlockByNumber(in3, BLKNUM(i), false); if (blk) { @@ -606,7 +533,7 @@ in3_ret_t eth_getFilterLogs(in3_t* in3, size_t id, eth_log_t** logs) { } } -void log_free(eth_log_t* log) { +void eth_log_free(eth_log_t* log) { _free(log->data.data); _free(log->topics); _free(log); @@ -640,20 +567,22 @@ json_ctx_t* eth_call_fn(in3_t* in3, address_t contract, eth_blknum_t block, char uint64_t eth_estimate_fn(in3_t* in3, address_t contract, eth_blknum_t block, char* fn_sig, ...) { va_list ap; va_start(ap, fn_sig); - d_token_t* response = eth_call_fn_intern(in3, contract, block, true, fn_sig, ap); + uint64_t* response = eth_call_fn_intern(in3, contract, block, true, fn_sig, ap); va_end(ap); - return d_long(response); + uint64_t tmp = *response; + _free(response); + return tmp; } static eth_tx_t* parse_tx(d_token_t* result) { if (result) { if (d_type(result) == T_NULL) - set_error(EAGAIN, "Transaction does not exist"); + api_set_error(EAGAIN, "Transaction does not exist"); else { uint32_t s = get_tx_size(result); eth_tx_t* tx = malloc(s); if (!tx) { - set_error(ENOMEM, "Not enough memory"); + api_set_error(ENOMEM, "Not enough memory"); return NULL; } write_tx(result, tx); @@ -693,11 +622,11 @@ uint64_t eth_getTransactionCount(in3_t* in3, address_t address, eth_blknum_t blo static eth_tx_receipt_t* parse_tx_receipt(d_token_t* result) { if (result) { if (d_type(result) == T_NULL) - set_error(EAGAIN, "Error getting the Receipt!"); + api_set_error(EAGAIN, "Error getting the Receipt!"); else { eth_tx_receipt_t* txr = _malloc(sizeof(*txr)); if (!txr) { - set_error(ENOMEM, "Not enough memory"); + api_set_error(ENOMEM, "Not enough memory"); return NULL; } txr->transaction_index = d_get_intk(result, K_TRANSACTION_INDEX); @@ -719,7 +648,7 @@ void eth_tx_receipt_free(eth_tx_receipt_t* txr) { eth_log_t *curr = txr->logs, *next = NULL; while (curr != NULL) { next = curr->next; - log_free(curr); + eth_log_free(curr); curr = next; } _free(txr); diff --git a/src/api/eth1/eth_api.h b/c/src/api/eth1/eth_api.h similarity index 98% rename from src/api/eth1/eth_api.h rename to c/src/api/eth1/eth_api.h index 7b74bd19f..3a90b520f 100644 --- a/src/api/eth1/eth_api.h +++ b/c/src/api/eth1/eth_api.h @@ -43,6 +43,7 @@ #define ETH_API_H #include "../../core/client/client.h" +#include "../utils/api_utils.h" #include /** Initializer macros for eth_blknum_t */ @@ -51,7 +52,10 @@ #define BLKNUM_EARLIEST() ((eth_blknum_t){.def = BLK_EARLIEST, .is_u64 = false}) #define BLKNUM_PENDING() ((eth_blknum_t){.def = BLK_PENDING, .is_u64 = false}) -/** +/**< The current error or null if all is ok */ +#define eth_last_error() api_last_error() + +/** * a 32 byte long integer used to store ethereum-numbers. * * use the as_long() or as_double() to convert this to a useable number. @@ -182,14 +186,13 @@ bytes_t* eth_sendTransaction(in3_t* in3, address_t from, address_t to, bytes_t* eth_sendRawTransaction(in3_t* in3, bytes_t data); /**< Creates new message call transaction or a contract creation for signed transactions. Returns (32 Bytes) - the transaction hash, or the zero hash if the transaction is not yet available. Free after use with b_free(). */ eth_tx_receipt_t* eth_getTransactionReceipt(in3_t* in3, bytes32_t tx_hash); /**< Returns the receipt of a transaction by transaction hash. Free result after use with eth_tx_receipt_free() */ char* eth_wait_for_receipt(in3_t* in3, bytes32_t tx_hash); /**< Waits for receipt of a transaction requested by transaction hash. */ -char* eth_last_error(); /**< The current error or null if all is ok */ // Helper functions long double as_double(uint256_t d); /**< Converts a uint256_t in a long double. Important: since a long double stores max 16 byte, there is no guarantee to have the full precision. */ uint64_t as_long(uint256_t d); /**< Converts a uint256_t in a long . Important: since a long double stores 8 byte, this will only use the last 8 byte of the value. */ uint256_t to_uint256(uint64_t value); /**< Converts a uint64_t into its uint256_t representation. */ in3_ret_t decrypt_key(d_token_t* key_data, char* password, bytes32_t dst); /**< Decrypts the private key from a json keystore file using PBKDF2 or SCRYPT (if enabled) */ -void log_free(eth_log_t* log); /**< Frees a eth_log_t object */ +void eth_log_free(eth_log_t* log); /**< Frees a eth_log_t object */ void eth_tx_receipt_free(eth_tx_receipt_t* txr); /**< Frees a eth_tx_receipt_t object */ // more helper diff --git a/src/api/eth1/key.c b/c/src/api/eth1/key.c similarity index 100% rename from src/api/eth1/key.c rename to c/src/api/eth1/key.c diff --git a/src/api/eth1/rpc_api.c b/c/src/api/eth1/rpc_api.c similarity index 91% rename from src/api/eth1/rpc_api.c rename to c/src/api/eth1/rpc_api.c index 094dc60da..ed3bdc893 100644 --- a/src/api/eth1/rpc_api.c +++ b/c/src/api/eth1/rpc_api.c @@ -116,16 +116,16 @@ static in3_ret_t in3_checkSumAddress(in3_ctx_t* ctx, d_token_t* params, in3_resp in3_ret_t res = to_checksum(adr->data, d_get_int_at(params, 1) ? ctx->client->chain_id : 0, result); if (res) return ctx_set_error(ctx, "Could not create the checksum address", res); RESPONSE_START(); - sb_add_char(&response[0]->result, '"'); + sb_add_char(&response[0]->result, '\''); sb_add_chars(&response[0]->result, result); - sb_add_char(&response[0]->result, '"'); + sb_add_char(&response[0]->result, '\''); RESPONSE_END(); return IN3_OK; } static in3_ret_t in3_ens(in3_ctx_t* ctx, d_token_t* params, in3_response_t** response) { char* name = d_get_string_at(params, 0); char* type = d_get_string_at(params, 1); - char* registry = d_get_string_at(params, 2); + bytes_t registry = d_to_bytes(d_get_at(params, 2)); int res_len = 20; in3_ens_type ens_type = ENS_ADDR; bytes32_t result; @@ -143,9 +143,9 @@ static in3_ret_t in3_ens(in3_ctx_t* ctx, d_token_t* params, in3_response_t** res ens_type = ENS_HASH; else return ctx_set_error(ctx, "currently only 'hash','addr','owner' or 'resolver' are allowed as type", IN3_EINVAL); + if (registry.data && registry.len != 20) return ctx_set_error(ctx, "the registry must be a 20 bytes address", IN3_EINVAL); - if (registry) hex_to_bytes(registry, -1, result, 20); - in3_ret_t res = ens_resolve(ctx, name, registry ? result : NULL, ens_type, result, &res_len); + in3_ret_t res = ens_resolve(ctx, name, registry.data, ens_type, result, &res_len); if (res < 0) return res; bytes_t result_bytes = bytes(result, res_len); @@ -310,6 +310,26 @@ static in3_ret_t in3_cacheClear(in3_ctx_t* ctx, in3_response_t** response) { return IN3_OK; } +static in3_ret_t in3_decryptKey(in3_ctx_t* ctx, d_token_t* params, in3_response_t** response) { + d_token_t* keyfile = d_get_at(params, 0); + bytes_t password_bytes = d_to_bytes(d_get_at(params, 1)); + bytes32_t dst; + bytes_t dst_bytes = bytes(dst, 32); + + if (!password_bytes.data) return ctx_set_error(ctx, "you need to specify a passphrase", IN3_EINVAL); + if (!keyfile || d_type(keyfile) != T_OBJECT) return ctx_set_error(ctx, "no valid key given", IN3_EINVAL); + char* passphrase = alloca(password_bytes.len + 1); + memcpy(passphrase, password_bytes.data, password_bytes.len); + passphrase[password_bytes.len] = 0; + in3_ret_t res = decrypt_key(keyfile, passphrase, dst); + if (res) return ctx_set_error(ctx, "Invalid key", res); + + RESPONSE_START(); + sb_add_bytes(&response[0]->result, NULL, &dst_bytes, 1, false); + RESPONSE_END(); + return IN3_OK; +} + static in3_ret_t eth_handle_intern(in3_ctx_t* ctx, in3_response_t** response) { if (ctx->len > 1) return IN3_ENOTSUP; // internal handling is only possible for single requests (at least for now) d_token_t* r = ctx->requests[0]; @@ -327,6 +347,7 @@ static in3_ret_t eth_handle_intern(in3_ctx_t* ctx, in3_response_t** response) { if (strcmp(method, "in3_ecrecover") == 0) return in3_ecrecover(ctx, params, response); if (strcmp(method, "in3_signData") == 0) return in3_sign_data(ctx, params, response); if (strcmp(method, "in3_cacheClear") == 0) return in3_cacheClear(ctx, response); + if (strcmp(method, "in3_decryptKey") == 0) return in3_decryptKey(ctx, params, response); return parent_handle ? parent_handle(ctx, response) : IN3_OK; } @@ -345,6 +366,7 @@ static int verify(in3_vctx_t* v) { strcmp(method, "in3_ecrecover") == 0 || strcmp(method, "in3_signData") == 0 || strcmp(method, "in3_pk2public") == 0 || + strcmp(method, "in3_decryptKey") == 0 || strcmp(method, "in3_cacheClear") == 0) return IN3_OK; @@ -357,13 +379,13 @@ void in3_register_eth_api() { if (v) { parent_verify = v->verify; parent_handle = v->pre_handle; - v->verify = verify; + v->verify = (in3_verify) verify; v->pre_handle = eth_handle_intern; } else { in3_verifier_t* v = _calloc(1, sizeof(in3_verifier_t)); v->type = CHAIN_ETH; v->pre_handle = eth_handle_intern; - v->verify = verify; + v->verify = (in3_verify) verify; in3_register_verifier(v); } } diff --git a/c/src/api/ipfs/CMakeLists.txt b/c/src/api/ipfs/CMakeLists.txt new file mode 100644 index 000000000..a28e01ce3 --- /dev/null +++ b/c/src/api/ipfs/CMakeLists.txt @@ -0,0 +1,38 @@ +############################################################################### +# This file is part of the Incubed project. +# Sources: https://github.com/slockit/in3-c +# +# Copyright (C) 2018-2019 slock.it GmbH, Blockchains LLC +# +# +# COMMERCIAL LICENSE USAGE +# +# Licensees holding a valid commercial license may use this file in accordance +# with the commercial license agreement provided with the Software or, alternatively, +# in accordance with the terms contained in a written agreement between you and +# slock.it GmbH/Blockchains LLC. For licensing terms and conditions or further +# information please contact slock.it at in3@slock.it. +# +# Alternatively, this file may be used under the AGPL license as follows: +# +# AGPL LICENSE USAGE +# +# This program is free software: you can redistribute it and/or modify it under the +# terms of the GNU Affero General Public License as published by the Free Software +# Foundation, either version 3 of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. +# [Permissions of this strong copyleft license are conditioned on making available +# complete source code of licensed works and modifications, which include larger +# works using a licensed work, under the same license. Copyright and license notices +# must be preserved. Contributors provide an express grant of patent rights.] +# You should have received a copy of the GNU Affero General Public License along +# with this program. If not, see . +############################################################################### +include("${PROJECT_SOURCE_DIR}/c/compiler.cmake") + +add_library(ipfs_api_o OBJECT ipfs_api.c) +add_library(ipfs_api STATIC $) +target_link_libraries(ipfs_api core b64 in3_api_utils) \ No newline at end of file diff --git a/c/src/api/ipfs/ipfs_api.c b/c/src/api/ipfs/ipfs_api.c new file mode 100644 index 000000000..ca4e3e364 --- /dev/null +++ b/c/src/api/ipfs/ipfs_api.c @@ -0,0 +1,65 @@ +/******************************************************************************* + * This file is part of the Incubed project. + * Sources: https://github.com/slockit/in3-c + * + * Copyright (C) 2018-2019 slock.it GmbH, Blockchains LLC + * + * + * COMMERCIAL LICENSE USAGE + * + * Licensees holding a valid commercial license may use this file in accordance + * with the commercial license agreement provided with the Software or, alternatively, + * in accordance with the terms contained in a written agreement between you and + * slock.it GmbH/Blockchains LLC. For licensing terms and conditions or further + * information please contact slock.it at in3@slock.it. + * + * Alternatively, this file may be used under the AGPL license as follows: + * + * AGPL LICENSE USAGE + * + * This program is free software: you can redistribute it and/or modify it under the + * terms of the GNU Affero General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + * [Permissions of this strong copyleft license are conditioned on making available + * complete source code of licensed works and modifications, which include larger + * works using a licensed work, under the same license. Copyright and license notices + * must be preserved. Contributors provide an express grant of patent rights.] + * You should have received a copy of the GNU Affero General Public License along + * with this program. If not, see . + *******************************************************************************/ + +#include "ipfs_api.h" +#include "../../core/util/mem.h" +#include "../../third-party/libb64/cdecode.h" +#include "../../third-party/libb64/cencode.h" +#include "../utils/api_utils_priv.h" + +static bytes_t* b64_to_bytes(const char* b64) { + size_t l = 0; + uint8_t* data = base64_decode(b64, &l); + bytes_t* b = b_new((char*) data, l); + free(data); + return b; +} + +char* ipfs_put(in3_t* in3, const bytes_t* content) { + char* b64 = base64_encode(content->data, content->len); + rpc_init; + sb_add_char(params, '\"'); + sb_add_chars(params, b64); + sb_add_chars(params, "\",\"base64\""); + free(b64); + rpc_exec("ipfs_put", char*, _strdupn(d_string(result), -1)); +} + +bytes_t* ipfs_get(in3_t* in3, const char* multihash) { + rpc_init; + sb_add_char(params, '\"'); + sb_add_chars(params, multihash); + sb_add_chars(params, "\",\"base64\""); + rpc_exec("ipfs_get", bytes_t*, b64_to_bytes(d_string(result))); +} diff --git a/c/src/api/ipfs/ipfs_api.h b/c/src/api/ipfs/ipfs_api.h new file mode 100644 index 000000000..9365bbf38 --- /dev/null +++ b/c/src/api/ipfs/ipfs_api.h @@ -0,0 +1,51 @@ +/******************************************************************************* + * This file is part of the Incubed project. + * Sources: https://github.com/slockit/in3-c + * + * Copyright (C) 2018-2019 slock.it GmbH, Blockchains LLC + * + * + * COMMERCIAL LICENSE USAGE + * + * Licensees holding a valid commercial license may use this file in accordance + * with the commercial license agreement provided with the Software or, alternatively, + * in accordance with the terms contained in a written agreement between you and + * slock.it GmbH/Blockchains LLC. For licensing terms and conditions or further + * information please contact slock.it at in3@slock.it. + * + * Alternatively, this file may be used under the AGPL license as follows: + * + * AGPL LICENSE USAGE + * + * This program is free software: you can redistribute it and/or modify it under the + * terms of the GNU Affero General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + * [Permissions of this strong copyleft license are conditioned on making available + * complete source code of licensed works and modifications, which include larger + * works using a licensed work, under the same license. Copyright and license notices + * must be preserved. Contributors provide an express grant of patent rights.] + * You should have received a copy of the GNU Affero General Public License along + * with this program. If not, see . + *******************************************************************************/ + +// @PUBLIC_HEADER +/** @file + * IPFS API. + * + * This header-file defines easy to use function, which are preparing the JSON-RPC-Request, which is then executed and verified by the incubed-client. + * */ + +#ifndef IN3_IPFS_API_H +#define IN3_IPFS_API_H + +#include "../../core/client/client.h" +#include "../../core/util/bytes.h" + +char* ipfs_put(in3_t* in3, const bytes_t* content); /**< Returns the IPFS multihash of stored content on success OR NULL on error (check api_last_error()). Result must be freed by caller. */ +bytes_t* ipfs_get(in3_t* in3, const char* multihash); /**< Returns the content associated with specified multihash on success OR NULL on error (check api_last_error()). Result must be freed by caller. */ + +#endif //IN3_IPFS_API_H diff --git a/src/api/usn/CMakeLists.txt b/c/src/api/usn/CMakeLists.txt similarity index 97% rename from src/api/usn/CMakeLists.txt rename to c/src/api/usn/CMakeLists.txt index c541bc63d..ef91f0fe6 100644 --- a/src/api/usn/CMakeLists.txt +++ b/c/src/api/usn/CMakeLists.txt @@ -31,6 +31,7 @@ # You should have received a copy of the GNU Affero General Public License along # with this program. If not, see . ############################################################################### +include("${PROJECT_SOURCE_DIR}/c/compiler.cmake") add_library(usn_api_o OBJECT usn_api.c) add_library(usn_api STATIC $) diff --git a/src/api/usn/usn_api.c b/c/src/api/usn/usn_api.c similarity index 100% rename from src/api/usn/usn_api.c rename to c/src/api/usn/usn_api.c diff --git a/src/api/usn/usn_api.h b/c/src/api/usn/usn_api.h similarity index 99% rename from src/api/usn/usn_api.h rename to c/src/api/usn/usn_api.h index 5acaa05fb..4c09df1f3 100644 --- a/src/api/usn/usn_api.h +++ b/c/src/api/usn/usn_api.h @@ -101,7 +101,7 @@ typedef struct { address_t contract; usn_device_t* devices; int len_devices; - chain_id_t chain_id; + chain_id_t chain_id; uint64_t now; uint64_t last_checked_block; usn_booking_handler booking_handler; diff --git a/c/src/api/utils/api_utils.h b/c/src/api/utils/api_utils.h new file mode 100644 index 000000000..888e7c66a --- /dev/null +++ b/c/src/api/utils/api_utils.h @@ -0,0 +1,61 @@ +/******************************************************************************* + * This file is part of the Incubed project. + * Sources: https://github.com/slockit/in3-c + * + * Copyright (C) 2018-2019 slock.it GmbH, Blockchains LLC + * + * + * COMMERCIAL LICENSE USAGE + * + * Licensees holding a valid commercial license may use this file in accordance + * with the commercial license agreement provided with the Software or, alternatively, + * in accordance with the terms contained in a written agreement between you and + * slock.it GmbH/Blockchains LLC. For licensing terms and conditions or further + * information please contact slock.it at in3@slock.it. + * + * Alternatively, this file may be used under the AGPL license as follows: + * + * AGPL LICENSE USAGE + * + * This program is free software: you can redistribute it and/or modify it under the + * terms of the GNU Affero General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + * [Permissions of this strong copyleft license are conditioned on making available + * complete source code of licensed works and modifications, which include larger + * works using a licensed work, under the same license. Copyright and license notices + * must be preserved. Contributors provide an express grant of patent rights.] + * You should have received a copy of the GNU Affero General Public License along + * with this program. If not, see . + *******************************************************************************/ +// @PUBLIC_HEADER +/** @file + * Ethereum API utils. + * + * This header-file helper utils for use with API modules. + * */ + +#ifndef IN3_API_UTILS_H +#define IN3_API_UTILS_H + +/** + * function to set error. Will only be called internally. + * default implementation is NOT MT safe! + */ +typedef void (*set_error_fn)(int err, const char* msg); +void api_set_error_fn(set_error_fn fn); + +/** + * function to get last error message. + * default implementation is NOT MT safe! + */ +typedef char* (*get_error_fn)(void); +void api_get_error_fn(get_error_fn fn); + +/** returns current error or null if all is ok */ +char* api_last_error(); + +#endif //IN3_API_UTILS_H diff --git a/c/src/api/utils/api_utils_priv.c b/c/src/api/utils/api_utils_priv.c new file mode 100644 index 000000000..7c1e0a55b --- /dev/null +++ b/c/src/api/utils/api_utils_priv.c @@ -0,0 +1,115 @@ +/******************************************************************************* + * This file is part of the Incubed project. + * Sources: https://github.com/slockit/in3-c + * + * Copyright (C) 2018-2019 slock.it GmbH, Blockchains LLC + * + * + * COMMERCIAL LICENSE USAGE + * + * Licensees holding a valid commercial license may use this file in accordance + * with the commercial license agreement provided with the Software or, alternatively, + * in accordance with the terms contained in a written agreement between you and + * slock.it GmbH/Blockchains LLC. For licensing terms and conditions or further + * information please contact slock.it at in3@slock.it. + * + * Alternatively, this file may be used under the AGPL license as follows: + * + * AGPL LICENSE USAGE + * + * This program is free software: you can redistribute it and/or modify it under the + * terms of the GNU Affero General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + * [Permissions of this strong copyleft license are conditioned on making available + * complete source code of licensed works and modifications, which include larger + * works using a licensed work, under the same license. Copyright and license notices + * must be preserved. Contributors provide an express grant of patent rights.] + * You should have received a copy of the GNU Affero General Public License along + * with this program. If not, see . + *******************************************************************************/ + +#include "api_utils_priv.h" +#include "../../core/util/mem.h" +#include "api_utils.h" + +// forward decl +void set_error(int err, const char* msg); +char* get_error(void); + +// last error string +static char* last_error = NULL; +// API get error function +static get_error_fn get_error_impl = get_error; +// API set error function +static set_error_fn set_error_impl = set_error; + +void api_get_error_fn(get_error_fn fn) { + get_error_impl = fn; +} + +void api_set_error_fn(set_error_fn fn) { + set_error_impl = fn; +} + +// sets the error and a message +static void set_errorn(int std_error, const char* msg, int len) { + errno = std_error; + if (last_error) _free(last_error); + last_error = _malloc(len + 1); + memcpy(last_error, msg, len); + last_error[len] = 0; +} + +// sets the error and a message +static void set_error_intern(int std_error, const char* msg) { +#ifndef __ZEPHYR__ + in3_log_error("Request failed due to %s - %s\n", strerror(std_error), msg); +#else + in3_log_error("Request failed due to %s\n", msg); +#endif + set_errorn(std_error, msg, strlen(msg)); +} + +char* get_error(void) { + return last_error; +} + +char* api_last_error(void) { + return get_error_impl(); +} + +void set_error(int err, const char* msg) { +#ifdef ERR_MSG + return set_error_intern(err, msg); +#else + return set_error_intern(err, "E"); +#endif +} + +void api_set_error(int err, const char* msg) { + return set_error_impl(err, msg ? msg : "unknown error"); +} + +d_token_t* get_result(in3_ctx_t* ctx) { + if (ctx->error) { // error means something went wrong during verification or a timeout occured. + api_set_error(ETIMEDOUT, ctx->error); // so we copy the error as last_error + return NULL; + } else if (!ctx->responses) { + api_set_error(IN3_ERPC, "No response"); + return NULL; + } + + d_token_t* t = d_get(ctx->responses[0], K_RESULT); + if (t) return t; // everthing is good, we have a result + + // if no result, we expect an error + t = d_get(ctx->responses[0], K_ERROR); // we we have an error... + api_set_error(ETIMEDOUT, !t + ? "No result or error in response" + : (d_type(t) != T_OBJECT ? d_string(t) : d_get_stringk(t, K_MESSAGE))); + return NULL; +} diff --git a/c/src/api/utils/api_utils_priv.h b/c/src/api/utils/api_utils_priv.h new file mode 100644 index 000000000..175943377 --- /dev/null +++ b/c/src/api/utils/api_utils_priv.h @@ -0,0 +1,94 @@ +/******************************************************************************* + * This file is part of the Incubed project. + * Sources: https://github.com/slockit/in3-c + * + * Copyright (C) 2018-2019 slock.it GmbH, Blockchains LLC + * + * + * COMMERCIAL LICENSE USAGE + * + * Licensees holding a valid commercial license may use this file in accordance + * with the commercial license agreement provided with the Software or, alternatively, + * in accordance with the terms contained in a written agreement between you and + * slock.it GmbH/Blockchains LLC. For licensing terms and conditions or further + * information please contact slock.it at in3@slock.it. + * + * Alternatively, this file may be used under the AGPL license as follows: + * + * AGPL LICENSE USAGE + * + * This program is free software: you can redistribute it and/or modify it under the + * terms of the GNU Affero General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + * [Permissions of this strong copyleft license are conditioned on making available + * complete source code of licensed works and modifications, which include larger + * works using a licensed work, under the same license. Copyright and license notices + * must be preserved. Contributors provide an express grant of patent rights.] + * You should have received a copy of the GNU Affero General Public License along + * with this program. If not, see . + *******************************************************************************/ + +#ifndef IN3_API_UTILS_PRIV_H +#define IN3_API_UTILS_PRIV_H + +#include "../../core/client/context.h" +#include "../../core/client/keys.h" +#include "../../core/util/data.h" +#include "../../core/util/error.h" +#include "../../core/util/log.h" +#include "../../core/util/utils.h" +#ifdef __ZEPHYR__ +#include +#else +#include +#endif +#include +#include +#include +#if defined(_WIN32) || defined(WIN32) +#include +#else +#include +#endif + +// create the params as stringbuilder +#define rpc_init sb_t* params = sb_new("[") + +// execute the request after the params have been set. +#define rpc_exec(METHOD, RETURN_TYPE, HANDLE_RESULT) \ + errno = 0; \ + in3_ctx_t* _ctx_ = in3_client_rpc_ctx(in3, (METHOD), sb_add_char(params, ']')->data); \ + d_token_t* result = get_result(_ctx_); \ + RETURN_TYPE _res_; \ + if (result) \ + _res_ = (HANDLE_RESULT); \ + else \ + memset(&_res_, 0, sizeof(RETURN_TYPE)); \ + ctx_free(_ctx_); \ + sb_free(params); \ + return _res_; + +#define params_add_key_pair(params, key, sb_add_func, quote_val, prefix_comma) \ + do { \ + if (prefix_comma) sb_add_chars(params, ", "); \ + sb_add_char(params, '\"'); \ + sb_add_chars(params, key); \ + sb_add_chars(params, "\": "); \ + if (quote_val) sb_add_char(params, '\"'); \ + sb_add_func; \ + if (quote_val) sb_add_char(params, '\"'); \ + } while (0) + +#define params_add_first_pair(params, key, sb_add_func, quote_val) params_add_key_pair(params, key, sb_add_func, quote_val, false) +#define params_add_next_pair(params, key, sb_add_func, quote_val) params_add_key_pair(params, key, sb_add_func, quote_val, true) + +void api_set_error(int err, const char* msg); + +/** returns the result from a previously executed ctx */ +d_token_t* get_result(in3_ctx_t* ctx); + +#endif //IN3_API_UTILS_PRIV_H diff --git a/src/cmd/CMakeLists.txt b/c/src/cmd/CMakeLists.txt similarity index 100% rename from src/cmd/CMakeLists.txt rename to c/src/cmd/CMakeLists.txt diff --git a/src/cmd/http-server/CMakeLists.txt b/c/src/cmd/http-server/CMakeLists.txt similarity index 97% rename from src/cmd/http-server/CMakeLists.txt rename to c/src/cmd/http-server/CMakeLists.txt index 04eb44b26..7cfcf0181 100644 --- a/src/cmd/http-server/CMakeLists.txt +++ b/c/src/cmd/http-server/CMakeLists.txt @@ -31,6 +31,7 @@ # You should have received a copy of the GNU Affero General Public License along # with this program. If not, see . ############################################################################### +include("${PROJECT_SOURCE_DIR}/c/compiler.cmake") add_library(http_server_o OBJECT http_server.c) target_compile_definitions(http_server_o PRIVATE -D_POSIX_C_SOURCE=200112L) diff --git a/src/cmd/http-server/http_server.c b/c/src/cmd/http-server/http_server.c similarity index 100% rename from src/cmd/http-server/http_server.c rename to c/src/cmd/http-server/http_server.c diff --git a/src/cmd/http-server/http_server.h b/c/src/cmd/http-server/http_server.h similarity index 100% rename from src/cmd/http-server/http_server.h rename to c/src/cmd/http-server/http_server.h diff --git a/src/cmd/in3/CMakeLists.txt b/c/src/cmd/in3/CMakeLists.txt similarity index 91% rename from src/cmd/in3/CMakeLists.txt rename to c/src/cmd/in3/CMakeLists.txt index 0a0fb45b3..9ddd3bab9 100644 --- a/src/cmd/in3/CMakeLists.txt +++ b/c/src/cmd/in3/CMakeLists.txt @@ -31,6 +31,7 @@ # You should have received a copy of the GNU Affero General Public License along # with this program. If not, see . ############################################################################### +include("${PROJECT_SOURCE_DIR}/c/compiler.cmake") OPTION(USE_CURL "if true the curl transport will be build (with a dependency to libcurl)" ON) IF (USE_CURL) @@ -48,10 +49,20 @@ IF (IN3_SERVER) set(LIBS ${LIBS} http_server) ENDIF() +if (BTC) + ADD_DEFINITIONS(-DBTC) + set(LIBS ${LIBS} btc) +endif() + +if (IPFS) + ADD_DEFINITIONS(-DIPFS) + set(LIBS ${LIBS} ipfs) +endif() + add_executable(in3 main.c in3_storage.c) target_compile_definitions(in3 PRIVATE _XOPEN_SOURCE=600) -target_link_libraries(in3 ${LIBS} eth_full eth_api -lm) +target_link_libraries(in3 ${LIBS} eth_full eth_api -lm) install(TARGETS in3 DESTINATION /usr/local/bin/ diff --git a/src/cmd/in3/in3_storage.c b/c/src/cmd/in3/in3_storage.c similarity index 97% rename from src/cmd/in3/in3_storage.c rename to c/src/cmd/in3/in3_storage.c index d04f1ba90..2d5c46991 100644 --- a/src/cmd/in3/in3_storage.c +++ b/c/src/cmd/in3/in3_storage.c @@ -95,8 +95,8 @@ bytes_t* storage_get_item(void* cptr, char* key) { len += r; if (feof(file)) break; size_t new_alloc = allocated * 2 + 1; - buffer = _realloc(buffer, new_alloc, allocated); - allocated = new_alloc; + buffer = _realloc(buffer, new_alloc, allocated); + allocated = new_alloc; } fclose(file); @@ -144,7 +144,7 @@ static void rm_recurs(const char* path) { remove(path); } #else -static int unlink_cb(const char* fpath, const struct stat* sb, int typeflag, struct FTW *ftwbuf) { +static int unlink_cb(const char* fpath, const struct stat* sb, int typeflag, struct FTW* ftwbuf) { UNUSED_VAR(sb); UNUSED_VAR(typeflag); UNUSED_VAR(ftwbuf); diff --git a/src/cmd/in3/in3_storage.h b/c/src/cmd/in3/in3_storage.h similarity index 100% rename from src/cmd/in3/in3_storage.h rename to c/src/cmd/in3/in3_storage.h diff --git a/src/cmd/in3/main.c b/c/src/cmd/in3/main.c similarity index 89% rename from src/cmd/in3/main.c rename to c/src/cmd/in3/main.c index a01f146de..76e644442 100644 --- a/src/cmd/in3/main.c +++ b/c/src/cmd/in3/main.c @@ -70,6 +70,13 @@ #include #include +#ifdef BTC +#include "../../verifier/btc/btc.h" +#endif +#ifdef IPFS +#include "../../verifier/ipfs/ipfs.h" +#endif + #ifndef IN3_VERSION #define IN3_VERSION "local" #endif @@ -81,12 +88,14 @@ void show_help(char* name) { -c, -chain the chain to use. (mainnet,kovan,tobalaba,goerli,local or any RPCURL)\n\ -a max number of attempts before giving up (default 5)\n\ -rc number of request per try (default 1)\n\ +-ns no stats if set requests will not be part of the official metrics and considered a service request\n\ -p, -proof specifies the Verification level: (none, standard(default), full)\n\ -md specifies the minimum Deposit of a node in order to be selected as a signer\n\ -np short for -p none\n\ -eth converts the result (as wei) to ether.\n\ -l, -latest replaces \"latest\" with latest BlockNumber - the number of blocks given.\n\ -s, -signs number of signatures to use when verifying.\n\ +-f finality : number of blocks on top of the current one.\n\ -port if specified it will run as http-server listening to the given port.\n\ -b, -block the blocknumber to use when making calls. could be either latest (default),earliest or a hexnumbner\n\ -to the target address of the call\n\ @@ -101,6 +110,7 @@ void show_help(char* name) { -hex if given the result will be returned as hex.\n\ -kin3 if kin3 is specified, the response including in3-section is returned\n\ -debug if given incubed will output debug information when executing. \n\ +-k 32bytes raw private key to sign requests.\n\ -q quit. no additional output. \n\ -ri read response from stdin \n\ -ro write raw response to stdout \n\ @@ -146,6 +156,9 @@ ecrecover \n\ key \n\ reads the private key from JSON-Keystore file and returns the private key.\n\ \n\ +in3_weights\n\ + list all current weights and stats\n\ +\n\ in3_ens \n\ resolves a ens-domain. field can be addr(deault), owner, resolver or hash\n\ \n", @@ -276,7 +289,7 @@ static void execute(in3_t* c, FILE* f) { } if (ret == IN3_OK) { - if (c->keep_in3) { + if (c->flags & FLAGS_KEEP_IN3) { str_range_t rr = d_to_json(ctx->responses[0]); rr.data[rr.len] = 0; printf("%s\n", rr.data); @@ -367,6 +380,7 @@ uint64_t getchain_id(char* name) { if (strcmp(name, "kovan") == 0) return ETH_CHAIN_ID_KOVAN; if (strcmp(name, "goerli") == 0) return ETH_CHAIN_ID_GOERLI; if (strcmp(name, "ipfs") == 0) return ETH_CHAIN_ID_IPFS; + if (strcmp(name, "btc") == 0) return ETH_CHAIN_ID_BTC; if (strcmp(name, "local") == 0) return ETH_CHAIN_ID_LOCAL; if (name[0] == '0' && name[1] == 'x') { bytes32_t d; @@ -594,36 +608,51 @@ int main(int argc, char* argv[]) { storage_handler.get_item = storage_get_item; storage_handler.set_item = storage_set_item; storage_handler.clear = storage_clear; + storage_handler.cptr = NULL; // we want to verify all in3_register_eth_full(); +#ifdef IPFS + in3_register_ipfs(); +#endif +#ifdef BTC + in3_register_btc(); +#endif in3_register_eth_api(); in3_log_set_level(LOG_INFO); // create the client - in3_t* c = in3_for_chain(0); - c->transport = debug_transport; - c->request_count = 1; - c->use_http = true; - c->cache = &storage_handler; - bool out_response = false; - bool force_hex = false; - char* sig = NULL; - char* to = NULL; - char* block_number = "latest"; - char* name = NULL; - call_request_t* req = NULL; - bool json = false; - uint64_t gas_limit = 100000; - char* value = NULL; - bool wait = false; - char* pwd = NULL; - char* pk_file = NULL; - char* validators = NULL; - bytes_t* data = NULL; - char* port = NULL; - char* sig_type = "raw"; - bool to_eth = false; + in3_t* c = in3_for_chain(0); + c->transport = debug_transport; + c->request_count = 1; + c->cache = &storage_handler; + bool out_response = false; + bool run_test_request = false; + bool force_hex = false; + char* sig = NULL; + char* to = NULL; + char* block_number = "latest"; + char* name = NULL; + call_request_t* req = NULL; + bool json = false; + uint64_t gas_limit = 100000; + char* value = NULL; + bool wait = false; + char* pwd = NULL; + char* pk_file = NULL; + char* validators = NULL; + bytes_t* data = NULL; + char* port = NULL; + char* sig_type = "raw"; + bool to_eth = false; +#ifdef __MINGW32__ + c->flags |= FLAGS_HTTP; +#endif + + // handle clear cache opt before initializing cache + for (i = 1; i < argc; i++) + if (strcmp(argv[i], "-ccache") == 0) + c->cache->clear(c->cache->cptr); // read data from cache in3_cache_init(c); @@ -647,8 +676,8 @@ int main(int argc, char* argv[]) { pk_file = argv[++i]; } else if (strcmp(argv[i], "-chain") == 0 || strcmp(argv[i], "-c") == 0) // chain_id set_chain_id(c, argv[++i]); - else if (strcmp(argv[i], "-ccache") == 0) // clear cache - c->cache->clear(c->cache->cptr); + else if (strcmp(argv[i], "-ccache") == 0) // NOOP - should have been handled earlier + ; else if (strcmp(argv[i], "-d") == 0 || strcmp(argv[i], "-data") == 0) { // data char* d = argv[++i]; if (strcmp(d, "-") == 0) @@ -665,12 +694,14 @@ int main(int argc, char* argv[]) { block_number = argv[++i]; else if (strcmp(argv[i], "-latest") == 0 || strcmp(argv[i], "-l") == 0) c->replace_latest_block = atoll(argv[++i]); + else if (strcmp(argv[i], "-tr") == 0) + run_test_request = true; else if (strcmp(argv[i], "-eth") == 0) to_eth = true; else if (strcmp(argv[i], "-md") == 0) c->min_deposit = atoll(argv[++i]); else if (strcmp(argv[i], "-kin3") == 0) - c->keep_in3 = true; + c->flags |= FLAGS_KEEP_IN3; else if (strcmp(argv[i], "-to") == 0) to = argv[++i]; else if (strcmp(argv[i], "-gas") == 0 || strcmp(argv[i], "-gas_limit") == 0) @@ -696,6 +727,8 @@ int main(int argc, char* argv[]) { validators = argv[++i]; else if (strcmp(argv[i], "-hex") == 0) force_hex = true; + else if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "-finality") == 0) + c->finality = (uint16_t) atoi(argv[++i]); else if (strcmp(argv[i], "-response-out") == 0 || strcmp(argv[i], "-ro") == 0) out_response = true; else if (strcmp(argv[i], "-response-in") == 0 || strcmp(argv[i], "-ri") == 0) @@ -704,8 +737,14 @@ int main(int argc, char* argv[]) { wait = true; else if (strcmp(argv[i], "-json") == 0) json = true; - else if (strcmp(argv[i], "-np") == 0) + else if (strcmp(argv[i], "-k") == 0) { + if (argc <= i + 1 || strlen(argv[i + 1]) > 66) die("Invalid signer key"); + c->key = _calloc(32, 1); + hex_to_bytes(argv[++i], -1, c->key, 32); + } else if (strcmp(argv[i], "-np") == 0) c->proof = PROOF_NONE; + else if (strcmp(argv[i], "-ns") == 0) + c->flags ^= FLAGS_STATS; else if (strcmp(argv[i], "-sigtype") == 0 || strcmp(argv[i], "-st") == 0) sig_type = argv[++i]; else if (strcmp(argv[i], "-debug") == 0) { @@ -737,11 +776,11 @@ int main(int argc, char* argv[]) { else { // otherwise we add it to the params if (p > 1) params[p++] = ','; - if (*argv[i] >= '0' && *argv[i] <= '9' && *(argv[i] + 1) != 'x') + if (*argv[i] >= '0' && *argv[i] <= '9' && *(argv[i] + 1) != 'x' && strlen(argv[i]) < 16) p += sprintf(params + p, "\"0x%x\"", atoi(argv[i])); else p += sprintf(params + p, - (argv[i][0] == '{' || argv[i][0] == '[' || strcmp(argv[i], "true") == 0 || strcmp(argv[i], "false") == 0 || (*argv[i] >= '0' && *argv[i] <= '9' && *(argv[i] + 1) != 'x')) + (argv[i][0] == '{' || argv[i][0] == '[' || strcmp(argv[i], "true") == 0 || strcmp(argv[i], "false") == 0 || (*argv[i] >= '0' && *argv[i] <= '9' && strlen(argv[i]) < 16 && *(argv[i] + 1) != 'x')) ? "%s" : "\"%s\"", strcmp(method, "in3_ens") ? resolve(c, argv[i]) : argv[i]); @@ -807,18 +846,46 @@ int main(int argc, char* argv[]) { return 0; } else if (strcmp(method, "in3_weights") == 0) { - uint64_t now = _time(); + c->max_attempts = 1; + uint64_t now = in3_time(NULL); in3_chain_t* chain = in3_find_chain(c, c->chain_id); - printf(" : %45s : %7s : %5s : %5s: %s\n----------------------------------------------------------------------------------------\n", "URL", "BL", "CNT", "AVG", "WEIGHT"); + printf(" : %45s : %7s : %5s : %5s: %s\n----------------------------------------------------------------------------------------\n", "URL", "BL", "CNT", "AVG", run_test_request ? "WEIGHT : LAST_BLOCK" : "WEIGHT"); for (int i = 0; i < chain->nodelist_length; i++) { - in3_node_weight_t* weight = chain->weights + i; + in3_ctx_t* ctx = NULL; + if (run_test_request) { + char req[300]; + char adr[41]; + bytes_to_hex((chain->nodelist + i)->address->data, 20, adr); + sprintf(req, "{\"id\":1,\"jsonrpc\":\"2.0\",\"method\":\"eth_blockNumber\",\"params\":[],\"in3\":{\"data_nodes\":[\"0x%s\"]}}", adr); + ctx = ctx_new(c, req); + if (ctx) in3_send_ctx(ctx); + } in3_node_t* node = chain->nodelist + i; + in3_node_weight_t* weight = chain->weights + i; uint64_t blacklisted = weight->blacklisted_until > now ? weight->blacklisted_until : 0; uint32_t calc_weight = in3_node_calculate_weight(weight, node->capacity); if (blacklisted) printf("\033[31m"); - printf("%2i %45s %7i %5i %5i %5i", i, node->url, (int) (blacklisted ? blacklisted - now : 0), weight->response_count, weight->response_count ? (weight->total_response_time / weight->response_count) : 0, calc_weight); + char* tr = NULL; + if (ctx) { + tr = _malloc(100); + if (!ctx->error) { + sprintf(tr, "#%i", d_get_intk(ctx->responses[0], K_RESULT)); + } + + else if ((node->props & NODE_PROP_DATA) == 0) + sprintf(tr, "The node is marked as not supporting Data-Providing"); + else if (c->proof != PROOF_NONE && (node->props & NODE_PROP_PROOF) == 0) + sprintf(tr, "The node is marked as able to provide proof"); + else if ((c->flags & FLAGS_HTTP) && (node->props & NODE_PROP_HTTP) == 0) + sprintf(tr, "The node is marked as able to support http-requests"); + else + tr = ctx->error; + } + printf("%2i %45s %7i %5i %5i %5i %s", i, node->url, (int) (blacklisted ? blacklisted - now : 0), weight->response_count, weight->response_count ? (weight->total_response_time / weight->response_count) : 0, calc_weight, tr ? tr : ""); if (blacklisted) printf("\033[0m"); printf("\n"); + if (tr && tr != ctx->error) _free(tr); + if (ctx) ctx_free(ctx); } return 0; @@ -956,14 +1023,6 @@ int main(int argc, char* argv[]) { in3_client_rpc(c, "eth_blockNumber", "", &r, &e); } - // update cache - if (c->chain_id != ETH_CHAIN_ID_LOCAL) { - in3_ctx_t ctx; - memset(&ctx, 0, sizeof(in3_ctx_t)); - ctx.client = c; - in3_cache_store_nodelist(&ctx, in3_find_chain(c, c->chain_id)); - } - // if we need to wait if (!error && result && wait && strcmp(method, "eth_sendTransaction") == 0) { bytes32_t txHash; diff --git a/src/cmd/tools/CMakeLists.txt b/c/src/cmd/tools/CMakeLists.txt similarity index 97% rename from src/cmd/tools/CMakeLists.txt rename to c/src/cmd/tools/CMakeLists.txt index 8a6bedf4b..fd14b7ce6 100644 --- a/src/cmd/tools/CMakeLists.txt +++ b/c/src/cmd/tools/CMakeLists.txt @@ -31,6 +31,7 @@ # You should have received a copy of the GNU Affero General Public License along # with this program. If not, see . ############################################################################### +include("${PROJECT_SOURCE_DIR}/c/compiler.cmake") add_executable(rlp rlp.c) target_link_libraries(rlp eth_nano) diff --git a/src/cmd/tools/data.c b/c/src/cmd/tools/data.c similarity index 98% rename from src/cmd/tools/data.c rename to c/src/cmd/tools/data.c index b7ca2c259..a7d7b0715 100644 --- a/src/cmd/tools/data.c +++ b/c/src/cmd/tools/data.c @@ -63,8 +63,8 @@ bytes_t read_from_stdin(FILE* file) { len += r; if (feof(file)) break; size_t new_alloc = allocated * 2 + 1; - buffer = _realloc(buffer, new_alloc, allocated); - allocated = new_alloc; + buffer = _realloc(buffer, new_alloc, allocated); + allocated = new_alloc; } buffer[len] = 0; @@ -274,6 +274,10 @@ int main(int argc, char* argv[]) { return 0; } json_ctx_t* ctx = parse_binary(&input); + if (!ctx) { + printf("Invalid binary data!\n"); + return 1; + } printf("%s\n", d_create_json(ctx->result)); return 0; } diff --git a/src/cmd/tools/rlp.c b/c/src/cmd/tools/rlp.c similarity index 98% rename from src/cmd/tools/rlp.c rename to c/src/cmd/tools/rlp.c index f5579e2d1..654207da9 100644 --- a/src/cmd/tools/rlp.c +++ b/c/src/cmd/tools/rlp.c @@ -69,8 +69,8 @@ char* read_from_stdin(FILE* file) { len += r; if (feof(file)) break; size_t new_alloc = allocated * 2 + 1; - buffer = _realloc(buffer, new_alloc, allocated); - allocated = new_alloc; + buffer = _realloc(buffer, new_alloc, allocated); + allocated = new_alloc; } if (len && buffer[len - 1] == '\n') buffer[len - 1] = 0; @@ -342,7 +342,7 @@ void add_rlp(bytes_builder_t* bb, char* val) { b_free(b); } else { uint8_t data[8]; - uint64_t value = strtoull(val, NULL, 10); + uint64_t value = _strtoull(val, NULL, 10); bytes_t bytes = {.len = 0, .data = data}; if (value) { bytes.len = min_bytes_len(value); diff --git a/src/cmd/tools/used_keys.h b/c/src/cmd/tools/used_keys.h similarity index 100% rename from src/cmd/tools/used_keys.h rename to c/src/cmd/tools/used_keys.h diff --git a/src/core/CMakeLists.txt b/c/src/core/CMakeLists.txt similarity index 98% rename from src/core/CMakeLists.txt rename to c/src/core/CMakeLists.txt index fedf57a74..6bc3f4451 100644 --- a/src/core/CMakeLists.txt +++ b/c/src/core/CMakeLists.txt @@ -31,6 +31,7 @@ # You should have received a copy of the GNU Affero General Public License along # with this program. If not, see . ############################################################################### +include("${PROJECT_SOURCE_DIR}/c/compiler.cmake") # main incubed module defining the interfaces for transport, verifier and storage. # diff --git a/src/core/client/cache.c b/c/src/core/client/cache.c similarity index 100% rename from src/core/client/cache.c rename to c/src/core/client/cache.c diff --git a/src/core/client/cache.h b/c/src/core/client/cache.h similarity index 100% rename from src/core/client/cache.h rename to c/src/core/client/cache.h diff --git a/src/core/client/client.c b/c/src/core/client/client.c similarity index 98% rename from src/core/client/client.c rename to c/src/core/client/client.c index fb5a0a208..150f9310e 100644 --- a/src/core/client/client.c +++ b/c/src/core/client/client.c @@ -169,7 +169,7 @@ char* in3_client_exec_req( // looks good, so we use the resonse and return it str_range_t rr = d_to_json(ctx->responses[0]), rin3; - if (!c->keep_in3 && (rin3 = d_to_json(d_get(ctx->responses[0], K_IN3))).data) { + if ((c->flags & FLAGS_KEEP_IN3) == 0 && (rin3 = d_to_json(d_get(ctx->responses[0], K_IN3))).data) { while (*rin3.data != ',' && rin3.data > rr.data) rin3.data--; *rin3.data = '}'; rr.len = rin3.data - rr.data + 1; diff --git a/src/core/client/client.h b/c/src/core/client/client.h similarity index 90% rename from src/core/client/client.h rename to c/src/core/client/client.h index 38b6aa674..1a10fd070 100644 --- a/src/core/client/client.h +++ b/c/src/core/client/client.h @@ -59,8 +59,9 @@ #define ETH_CHAIN_ID_GOERLI 0x5 /**< chain_id for goerlii */ #define ETH_CHAIN_ID_EVAN 0x4b1 /**< chain_id for evan */ #define ETH_CHAIN_ID_IPFS 0x7d0 /**< chain_id for ipfs */ -#define ETH_CHAIN_ID_VOLTA 0x12046 /**< chain_id for volta */ +#define ETH_CHAIN_ID_BTC 0x99 /**< chain_id for btc */ #define ETH_CHAIN_ID_LOCAL 0xFFFF /**< chain_id for local chain */ +#define DEF_REPL_LATEST_BLK 6 /**< default replace_latest_block */ /** * type for a chain_id. @@ -106,15 +107,13 @@ typedef enum { */ typedef struct in3_request_config { chain_id_t chain_id; /**< the chain to be used. this is holding the integer-value of the hexstring. */ - uint8_t include_code; /**< if true the code needed will always be devlivered. */ + uint_fast8_t flags; /**< the current flags from the client. */ uint8_t use_full_proof; /**< this flaqg is set, if the proof is set to "PROOF_FULL" */ - uint8_t use_binary; /**< this flaqg is set, the client should use binary-format */ bytes_t* verified_hashes; /**< a list of blockhashes already verified. The Server will not send any proof for them again . */ uint16_t verified_hashes_length; /**< number of verified blockhashes*/ - uint16_t latest_block; /**< the last blocknumber the nodelistz changed */ + uint8_t latest_block; /**< the last blocknumber the nodelistz changed */ uint16_t finality; /**< number of signatures( in percent) needed in order to reach finality. */ in3_verification_t verification; /**< Verification-type */ - bytes_t* client_signature; /**< the signature of the client with the client key */ bytes_t* signers; /**< the addresses of servers requested to sign the blockhash */ uint8_t signers_length; /**< number or addresses */ uint32_t time; /**< meassured time in ms for the request */ @@ -128,18 +127,31 @@ typedef struct in3_request_config { typedef uint64_t in3_node_props_t; typedef enum { - NODE_PROP_PROOF = 0x1, /* filter out nodes which are providing no proof */ - NODE_PROP_MULTICHAIN = 0x2, /* filter out nodes other then which have capability of the same RPC endpoint may also accept requests for different chains */ - NODE_PROP_ARCHIVE = 0x4, /* filter out non-archive supporting nodes */ - NODE_PROP_HTTP = 0x8, /* filter out non-http nodes */ - NODE_PROP_BINARY = 0x10, /* filter out nodes that don't support binary encoding */ - NODE_PROP_ONION = 0x20, /* filter out non-onion nodes */ - NODE_PROP_SIGNER = 0x40, /* filter out non-signer nodes */ - NODE_PROP_DATA = 0x80, /* filter out non-data provider nodes */ - NODE_PROP_STATS = 0x100, /* filter out nodes that do not provide stats */ - NODE_PROP_MIN_BLOCK_HEIGHT = 0x400, /* filter out nodes that will sign blocks with lower min block height than specified */ + NODE_PROP_PROOF = 0x1, /**< filter out nodes which are providing no proof */ + NODE_PROP_MULTICHAIN = 0x2, /**< filter out nodes other then which have capability of the same RPC endpoint may also accept requests for different chains */ + NODE_PROP_ARCHIVE = 0x4, /**< filter out non-archive supporting nodes */ + NODE_PROP_HTTP = 0x8, /**< filter out non-http nodes */ + NODE_PROP_BINARY = 0x10, /**< filter out nodes that don't support binary encoding */ + NODE_PROP_ONION = 0x20, /**< filter out non-onion nodes */ + NODE_PROP_SIGNER = 0x40, /**< filter out non-signer nodes */ + NODE_PROP_DATA = 0x80, /**< filter out non-data provider nodes */ + NODE_PROP_STATS = 0x100, /**< filter out nodes that do not provide stats */ + NODE_PROP_MIN_BLOCK_HEIGHT = 0x400, /**< filter out nodes that will sign blocks with lower min block height than specified */ } in3_node_props_type_t; +/** + * a list of flags definiing the behavior of the incubed client. They should be used as bitmask for the flags-property. + */ +typedef enum { + FLAGS_KEEP_IN3 = 0x1, /**< the in3-section with the proof will also returned */ + FLAGS_AUTO_UPDATE_LIST = 0x2, /**< the nodelist will be automaticly updated if the last_block is newer */ + FLAGS_INCLUDE_CODE = 0x4, /**< the code is included when sending eth_call-requests */ + FLAGS_BINARY = 0x8, /**< the client will use binary format */ + FLAGS_HTTP = 0x10, /**< the client will try to use http instead of https */ + FLAGS_STATS = 0x20, /**< nodes will keep track of the stats (default=true) */ + +} in3_flags_type_t; + /** incubed node-configuration. * * These information are read from the Registry contract and stored in this struct representing a server or node. @@ -152,6 +164,7 @@ typedef struct in3_node { in3_node_props_t props; /**< used to identify the capabilities of the node. See in3_node_props_type_t in nodelist.h */ char* url; /**< the url of the node */ bool whitelisted; /**< boolean indicating if node exists in whiteList */ + bool boot_node; /**< internal - used to avoid filtering manually added nodes before first nodeList update */ } in3_node_t; /** @@ -236,9 +249,11 @@ typedef struct in3_chain { uint8_t version; /**< version of the chain */ in3_verified_hash_t* verified_hashes; /**< contains the list of already verified blockhashes */ in3_whitelist_t* whitelist; /**< if set the whitelist of the addresses. */ + uint16_t avg_block_time; /**< average block time (seconds) for this chain (calculated internally) */ struct { address_t node; /**< node that reported the last_block which necessitated a nodeList update */ uint64_t exp_last_block; /**< the last_block when the nodelist last changed reported by this node */ + uint64_t timestamp; /**< approx. time when nodelist must be updated (i.e. when reported last_block will be considered final) */ } * nodelist_upd8_params; } in3_chain_t; @@ -391,8 +406,8 @@ typedef struct in3_t_ { /** the limit of nodes to store in the client. */ uint16_t node_limit; - /** the client key to sign requests */ - bytes_t* key; + /** the client key to sign requests (pointer to 32bytes private key seed) */ + void* key; /** number of max bytes used to cache the code in memory */ uint32_t max_code_cache; @@ -413,7 +428,7 @@ typedef struct in3_t_ { uint64_t min_deposit; /** if specified, the blocknumber *latest* will be replaced by blockNumber- specified value */ - uint16_t replace_latest_block; + uint8_t replace_latest_block; /** the number of signatures in percent required for the request*/ uint16_t finality; @@ -430,9 +445,6 @@ typedef struct in3_t_ { /** servers to filter for the given chain. The chain-id based on EIP-155.*/ chain_id_t chain_id; - /** if true the nodelist will be automaticly updated if the last_block is newer */ - uint8_t auto_update_list; - /** a cache handler offering 2 functions ( setItem(string,string), getItem(string) ) */ in3_storage_handler_t* cache; @@ -442,17 +454,8 @@ typedef struct in3_t_ { /** the transporthandler sending requests */ in3_transport_send transport; - /** includes the code when sending eth_call-requests */ - uint8_t include_code; - - /** if true the client will use binary format*/ - uint8_t use_binary; - - /** if true the client will try to use http instead of https*/ - uint8_t use_http; - - /** if true the in3-section with the proof will also returned*/ - uint8_t keep_in3; + /** a bit mask with flags defining the behavior of the incubed client. See the FLAG...-defines*/ + uint_fast8_t flags; /** chain spec and nodeList definitions*/ in3_chain_t* chains; @@ -631,7 +634,7 @@ in3_chain_t* in3_find_chain( * configures the clent based on a json-config. * * For details about the structure of ther config see https://in3.readthedocs.io/en/develop/api-ts.html#type-in3config - * + * Returns NULL on success, and error string on failure (to be freed by caller) - in which case the client state is undefined */ char* in3_configure( in3_t* c, /**< the incubed client */ diff --git a/src/core/client/client_init.c b/c/src/core/client/client_init.c similarity index 81% rename from src/core/client/client_init.c rename to c/src/core/client/client_init.c index 3d3588d45..c358f2228 100644 --- a/src/core/client/client_init.c +++ b/c/src/core/client/client_init.c @@ -32,6 +32,7 @@ * with this program. If not, see . *******************************************************************************/ +#include "../util/bitset.h" #include "../util/data.h" #include "../util/debug.h" #include "../util/log.h" @@ -42,7 +43,9 @@ #include #include #include +#ifndef __ZEPHYR__ #include +#endif #include #define EXPECT(cond, exit) \ @@ -64,12 +67,14 @@ #define EXPECT_TOK_OBJ(token) EXPECT_TOK(token, d_type(token) == T_OBJECT, "expected object") #define EXPECT_TOK_ADDR(token) EXPECT_TOK(token, d_type(token) == T_BYTES && d_len(token) == 20, "expected address") #define EXPECT_TOK_B256(token) EXPECT_TOK(token, d_type(token) == T_BYTES && d_len(token) == 32, "expected 256 bit data") -#define IS_D_UINT64(token) ((d_type(token) == T_INTEGER || (d_type(token) == T_BYTES && d_len(token) <= 8)) && d_long(token) >= 0 && d_long(token) <= UINT64_MAX) -#define IS_D_UINT32(token) ((d_type(token) == T_INTEGER || d_type(token) == T_BYTES) && d_long(token) >= 0 && d_long(token) <= UINT32_MAX) +#define IS_D_UINT64(token) ((d_type(token) == T_INTEGER || (d_type(token) == T_BYTES && d_len(token) <= 8)) && d_long(token) <= UINT64_MAX) +#define IS_D_UINT32(token) ((d_type(token) == T_INTEGER || d_type(token) == T_BYTES) && d_long(token) <= UINT32_MAX) #define IS_D_UINT16(token) (d_type(token) == T_INTEGER && d_int(token) >= 0 && d_int(token) <= UINT16_MAX) #define IS_D_UINT8(token) (d_type(token) == T_INTEGER && d_int(token) >= 0 && d_int(token) <= UINT8_MAX) +#define EXPECT_TOK_U8(token) EXPECT_TOK(token, IS_D_UINT8(token), "expected uint8 value") #define EXPECT_TOK_U16(token) EXPECT_TOK(token, IS_D_UINT16(token), "expected uint16 value") #define EXPECT_TOK_U32(token) EXPECT_TOK(token, IS_D_UINT32(token), "expected uint32 value") +#define EXPECT_TOK_U64(token) EXPECT_TOK(token, IS_D_UINT64(token), "expected uint64 value") #define EXPECT_TOK_KEY_HEXSTR(token) EXPECT_TOK(token, is_hex_str(d_get_keystr(token->key)), "expected hex str") // set the defaults @@ -103,19 +108,29 @@ static void whitelist_free(in3_whitelist_t* wl) { _free(wl); } +static uint16_t avg_block_time_for_chain_id(chain_id_t id) { + switch (id) { + case ETH_CHAIN_ID_MAINNET: return 15; + case ETH_CHAIN_ID_KOVAN: return 6; + case ETH_CHAIN_ID_GOERLI: return 15; + default: return 5; + } +} + IN3_EXPORT_TEST void initChain(in3_chain_t* chain, chain_id_t chain_id, char* contract, char* registry_id, uint8_t version, int boot_node_count, in3_chain_type_t type, char* wl_contract) { chain->chain_id = chain_id; chain->init_addresses = NULL; chain->last_block = 0; chain->verified_hashes = NULL; chain->contract = hex_to_new_bytes(contract, 40); - chain->nodelist = _malloc(sizeof(in3_node_t) * boot_node_count); + chain->nodelist = _calloc(boot_node_count, sizeof(in3_node_t)); chain->nodelist_length = boot_node_count; - chain->weights = _malloc(sizeof(in3_node_weight_t) * boot_node_count); + chain->weights = _calloc(boot_node_count, sizeof(in3_node_weight_t)); chain->type = type; chain->version = version; chain->whitelist = NULL; chain->nodelist_upd8_params = _calloc(1, sizeof(*(chain->nodelist_upd8_params))); + chain->avg_block_time = avg_block_time_for_chain_id(chain_id); if (wl_contract) { chain->whitelist = _malloc(sizeof(in3_whitelist_t)); chain->whitelist->addresses.data = NULL; @@ -140,7 +155,8 @@ static void initNode(in3_chain_t* chain, int node_index, char* address, char* ur node->index = node_index; node->capacity = 1; node->deposit = 0; - node->props = chain->chain_id == ETH_CHAIN_ID_LOCAL ? 0x0 : 0xFF; + node->props = 0xFF; + node->boot_node = true; node->url = _malloc(strlen(url) + 1); memcpy(node->url, url, strlen(url) + 1); node->whitelisted = false; @@ -164,6 +180,15 @@ static void init_mainnet(in3_chain_t* chain) { initNode(chain, 1, "1fe2e9bf29aa1938859af64c413361227d04059a", "https://in3-v2.slock.it/mainnet/nd-2"); } +static void init_btc(in3_chain_t* chain) { + initChain(chain, 0xFF01, "85613723dB1Bc29f332A37EeF10b61F8a4225c7e", "23d5345c5c13180a8080bd5ddbe7cde64683755dcce6e734d95b7b573845facb", 1, 1, CHAIN_BTC, NULL); + initNode(chain, 0, "8f354b72856e516f1e931c97d1ed3bf1709f38c9", "http://localhost:8500"); + if (chain->nodelist_upd8_params) { + _free(chain->nodelist_upd8_params); + chain->nodelist_upd8_params = NULL; + } +} + static void init_kovan(in3_chain_t* chain) { #ifdef IN3_STAGING // kovan @@ -194,17 +219,14 @@ static void init_goerli(in3_chain_t* chain) { } static in3_ret_t in3_client_init(in3_t* c, chain_id_t chain_id) { - c->auto_update_list = 1; + c->flags = FLAGS_STATS | FLAGS_AUTO_UPDATE_LIST; c->cache = NULL; c->signer = NULL; c->cache_timeout = 0; - c->use_binary = 0; - c->use_http = 0; - c->include_code = 0; c->chain_id = chain_id ? chain_id : ETH_CHAIN_ID_MAINNET; // mainnet c->key = NULL; c->finality = 0; - c->max_attempts = 5; + c->max_attempts = 7; c->max_block_cache = 0; c->max_code_cache = 0; c->max_verified_hashes = 5; @@ -213,7 +235,7 @@ static in3_ret_t in3_client_init(in3_t* c, chain_id_t chain_id) { c->proof = PROOF_STANDARD; c->replace_latest_block = 0; c->request_count = 1; - c->chains_length = chain_id ? 1 : 5; + c->chains_length = chain_id ? 1 : 6; c->chains = _malloc(sizeof(in3_chain_t) * c->chains_length); c->filters = NULL; c->timeout = 10000; @@ -234,6 +256,9 @@ static in3_ret_t in3_client_init(in3_t* c, chain_id_t chain_id) { if (!chain_id || chain_id == ETH_CHAIN_ID_IPFS) init_ipfs(chain++); + if (!chain_id || chain_id == ETH_CHAIN_ID_BTC) + init_btc(chain++); + if (!chain_id || chain_id == ETH_CHAIN_ID_LOCAL) { initChain(chain, 0xFFFF, "f0fb87f4757c77ea3416afe87f36acaa0496c7e9", NULL, 1, 1, CHAIN_ETH, NULL); initNode(chain++, 0, "784bfa9eb182c3a02dbeb5285e3dba92d717e07a", "http://localhost:8545"); @@ -271,6 +296,7 @@ in3_ret_t in3_client_register_chain(in3_t* c, chain_id_t chain_id, in3_chain_typ chain->last_block = 0; chain->nodelist_upd8_params = _calloc(1, sizeof(*(chain->nodelist_upd8_params))); chain->verified_hashes = NULL; + chain->avg_block_time = avg_block_time_for_chain_id(chain_id); c->chains_length++; } else { @@ -341,6 +367,7 @@ in3_ret_t in3_client_add_node(in3_t* c, chain_id_t chain_id, char* url, in3_node weight->total_response_time = 0; return IN3_OK; } + in3_ret_t in3_client_remove_node(in3_t* c, chain_id_t chain_id, address_t address) { in3_chain_t* chain = in3_find_chain(c, chain_id); if (!chain) return IN3_EFIND; @@ -370,6 +397,7 @@ in3_ret_t in3_client_remove_node(in3_t* c, chain_id_t chain_id, address_t addres } return IN3_OK; } + in3_ret_t in3_client_clear_nodes(in3_t* c, chain_id_t chain_id) { in3_chain_t* chain = in3_find_chain(c, chain_id); if (!chain) return IN3_EFIND; @@ -402,15 +430,14 @@ void in3_free(in3_t* a) { _free(a->filters->array); _free(a->filters); } + if (a->key) _free(a->key); _free(a); } in3_t* in3_for_chain(chain_id_t chain_id) { // initialize random with the timestamp (in nanoseconds) as seed - struct timeval te; - gettimeofday(&te, NULL); - _srand(te.tv_sec * 1000000LL + te.tv_usec); + in3_srand(current_ms()); // create new client in3_t* c = _calloc(1, sizeof(in3_t)); @@ -447,7 +474,7 @@ static chain_id_t chain_id(d_token_t* t) { } static inline char* config_err(const char* keyname, const char* err) { - char* s = malloc(strlen(keyname) + strlen(err) + 4); + char* s = _malloc(strlen(keyname) + strlen(err) + 4); if (s) sprintf(s, "%s: %s!", keyname, err); return s; @@ -471,12 +498,12 @@ char* in3_configure(in3_t* c, const char* config) { d_token_t* token = iter.token; if (token->key == key("autoUpdateList")) { EXPECT_TOK_BOOL(token); - c->auto_update_list = d_int(token) ? true : false; + BITMASK_SET_BOOL(c->flags, FLAGS_AUTO_UPDATE_LIST, (d_int(token) ? true : false)); } else if (token->key == key("chainId")) { EXPECT_TOK(token, IS_D_UINT32(token) || (d_type(token) == T_STRING && chain_id(token) != 0), "expected uint32 or string value (mainnet/goerli/kovan)"); c->chain_id = chain_id(token); } else if (token->key == key("signatureCount")) { - EXPECT_TOK(token, IS_D_UINT8(token), "expected uint8 value"); + EXPECT_TOK_U8(token); c->signature_count = (uint8_t) d_int(token); } else if (token->key == key("finality")) { EXPECT_TOK_U16(token); @@ -487,33 +514,42 @@ char* in3_configure(in3_t* c, const char* config) { c->finality = (uint16_t) d_int(token); } else if (token->key == key("includeCode")) { EXPECT_TOK_BOOL(token); - c->include_code = d_int(token) ? true : false; + BITMASK_SET_BOOL(c->flags, FLAGS_INCLUDE_CODE, (d_int(token) ? true : false)); } else if (token->key == key("maxAttempts")) { EXPECT_TOK_U16(token); c->max_attempts = d_int(token); } else if (token->key == key("keepIn3")) { EXPECT_TOK_BOOL(token); - c->keep_in3 = d_int(token) ? true : false; + BITMASK_SET_BOOL(c->flags, FLAGS_KEEP_IN3, (d_int(token) ? true : false)); + } else if (token->key == key("stats")) { + EXPECT_TOK_BOOL(token); + BITMASK_SET_BOOL(c->flags, FLAGS_STATS, (d_int(token) ? true : false)); } else if (token->key == key("useBinary")) { EXPECT_TOK_BOOL(token); - c->use_binary = d_int(token) ? true : false; + BITMASK_SET_BOOL(c->flags, FLAGS_BINARY, (d_int(token) ? true : false)); } else if (token->key == key("useHttp")) { EXPECT_TOK_BOOL(token); - c->use_http = d_int(token) ? true : false; + BITMASK_SET_BOOL(c->flags, FLAGS_HTTP, (d_int(token) ? true : false)); } else if (token->key == key("maxBlockCache")) { EXPECT_TOK_U32(token); c->max_block_cache = d_long(token); } else if (token->key == key("maxCodeCache")) { EXPECT_TOK_U32(token); c->max_code_cache = d_long(token); + } else if (token->key == key("key")) { + EXPECT_TOK_B256(token); + memcpy(c->key = _calloc(32, 1), token->data, token->len); + } else if (token->key == key("maxVerifiedHashes")) { + EXPECT_TOK_U16(token); + c->max_verified_hashes = d_long(token); } else if (token->key == key("timeout")) { EXPECT_TOK_U32(token); c->timeout = d_long(token); } else if (token->key == key("minDeposit")) { - EXPECT_TOK(token, IS_D_UINT64(token), "expected uint64 value"); + EXPECT_TOK_U64(token); c->min_deposit = d_long(token); } else if (token->key == key("nodeProps")) { - EXPECT_TOK(token, IS_D_UINT64(token), "expected uint64 value"); + EXPECT_TOK_U64(token); c->node_props = d_long(token); } else if (token->key == key("nodeLimit")) { EXPECT_TOK_U16(token); @@ -525,10 +561,11 @@ char* in3_configure(in3_t* c, const char* config) { ? PROOF_FULL : (strcmp(d_string(token), "standard") == 0 ? PROOF_STANDARD : PROOF_NONE); } else if (token->key == key("replaceLatestBlock")) { - EXPECT_TOK_U16(token); - c->replace_latest_block = (uint16_t) d_int(token); + EXPECT_TOK_U8(token); + c->replace_latest_block = (uint8_t) d_int(token); + in3_node_props_set(&c->node_props, NODE_PROP_MIN_BLOCK_HEIGHT, d_int(token)); } else if (token->key == key("requestCount")) { - EXPECT_TOK(token, d_type(token) == T_INTEGER && d_int(token) >= 0 && d_int(token) <= UINT8_MAX, "expected uint8 value"); + EXPECT_TOK_U8(token); c->request_count = (uint8_t) d_int(token); } else if (token->key == key("rpc")) { EXPECT_TOK_STR(token); @@ -538,7 +575,7 @@ char* in3_configure(in3_t* c, const char* config) { in3_chain_t* chain = in3_find_chain(c, c->chain_id); in3_node_t* n = &chain->nodelist[0]; if (n->url) _free(n->url); - n->url = malloc(d_len(token) + 1); + n->url = _malloc(d_len(token) + 1); if (!n->url) { res = config_err("in3_configure", "OOM"); goto cleanup; @@ -553,17 +590,19 @@ char* in3_configure(in3_t* c, const char* config) { EXPECT_TOK_KEY_HEXSTR(ct.token); // register chain - chain_id_t chain_id = char_to_long(d_get_keystr(ct.token->key), -1); - bytes_t* contract = d_get_byteskl(ct.token, key("contract"), 20); - bytes_t* registry_id = d_get_byteskl(ct.token, key("registryId"), 32); - bytes_t* wl_contract = d_get_byteskl(ct.token, key("whiteListContract"), 20); - - EXPECT_CFG(contract && registry_id, "invalid contract/registry!"); - EXPECT_CFG((in3_client_register_chain(c, chain_id, CHAIN_ETH, contract->data, registry_id->data, 2, wl_contract ? wl_contract->data : NULL)) == IN3_OK, - "register chain failed"); - - in3_chain_t* chain = in3_find_chain(c, chain_id); - EXPECT_CFG(chain != NULL, "invalid chain id!"); + chain_id_t chain_id = char_to_long(d_get_keystr(ct.token->key), -1); + bytes_t* contract = d_get_byteskl(ct.token, key("contract"), 20); + bytes_t* registry_id = d_get_byteskl(ct.token, key("registryId"), 32); + bytes_t* wl_contract = d_get_byteskl(ct.token, key("whiteListContract"), 20); + in3_chain_t* chain = in3_find_chain(c, chain_id); + + if (!chain) { + EXPECT_CFG(contract && registry_id, "invalid contract/registry!"); + EXPECT_CFG((in3_client_register_chain(c, chain_id, chain ? chain->type : CHAIN_ETH, contract ? contract->data : chain->contract->data, registry_id ? registry_id->data : chain->registry_id, 2, wl_contract ? wl_contract->data : NULL)) == IN3_OK, + "register chain failed"); + chain = in3_find_chain(c, chain_id); + EXPECT_CFG(chain != NULL, "invalid chain id!"); + } // chain_props bool has_wlc = false, has_man_wl = false; @@ -605,7 +644,28 @@ char* in3_configure(in3_t* c, const char* config) { memcpy(chain->registry_id, data.data, 32); } else if (cp.token->key == key("needsUpdate")) { EXPECT_TOK_BOOL(cp.token); - chain->nodelist_upd8_params = d_int(cp.token) ? _calloc(1, sizeof(*(chain->nodelist_upd8_params))) : NULL; + if (!d_int(cp.token)) { + if (chain->nodelist_upd8_params) { + _free(chain->nodelist_upd8_params); + chain->nodelist_upd8_params = NULL; + } + } else if (!chain->nodelist_upd8_params) + chain->nodelist_upd8_params = _calloc(1, sizeof(*(chain->nodelist_upd8_params))); + } else if (cp.token->key == key("avgBlockTime")) { + EXPECT_TOK_U16(cp.token); + chain->avg_block_time = (uint16_t) d_int(cp.token); + } else if (cp.token->key == key("verifiedHashes")) { + EXPECT_TOK_ARR(cp.token); + EXPECT_TOK(cp.token, (unsigned) d_len(cp.token) <= c->max_verified_hashes, "expected array len <= maxVerifiedHashes"); + _free(chain->verified_hashes); + chain->verified_hashes = _calloc(c->max_verified_hashes, sizeof(in3_verified_hash_t)); + int i = 0; + for (d_iterator_t n = d_iter(cp.token); n.left; d_iter_next(&n), i++) { + EXPECT_TOK_U64(d_get(n.token, key("block"))); + EXPECT_TOK_B256(d_get(n.token, key("hash"))); + chain->verified_hashes[i].block_number = d_get_longk(n.token, key("block")); + memcpy(chain->verified_hashes[i].hash, d_get_byteskl(n.token, key("hash"), 32)->data, 32); + } } else if (cp.token->key == key("nodeList")) { EXPECT_TOK_ARR(cp.token); if (in3_client_clear_nodes(c, chain_id) < 0) goto cleanup; @@ -618,6 +678,8 @@ char* in3_configure(in3_t* c, const char* config) { d_get_byteskl(n.token, key("address"), 20)->data) == IN3_OK, "add node failed"); } + } else { + EXPECT_TOK(cp.token, false, "unsupported config option!"); } } in3_client_run_chain_whitelisting(chain); @@ -627,6 +689,13 @@ char* in3_configure(in3_t* c, const char* config) { } } + if (c->signature_count && c->chain_id != ETH_CHAIN_ID_LOCAL && !c->replace_latest_block) { + in3_log_warn("signatureCount > 0 without replaceLatestBlock is bound to fail; using default (" STR(DEF_REPL_LATEST_BLK) ")\n"); + c->replace_latest_block = DEF_REPL_LATEST_BLK; + } + + EXPECT_CFG(in3_find_chain(c, c->chain_id), "chain corresponding to chain id not initialized!"); + cleanup: json_free(cnf); return res; diff --git a/src/core/client/context.c b/c/src/core/client/context.c similarity index 100% rename from src/core/client/context.c rename to c/src/core/client/context.c diff --git a/src/core/client/context.h b/c/src/core/client/context.h similarity index 98% rename from src/core/client/context.h rename to c/src/core/client/context.h index be8a0cdd1..1712c3ca0 100644 --- a/src/core/client/context.h +++ b/c/src/core/client/context.h @@ -407,4 +407,13 @@ in3_ctx_t* in3_client_rpc_ctx( char* params /**< [in] params as string. */ ); +/** + * handles a failable context + * + * This context *MUST* be freed with ctx_free(ctx) after usage to release the resources. +*/ +in3_ret_t ctx_handle_failable( + in3_ctx_t* ctx /**< [in] the current request context. */ +); + #endif diff --git a/src/core/client/execute.c b/c/src/core/client/execute.c similarity index 80% rename from src/core/client/execute.c rename to c/src/core/client/execute.c index f3d72c066..bc94728c5 100644 --- a/src/core/client/execute.c +++ b/c/src/core/client/execute.c @@ -32,6 +32,9 @@ * with this program. If not, see . *******************************************************************************/ +#include "../../third-party/crypto/ecdsa.h" +#include "../../third-party/crypto/secp256k1.h" +#include "../../third-party/crypto/sha3.h" #include "../util/data.h" #include "../util/log.h" #include "../util/mem.h" @@ -46,9 +49,8 @@ #include #include #include -//static char* ctx_name(in3_ctx_t* ctx) { -// return d_get_stringk(ctx->requests[0], K_METHOD); -//} + +#define WAIT_TIME_CAP 3600 static void response_free(in3_ctx_t* ctx) { if (ctx->nodes) { @@ -111,7 +113,7 @@ static in3_ret_t configure_request(in3_ctx_t* ctx, in3_request_config_t* conf, d conf->chain_id = c->chain_id; conf->finality = c->finality; conf->latest_block = c->replace_latest_block; - conf->use_binary = c->use_binary; + conf->flags = c->flags; if ((c->proof == PROOF_STANDARD || c->proof == PROOF_FULL)) { conf->use_full_proof = c->proof == PROOF_FULL; @@ -169,42 +171,70 @@ static void free_urls(char** urls, int len, bool free_items) { _free(urls); } +static int add_bytes_to_hash(struct SHA3_CTX* msg_hash, void* data, int len) { + if (msg_hash) sha3_Update(msg_hash, data, len); + return len; +} + +static void add_token_to_hash(struct SHA3_CTX* msg_hash, d_token_t* t) { + switch (d_type(t)) { + case T_ARRAY: + case T_OBJECT: + for (d_iterator_t iter = d_iter(t); iter.left; d_iter_next(&iter)) + add_token_to_hash(msg_hash, iter.token); + return; + case T_NULL: + return; + + default: { + bytes_t b = d_to_bytes(t); + sha3_Update(msg_hash, b.data, b.len); + } + } +} + static in3_ret_t ctx_create_payload(in3_ctx_t* c, sb_t* sb, bool multichain) { static unsigned long rpc_id_counter = 1; char temp[100]; + struct SHA3_CTX* msg_hash = c->client->key ? alloca(sizeof(struct SHA3_CTX)) : NULL; + // sha3_Update(&ctx, data->data, data->len); + // keccak_Final(&ctx, dst); + sb_add_char(sb, '['); for (int i = 0; i < c->len; i++) { d_token_t *request_token = c->requests[i], *t; + if (msg_hash) sha3_256_Init(msg_hash); if (i > 0) sb_add_char(sb, ','); sb_add_char(sb, '{'); if ((t = d_get(request_token, K_ID)) == NULL) - sb_add_key_value(sb, "id", temp, sprintf(temp, "%lu", rpc_id_counter++), false); + sb_add_key_value(sb, "id", temp, add_bytes_to_hash(msg_hash, temp, sprintf(temp, "%lu", rpc_id_counter++)), false); else if (d_type(t) == T_INTEGER) - sb_add_key_value(sb, "id", temp, sprintf(temp, "%i", d_int(t)), false); + sb_add_key_value(sb, "id", temp, add_bytes_to_hash(msg_hash, temp, sprintf(temp, "%i", d_int(t))), false); else - sb_add_key_value(sb, "id", d_string(t), d_len(t), true); + sb_add_key_value(sb, "id", d_string(t), add_bytes_to_hash(msg_hash, d_string(t), d_len(t)), true); sb_add_char(sb, ','); sb_add_key_value(sb, "jsonrpc", "2.0", 3, true); sb_add_char(sb, ','); if ((t = d_get(request_token, K_METHOD)) == NULL) return ctx_set_error(c, "missing method-property in request", IN3_EINVAL); else - sb_add_key_value(sb, "method", d_string(t), d_len(t), true); + sb_add_key_value(sb, "method", d_string(t), add_bytes_to_hash(msg_hash, d_string(t), d_len(t)), true); sb_add_char(sb, ','); if ((t = d_get(request_token, K_PARAMS)) == NULL) sb_add_key_value(sb, "params", "[]", 2, false); else { //TODO this only works with JSON!!!! const str_range_t ps = d_to_json(t); + if (msg_hash) add_token_to_hash(msg_hash, t); sb_add_key_value(sb, "params", ps.data, ps.len, false); } in3_request_config_t* rc = c->requests_configs + i; - if (rc->verification == VERIFICATION_PROOF) { + if (rc->verification == VERIFICATION_PROOF || msg_hash) { // add in3 - sb_add_range(sb, temp, 0, sprintf(temp, ",\"in3\":{\"verification\":\"proof\",\"version\": \"%s\"", IN3_PROTO_VER)); + sb_add_range(sb, temp, 0, sprintf(temp, ",\"in3\":{\"verification\":\"%s\",\"version\": \"%s\"", rc->verification == VERIFICATION_NEVER ? "never" : "proof", IN3_PROTO_VER)); if (multichain) sb_add_range(sb, temp, 0, sprintf(temp, ",\"chainId\":\"0x%x\"", (unsigned int) rc->chain_id)); const in3_chain_t* chain = in3_find_chain(c->client, c->requests_configs->chain_id ? c->requests_configs->chain_id : c->client->chain_id); @@ -212,19 +242,27 @@ static in3_ret_t ctx_create_payload(in3_ctx_t* c, sb_t* sb, bool multichain) { const bytes_t adr = bytes(chain->whitelist->contract, 20); sb_add_bytes(sb, ",\"whiteListContract\":", &adr, 1, false); } - if (rc->client_signature) - sb_add_bytes(sb, ",\"clientSignature\":", rc->client_signature, 1, false); + if (msg_hash) { + uint8_t sig[65], hash[32]; + bytes_t sig_bytes = bytes(sig, 65); + keccak_Final(msg_hash, hash); + if (ecdsa_sign_digest(&secp256k1, c->client->key, hash, sig, sig + 64, NULL) < 0) + return ctx_set_error(c, "could not sign the request", IN3_EINVAL); + sb_add_bytes(sb, ",\"sig\":", &sig_bytes, 1, false); + } if (rc->finality) sb_add_range(sb, temp, 0, sprintf(temp, ",\"finality\":%i", rc->finality)); if (rc->latest_block) sb_add_range(sb, temp, 0, sprintf(temp, ",\"latestBlock\":%i", rc->latest_block)); if (rc->signers_length) sb_add_bytes(sb, ",\"signers\":", rc->signers, rc->signers_length, true); - if (rc->include_code && strcmp(d_get_stringk(request_token, K_METHOD), "eth_call") == 0) + if ((rc->flags & FLAGS_INCLUDE_CODE) && strcmp(d_get_stringk(request_token, K_METHOD), "eth_call") == 0) sb_add_chars(sb, ",\"includeCode\":true"); if (rc->use_full_proof) sb_add_chars(sb, ",\"useFullProof\":true"); - if (rc->use_binary) + if ((rc->flags & FLAGS_STATS) == 0) + sb_add_chars(sb, ",\"noStats\":true"); + if ((rc->flags & FLAGS_BINARY)) sb_add_chars(sb, ",\"useBinary\":true"); if (rc->verified_hashes_length) sb_add_bytes(sb, ",\"verifiedHashes\":", rc->verified_hashes, rc->verified_hashes_length, true); @@ -235,6 +273,13 @@ static in3_ret_t ctx_create_payload(in3_ctx_t* c, sb_t* sb, bool multichain) { sb_add_char(sb, ']'); return IN3_OK; } +static void update_nodelist_cache(in3_ctx_t* ctx) { + // we don't update weights for local chains. + if (!ctx->client->cache || ctx->client->chain_id == ETH_CHAIN_ID_LOCAL) return; + chain_id_t chain_id = ctx->requests_configs[0].chain_id; + if (!chain_id) chain_id = ctx->client->chain_id; + in3_cache_store_nodelist(ctx, in3_find_chain(ctx->client, chain_id)); +} static in3_ret_t ctx_parse_response(in3_ctx_t* ctx, char* response_data, int len) { @@ -242,7 +287,7 @@ static in3_ret_t ctx_parse_response(in3_ctx_t* ctx, char* response_data, int len ctx->response_context = (response_data[0] == '{' || response_data[0] == '[') ? parse_json(response_data) : parse_binary_str(response_data, len); d_track_keynames(0); if (!ctx->response_context) - return ctx_set_error(ctx, "Error parsing the JSON-response!", IN3_EINVALDT); + return ctx_set_error(ctx, "Error in JSON-response : ", ctx_set_error(ctx, str_remove_html(response_data), IN3_EINVALDT)); if (d_type(ctx->response_context->result) == T_OBJECT) { // it is a single result @@ -266,20 +311,43 @@ static in3_ret_t ctx_parse_response(in3_ctx_t* ctx, char* response_data, int len static void blacklist_node(node_match_t* node_weight) { if (node_weight && node_weight->weight) { // blacklist the node - node_weight->weight->blacklisted_until = _time() + 3600; + node_weight->weight->blacklisted_until = in3_time(NULL) + 3600; node_weight->weight = NULL; // setting the weight to NULL means we reject the response. in3_log_info("Blacklisting node for empty response: %s\n", node_weight->node->url); } } +static uint16_t update_waittime(uint64_t nodelist_block, uint64_t current_blk, uint8_t repl_latest, uint16_t avg_blktime) { + if (nodelist_block > current_blk) + // misbehaving node, so allow to update right away and it'll get blacklisted due to the exp_last_block mechanism + return 0; + + uint64_t diff = current_blk - nodelist_block; + if (diff >= repl_latest) + return 0; + // we need to cap wait time as we might end up waiting for too long for chains with higher block time + return min((repl_latest - diff) * avg_blktime, WAIT_TIME_CAP); +} + static void check_autoupdate(const in3_ctx_t* ctx, in3_chain_t* chain, d_token_t* response_in3, node_match_t* node) { - if (!ctx->client->auto_update_list) return; + if ((ctx->client->flags & FLAGS_AUTO_UPDATE_LIST) == 0) return; + + if (d_get_longk(response_in3, K_LAST_NODE_LIST) > d_get_longk(response_in3, K_CURRENT_BLOCK)) { + // this shouldn't be possible, so we ignore this lastNodeList and do NOT try to update the nodeList + return; + } if (d_get_longk(response_in3, K_LAST_NODE_LIST) > chain->last_block) { if (chain->nodelist_upd8_params == NULL) chain->nodelist_upd8_params = _malloc(sizeof(*(chain->nodelist_upd8_params))); + + // overwrite old params since we have a newer nodelist update now memcpy(chain->nodelist_upd8_params->node, node->node->address->data, node->node->address->len); chain->nodelist_upd8_params->exp_last_block = d_get_longk(response_in3, K_LAST_NODE_LIST); + chain->nodelist_upd8_params->timestamp = in3_time(NULL) + update_waittime(d_get_longk(response_in3, K_LAST_NODE_LIST), + d_get_longk(response_in3, K_CURRENT_BLOCK), + ctx->client->replace_latest_block, + chain->avg_block_time); } if (chain->whitelist && d_get_longk(response_in3, K_LAST_WHITE_LIST) > chain->whitelist->last_block) @@ -328,10 +396,7 @@ static in3_ret_t find_valid_result(in3_ctx_t* ctx, int nodes_count, in3_response vc.config = ctx->requests_configs + i; if ((vc.proof = d_get(ctx->responses[i], K_IN3))) { - // vc.proof is temporary set to the in3-section. It will be updated to real proof in the next lines. - check_autoupdate(ctx, chain, vc.proof, node); - vc.last_validator_change = d_get_longk(vc.proof, K_LAST_VALIDATOR_CHANGE); vc.currentBlock = d_get_longk(vc.proof, K_CURRENT_BLOCK); vc.proof = d_get(vc.proof, K_PROOF); @@ -363,6 +428,10 @@ static in3_ret_t find_valid_result(in3_ctx_t* ctx, int nodes_count, in3_response } } + // check auto update opts only if this node wasn't blacklisted (due to wrong result/proof) + if (!is_blacklisted(node) && d_get(ctx->responses[0], K_IN3)) + check_autoupdate(ctx, chain, d_get(ctx->responses[0], K_IN3), node); + // !node_weight is valid, because it means this is a internaly handled response if (!node || !is_blacklisted(node)) return IN3_OK; // this reponse was successfully verified, so let us keep it. @@ -403,7 +472,7 @@ in3_request_t* in3_create_request(in3_ctx_t* ctx) { if (in3_node_props_get(node->node->props, NODE_PROP_MULTICHAIN)) multichain = true; // cif we use_http, we need to malloc a new string, so we also need to free it later! - if (ctx->client->use_http) urls[n] = convert_to_http_url(urls[n]); + if (ctx->client->flags & FLAGS_HTTP) urls[n] = convert_to_http_url(urls[n]); node = node->next; } @@ -414,7 +483,7 @@ in3_request_t* in3_create_request(in3_ctx_t* ctx) { if (res < 0) { // we clean up sb_free(payload); - free_urls(urls, nodes_count, ctx->client->use_http); + free_urls(urls, nodes_count, ctx->client->flags & FLAGS_HTTP); // since we cannot return an error, we set the error in the context and return NULL, indicating the error. ctx_set_error(ctx, "could not generate the payload", res); return NULL; @@ -445,7 +514,7 @@ in3_request_t* in3_create_request(in3_ctx_t* ctx) { void request_free(in3_request_t* req, const in3_ctx_t* ctx, bool free_response) { // free resources - free_urls(req->urls, req->urls_len, ctx->client->use_http); + free_urls(req->urls, req->urls_len, ctx->client->flags & FLAGS_HTTP); if (req->times) { for (int i = 0; i < req->urls_len; i++) @@ -465,6 +534,29 @@ void request_free(in3_request_t* req, const in3_ctx_t* ctx, bool free_response) _free(req); } +static bool ctx_is_allowed_to_fail(in3_ctx_t* ctx) { + return ctx_is_method(ctx, "in3_nodeList"); +} + +in3_ret_t ctx_handle_failable(in3_ctx_t* ctx) { + ctx_remove_required(ctx, ctx->required); + + // blacklist node that gave us an error response for nodelist (if not first update) + // and clear nodelist params + in3_chain_t* chain = in3_find_chain(ctx->client, ctx->client->chain_id); + + if (nodelist_not_first_upd8(chain)) + blacklist_node_addr(chain, chain->nodelist_upd8_params->node, 3600); + _free(chain->nodelist_upd8_params); + chain->nodelist_upd8_params = NULL; + + // if first update return error otherwise return IN3_OK, this is because first update is + // always from a boot node which is presumed to be trusted + if (nodelist_first_upd8(chain)) + return ctx_set_error(ctx, ctx->required->error ? ctx->required->error : "error handling subrequest", IN3_ERPC); + return IN3_OK; +} + in3_ret_t in3_send_ctx(in3_ctx_t* ctx) { int retry_count = 0; in3_ret_t res; @@ -480,7 +572,10 @@ in3_ret_t in3_send_ctx(in3_ctx_t* ctx) { // handle subcontexts first while (ctx->required && in3_ctx_state(ctx->required) != CTX_SUCCESS) { - if ((res = in3_send_ctx(ctx->required)) != IN3_OK) + res = in3_send_ctx(ctx->required); + if (res == IN3_EIGNORE) + ctx_handle_failable(ctx); + else if (res != IN3_OK) return ctx_set_error(ctx, ctx->required->error ? ctx->required->error : "error handling subrequest", res); // recheck in order to prepare the request. @@ -533,8 +628,7 @@ in3_ctx_t* ctx_find_required(const in3_ctx_t* parent, const char* search_method) in3_ctx_t* sub_ctx = parent->required; while (sub_ctx) { if (!sub_ctx->requests) continue; - const char* required_method = d_get_stringk(sub_ctx->requests[0], K_METHOD); - if (required_method && strcmp(required_method, search_method) == 0) return sub_ctx; + if (ctx_is_method(sub_ctx, search_method)) return sub_ctx; sub_ctx = sub_ctx->required; } return NULL; @@ -548,7 +642,7 @@ in3_ret_t ctx_add_required(in3_ctx_t* parent, in3_ctx_t* ctx) { } in3_ret_t ctx_remove_required(in3_ctx_t* parent, in3_ctx_t* ctx) { - + if (!ctx) return IN3_OK; in3_ctx_t* p = parent; while (p) { if (p->required == ctx) { @@ -611,7 +705,7 @@ in3_ret_t in3_ctx_execute(in3_ctx_t* ctx) { if (!ctx->raw_response && !ctx->nodes) { in3_node_filter_t filter = NODE_FILTER_INIT; filter.nodes = d_get(d_get(ctx->requests[0], K_IN3), key("data_nodes")); - filter.props = (ctx->client->node_props & 0xFFFFFFFF) | NODE_PROP_DATA | (ctx->client->use_http ? NODE_PROP_HTTP : 0) | (ctx->client->proof != PROOF_NONE ? NODE_PROP_PROOF : 0); + filter.props = (ctx->client->node_props & 0xFFFFFFFF) | NODE_PROP_DATA | ((ctx->client->flags & FLAGS_HTTP) ? NODE_PROP_HTTP : 0) | (ctx->client->proof != PROOF_NONE ? NODE_PROP_PROOF : 0); if ((ret = in3_node_list_pick_nodes(ctx, &ctx->nodes, ctx->client->request_count, filter)) == IN3_OK) { for (int i = 0; i < ctx->len; i++) { if ((ret = configure_request(ctx, ctx->requests_configs + i, ctx->requests[i], chain)) < 0) @@ -629,6 +723,9 @@ in3_ret_t in3_ctx_execute(in3_ctx_t* ctx) { // verify responses and return the node with the correct result. ret = find_valid_result(ctx, ctx->nodes == NULL ? 1 : ctx_nodes_len(ctx->nodes), ctx->raw_response, chain, verifier); + // update weights in the cache + update_nodelist_cache(ctx); + // we wait or are have successfully verified the response if (ret == IN3_WAITING || ret == IN3_OK) return ret; @@ -646,9 +743,14 @@ in3_ret_t in3_ctx_execute(in3_ctx_t* ctx) { ctx->error = NULL; // now try again, which should end in waiting for the next request. return in3_ctx_execute(ctx); - } else + } else { + if (ctx_is_allowed_to_fail(ctx)) { + ret = IN3_EIGNORE; + ctx->verification_state = IN3_EIGNORE; + } // we give up return ctx->error ? (ret ? ret : IN3_ERPC) : ctx_set_error(ctx, "reaching max_attempts and giving up", IN3_ELIMIT); + } } case CT_SIGN: { diff --git a/src/core/client/keys.h b/c/src/core/client/keys.h similarity index 100% rename from src/core/client/keys.h rename to c/src/core/client/keys.h diff --git a/src/core/client/nodelist.c b/c/src/core/client/nodelist.c similarity index 83% rename from src/core/client/nodelist.c rename to c/src/core/client/nodelist.c index 5d6af7544..11ddb7b35 100644 --- a/src/core/client/nodelist.c +++ b/c/src/core/client/nodelist.c @@ -46,7 +46,8 @@ #include #include -#define DAY 24 * 2600 +#define DAY 24 * 3600 +#define DIFFTIME(t1, t0) (double) (t1 > t0 ? t1 - t0 : 0) static void free_nodeList(in3_node_t* nodelist, int count) { // clean chain.. @@ -57,10 +58,21 @@ static void free_nodeList(in3_node_t* nodelist, int count) { _free(nodelist); } +static bool postpone_update(const in3_chain_t* chain) { + if (chain->nodelist_upd8_params && chain->nodelist_upd8_params->timestamp) + if (DIFFTIME(chain->nodelist_upd8_params->timestamp, in3_time(NULL)) > 0) + return true; + return false; +} + +static inline bool nodelist_exp_last_block_neq(in3_chain_t* chain, uint64_t exp_last_block) { + return (chain->nodelist_upd8_params != NULL && chain->nodelist_upd8_params->exp_last_block != exp_last_block); +} + static in3_ret_t fill_chain(in3_chain_t* chain, in3_ctx_t* ctx, d_token_t* result) { in3_ret_t res = IN3_OK; - _time_t _now = _time(); // TODO here we might get a -1 or a unsuable number if the device does not know the current timestamp. - const uint64_t now = (uint64_t) max(0, _now); + uint64_t _now = in3_time(NULL); // TODO here we might get a -1 or a unsuable number if the device does not know the current timestamp. + const uint64_t now = (uint64_t) _now; // read the nodes d_token_t *nodes = d_get(result, K_NODES), *t; @@ -100,6 +112,7 @@ static in3_ret_t fill_chain(in3_chain_t* chain, in3_ctx_t* ctx, d_token_t* resul n->props = d_get_longkd(node, K_PROPS, 65535); n->url = d_get_stringk(node, K_URL); n->address = d_get_byteskl(node, K_ADDRESS, 20); + n->boot_node = false; // nodes are considered boot nodes only until first nodeList update succeeds const uint64_t register_time = d_get_longk(node, K_REGISTER_TIME); if (n->address) @@ -198,52 +211,57 @@ static in3_ret_t update_nodelist(in3_t* c, in3_chain_t* chain, in3_ctx_t* parent // is there a useable required ctx? in3_ctx_t* ctx = ctx_find_required(parent_ctx, "in3_nodeList"); - if (ctx) + if (ctx) { + if (in3_ctx_state(ctx) == CTX_ERROR || (in3_ctx_state(ctx) == CTX_SUCCESS && !d_get(ctx->responses[0], K_RESULT))) { + // blacklist node that gave us an error response for nodelist (if not first update) + // and clear nodelist params + if (nodelist_not_first_upd8(chain)) + blacklist_node_addr(chain, chain->nodelist_upd8_params->node, 3600); + _free(chain->nodelist_upd8_params); + chain->nodelist_upd8_params = NULL; + + // if first update return error otherwise return IN3_OK, this is because first update is + // always from a boot node which is presumed to be trusted + return nodelist_first_upd8(chain) + ? ctx_set_error(parent_ctx, "Error updating node_list", ctx_set_error(parent_ctx, ctx->error, IN3_ERPC)) + : IN3_OK; + } + switch (in3_ctx_state(ctx)) { - case CTX_ERROR: - return ctx_set_error(parent_ctx, "Error updating node_list", ctx_set_error(parent_ctx, ctx->error, IN3_ERPC)); + case CTX_ERROR: return IN3_OK; /* already handled before*/ case CTX_WAITING_FOR_REQUIRED_CTX: case CTX_WAITING_FOR_RESPONSE: return IN3_WAITING; case CTX_SUCCESS: { - d_token_t* r = d_get(ctx->responses[0], K_RESULT); - if (r) { - // we have a result.... - if (chain->nodelist_upd8_params != NULL) { - // if the `lastBlockNumber` != `exp_last_block`, we can be certain that `chain->nodelist_upd8_params->node` lied to us - // about the nodelist update, so we blacklist it for an hour - // Note `exp_last_block` == 0 means this is the first nodelist update - if (chain->nodelist_upd8_params->exp_last_block && d_get_longk(r, K_LAST_BLOCK_NUMBER) != chain->nodelist_upd8_params->exp_last_block) { - for (int i = 0; i < chain->nodelist_length; ++i) - if (!memcmp(chain->nodelist[i].address->data, chain->nodelist_upd8_params->node, chain->nodelist[i].address->len)) - chain->weights[i].blacklisted_until = _time() + 3600000; - } - _free(chain->nodelist_upd8_params); - chain->nodelist_upd8_params = NULL; - } - - const in3_ret_t res = fill_chain(chain, ctx, r); - if (res < 0) - return ctx_set_error(parent_ctx, "Error updating node_list", ctx_set_error(parent_ctx, ctx->error, res)); - else if (c->cache) - in3_cache_store_nodelist(ctx, chain); - ctx_remove_required(parent_ctx, ctx); - in3_client_run_chain_whitelisting(chain); - return IN3_OK; - } else - return ctx_set_error(parent_ctx, "Error updating node_list", ctx_check_response_error(ctx, 0)); + // if the `lastBlockNumber` != `exp_last_block`, we can be certain that `chain->nodelist_upd8_params->node` lied to us + // about the nodelist update, so we blacklist it for an hour + if (nodelist_exp_last_block_neq(chain, d_get_longk(r, K_LAST_BLOCK_NUMBER))) + blacklist_node_addr(chain, chain->nodelist_upd8_params->node, 3600); + _free(chain->nodelist_upd8_params); + chain->nodelist_upd8_params = NULL; + + const in3_ret_t res = fill_chain(chain, ctx, r); + if (res < 0) + return ctx_set_error(parent_ctx, "Error updating node_list", ctx_set_error(parent_ctx, ctx->error, res)); + else if (c->cache) + in3_cache_store_nodelist(ctx, chain); + ctx_remove_required(parent_ctx, ctx); + in3_client_run_chain_whitelisting(chain); + return IN3_OK; } } + } in3_log_debug("update the nodelist...\n"); // create random seed - char seed[67]; - sprintf(seed, "0x%08x%08x%08x%08x%08x%08x%08x%08x", _rand(), _rand(), _rand(), _rand(), _rand(), _rand(), _rand(), _rand()); + char seed[67] = {'0', 'x'}; + for (int i = 0, j = 2; i < 8; ++i, j += 8) + sprintf(seed + j, "%08x", in3_rand(NULL) % 0xFFFFFFFF); sb_t* in3_sec = sb_new("{"); - if (chain->nodelist_upd8_params && chain->nodelist_upd8_params->exp_last_block) { + if (nodelist_not_first_upd8(chain)) { bytes_t addr_ = (bytes_t){.data = chain->nodelist_upd8_params->node, .len = 20}; sb_add_bytes(in3_sec, "\"data_nodes\":", &addr_, 1, true); } @@ -310,6 +328,10 @@ void in3_ctx_free_nodes(node_match_t* node) { in3_ret_t update_nodes(in3_t* c, in3_chain_t* chain) { in3_ctx_t ctx; memset(&ctx, 0, sizeof(ctx)); + if (chain->nodelist_upd8_params) { + _free(chain->nodelist_upd8_params); + chain->nodelist_upd8_params = NULL; + } in3_ret_t ret = update_nodelist(c, chain, &ctx); if (ret == IN3_WAITING && ctx.required) { @@ -320,27 +342,22 @@ in3_ret_t update_nodes(in3_t* c, in3_chain_t* chain) { return ret; } -#if defined(TEST) || defined(FILTER_NODES) - -IN3_EXPORT_TEST bool -in3_node_props_match(const in3_node_props_t np_config, const in3_node_props_t np) { +IN3_EXPORT_TEST bool in3_node_props_match(const in3_node_props_t np_config, const in3_node_props_t np) { if (((np_config & np) & 0xFFFFFFFF) != (np_config & 0XFFFFFFFF)) return false; uint32_t min_blk_ht_conf = in3_node_props_get(np_config, NODE_PROP_MIN_BLOCK_HEIGHT); uint32_t min_blk_ht = in3_node_props_get(np, NODE_PROP_MIN_BLOCK_HEIGHT); - return (min_blk_ht >= min_blk_ht_conf); + return min_blk_ht_conf ? (min_blk_ht <= min_blk_ht_conf) : true; } -#endif - uint32_t in3_node_calculate_weight(in3_node_weight_t* n, uint32_t capa) { const uint32_t avg = n->response_count > 4 ? (n->total_response_time / n->response_count) - : (10000 / (capa + 100)); + : (10000 / (max(capa, 100) + 100)); return 0xFFFF / avg; } node_match_t* in3_node_list_fill_weight(in3_t* c, chain_id_t chain_id, in3_node_t* all_nodes, in3_node_weight_t* weights, - int len, _time_t now, uint32_t* total_weight, int* total_found, + int len, uint64_t now, uint32_t* total_weight, int* total_found, in3_node_filter_t filter) { int found = 0; @@ -355,17 +372,12 @@ node_match_t* in3_node_list_fill_weight(in3_t* c, chain_id_t chain_id, in3_node_ if (!chain) return NULL; for (int i = 0; i < len; i++) { - nodeDef = all_nodes + i; + nodeDef = all_nodes + i; + weightDef = weights + i; + if (nodeDef->boot_node) goto SKIP_FILTERING; if (chain->whitelist && !nodeDef->whitelisted) continue; if (nodeDef->deposit < c->min_deposit) continue; - -#ifdef FILTER_NODES - // fixme: this compile time check will be redundant once the registry contract is deployed with correct node prop values if (!in3_node_props_match(filter.props, nodeDef->props)) continue; -#else - UNUSED_VAR(filter); -#endif - if (filter.nodes != NULL) { bool in_filter_nodes = false; for (d_iterator_t it = d_iter(filter.nodes); it.left; d_iter_next(&it)) { @@ -377,9 +389,9 @@ node_match_t* in3_node_list_fill_weight(in3_t* c, chain_id_t chain_id, in3_node_ if (!in_filter_nodes) continue; } - - weightDef = weights + i; if (weightDef->blacklisted_until > (uint64_t) now) continue; + + SKIP_FILTERING: current = _malloc(sizeof(node_match_t)); if (!current) { // TODO clean up memory @@ -401,9 +413,13 @@ node_match_t* in3_node_list_fill_weight(in3_t* c, chain_id_t chain_id, in3_node_ return first; } -bool update_in_progress(const in3_ctx_t* ctx) { +bool ctx_is_method(const in3_ctx_t* ctx, const char* method) { const char* required_method = d_get_stringk(ctx->requests[0], K_METHOD); - return (required_method && strcmp(required_method, "in3_nodeList") == 0); + return (required_method && strcmp(required_method, method) == 0); +} + +static bool update_in_progress(const in3_ctx_t* ctx) { + return ctx_is_method(ctx, "in3_nodeList"); } in3_ret_t in3_node_list_get(in3_ctx_t* ctx, chain_id_t chain_id, bool update, in3_node_t** nodelist, int* nodelist_length, in3_node_weight_t** weights) { @@ -417,13 +433,9 @@ in3_ret_t in3_node_list_get(in3_ctx_t* ctx, chain_id_t chain_id, bool update, in // do we need to update the nodelist? if (chain->nodelist_upd8_params || update || ctx_find_required(ctx, "in3_nodeList")) { - // if this is the first nodelist update, we clear the chain->nodelist_upd8_params here - if (chain->nodelist_upd8_params && !chain->nodelist_upd8_params->exp_last_block) { - _free(chain->nodelist_upd8_params); - chain->nodelist_upd8_params = NULL; - } else if (update_in_progress(ctx)) { + // skip update if update has been postponed or there's already one in progress + if (postpone_update(chain) || update_in_progress(ctx)) goto SKIP_UPDATE; - } // now update the nodeList res = update_nodelist(ctx->client, chain, ctx); @@ -451,7 +463,7 @@ in3_ret_t in3_node_list_get(in3_ctx_t* ctx, chain_id_t chain_id, bool update, in in3_ret_t in3_node_list_pick_nodes(in3_ctx_t* ctx, node_match_t** nodes, int request_count, in3_node_filter_t filter) { // get all nodes from the nodelist - _time_t now = _time(); + uint64_t now = in3_time(NULL); in3_node_t* all_nodes = NULL; in3_node_weight_t* weights = NULL; uint32_t total_weight; @@ -500,7 +512,7 @@ in3_ret_t in3_node_list_pick_nodes(in3_ctx_t* ctx, node_match_t** nodes, int req // we want ot make sure this loop is run only max 10xthe number of requested nodes for (int i = 0; added < filled_len && i < filled_len * 10; i++) { // pick a random number - r = _rand() % total_weight; + r = in3_rand(NULL) % total_weight; // find the first node matching it. current = found; diff --git a/src/core/client/nodelist.h b/c/src/core/client/nodelist.h similarity index 80% rename from src/core/client/nodelist.h rename to c/src/core/client/nodelist.h index 0f47d44a4..1dfe02cf6 100644 --- a/src/core/client/nodelist.h +++ b/c/src/core/client/nodelist.h @@ -68,7 +68,7 @@ in3_ret_t in3_node_list_get(in3_ctx_t* ctx, chain_id_t chain_id, bool update, in /** * filters and fills the weights on a returned linked list. */ -node_match_t* in3_node_list_fill_weight(in3_t* c, chain_id_t chain_id, in3_node_t* all_nodes, in3_node_weight_t* weights, int len, _time_t now, uint32_t* total_weight, int* total_found, in3_node_filter_t filter); +node_match_t* in3_node_list_fill_weight(in3_t* c, chain_id_t chain_id, in3_node_t* all_nodes, in3_node_weight_t* weights, int len, uint64_t now, uint32_t* total_weight, int* total_found, in3_node_filter_t filter); /** * calculates the weight for a node. @@ -86,5 +86,20 @@ in3_ret_t update_nodes(in3_t* c, in3_chain_t* chain); // weights void in3_ctx_free_nodes(node_match_t* c); int ctx_nodes_len(node_match_t* root); +bool ctx_is_method(const in3_ctx_t* ctx, const char* method); + +static inline bool nodelist_first_upd8(const in3_chain_t* chain) { + return (chain->nodelist_upd8_params != NULL && chain->nodelist_upd8_params->exp_last_block == 0); +} + +static inline bool nodelist_not_first_upd8(const in3_chain_t* chain) { + return (chain->nodelist_upd8_params != NULL && chain->nodelist_upd8_params->exp_last_block != 0); +} + +static inline void blacklist_node_addr(const in3_chain_t* chain, const address_t node_addr, uint64_t secs_from_now) { + for (int i = 0; i < chain->nodelist_length; ++i) + if (!memcmp(chain->nodelist[i].address->data, node_addr, chain->nodelist[i].address->len)) + chain->weights[i].blacklisted_until = in3_time(NULL) + secs_from_now; +} #endif diff --git a/src/core/client/verifier.c b/c/src/core/client/verifier.c similarity index 100% rename from src/core/client/verifier.c rename to c/src/core/client/verifier.c diff --git a/src/core/client/verifier.h b/c/src/core/client/verifier.h similarity index 100% rename from src/core/client/verifier.h rename to c/src/core/client/verifier.h diff --git a/src/core/client/version.h b/c/src/core/client/version.h similarity index 97% rename from src/core/client/version.h rename to c/src/core/client/version.h index 4f280cf8a..0905ef6f6 100644 --- a/src/core/client/version.h +++ b/c/src/core/client/version.h @@ -46,5 +46,8 @@ //#define IN3_VERSION_PATCH 1 #define IN3_VERSION_NUM IN3_VERSION_BITS(IN3_VERSION_MAJOR, IN3_VERSION_MINOR, IN3_VERSION_PATCH) +#ifndef IN3_VERSION +#define IN3_VERSION "local" +#endif #endif //IN3_VERSION_H diff --git a/src/core/util/bitset.c b/c/src/core/util/bitset.c similarity index 100% rename from src/core/util/bitset.c rename to c/src/core/util/bitset.c diff --git a/src/core/util/bitset.h b/c/src/core/util/bitset.h similarity index 97% rename from src/core/util/bitset.h rename to c/src/core/util/bitset.h index f1557621f..86c88d110 100644 --- a/src/core/util/bitset.h +++ b/c/src/core/util/bitset.h @@ -63,6 +63,8 @@ typedef uint32_t uintbs_t; #define BITMASK_FLIP(_x_, _y_) ((_x_) ^= (_y_)) #define BITMASK_CHECK_ALL(_x_, _y_) (((_x_) & (_y_)) == (_y_)) #define BITMASK_CHECK_ANY(_x_, _y_) ((_x_) & (_y_)) +#define BITMASK_SET_BOOL(_x_, _y_, _v_) \ + if ((((_x_) & (_y_)) != 0) != (_v_)) ((_x_) ^= (_y_)) #define BITS_MSB(x, b) ((x) >> (b)) #define BITS_LSB(x, b) ((x) << (b)) diff --git a/src/core/util/bytes.c b/c/src/core/util/bytes.c similarity index 100% rename from src/core/util/bytes.c rename to c/src/core/util/bytes.c diff --git a/src/core/util/bytes.h b/c/src/core/util/bytes.h similarity index 100% rename from src/core/util/bytes.h rename to c/src/core/util/bytes.h diff --git a/src/core/util/data.c b/c/src/core/util/data.c similarity index 96% rename from src/core/util/data.c rename to c/src/core/util/data.c index 0681ad9b1..5971f8ee0 100644 --- a/src/core/util/data.c +++ b/c/src/core/util/data.c @@ -288,13 +288,25 @@ uint64_t d_longd(const d_token_t* item, const uint64_t def_val) { else if (d_type(item) == T_BYTES) return bytes_to_long(item->data, item->len); else if (d_type(item) == T_STRING) - return strtoull((char*) item->data, NULL, 10); + return _strtoull((char*) item->data, NULL, 10); return def_val; } bool d_eq(const d_token_t* a, const d_token_t* b) { if (a == NULL || b == NULL) return false; if (a->len != b->len) return false; + if (d_type(a) == T_ARRAY) { + for (d_iterator_t ia = d_iter((d_token_t*) a), ib = d_iter((d_token_t*) b); ia.left; d_iter_next(&ia), d_iter_next(&ib)) { + if (!d_eq(ia.token, ib.token)) return false; + } + return true; + } + if (d_type(a) == T_OBJECT) { + for (d_iterator_t ia = d_iter((d_token_t*) a); ia.left; d_iter_next(&ia)) { + if (!d_eq(ia.token, d_get((d_token_t*) b, ia.token->key))) return false; + } + return true; + } return (a->data && b->data) ? b_cmp(d_bytes(a), d_bytes(b)) : a->data == NULL && b->data == NULL; @@ -429,16 +441,17 @@ int parse_number(json_ctx_t* jp, d_token_t* item) { } int parse_string(json_ctx_t* jp, d_token_t* item) { - const char* start = jp->c; - size_t l, i; - int n; + char* start = jp->c; + size_t l, i; + int n; while (true) { switch (*(jp->c++)) { case 0: return -2; + case '\'': case '"': l = jp->c - start - 1; - if (l > 1 && *start == '0' && start[1] == 'x') { + if (l > 1 && *start == '0' && start[1] == 'x' && *(start - 1) != '\'') { // this is a hex-value if (l == 2) { // empty byte array @@ -462,6 +475,11 @@ int parse_string(json_ctx_t* jp, d_token_t* item) { item->data = _malloc(1); *item->data = hexchar_to_int(start[4]) << 4 | hexchar_to_int(start[5]); } else { + if (*(start - 1) == '\'') { + // this is a escape-sequence which forces this to handled as string + // here we do change or fix the input string because this would be an invalid string otherwise. + *(jp->c - 1) = (*(start - 1) = '"'); + } item->len = l | T_STRING << 28; item->data = _malloc(l + 1); memcpy(item->data, start, l); @@ -529,6 +547,7 @@ int parse_object(json_ctx_t* jp, int parent, uint32_t key) { } } case '"': + case '\'': return parse_string(jp, parsed_next_item(jp, T_STRING, key, parent)); case 't': if (strncmp(jp->c, "rue", 3) == 0) { @@ -751,6 +770,8 @@ static int read_token(json_ctx_t* jp, const uint8_t* d, size_t* p) { if (type == T_BOOLEAN && len > 1) { uint32_t idx = len - 2; if (jp->len < idx) return -1; + // if not bytes or string, it's an error + if (d_type(jp->result + idx) >= T_ARRAY) return -1; memcpy(next_item(jp, type, len), jp->result + idx, sizeof(d_token_t)); return 0; } diff --git a/src/core/util/data.h b/c/src/core/util/data.h similarity index 100% rename from src/core/util/data.h rename to c/src/core/util/data.h diff --git a/src/core/util/debug.c b/c/src/core/util/debug.c similarity index 98% rename from src/core/util/debug.c rename to c/src/core/util/debug.c index 67be9d9bb..d975ed037 100644 --- a/src/core/util/debug.c +++ b/c/src/core/util/debug.c @@ -96,6 +96,7 @@ char* in3_errmsg(in3_ret_t err /**< the error code */) { case IN3_ETRANS: return "transport error"; case IN3_ERANGE: return "out of range"; case IN3_WAITING: return "waiting for data"; + case IN3_EIGNORE: return "ignoreable error"; } return NULL; #else diff --git a/src/core/util/debug.h b/c/src/core/util/debug.h similarity index 100% rename from src/core/util/debug.h rename to c/src/core/util/debug.h diff --git a/src/core/util/error.h b/c/src/core/util/error.h similarity index 98% rename from src/core/util/error.h rename to c/src/core/util/error.h index 94f2d3ad7..3c7e8a64c 100644 --- a/src/core/util/error.h +++ b/c/src/core/util/error.h @@ -67,6 +67,7 @@ typedef enum { IN3_ETRANS = -14, /**< Transport error */ IN3_ERANGE = -15, /**< Not in range */ IN3_WAITING = -16, /**< the process can not be finished since we are waiting for responses */ + IN3_EIGNORE = -17, /**< Ignorable error */ } in3_ret_t; /** Optional type similar to C++ std::optional diff --git a/src/core/util/log.c b/c/src/core/util/log.c old mode 100755 new mode 100644 similarity index 86% rename from src/core/util/log.c rename to c/src/core/util/log.c index 0e175f247..bd6cc5133 --- a/src/core/util/log.c +++ b/c/src/core/util/log.c @@ -25,7 +25,9 @@ #include #include #include - +#ifdef __ZEPHYR__ +#include +#endif #include "log.h" #include "mem.h" @@ -107,6 +109,7 @@ void in3_log_(in3_log_level_t level, const char* file, const char* function, int /* Log to stderr */ if (!L.quiet) { +#ifndef __ZEPHYR__ va_list args; char buf[16]; _localtime(buf); @@ -130,6 +133,27 @@ void in3_log_(in3_log_level_t level, const char* file, const char* function, int vfprintf(stderr, fmt, args); va_end(args); fflush(stderr); +#else + va_list args; + char buf[16]; + _localtime(buf); + if (L.prefix == NULL) { +#ifdef LOG_USE_COLOR + printk( + "%s %s%-5s\x1b[0m \x1b[90m%s:%s:%d:\x1b[0m ", + buf, level_colors[level], level_names[level], file, function, line); +#else + printk("%s %-5s %s:%s:%d: ", buf, level_names[level], file, function, line); +#endif + } else { + printk("%s", L.prefix); + } + va_start(args, fmt); + vprintk(fmt, args); + va_end(args); + fflush(stderr); +#endif + //fflush(stderr); } /* Log to file */ diff --git a/src/core/util/log.h b/c/src/core/util/log.h similarity index 100% rename from src/core/util/log.h rename to c/src/core/util/log.h diff --git a/src/core/util/mem.c b/c/src/core/util/mem.c similarity index 94% rename from src/core/util/mem.c rename to c/src/core/util/mem.c index e56c3784f..a14620115 100644 --- a/src/core/util/mem.c +++ b/c/src/core/util/mem.c @@ -36,23 +36,7 @@ #include "debug.h" #include "log.h" #include - #ifdef __ZEPHYR__ -// FIXME: Below hack is until af529d1 is merged -// See https://github.com/zephyrproject-rtos/zephyr/commit/af529d1158c9c85f41a5c15fabf1b3a83bfd9ac2 -#define EXIT_SUCCESS 0 -#define EXIT_FAILURE 1 - -static void exit(int status) { - UNUSED_VAR(status); - printk("in3 exit\n"); - fflush(stdout); -#ifdef IN3_EXIT_SYSTEMRESET - NVIC_SystemReset(); -#endif - while (1) {} -} - void* k_realloc(void* ptr, size_t size, size_t oldsize) { void* new = NULL; @@ -268,4 +252,5 @@ void mem_reset(int cnt) { */ mem_tracker = NULL; } + #endif /* TEST */ diff --git a/src/core/util/mem.h b/c/src/core/util/mem.h similarity index 95% rename from src/core/util/mem.h rename to c/src/core/util/mem.h index dcee3aedd..334b81314 100644 --- a/src/core/util/mem.h +++ b/c/src/core/util/mem.h @@ -43,8 +43,10 @@ #if defined(_MSC_VER) || defined(__MINGW32__) #include // alloca #else +#ifndef __ZEPHYR__ #include // alloca #endif +#endif #ifdef _MSC_VER #define _NOINLINE_ __declspec(noinline) @@ -58,11 +60,7 @@ #ifdef __ZEPHYR__ #include -#define _time() k_uptime_get() -#define _time_t uint64_t #define _atol(p) atoi(p) -#define _srand(p) ; -#define _rand() (uint32_t) k_uptime_get() #define _localtime(b__) \ do { \ sprintf(b__, "%" PRId32, k_uptime_get_32()); \ @@ -71,11 +69,7 @@ do { \ } while (0) // FIXME: Fix for zephyr #else /* __ZEPHYR__ */ -#define _time() time(0) -#define _time_t time_t #define _atol(p) atol(p) -#define _srand(p) srand(p) -#define _rand() (uint32_t) rand() #define _localtime(b__) \ do { \ time_t t = time(NULL); \ diff --git a/src/core/util/scache.c b/c/src/core/util/scache.c similarity index 100% rename from src/core/util/scache.c rename to c/src/core/util/scache.c diff --git a/src/core/util/scache.h b/c/src/core/util/scache.h similarity index 100% rename from src/core/util/scache.h rename to c/src/core/util/scache.h diff --git a/src/core/util/stringbuilder.c b/c/src/core/util/stringbuilder.c similarity index 100% rename from src/core/util/stringbuilder.c rename to c/src/core/util/stringbuilder.c diff --git a/include/in3/stringbuilder.h b/c/src/core/util/stringbuilder.h similarity index 79% rename from include/in3/stringbuilder.h rename to c/src/core/util/stringbuilder.h index b81634844..96c18a410 100644 --- a/include/in3/stringbuilder.h +++ b/c/src/core/util/stringbuilder.h @@ -64,11 +64,11 @@ sb_t* sb_new(const char* chars); /**< creates a new stringbuilder and copies the sb_t* sb_init(sb_t* sb); /**< initializes a stringbuilder by allocating memory. */ void sb_free(sb_t* sb); /**< frees all resources of the stringbuilder */ -sb_t* sb_add_char(sb_t* sb, char c); /**< add a single character */ -sb_t* sb_add_chars(sb_t* sb, const char* chars); /**< adds a string */ -sb_t* sb_add_range(sb_t* sb, const char* chars, int start, int len); /**< add a string range */ -sb_t* sb_add_key_value(sb_t* sb, const char* key, const char* value, int value_len, bool as_string); /**< adds a value with an optional key. if as_string is true the value will be quoted. */ -sb_t* sb_add_bytes(sb_t* sb, const char* prefix, const bytes_t* bytes, int len, bool as_array); /**< add bytes as 0x-prefixed hexcoded string (including an optional prefix), if len>1 is passed bytes maybe an array ( if as_array==true) */ -sb_t* sb_add_hexuint_l(sb_t* sb, uintmax_t uint, size_t l); /**< add a integer value as hexcoded, 0x-prefixed string*/ +sb_t* sb_add_char(sb_t* sb, char c); /**< add a single character */ +sb_t* sb_add_chars(sb_t* sb, const char* chars); /**< adds a string */ +sb_t* sb_add_range(sb_t* sb, const char* chars, int start, int len); /**< add a string range */ +sb_t* sb_add_key_value(sb_t* sb, const char* key, const char* value, int value_len, bool as_string); /**< adds a value with an optional key. if as_string is true the value will be quoted. */ +sb_t* sb_add_bytes(sb_t* sb, const char* prefix, const bytes_t* bytes, int len, bool as_array); /**< add bytes as 0x-prefixed hexcoded string (including an optional prefix), if len>1 is passed bytes maybe an array ( if as_array==true) */ +sb_t* sb_add_hexuint_l(sb_t* sb, uintmax_t uint, size_t l); /**< add a integer value as hexcoded, 0x-prefixed string*/ #endif diff --git a/src/core/util/utils.c b/c/src/core/util/utils.c similarity index 74% rename from src/core/util/utils.c rename to c/src/core/util/utils.c index 8ae791e3e..d496b6a9a 100644 --- a/src/core/util/utils.c +++ b/c/src/core/util/utils.c @@ -32,6 +32,7 @@ * with this program. If not, see . *******************************************************************************/ +#include "utils.h" #include "../../third-party/crypto/sha3.h" #include "bytes.h" #include "debug.h" @@ -39,9 +40,45 @@ #include #include #include +#ifndef __ZEPHYR__ #include +#else +#include +#endif + +#ifdef __ZEPHYR__ +static uint64_t time_zephyr(void* t) { + UNUSED_VAR(t); + return k_uptime_get(); +} +static int rand_zephyr(void* s) { + UNUSED_VAR(s); + return (int) k_uptime_get(); +} +static void srand_zephyr(unsigned int s) { + return; +} +static time_func in3_time_fn = time_zephyr; +static rand_func in3_rand_fn = rand_zephyr; +static srand_func in3_srand_fn = srand_zephyr; +#else /* __ZEPHYR__ */ +static uint64_t time_libc(void* t) { + UNUSED_VAR(t); + return time(t); +} +static int rand_libc(void* s) { + UNUSED_VAR(s); + return rand(); +} +static void srand_libc(unsigned int s) { + return srand(s); +} +static time_func in3_time_fn = time_libc; +static rand_func in3_rand_fn = rand_libc; +static srand_func in3_srand_fn = srand_libc; +#endif /* __ZEPHYR__ */ -void uint256_set(uint8_t* src, wlen_t src_len, uint8_t dst[32]) { +void uint256_set(const uint8_t* src, wlen_t src_len, bytes32_t dst) { if (src_len < 32) memset(dst, 0, 32 - src_len); memcpy(dst + 32 - src_len, src, src_len); } @@ -74,7 +111,7 @@ uint8_t hexchar_to_int(char c) { } #ifdef __ZEPHYR__ -const char* u64tostr(uint64_t value, char* buffer, int buffer_len) { +const char* u64_to_str(uint64_t value, char* buffer, int buffer_len) { // buffer has to be at least 21 bytes (max u64 val = 18446744073709551615 has 20 digits + '\0') if (buffer_len < 21) return ""; @@ -89,7 +126,7 @@ const char* u64tostr(uint64_t value, char* buffer, int buffer_len) { } #endif -int hex_to_bytes(char* buf, int len, uint8_t* out, int outbuf_size) { +int hex_to_bytes(const char* buf, int len, uint8_t* out, int outbuf_size) { if (len == -1) { len = strlen(buf); if (len >= 2 && *buf == '0' && buf[1] == 'x') { @@ -113,7 +150,7 @@ int hex_to_bytes(char* buf, int len, uint8_t* out, int outbuf_size) { return out_len; } -bytes_t* hex_to_new_bytes(char* buf, int len) { +bytes_t* hex_to_new_bytes(const char* buf, int len) { int bytes_len = (len & 1) ? (len + 1) / 2 : len / 2; uint8_t* b = _malloc(bytes_len); @@ -124,7 +161,7 @@ bytes_t* hex_to_new_bytes(char* buf, int len) { return bytes; } -int bytes_to_hex(uint8_t* buffer, int len, char* out) { +int bytes_to_hex(const uint8_t* buffer, int len, char* out) { const char hex[] = "0123456789abcdef"; int i = 0, j = 0; while (j < len) { @@ -145,7 +182,7 @@ int sha3_to(bytes_t* data, void* dst) { return 0; } -bytes_t* sha3(bytes_t* data) { +bytes_t* sha3(const bytes_t* data) { bytes_t* out = NULL; struct SHA3_CTX ctx; @@ -187,7 +224,7 @@ uint64_t char_to_long(const char* a, int l) { return -1; } -char* _strdupn(char* src, int len) { +char* _strdupn(const char* src, int len) { if (len < 0) len = strlen(src); char* dst = _malloc(len + 1); strncpy(dst, src, len); @@ -202,7 +239,7 @@ int min_bytes_len(uint64_t val) { return 8; } -char* str_replace(char* orig, char* rep, char* with) { +char* str_replace(char* orig, const char* rep, const char* with) { char* result; char* ins; char* tmp; @@ -225,7 +262,7 @@ char* str_replace(char* orig, char* rep, char* with) { ins = tmp + len_rep; } - tmp = result = malloc(strlen(orig) + (len_with - len_rep) * count + 1); + tmp = result = _malloc(strlen(orig) + (len_with - len_rep) * count + 1); if (!result) return NULL; @@ -270,8 +307,46 @@ char* str_find(char* haystack, const char* needle) { return NULL; } +char* str_remove_html(char* data) { + int len = strlen(data), i = 0, dst = 0, html = 0; + for (; i < len; i++) { + switch (data[i]) { + case '<': + html = true; + break; + case '>': + html = false; + break; + case '\n': + case '\t': + case '\r': + case ' ': + if (dst && data[dst - 1] != ' ') + data[dst++] = ' '; + break; + + default: + if (!html) + data[dst++] = data[i]; + } + } + data[dst] = 0; + return data; +} + uint64_t current_ms() { +#ifndef __ZEPHYR__ struct timeval te; gettimeofday(&te, NULL); return te.tv_sec * 1000L + te.tv_usec / 1000; -} \ No newline at end of file +#else + return 1000L; +#endif +} + +void in3_set_func_time(time_func fn) { in3_time_fn = fn; } +uint64_t in3_time(void* t) { return in3_time_fn(t); } +void in3_set_func_rand(rand_func fn) { in3_rand_fn = fn; } +int in3_rand(void* s) { return in3_rand_fn(s); } +void in3_set_func_srand(srand_func fn) { in3_srand_fn = fn; } +void in3_srand(unsigned int s) { return in3_srand_fn(s); } diff --git a/src/core/util/utils.h b/c/src/core/util/utils.h similarity index 74% rename from src/core/util/utils.h rename to c/src/core/util/utils.h index 532e2273c..442115942 100644 --- a/src/core/util/utils.h +++ b/c/src/core/util/utils.h @@ -43,6 +43,12 @@ #include "bytes.h" #include +#ifdef __ZEPHYR__ +#include +#define _strtoull(str, endptr, base) strtoul(str, endptr, base) +#else +#define _strtoull(str, endptr, base) strtoull(str, endptr, base) +#endif /** simple swap macro for integral types */ #define SWAP(a, b) \ { \ @@ -64,12 +70,21 @@ */ #define IS_APPROX(n1, n2, err) ((n1 > n2) ? ((n1 - n2) <= err) : ((n2 - n1) <= err)) +/** + * simple macro to stringify other macro defs + * eg. usage - to concatenate a const with a string at compile time -> + * #define SOME_CONST_UINT 10U + * printf("Using default value of " STR(SOME_CONST_UINT)); + */ +#define STR_IMPL_(x) #x +#define STR(x) STR_IMPL_(x) + /** converts the bytes to a unsigned long (at least the last max len bytes) */ uint64_t bytes_to_long(const uint8_t* data, int len); /** converts the bytes to a unsigned int (at least the last max len bytes) */ static inline uint32_t bytes_to_int(const uint8_t* data, int len) { - if (data){ + if (data) { switch (len) { case 0: return 0; case 1: return data[0]; @@ -77,8 +92,8 @@ static inline uint32_t bytes_to_int(const uint8_t* data, int len) { case 3: return (((uint32_t) data[0]) << 16) | (((uint32_t) data[1]) << 8) | data[2]; default: return (((uint32_t) data[0]) << 24) | (((uint32_t) data[1]) << 16) | (((uint32_t) data[2]) << 8) | data[3]; } - } - else return 0; + } else + return 0; } /** converts a character into a uint64_t*/ uint64_t char_to_long(const char* a, int l); @@ -87,7 +102,7 @@ uint64_t char_to_long(const char* a, int l); uint8_t hexchar_to_int(char c); /** converts a uint64_t to string (char*); buffer-size min. 21 bytes */ -const unsigned char* u64_to_str(uint64_t value, char* pBuf, int szBuf); +const char* u64_to_str(uint64_t value, char* pBuf, int szBuf); /** * convert a c hex string to a byte array storing it into an existing buffer. @@ -133,17 +148,22 @@ void uint256_set(const uint8_t* src, wlen_t src_len, bytes32_t dst); * replaces a string and returns a copy. * @retval */ -char* str_replace(const char* orig, const char* rep, const char* with); +char* str_replace(char* orig, const char* rep, const char* with); /** * replaces a string at the given position. */ -char* str_replace_pos(const char* orig, size_t pos, size_t len, const char* rep); +char* str_replace_pos(char* orig, size_t pos, size_t len, const char* rep); /** * lightweight strstr() replacements */ -char* str_find(const char* haystack, const char* needle); +char* str_find(char* haystack, const char* needle); + +/** + * remove all html-tags in the text. + */ +char* str_remove_html(char* data); /** * current timestamp in ms. @@ -197,4 +217,49 @@ static inline bool memiszero(uint8_t* ptr, size_t l) { return !l; } +/** + * Pluggable functions: + * Mechanism to replace library functions with custom alternatives. This is particularly useful for + * embedded systems which have their own time or rand functions. + * + * eg. + * // define function with specified signature + * uint64_t my_time(void* t) { + * // ... + * } + * + * // then call in3_set_func_*() + * int main() { + * in3_set_func_time(my_time); + * // Henceforth, all library calls will use my_time() instead of the platform default time function + * } + */ + +/** + * time function + * defaults to k_uptime_get() for zeohyr and time(NULL) for other platforms + * expected to return a u64 value representative of time (from epoch/start) + */ +typedef uint64_t (*time_func)(void* t); +void in3_set_func_time(time_func fn); +uint64_t in3_time(void* t); + +/** + * rand function + * defaults to k_uptime_get() for zeohyr and rand() for other platforms + * expected to return a random number + */ +typedef int (*rand_func)(void* s); +void in3_set_func_rand(rand_func fn); +int in3_rand(void* s); + +/** + * srand function + * defaults to NOOP for zephyr and srand() for other platforms + * expected to set the seed for a new sequence of random numbers to be returned by in3_rand() + */ +typedef void (*srand_func)(unsigned int s); +void in3_set_func_srand(srand_func fn); +void in3_srand(unsigned int s); + #endif diff --git a/src/third-party/CMakeLists.txt b/c/src/third-party/CMakeLists.txt similarity index 97% rename from src/third-party/CMakeLists.txt rename to c/src/third-party/CMakeLists.txt index c5d693974..5b09ab947 100644 --- a/src/third-party/CMakeLists.txt +++ b/c/src/third-party/CMakeLists.txt @@ -40,4 +40,8 @@ endif() if (USE_SEGGER_RTT) add_subdirectory( segger_rtt ) -endif() \ No newline at end of file +endif() + +if (IPFS) + add_subdirectory( libb64 ) +endif() diff --git a/src/third-party/crypto/CMakeLists.txt b/c/src/third-party/crypto/CMakeLists.txt similarity index 100% rename from src/third-party/crypto/CMakeLists.txt rename to c/src/third-party/crypto/CMakeLists.txt diff --git a/c/src/third-party/crypto/LICENSE b/c/src/third-party/crypto/LICENSE new file mode 100644 index 000000000..1ea1df703 --- /dev/null +++ b/c/src/third-party/crypto/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2013 Tomas Dzetkulic +Copyright (c) 2013 Pavol Rusnak + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/c/src/third-party/crypto/README b/c/src/third-party/crypto/README new file mode 100644 index 000000000..87a851030 --- /dev/null +++ b/c/src/third-party/crypto/README @@ -0,0 +1,5 @@ +- version: 1.1.0 +- website: https://github.com/trezor/trezor-firmware/tree/master/crypto +- notes: + - files mostly imported on an as-needed basis + - base58.c:35 we need to include zephyr header file for it to enable alloca.h header diff --git a/src/third-party/crypto/address.c b/c/src/third-party/crypto/address.c similarity index 100% rename from src/third-party/crypto/address.c rename to c/src/third-party/crypto/address.c diff --git a/src/third-party/crypto/address.h b/c/src/third-party/crypto/address.h similarity index 100% rename from src/third-party/crypto/address.h rename to c/src/third-party/crypto/address.h diff --git a/src/third-party/crypto/aes/aes.h b/c/src/third-party/crypto/aes/aes.h similarity index 100% rename from src/third-party/crypto/aes/aes.h rename to c/src/third-party/crypto/aes/aes.h diff --git a/src/third-party/crypto/aes/aes_modes.c b/c/src/third-party/crypto/aes/aes_modes.c similarity index 100% rename from src/third-party/crypto/aes/aes_modes.c rename to c/src/third-party/crypto/aes/aes_modes.c diff --git a/src/third-party/crypto/aes/aescrypt.c b/c/src/third-party/crypto/aes/aescrypt.c similarity index 100% rename from src/third-party/crypto/aes/aescrypt.c rename to c/src/third-party/crypto/aes/aescrypt.c diff --git a/src/third-party/crypto/aes/aeskey.c b/c/src/third-party/crypto/aes/aeskey.c similarity index 100% rename from src/third-party/crypto/aes/aeskey.c rename to c/src/third-party/crypto/aes/aeskey.c diff --git a/src/third-party/crypto/aes/aesopt.h b/c/src/third-party/crypto/aes/aesopt.h similarity index 100% rename from src/third-party/crypto/aes/aesopt.h rename to c/src/third-party/crypto/aes/aesopt.h diff --git a/src/third-party/crypto/aes/aestab.c b/c/src/third-party/crypto/aes/aestab.c similarity index 100% rename from src/third-party/crypto/aes/aestab.c rename to c/src/third-party/crypto/aes/aestab.c diff --git a/src/third-party/crypto/aes/aestab.h b/c/src/third-party/crypto/aes/aestab.h similarity index 100% rename from src/third-party/crypto/aes/aestab.h rename to c/src/third-party/crypto/aes/aestab.h diff --git a/src/third-party/crypto/aes/aestst.c b/c/src/third-party/crypto/aes/aestst.c similarity index 100% rename from src/third-party/crypto/aes/aestst.c rename to c/src/third-party/crypto/aes/aestst.c diff --git a/src/third-party/crypto/aes/aestst.h b/c/src/third-party/crypto/aes/aestst.h similarity index 100% rename from src/third-party/crypto/aes/aestst.h rename to c/src/third-party/crypto/aes/aestst.h diff --git a/src/third-party/crypto/base32.h b/c/src/third-party/crypto/base32.h similarity index 100% rename from src/third-party/crypto/base32.h rename to c/src/third-party/crypto/base32.h diff --git a/src/third-party/crypto/base58.c b/c/src/third-party/crypto/base58.c similarity index 98% rename from src/third-party/crypto/base58.c rename to c/src/third-party/crypto/base58.c index b794eb402..8b119880d 100644 --- a/src/third-party/crypto/base58.c +++ b/c/src/third-party/crypto/base58.c @@ -31,8 +31,14 @@ #if defined(_MSC_VER) || defined(__MINGW32__) #include // alloca #else -#include // alloca +#ifdef __ZEPHYR__ +#include // alloca +#else +#include +#endif + #endif + const char b58digits_ordered[] = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; const int8_t b58digits_map[] = { -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, diff --git a/src/third-party/crypto/base58.h b/c/src/third-party/crypto/base58.h similarity index 100% rename from src/third-party/crypto/base58.h rename to c/src/third-party/crypto/base58.h diff --git a/src/third-party/crypto/bignum.c b/c/src/third-party/crypto/bignum.c similarity index 100% rename from src/third-party/crypto/bignum.c rename to c/src/third-party/crypto/bignum.c diff --git a/src/third-party/crypto/bignum.h b/c/src/third-party/crypto/bignum.h similarity index 100% rename from src/third-party/crypto/bignum.h rename to c/src/third-party/crypto/bignum.h diff --git a/src/third-party/crypto/bip32.h b/c/src/third-party/crypto/bip32.h similarity index 100% rename from src/third-party/crypto/bip32.h rename to c/src/third-party/crypto/bip32.h diff --git a/src/third-party/crypto/blake256.c b/c/src/third-party/crypto/blake256.c similarity index 100% rename from src/third-party/crypto/blake256.c rename to c/src/third-party/crypto/blake256.c diff --git a/src/third-party/crypto/blake256.h b/c/src/third-party/crypto/blake256.h similarity index 100% rename from src/third-party/crypto/blake256.h rename to c/src/third-party/crypto/blake256.h diff --git a/src/third-party/crypto/blake2_common.h b/c/src/third-party/crypto/blake2_common.h similarity index 100% rename from src/third-party/crypto/blake2_common.h rename to c/src/third-party/crypto/blake2_common.h diff --git a/src/third-party/crypto/blake2b.c b/c/src/third-party/crypto/blake2b.c similarity index 100% rename from src/third-party/crypto/blake2b.c rename to c/src/third-party/crypto/blake2b.c diff --git a/src/third-party/crypto/blake2b.h b/c/src/third-party/crypto/blake2b.h similarity index 100% rename from src/third-party/crypto/blake2b.h rename to c/src/third-party/crypto/blake2b.h diff --git a/src/third-party/crypto/ecdsa.c b/c/src/third-party/crypto/ecdsa.c similarity index 100% rename from src/third-party/crypto/ecdsa.c rename to c/src/third-party/crypto/ecdsa.c diff --git a/src/third-party/crypto/ecdsa.h b/c/src/third-party/crypto/ecdsa.h similarity index 100% rename from src/third-party/crypto/ecdsa.h rename to c/src/third-party/crypto/ecdsa.h diff --git a/src/third-party/crypto/ed25519-donna/ed25519.h b/c/src/third-party/crypto/ed25519-donna/ed25519.h similarity index 100% rename from src/third-party/crypto/ed25519-donna/ed25519.h rename to c/src/third-party/crypto/ed25519-donna/ed25519.h diff --git a/src/third-party/crypto/groestl.c b/c/src/third-party/crypto/groestl.c similarity index 100% rename from src/third-party/crypto/groestl.c rename to c/src/third-party/crypto/groestl.c diff --git a/src/third-party/crypto/groestl.h b/c/src/third-party/crypto/groestl.h similarity index 100% rename from src/third-party/crypto/groestl.h rename to c/src/third-party/crypto/groestl.h diff --git a/src/third-party/crypto/groestl_internal.h b/c/src/third-party/crypto/groestl_internal.h similarity index 100% rename from src/third-party/crypto/groestl_internal.h rename to c/src/third-party/crypto/groestl_internal.h diff --git a/src/third-party/crypto/hasher.c b/c/src/third-party/crypto/hasher.c similarity index 100% rename from src/third-party/crypto/hasher.c rename to c/src/third-party/crypto/hasher.c diff --git a/src/third-party/crypto/hasher.h b/c/src/third-party/crypto/hasher.h similarity index 100% rename from src/third-party/crypto/hasher.h rename to c/src/third-party/crypto/hasher.h diff --git a/src/third-party/crypto/hmac.c b/c/src/third-party/crypto/hmac.c similarity index 100% rename from src/third-party/crypto/hmac.c rename to c/src/third-party/crypto/hmac.c diff --git a/src/third-party/crypto/hmac.h b/c/src/third-party/crypto/hmac.h similarity index 100% rename from src/third-party/crypto/hmac.h rename to c/src/third-party/crypto/hmac.h diff --git a/src/third-party/crypto/memzero.c b/c/src/third-party/crypto/memzero.c similarity index 100% rename from src/third-party/crypto/memzero.c rename to c/src/third-party/crypto/memzero.c diff --git a/src/third-party/crypto/memzero.h b/c/src/third-party/crypto/memzero.h similarity index 100% rename from src/third-party/crypto/memzero.h rename to c/src/third-party/crypto/memzero.h diff --git a/src/third-party/crypto/options.h b/c/src/third-party/crypto/options.h similarity index 100% rename from src/third-party/crypto/options.h rename to c/src/third-party/crypto/options.h diff --git a/src/third-party/crypto/pbkdf2.c b/c/src/third-party/crypto/pbkdf2.c similarity index 100% rename from src/third-party/crypto/pbkdf2.c rename to c/src/third-party/crypto/pbkdf2.c diff --git a/src/third-party/crypto/pbkdf2.h b/c/src/third-party/crypto/pbkdf2.h similarity index 100% rename from src/third-party/crypto/pbkdf2.h rename to c/src/third-party/crypto/pbkdf2.h diff --git a/src/third-party/crypto/rand.c b/c/src/third-party/crypto/rand.c similarity index 100% rename from src/third-party/crypto/rand.c rename to c/src/third-party/crypto/rand.c diff --git a/src/third-party/crypto/rand.h b/c/src/third-party/crypto/rand.h similarity index 100% rename from src/third-party/crypto/rand.h rename to c/src/third-party/crypto/rand.h diff --git a/src/third-party/crypto/rfc6979.h b/c/src/third-party/crypto/rfc6979.h similarity index 100% rename from src/third-party/crypto/rfc6979.h rename to c/src/third-party/crypto/rfc6979.h diff --git a/src/third-party/crypto/ripemd160.c b/c/src/third-party/crypto/ripemd160.c similarity index 100% rename from src/third-party/crypto/ripemd160.c rename to c/src/third-party/crypto/ripemd160.c diff --git a/src/third-party/crypto/ripemd160.h b/c/src/third-party/crypto/ripemd160.h similarity index 100% rename from src/third-party/crypto/ripemd160.h rename to c/src/third-party/crypto/ripemd160.h diff --git a/src/third-party/crypto/script.c b/c/src/third-party/crypto/script.c similarity index 100% rename from src/third-party/crypto/script.c rename to c/src/third-party/crypto/script.c diff --git a/src/third-party/crypto/script.h b/c/src/third-party/crypto/script.h similarity index 100% rename from src/third-party/crypto/script.h rename to c/src/third-party/crypto/script.h diff --git a/src/third-party/crypto/secp256k1.c b/c/src/third-party/crypto/secp256k1.c similarity index 100% rename from src/third-party/crypto/secp256k1.c rename to c/src/third-party/crypto/secp256k1.c diff --git a/src/third-party/crypto/secp256k1.h b/c/src/third-party/crypto/secp256k1.h similarity index 100% rename from src/third-party/crypto/secp256k1.h rename to c/src/third-party/crypto/secp256k1.h diff --git a/src/third-party/crypto/secp256k1.table b/c/src/third-party/crypto/secp256k1.table similarity index 100% rename from src/third-party/crypto/secp256k1.table rename to c/src/third-party/crypto/secp256k1.table diff --git a/src/third-party/crypto/sha2.c b/c/src/third-party/crypto/sha2.c similarity index 100% rename from src/third-party/crypto/sha2.c rename to c/src/third-party/crypto/sha2.c diff --git a/src/third-party/crypto/sha2.h b/c/src/third-party/crypto/sha2.h similarity index 100% rename from src/third-party/crypto/sha2.h rename to c/src/third-party/crypto/sha2.h diff --git a/src/third-party/crypto/sha3.c b/c/src/third-party/crypto/sha3.c similarity index 100% rename from src/third-party/crypto/sha3.c rename to c/src/third-party/crypto/sha3.c diff --git a/src/third-party/crypto/sha3.h b/c/src/third-party/crypto/sha3.h similarity index 100% rename from src/third-party/crypto/sha3.h rename to c/src/third-party/crypto/sha3.h diff --git a/c/src/third-party/libb64/CMakeLists.txt b/c/src/third-party/libb64/CMakeLists.txt new file mode 100644 index 000000000..597a09644 --- /dev/null +++ b/c/src/third-party/libb64/CMakeLists.txt @@ -0,0 +1,39 @@ +############################################################################### +# This file is part of the Incubed project. +# Sources: https://github.com/slockit/in3-c +# +# Copyright (C) 2018-2019 slock.it GmbH, Blockchains LLC +# +# +# COMMERCIAL LICENSE USAGE +# +# Licensees holding a valid commercial license may use this file in accordance +# with the commercial license agreement provided with the Software or, alternatively, +# in accordance with the terms contained in a written agreement between you and +# slock.it GmbH/Blockchains LLC. For licensing terms and conditions or further +# information please contact slock.it at in3@slock.it. +# +# Alternatively, this file may be used under the AGPL license as follows: +# +# AGPL LICENSE USAGE +# +# This program is free software: you can redistribute it and/or modify it under the +# terms of the GNU Affero General Public License as published by the Free Software +# Foundation, either version 3 of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. +# [Permissions of this strong copyleft license are conditioned on making available +# complete source code of licensed works and modifications, which include larger +# works using a licensed work, under the same license. Copyright and license notices +# must be preserved. Contributors provide an express grant of patent rights.] +# You should have received a copy of the GNU Affero General Public License along +# with this program. If not, see . +############################################################################### + +add_library(b64_o OBJECT + cencode.c + cdecode.c + ) +add_library(b64 STATIC $) diff --git a/c/src/third-party/libb64/LICENSE b/c/src/third-party/libb64/LICENSE new file mode 100755 index 000000000..a6b56069e --- /dev/null +++ b/c/src/third-party/libb64/LICENSE @@ -0,0 +1,29 @@ +Copyright-Only Dedication (based on United States law) +or Public Domain Certification + +The person or persons who have associated work with this document (the +"Dedicator" or "Certifier") hereby either (a) certifies that, to the best of +his knowledge, the work of authorship identified is in the public domain of the +country from which the work is published, or (b) hereby dedicates whatever +copyright the dedicators holds in the work of authorship identified below (the +"Work") to the public domain. A certifier, moreover, dedicates any copyright +interest he may have in the associated work, and for these purposes, is +described as a "dedicator" below. + +A certifier has taken reasonable steps to verify the copyright status of this +work. Certifier recognizes that his good faith efforts may not shield him from +liability if in fact the work certified is not in the public domain. + +Dedicator makes this dedication for the benefit of the public at large and to +the detriment of the Dedicator's heirs and successors. Dedicator intends this +dedication to be an overt act of relinquishment in perpetuity of all present +and future rights under copyright law, whether vested or contingent, in the +Work. Dedicator understands that such relinquishment of all rights includes +the relinquishment of all rights to enforce (by lawsuit or otherwise) those +copyrights in the Work. + +Dedicator recognizes that, once placed in the public domain, the Work may be +freely reproduced, distributed, transmitted, used, modified, built upon, or +otherwise exploited by anyone for any purpose, commercial or non-commercial, +and in any way, including by methods that have not yet been invented or +conceived. \ No newline at end of file diff --git a/c/src/third-party/libb64/README b/c/src/third-party/libb64/README new file mode 100644 index 000000000..bff106ad1 --- /dev/null +++ b/c/src/third-party/libb64/README @@ -0,0 +1,9 @@ +- version: 1.2 +- website: http://libb64.sourceforge.net +- download: https://sourceforge.net/projects/libb64/files/libb64/libb64/libb64-1.2.src.zip/download +- notes: + - source unchanged - import only C sources + - usage based on incl. example + - added helpers for encoding/decoding and calculating o/p length. + - overwrite trailing \n with \0 in encode. + - do NOT add a newline after every 72 chars in encode. diff --git a/c/src/third-party/libb64/cdecode.c b/c/src/third-party/libb64/cdecode.c new file mode 100755 index 000000000..616bfee5a --- /dev/null +++ b/c/src/third-party/libb64/cdecode.c @@ -0,0 +1,106 @@ +/* +cdecoder.c - c source to a base64 decoding algorithm implementation + +This is part of the libb64 project, and has been placed in the public domain. +For details, see http://sourceforge.net/projects/libb64 +*/ + +#include "cdecode.h" +#include + +int base64_decode_value(char value_in) { + static const char decoding[] = {62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -2, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51}; + static const char decoding_size = sizeof(decoding); + value_in -= 43; + if (value_in > decoding_size) return -1; + return decoding[(int) value_in]; +} + +void base64_init_decodestate(base64_decodestate* state_in) { + state_in->step = step_a; + state_in->plainchar = 0; +} + +int base64_decode_block(const char* code_in, const int length_in, char* plaintext_out, base64_decodestate* state_in) { + const char* codechar = code_in; + char* plainchar = plaintext_out; + char fragment; + + *plainchar = state_in->plainchar; + + switch (state_in->step) { + while (1) { + case step_a: + if (codechar == code_in + length_in) { + state_in->step = step_a; + state_in->plainchar = *plainchar; + return plainchar - plaintext_out; + } + fragment = (char) base64_decode_value(*codechar++); + *plainchar = (fragment & 0x03f) << 2; + // fall through + case step_b: + if (codechar == code_in + length_in) { + state_in->step = step_b; + state_in->plainchar = *plainchar; + return plainchar - plaintext_out; + } + fragment = (char) base64_decode_value(*codechar++); + *plainchar++ |= (fragment & 0x030) >> 4; + *plainchar = (fragment & 0x00f) << 4; + // fall through + case step_c: + if (codechar == code_in + length_in) { + state_in->step = step_c; + state_in->plainchar = *plainchar; + return plainchar - plaintext_out; + } + fragment = (char) base64_decode_value(*codechar++); + *plainchar++ |= (fragment & 0x03c) >> 2; + *plainchar = (fragment & 0x003) << 6; + // fall through + case step_d: + if (codechar == code_in + length_in) { + state_in->step = step_d; + state_in->plainchar = *plainchar; + return plainchar - plaintext_out; + } + fragment = (char) base64_decode_value(*codechar++); + *plainchar++ |= (fragment & 0x03f); + } + } + /* control should not reach here */ + return plainchar - plaintext_out; +} + +size_t base64_decode_strlen(const char* ip) { + const size_t lip = strlen(ip); + size_t lop = lip / 4 * 3; + if (lip > 1 && ip[lip - 2] == '=' && ip[lip - 1] == '=') + lop -= 2; + else if (ip[lip - 1] == '=') + lop -= 1; + return lop; +} + +static size_t base64_strlen_nopad(const char* ip) { + size_t lip = strlen(ip); + if (lip > 1 && ip[lip - 2] == '=' && ip[lip - 1] == '=') + lip -= 2; + else if (ip[lip - 1] == '=') + lip -= 1; + return lip; +} + +uint8_t* base64_decode(const char* ip, size_t* len) { + *len = base64_decode_strlen(ip); + uint8_t* op = malloc(*len + 1); + if (op) { + char* c = (char*) op; + base64_decodestate s; + base64_init_decodestate(&s); + int cnt = base64_decode_block(ip, base64_strlen_nopad(ip), c, &s); + c += cnt; + } + return op; +} diff --git a/c/src/third-party/libb64/cdecode.h b/c/src/third-party/libb64/cdecode.h new file mode 100755 index 000000000..ce915feaa --- /dev/null +++ b/c/src/third-party/libb64/cdecode.h @@ -0,0 +1,33 @@ +/* +cdecode.h - c header for a base64 decoding algorithm + +This is part of the libb64 project, and has been placed in the public domain. +For details, see http://sourceforge.net/projects/libb64 +*/ + +#ifndef BASE64_CDECODE_H +#define BASE64_CDECODE_H + +#include +#include + +typedef enum +{ + step_a, step_b, step_c, step_d +} base64_decodestep; + +typedef struct +{ + base64_decodestep step; + char plainchar; +} base64_decodestate; + +void base64_init_decodestate(base64_decodestate* state_in); + +int base64_decode_value(char value_in); + +int base64_decode_block(const char* code_in, const int length_in, char* plaintext_out, base64_decodestate* state_in); + +uint8_t* base64_decode(const char* input, size_t* len); + +#endif /* BASE64_CDECODE_H */ diff --git a/c/src/third-party/libb64/cencode.c b/c/src/third-party/libb64/cencode.c new file mode 100755 index 000000000..3bc21fd03 --- /dev/null +++ b/c/src/third-party/libb64/cencode.c @@ -0,0 +1,109 @@ +/* +cencoder.c - c source to a base64 encoding algorithm implementation + +This is part of the libb64 project, and has been placed in the public domain. +For details, see http://sourceforge.net/projects/libb64 +*/ +#include "cencode.h" + +void base64_init_encodestate(base64_encodestate* state_in) { + state_in->step = step_A; + state_in->result = 0; + state_in->stepcount = 0; +} + +char base64_encode_value(char value_in) { + static const char* encoding = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + if (value_in > 63) return '='; + return encoding[(int) value_in]; +} + +int base64_encode_block(const char* plaintext_in, int length_in, char* code_out, base64_encodestate* state_in) { + const char* plainchar = plaintext_in; + const char* const plaintextend = plaintext_in + length_in; + char* codechar = code_out; + char result; + char fragment; + + result = state_in->result; + + switch (state_in->step) { + while (1) { + case step_A: + if (plainchar == plaintextend) { + state_in->result = result; + state_in->step = step_A; + return codechar - code_out; + } + fragment = *plainchar++; + result = (fragment & 0x0fc) >> 2; + *codechar++ = base64_encode_value(result); + result = (fragment & 0x003) << 4; + case step_B: + if (plainchar == plaintextend) { + state_in->result = result; + state_in->step = step_B; + return codechar - code_out; + } + fragment = *plainchar++; + result |= (fragment & 0x0f0) >> 4; + *codechar++ = base64_encode_value(result); + result = (fragment & 0x00f) << 2; + case step_C: + if (plainchar == plaintextend) { + state_in->result = result; + state_in->step = step_C; + return codechar - code_out; + } + fragment = *plainchar++; + result |= (fragment & 0x0c0) >> 6; + *codechar++ = base64_encode_value(result); + result = (fragment & 0x03f) >> 0; + *codechar++ = base64_encode_value(result); + + ++(state_in->stepcount); + } + } + /* control should not reach here */ + return codechar - code_out; +} + +int base64_encode_blockend(char* code_out, base64_encodestate* state_in) { + char* codechar = code_out; + + switch (state_in->step) { + case step_B: + *codechar++ = base64_encode_value(state_in->result); + *codechar++ = '='; + *codechar++ = '='; + break; + case step_C: + *codechar++ = base64_encode_value(state_in->result); + *codechar++ = '='; + break; + case step_A: + break; + } + *codechar++ = '\n'; + + return codechar - code_out; +} + +size_t base64_encode_strlen(size_t len) { + return ((4 * len / 3) + 3) & ~3U; +} + +char* base64_encode(const uint8_t* input, size_t len) { + char* output = malloc(base64_encode_strlen(len) + 1); + char* c = output; + int cnt = 0; + base64_encodestate s; + + base64_init_encodestate(&s); + cnt = base64_encode_block((char*) input, len, c, &s); + c += cnt; + cnt = base64_encode_blockend(c, &s); + c += (cnt - 1); + *c = 0; + return output; +} \ No newline at end of file diff --git a/c/src/third-party/libb64/cencode.h b/c/src/third-party/libb64/cencode.h new file mode 100755 index 000000000..60897ca51 --- /dev/null +++ b/c/src/third-party/libb64/cencode.h @@ -0,0 +1,36 @@ +/* +cencode.h - c header for a base64 encoding algorithm + +This is part of the libb64 project, and has been placed in the public domain. +For details, see http://sourceforge.net/projects/libb64 +*/ + +#ifndef BASE64_CENCODE_H +#define BASE64_CENCODE_H + +#include +#include + +typedef enum +{ + step_A, step_B, step_C +} base64_encodestep; + +typedef struct +{ + base64_encodestep step; + char result; + int stepcount; +} base64_encodestate; + +void base64_init_encodestate(base64_encodestate* state_in); + +char base64_encode_value(char value_in); + +int base64_encode_block(const char* plaintext_in, int length_in, char* code_out, base64_encodestate* state_in); + +int base64_encode_blockend(char* code_out, base64_encodestate* state_in); + +char* base64_encode(const uint8_t* input, size_t len); + +#endif /* BASE64_CENCODE_H */ diff --git a/c/src/third-party/multihash/LICENSE b/c/src/third-party/multihash/LICENSE new file mode 100644 index 000000000..3c2642790 --- /dev/null +++ b/c/src/third-party/multihash/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Protocol Labs, Inc + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/c/src/third-party/multihash/README b/c/src/third-party/multihash/README new file mode 100644 index 000000000..bed513bbc --- /dev/null +++ b/c/src/third-party/multihash/README @@ -0,0 +1,4 @@ +- commit: eab4cb9fda22d38c1117380699992d50d5453f51 +- website: https://github.com/multiformats/c-multihash +- notes: + - modified includes to use quotes instead of angular brackets diff --git a/c/src/third-party/multihash/errors.c b/c/src/third-party/multihash/errors.c new file mode 100755 index 000000000..125242e2f --- /dev/null +++ b/c/src/third-party/multihash/errors.c @@ -0,0 +1,22 @@ +#include "errors.h" + +const char *mh_error_string(int code) { + switch (code) { + case MH_E_NO_ERROR: + return "no error"; + case MH_E_UNKNOWN_CODE: + return "unknown multihash code"; + case MH_E_TOO_SHORT: + return "multihash too short. must be > 2 bytes"; + case MH_E_TOO_LONG: + return "multihash too long. must be < 129 bytes"; + case MH_E_VARINT_NOT_SUPPORTED: + return "c-multihash does not yet support" + " varint encoding"; + case MH_E_DIGSET_TOO_LONG: + return "c-multihash does not support digsets" + " longer than 127 bytes yet"; + default: + return "unknown error code"; + } +} diff --git a/c/src/third-party/multihash/errors.h b/c/src/third-party/multihash/errors.h new file mode 100755 index 000000000..5f58f590c --- /dev/null +++ b/c/src/third-party/multihash/errors.h @@ -0,0 +1,16 @@ +#ifndef ERROR_H +#define ERROR_H + + +#define MH_E_NO_ERROR 0 +#define MH_E_UNKNOWN_CODE -1 +#define MH_E_TOO_SHORT -2 +#define MH_E_TOO_LONG -3 +#define MH_E_VARINT_NOT_SUPPORTED -4 +#define MH_E_DIGSET_TOO_LONG -5 + +#define MH_E_LAST -5 + +const char *mh_error_string(int code); + +#endif /* end of include guard */ diff --git a/c/src/third-party/multihash/generic.h b/c/src/third-party/multihash/generic.h new file mode 100755 index 000000000..a4855ce90 --- /dev/null +++ b/c/src/third-party/multihash/generic.h @@ -0,0 +1,8 @@ +#ifndef MH_GENERIC +#define MH_GENERIC + +#define mh_assert_static(isTrue) void mh_assert_static(char x[1 - (!(isTrue))]) + +#define UNUSED(x) (void)(x) + +#endif /* end of include guard */ diff --git a/c/src/third-party/multihash/hashes.c b/c/src/third-party/multihash/hashes.c new file mode 100755 index 000000000..6d271289f --- /dev/null +++ b/c/src/third-party/multihash/hashes.c @@ -0,0 +1,50 @@ +#include + +#include "hashes.h" + +#include "errors.h" +#include "generic.h" + + +static const struct hash_info { + int hash; + const char *name; + int length; +} hash_infos[] = { + { MH_H_SHA1, "sha1", 20}, + { MH_H_SHA2_256, "sha2-256", 32 }, + { MH_H_SHA2_512, "sha2-512", 64 }, + { MH_H_SHA3_512, "sha3-512", 64 }, + { MH_H_SHA3_384, "sha3-384", 45 }, + { MH_H_SHA3_256, "sha3-256", 32 }, + { MH_H_SHA3_224, "sha3-224", 28 }, + { MH_H_SHAKE_128, "shake-128", 16 }, + { MH_H_SHAKE_256, "shake-256", 32 }, + { MH_H_BLAKE2B, "blake2b", 64 }, + { MH_H_BLAKE2S, "blake2s", 32 } +}; + +mh_assert_static(sizeof(hash_infos) / sizeof(hash_infos[0]) == MH_H_COUNT); + +// Searches for given hash in hash info table +static const struct hash_info *find_hash(int hash) { + // naive search, could be replaced with binary + unsigned int i = 0; + for (; i < MH_H_COUNT; i++) { + if (hash_infos[i].hash == hash) + return &hash_infos[i]; + } + + return NULL; +} + +const char *mh_hash_name(int hash) { + const struct hash_info *info = find_hash(hash); + return (info != NULL) ? info->name : NULL; +} + + +int mh_hash_default_length(int hash) { + const struct hash_info *info = find_hash(hash); + return (info != NULL) ? info->length : MH_E_UNKNOWN_CODE; +} diff --git a/c/src/third-party/multihash/hashes.h b/c/src/third-party/multihash/hashes.h new file mode 100755 index 000000000..787fb2159 --- /dev/null +++ b/c/src/third-party/multihash/hashes.h @@ -0,0 +1,37 @@ +#include "errors.h" + +// definitions of hash functions +#define MH_H_SHA1 0x11 +#define MH_H_SHA2_256 0x12 +#define MH_H_SHA2_512 0x13 +#define MH_H_SHA3_512 0x14 +#define MH_H_SHA3_384 0x15 +#define MH_H_SHA3_256 0x16 +#define MH_H_SHA3_224 0x17 +#define MH_H_SHAKE_128 0x18 +#define MH_H_SHAKE_256 0x19 +#define MH_H_BLAKE2B 0x40 +#define MH_H_BLAKE2S 0x41 + + +// list of avaliable hash functions. +static const int mh_all_hashes[] = { + MH_H_SHA1, + MH_H_SHA2_256, + MH_H_SHA2_512, + MH_H_SHA3_512, + MH_H_SHA3_384, + MH_H_SHA3_256, + MH_H_SHA3_224, + MH_H_SHAKE_128, + MH_H_SHAKE_256, + MH_H_BLAKE2B, + MH_H_BLAKE2S, +}; + +#define MH_H_COUNT (int)(sizeof(mh_all_hashes) / sizeof(mh_all_hashes[0])) + +const char *mh_hash_name(int hash); + +// returns length in bytes or if returns is < 0 it is an error +int mh_hash_default_length(int hash); diff --git a/c/src/third-party/multihash/multihash.c b/c/src/third-party/multihash/multihash.c new file mode 100755 index 000000000..9864f4ddc --- /dev/null +++ b/c/src/third-party/multihash/multihash.c @@ -0,0 +1,96 @@ +#include "multihash.h" + +#include "hashes.h" +#include "errors.h" +#include "generic.h" + +#include +#include + +#define VARINT_MASK (1 << 7) + +static int check_len(size_t len) { + if (len < 1) + return MH_E_TOO_SHORT; + else if (len >= 128) + return MH_E_TOO_LONG; + + return MH_E_NO_ERROR; +} + +static int check_multihash(const unsigned char mh[], size_t len) { + int err; + + if (len < 3) + return MH_E_TOO_SHORT; + + if (mh[0] & VARINT_MASK) { + // This value is a varint, but there are currently no supported + // values that require more than a single byte to represent. + return MH_E_VARINT_NOT_SUPPORTED; + } else if (mh[1] & VARINT_MASK) { + return MH_E_VARINT_NOT_SUPPORTED; + } + + err = check_len(mh[1]); + if (err) + return err; + + return 0; +} + + +// returns hash code or error (which is < 0) +int mh_multihash_hash(const unsigned char *mh, size_t len) { + int err = check_multihash(mh, len); + if (err) + return err; + + return (int) mh[0]; +} + + +// returns length of multihash or error (which is < 0) +int mh_multihash_length(const unsigned char *mh, size_t len) { + int err = check_multihash(mh, len); + if (err) + return err; + + return (int) mh[1]; +} + +// gives access to raw digest inside multihash buffer +// returns 0 or negative error +int mh_multihash_digest(unsigned char *multihash, size_t len, unsigned char **digest, + size_t *digest_len) { + int err = check_multihash(multihash, len); + if (err) + return err; + + (*digest_len) = (size_t) mh_multihash_length(multihash, len); + (*digest) = multihash + 2; // Always true without varint + + return 0; +} + +int mh_new_length(int code, size_t hash_len) { + // right now there is no varint support + // so length required is 2 + hash_len + UNUSED(code); + return 2 + hash_len; +} + +int mh_new(unsigned char *buffer, int code, const unsigned char *digest, + size_t digest_len) { + if (code & VARINT_MASK) + return MH_E_VARINT_NOT_SUPPORTED; + if (digest_len > 127) + return MH_E_DIGSET_TOO_LONG; + + buffer[0] = (unsigned char) ((unsigned int) code) & 255; + buffer[1] = (unsigned char) digest_len; + memcpy(buffer + 2, digest, digest_len); + + return 0; +} + diff --git a/c/src/third-party/multihash/multihash.h b/c/src/third-party/multihash/multihash.h new file mode 100755 index 000000000..5b5048561 --- /dev/null +++ b/c/src/third-party/multihash/multihash.h @@ -0,0 +1,28 @@ +#ifndef MH_HULTIHASH_H +#define MH_HULTIHASH_H + +#include + +// returns hash code or error (which is < 0) +int mh_multihash_hash(const unsigned char *multihash, size_t len); + +// returns length of multihash or error (which is < 0) +int mh_multihash_length(const unsigned char *multihash, size_t len); + +// gives access to raw digest inside multihash buffer +// returns 0 or negative error +int mh_multihash_digest(unsigned char *multihash, size_t len, + unsigned char **digest, size_t *digest_len); + +// returns length in bytes of buffer needed to store multihash +// with given hashcode and with given digest length +// returns length or negative error code +int mh_new_length(int code, size_t digest_len); + +// writes multihash into a buffer, the buffer needs to be at least +// mh_new_length() bytes long. +// returns negative error code or 0 +int mh_new(unsigned char *buffer, int code, const unsigned char *digest, + size_t digest_len); + +#endif /* end of include guard */ diff --git a/c/src/third-party/nanopb/LICENSE b/c/src/third-party/nanopb/LICENSE new file mode 100644 index 000000000..a83630ae7 --- /dev/null +++ b/c/src/third-party/nanopb/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2011 Petteri Aimonen + +This software is provided 'as-is', without any express or +implied warranty. In no event will the authors be held liable +for any damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you + must not claim that you wrote the original software. If you use + this software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and + must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. diff --git a/c/src/third-party/nanopb/README b/c/src/third-party/nanopb/README new file mode 100644 index 000000000..7b79c001a --- /dev/null +++ b/c/src/third-party/nanopb/README @@ -0,0 +1,8 @@ +- version: 0.4.0 +- website: https://github.com/nanopb/nanopb +- download: https://github.com/nanopb/nanopb/releases/tag/0.4.0 +- notes: + - `ipfs.pb.{c,h}` were generated using the python generator script (`generator/protoc`) + - generating these files requires protobuf python lib to be installed on host + - modified includes to use quotes instead of angular brackets + - source otherwise unchanged diff --git a/c/src/third-party/nanopb/pb.h b/c/src/third-party/nanopb/pb.h new file mode 100755 index 000000000..283570467 --- /dev/null +++ b/c/src/third-party/nanopb/pb.h @@ -0,0 +1,854 @@ +/******************************************************************************* + * Copyright (c) 2011 Petteri Aimonen + * + * This software is provided 'as-is', without any express or + * implied warranty. In no event will the authors be held liable + * for any damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + *******************************************************************************/ + +/* Common parts of the nanopb library. Most of these are quite low-level + * stuff. For the high-level interface, see pb_encode.h and pb_decode.h. + */ + +#ifndef PB_H_INCLUDED +#define PB_H_INCLUDED + +/***************************************************************** + * Nanopb compilation time options. You can change these here by * + * uncommenting the lines, or on the compiler command line. * + *****************************************************************/ + +/* Enable support for dynamically allocated fields */ +/* #define PB_ENABLE_MALLOC 1 */ + +/* Define this if your CPU / compiler combination does not support + * unaligned memory access to packed structures. */ +/* #define PB_NO_PACKED_STRUCTS 1 */ + +/* Increase the number of required fields that are tracked. + * A compiler warning will tell if you need this. */ +/* #define PB_MAX_REQUIRED_FIELDS 256 */ + +/* Add support for tag numbers > 65536 and fields larger than 65536 bytes. */ +/* #define PB_FIELD_32BIT 1 */ + +/* Disable support for error messages in order to save some code space. */ +/* #define PB_NO_ERRMSG 1 */ + +/* Disable support for custom streams (support only memory buffers). */ +/* #define PB_BUFFER_ONLY 1 */ + +/* Disable support for 64-bit datatypes, for compilers without int64_t + or to save some code space. */ +/* #define PB_WITHOUT_64BIT 1 */ + +/* Set the fieldinfo width for all messages using automatic width + * selection. Valid values are 2, 4 and 8. Usually even if you need + * to change the width manually for some reason, it is preferrable + * to do so through the descriptorsize option in .options file. */ +/* #define PB_FIELDINFO_WIDTH 4 */ + +/* Don't encode scalar arrays as packed. This is only to be used when + * the decoder on the receiving side cannot process packed scalar arrays. + * Such example is older protobuf.js. */ +/* #define PB_ENCODE_ARRAYS_UNPACKED 1 */ + +/* Enable conversion of doubles to floats for platforms that do not + * support 64-bit doubles. Most commonly AVR. */ +/* #define PB_CONVERT_DOUBLE_FLOAT 1 */ + +/* Check whether incoming strings are valid UTF-8 sequences. Slows down + * the string processing slightly and slightly increases code size. */ +/* #define PB_VALIDATE_UTF8 1 */ + +/****************************************************************** + * You usually don't need to change anything below this line. * + * Feel free to look around and use the defined macros, though. * + ******************************************************************/ + +/* Version of the nanopb library. Just in case you want to check it in + * your own program. */ +#define NANOPB_VERSION nanopb - 0.4.0 + +/* Include all the system headers needed by nanopb. You will need the + * definitions of the following: + * - strlen, memcpy, memset functions + * - [u]int_least8_t, uint_fast8_t, [u]int_least16_t, [u]int32_t, [u]int64_t + * - size_t + * - bool + * + * If you don't have the standard header files, you can instead provide + * a custom header that defines or includes all this. In that case, + * define PB_SYSTEM_HEADER to the path of this file. + */ +#ifdef PB_SYSTEM_HEADER +#include PB_SYSTEM_HEADER +#else +#include +#include +#include +#include +#include + +#ifdef PB_ENABLE_MALLOC +#include +#endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Macro for defining packed structures (compiler dependent). + * This just reduces memory requirements, but is not required. + */ +#if defined(PB_NO_PACKED_STRUCTS) +/* Disable struct packing */ +#define PB_PACKED_STRUCT_START +#define PB_PACKED_STRUCT_END +#define pb_packed +#elif defined(__GNUC__) || defined(__clang__) +/* For GCC and clang */ +#define PB_PACKED_STRUCT_START +#define PB_PACKED_STRUCT_END +#define pb_packed __attribute__((packed)) +#elif defined(__ICCARM__) || defined(__CC_ARM) +/* For IAR ARM and Keil MDK-ARM compilers */ +#define PB_PACKED_STRUCT_START _Pragma("pack(push, 1)") +#define PB_PACKED_STRUCT_END _Pragma("pack(pop)") +#define pb_packed +#elif defined(_MSC_VER) && (_MSC_VER >= 1500) +/* For Microsoft Visual C++ */ +#define PB_PACKED_STRUCT_START __pragma(pack(push, 1)) +#define PB_PACKED_STRUCT_END __pragma(pack(pop)) +#define pb_packed +#else +/* Unknown compiler */ +#define PB_PACKED_STRUCT_START +#define PB_PACKED_STRUCT_END +#define pb_packed +#endif + +/* Handly macro for suppressing unreferenced-parameter compiler warnings. */ +#ifndef PB_UNUSED +#define PB_UNUSED(x) (void) (x) +#endif + +/* Harvard-architecture processors may need special attributes for storing + * field information in program memory. */ +#ifndef PB_PROGMEM +#ifdef __AVR__ +#include +#define PB_PROGMEM PROGMEM +#define PB_PROGMEM_READU32(x) pgm_read_dword(&x) +#else +#define PB_PROGMEM +#define PB_PROGMEM_READU32(x) (x) +#endif +#endif + +/* Compile-time assertion, used for checking compatible compilation options. + * If this does not work properly on your compiler, use + * #define PB_NO_STATIC_ASSERT to disable it. + * + * But before doing that, check carefully the error message / place where it + * comes from to see if the error has a real cause. Unfortunately the error + * message is not always very clear to read, but you can see the reason better + * in the place where the PB_STATIC_ASSERT macro was called. + */ +#ifndef PB_NO_STATIC_ASSERT +#ifndef PB_STATIC_ASSERT +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L +/* C11 standard _Static_assert mechanism */ +#define PB_STATIC_ASSERT(COND, MSG) _Static_assert(COND, #MSG); +#else +/* Classic negative-size-array static assert mechanism */ +#define PB_STATIC_ASSERT(COND, MSG) typedef char PB_STATIC_ASSERT_MSG(MSG, __LINE__, __COUNTER__)[(COND) ? 1 : -1]; +#define PB_STATIC_ASSERT_MSG(MSG, LINE, COUNTER) PB_STATIC_ASSERT_MSG_(MSG, LINE, COUNTER) +#define PB_STATIC_ASSERT_MSG_(MSG, LINE, COUNTER) pb_static_assertion_##MSG##_##LINE##_##COUNTER +#endif +#endif +#else +/* Static asserts disabled by PB_NO_STATIC_ASSERT */ +#define PB_STATIC_ASSERT(COND, MSG) +#endif + +/* Number of required fields to keep track of. */ +#ifndef PB_MAX_REQUIRED_FIELDS +#define PB_MAX_REQUIRED_FIELDS 64 +#endif + +#if PB_MAX_REQUIRED_FIELDS < 64 +#error You should not lower PB_MAX_REQUIRED_FIELDS from the default value (64). +#endif + +#ifdef PB_WITHOUT_64BIT +#ifdef PB_CONVERT_DOUBLE_FLOAT +/* Cannot use doubles without 64-bit types */ +#undef PB_CONVERT_DOUBLE_FLOAT +#endif +#endif + +/* List of possible field types. These are used in the autogenerated code. + * Least-significant 4 bits tell the scalar type + * Most-significant 4 bits specify repeated/required/packed etc. + */ + +typedef uint_least8_t pb_type_t; + +/**** Field data types ****/ + +/* Numeric types */ +#define PB_LTYPE_BOOL 0x00U /* bool */ +#define PB_LTYPE_VARINT 0x01U /* int32, int64, enum, bool */ +#define PB_LTYPE_UVARINT 0x02U /* uint32, uint64 */ +#define PB_LTYPE_SVARINT 0x03U /* sint32, sint64 */ +#define PB_LTYPE_FIXED32 0x04U /* fixed32, sfixed32, float */ +#define PB_LTYPE_FIXED64 0x05U /* fixed64, sfixed64, double */ + +/* Marker for last packable field type. */ +#define PB_LTYPE_LAST_PACKABLE 0x05U + +/* Byte array with pre-allocated buffer. + * data_size is the length of the allocated PB_BYTES_ARRAY structure. */ +#define PB_LTYPE_BYTES 0x06U + +/* String with pre-allocated buffer. + * data_size is the maximum length. */ +#define PB_LTYPE_STRING 0x07U + +/* Submessage + * submsg_fields is pointer to field descriptions */ +#define PB_LTYPE_SUBMESSAGE 0x08U + +/* Submessage with pre-decoding callback + * The pre-decoding callback is stored as pb_callback_t right before pSize. + * submsg_fields is pointer to field descriptions */ +#define PB_LTYPE_SUBMSG_W_CB 0x09U + +/* Extension pseudo-field + * The field contains a pointer to pb_extension_t */ +#define PB_LTYPE_EXTENSION 0x0AU + +/* Byte array with inline, pre-allocated byffer. + * data_size is the length of the inline, allocated buffer. + * This differs from PB_LTYPE_BYTES by defining the element as + * pb_byte_t[data_size] rather than pb_bytes_array_t. */ +#define PB_LTYPE_FIXED_LENGTH_BYTES 0x0BU + +/* Number of declared LTYPES */ +#define PB_LTYPES_COUNT 0x0CU +#define PB_LTYPE_MASK 0x0FU + +/**** Field repetition rules ****/ + +#define PB_HTYPE_REQUIRED 0x00U +#define PB_HTYPE_OPTIONAL 0x10U +#define PB_HTYPE_SINGULAR 0x10U +#define PB_HTYPE_REPEATED 0x20U +#define PB_HTYPE_FIXARRAY 0x20U +#define PB_HTYPE_ONEOF 0x30U +#define PB_HTYPE_MASK 0x30U + +/**** Field allocation types ****/ + +#define PB_ATYPE_STATIC 0x00U +#define PB_ATYPE_POINTER 0x80U +#define PB_ATYPE_CALLBACK 0x40U +#define PB_ATYPE_MASK 0xC0U + +#define PB_ATYPE(x) ((x) &PB_ATYPE_MASK) +#define PB_HTYPE(x) ((x) &PB_HTYPE_MASK) +#define PB_LTYPE(x) ((x) &PB_LTYPE_MASK) +#define PB_LTYPE_IS_SUBMSG(x) (PB_LTYPE(x) == PB_LTYPE_SUBMESSAGE || \ + PB_LTYPE(x) == PB_LTYPE_SUBMSG_W_CB) + +/* Data type used for storing sizes of struct fields + * and array counts. + */ +#if defined(PB_FIELD_32BIT) +typedef uint32_t pb_size_t; +typedef int32_t pb_ssize_t; +#else +typedef uint_least16_t pb_size_t; +typedef int_least16_t pb_ssize_t; +#endif +#define PB_SIZE_MAX ((pb_size_t) -1) + +/* Data type for storing encoded data and other byte streams. + * This typedef exists to support platforms where uint8_t does not exist. + * You can regard it as equivalent on uint8_t on other platforms. + */ +typedef uint_least8_t pb_byte_t; + +/* Forward declaration of struct types */ +typedef struct pb_istream_s pb_istream_t; +typedef struct pb_ostream_s pb_ostream_t; +typedef struct pb_field_iter_s pb_field_iter_t; + +/* This structure is used in auto-generated constants + * to specify struct fields. + */ +PB_PACKED_STRUCT_START +typedef struct pb_msgdesc_s pb_msgdesc_t; +struct pb_msgdesc_s { + pb_size_t field_count; + const uint32_t* field_info; + const pb_msgdesc_t* const* submsg_info; + const pb_byte_t* default_value; + + bool (*field_callback)(pb_istream_t* istream, pb_ostream_t* ostream, const pb_field_iter_t* field); +} pb_packed; +PB_PACKED_STRUCT_END + +/* Iterator for message descriptor */ +struct pb_field_iter_s { + const pb_msgdesc_t* descriptor; /* Pointer to message descriptor constant */ + void* message; /* Pointer to start of the structure */ + + pb_size_t index; /* Index of the field */ + pb_size_t field_info_index; /* Index to descriptor->field_info array */ + pb_size_t required_field_index; /* Index that counts only the required fields */ + pb_size_t submessage_index; /* Index that counts only submessages */ + + pb_size_t tag; /* Tag of current field */ + pb_size_t data_size; /* sizeof() of a single item */ + pb_size_t array_size; /* Number of array entries */ + pb_type_t type; /* Type of current field */ + + void* pField; /* Pointer to current field in struct */ + void* pData; /* Pointer to current data contents. Different than pField for arrays and pointers. */ + void* pSize; /* Pointer to count/has field */ + + const pb_msgdesc_t* submsg_desc; /* For submessage fields, pointer to field descriptor for the submessage. */ +}; + +/* For compatibility with legacy code */ +typedef pb_field_iter_t pb_field_t; + +/* Make sure that the standard integer types are of the expected sizes. + * Otherwise fixed32/fixed64 fields can break. + * + * If you get errors here, it probably means that your stdint.h is not + * correct for your platform. + */ +#ifndef PB_WITHOUT_64BIT +PB_STATIC_ASSERT(sizeof(int64_t) == 2 * sizeof(int32_t), INT64_T_WRONG_SIZE) +PB_STATIC_ASSERT(sizeof(uint64_t) == 2 * sizeof(uint32_t), UINT64_T_WRONG_SIZE) +#endif + +/* This structure is used for 'bytes' arrays. + * It has the number of bytes in the beginning, and after that an array. + * Note that actual structs used will have a different length of bytes array. + */ +#define PB_BYTES_ARRAY_T(n) \ + struct { \ + pb_size_t size; \ + pb_byte_t bytes[n]; \ + } +#define PB_BYTES_ARRAY_T_ALLOCSIZE(n) ((size_t) n + offsetof(pb_bytes_array_t, bytes)) + +struct pb_bytes_array_s { + pb_size_t size; + pb_byte_t bytes[1]; +}; +typedef struct pb_bytes_array_s pb_bytes_array_t; + +/* This structure is used for giving the callback function. + * It is stored in the message structure and filled in by the method that + * calls pb_decode. + * + * The decoding callback will be given a limited-length stream + * If the wire type was string, the length is the length of the string. + * If the wire type was a varint/fixed32/fixed64, the length is the length + * of the actual value. + * The function may be called multiple times (especially for repeated types, + * but also otherwise if the message happens to contain the field multiple + * times.) + * + * The encoding callback will receive the actual output stream. + * It should write all the data in one call, including the field tag and + * wire type. It can write multiple fields. + * + * The callback can be null if you want to skip a field. + */ +typedef struct pb_callback_s pb_callback_t; +struct pb_callback_s { + /* Callback functions receive a pointer to the arg field. + * You can access the value of the field as *arg, and modify it if needed. + */ + union { + bool (*decode)(pb_istream_t* stream, const pb_field_t* field, void** arg); + bool (*encode)(pb_ostream_t* stream, const pb_field_t* field, void* const* arg); + } funcs; + + /* Free arg for use by callback */ + void* arg; +}; + +extern bool pb_default_field_callback(pb_istream_t* istream, pb_ostream_t* ostream, const pb_field_t* field); + +/* Wire types. Library user needs these only in encoder callbacks. */ +typedef enum { + PB_WT_VARINT = 0, + PB_WT_64BIT = 1, + PB_WT_STRING = 2, + PB_WT_32BIT = 5 +} pb_wire_type_t; + +/* Structure for defining the handling of unknown/extension fields. + * Usually the pb_extension_type_t structure is automatically generated, + * while the pb_extension_t structure is created by the user. However, + * if you want to catch all unknown fields, you can also create a custom + * pb_extension_type_t with your own callback. + */ +typedef struct pb_extension_type_s pb_extension_type_t; +typedef struct pb_extension_s pb_extension_t; +struct pb_extension_type_s { + /* Called for each unknown field in the message. + * If you handle the field, read off all of its data and return true. + * If you do not handle the field, do not read anything and return true. + * If you run into an error, return false. + * Set to NULL for default handler. + */ + bool (*decode)(pb_istream_t* stream, pb_extension_t* extension, + uint32_t tag, pb_wire_type_t wire_type); + + /* Called once after all regular fields have been encoded. + * If you have something to write, do so and return true. + * If you do not have anything to write, just return true. + * If you run into an error, return false. + * Set to NULL for default handler. + */ + bool (*encode)(pb_ostream_t* stream, const pb_extension_t* extension); + + /* Free field for use by the callback. */ + const void* arg; +}; + +struct pb_extension_s { + /* Type describing the extension field. Usually you'll initialize + * this to a pointer to the automatically generated structure. */ + const pb_extension_type_t* type; + + /* Destination for the decoded data. This must match the datatype + * of the extension field. */ + void* dest; + + /* Pointer to the next extension handler, or NULL. + * If this extension does not match a field, the next handler is + * automatically called. */ + pb_extension_t* next; + + /* The decoder sets this to true if the extension was found. + * Ignored for encoding. */ + bool found; +}; + +#define pb_extension_init_zero \ + { NULL, NULL, NULL, false } + +/* Memory allocation functions to use. You can define pb_realloc and + * pb_free to custom functions if you want. */ +#ifdef PB_ENABLE_MALLOC +#ifndef pb_realloc +#define pb_realloc(ptr, size) realloc(ptr, size) +#endif +#ifndef pb_free +#define pb_free(ptr) free(ptr) +#endif +#endif + +/* This is used to inform about need to regenerate .pb.h/.pb.c files. */ +#define PB_PROTO_HEADER_VERSION 40 + +/* These macros are used to declare pb_field_t's in the constant array. */ +/* Size of a structure member, in bytes. */ +#define pb_membersize(st, m) (sizeof((st*) 0)->m) +/* Number of entries in an array. */ +#define pb_arraysize(st, m) (pb_membersize(st, m) / pb_membersize(st, m[0])) +/* Delta from start of one member to the start of another member. */ +#define pb_delta(st, m1, m2) ((int) offsetof(st, m1) - (int) offsetof(st, m2)) + +/* Force expansion of macro value */ +#define PB_EXPAND(x) x + +/* Binding of a message field set into a specific structure */ +#define PB_BIND(msgname, structname, width) \ + const uint32_t structname##_field_info[] PB_PROGMEM = \ + { \ + msgname##_FIELDLIST(PB_GEN_FIELD_INFO_##width, structname) 0}; \ + const pb_msgdesc_t* const structname##_submsg_info[] = \ + { \ + msgname##_FIELDLIST(PB_GEN_SUBMSG_INFO, structname) \ + NULL}; \ + const pb_msgdesc_t structname##_msg = \ + { \ + 0 msgname##_FIELDLIST(PB_GEN_FIELD_COUNT, structname), \ + structname##_field_info, \ + structname##_submsg_info, \ + msgname##_DEFAULT, \ + msgname##_CALLBACK, \ + }; \ + msgname##_FIELDLIST(PB_GEN_FIELD_INFO_ASSERT_##width, structname) + +#define PB_GEN_FIELD_COUNT(structname, atype, htype, ltype, fieldname, tag) +1 + +#define PB_GEN_FIELD_INFO_1(structname, atype, htype, ltype, fieldname, tag) \ + PB_GEN_FIELD_INFO(1, structname, atype, htype, ltype, fieldname, tag) + +#define PB_GEN_FIELD_INFO_2(structname, atype, htype, ltype, fieldname, tag) \ + PB_GEN_FIELD_INFO(2, structname, atype, htype, ltype, fieldname, tag) + +#define PB_GEN_FIELD_INFO_4(structname, atype, htype, ltype, fieldname, tag) \ + PB_GEN_FIELD_INFO(4, structname, atype, htype, ltype, fieldname, tag) + +#define PB_GEN_FIELD_INFO_8(structname, atype, htype, ltype, fieldname, tag) \ + PB_GEN_FIELD_INFO(8, structname, atype, htype, ltype, fieldname, tag) + +#define PB_GEN_FIELD_INFO_AUTO(structname, atype, htype, ltype, fieldname, tag) \ + PB_GEN_FIELD_INFO_AUTO2(PB_FIELDINFO_WIDTH_AUTO(atype, htype, ltype), structname, atype, htype, ltype, fieldname, tag) + +#define PB_GEN_FIELD_INFO_AUTO2(width, structname, atype, htype, ltype, fieldname, tag) \ + PB_GEN_FIELD_INFO(width, structname, atype, htype, ltype, fieldname, tag) + +#define PB_GEN_FIELD_INFO(width, structname, atype, htype, ltype, fieldname, tag) \ + PB_FIELDINFO_##width(tag, PB_ATYPE_##atype | PB_HTYPE_##htype | PB_LTYPE_MAP_##ltype, \ + PB_DATA_OFFSET_##atype(htype, structname, fieldname), \ + PB_DATA_SIZE_##atype(htype, structname, fieldname), \ + PB_SIZE_OFFSET_##atype(htype, structname, fieldname), \ + PB_ARRAY_SIZE_##atype(htype, structname, fieldname)) + +#define PB_GEN_FIELD_INFO_ASSERT_1(structname, atype, htype, ltype, fieldname, tag) \ + PB_GEN_FIELD_INFO_ASSERT(1, structname, atype, htype, ltype, fieldname, tag) + +#define PB_GEN_FIELD_INFO_ASSERT_2(structname, atype, htype, ltype, fieldname, tag) \ + PB_GEN_FIELD_INFO_ASSERT(2, structname, atype, htype, ltype, fieldname, tag) + +#define PB_GEN_FIELD_INFO_ASSERT_4(structname, atype, htype, ltype, fieldname, tag) \ + PB_GEN_FIELD_INFO_ASSERT(4, structname, atype, htype, ltype, fieldname, tag) + +#define PB_GEN_FIELD_INFO_ASSERT_8(structname, atype, htype, ltype, fieldname, tag) \ + PB_GEN_FIELD_INFO_ASSERT(8, structname, atype, htype, ltype, fieldname, tag) + +#define PB_GEN_FIELD_INFO_ASSERT_AUTO(structname, atype, htype, ltype, fieldname, tag) \ + PB_GEN_FIELD_INFO_ASSERT_AUTO2(PB_FIELDINFO_WIDTH_AUTO(atype, htype, ltype), structname, atype, htype, ltype, fieldname, tag) + +#define PB_GEN_FIELD_INFO_ASSERT_AUTO2(width, structname, atype, htype, ltype, fieldname, tag) \ + PB_GEN_FIELD_INFO_ASSERT(width, structname, atype, htype, ltype, fieldname, tag) + +#define PB_GEN_FIELD_INFO_ASSERT(width, structname, atype, htype, ltype, fieldname, tag) \ + PB_FIELDINFO_ASSERT_##width(tag, PB_ATYPE_##atype | PB_HTYPE_##htype | PB_LTYPE_MAP_##ltype, \ + PB_DATA_OFFSET_##atype(htype, structname, fieldname), \ + PB_DATA_SIZE_##atype(htype, structname, fieldname), \ + PB_SIZE_OFFSET_##atype(htype, structname, fieldname), \ + PB_ARRAY_SIZE_##atype(htype, structname, fieldname)) + +#define PB_DATA_OFFSET_STATIC(htype, structname, fieldname) PB_DATA_OFFSET_##htype(structname, fieldname) +#define PB_DATA_OFFSET_POINTER(htype, structname, fieldname) PB_DATA_OFFSET_##htype(structname, fieldname) +#define PB_DATA_OFFSET_CALLBACK(htype, structname, fieldname) PB_DATA_OFFSET_##htype(structname, fieldname) +#define PB_DATA_OFFSET_REQUIRED(structname, fieldname) offsetof(structname, fieldname) +#define PB_DATA_OFFSET_SINGULAR(structname, fieldname) offsetof(structname, fieldname) +#define PB_DATA_OFFSET_ONEOF(structname, fieldname) offsetof(structname, PB_ONEOF_NAME(FULL, fieldname)) +#define PB_DATA_OFFSET_OPTIONAL(structname, fieldname) offsetof(structname, fieldname) +#define PB_DATA_OFFSET_REPEATED(structname, fieldname) offsetof(structname, fieldname) +#define PB_DATA_OFFSET_FIXARRAY(structname, fieldname) offsetof(structname, fieldname) + +#define PB_SIZE_OFFSET_STATIC(htype, structname, fieldname) PB_SIZE_OFFSET_##htype(structname, fieldname) +#define PB_SIZE_OFFSET_POINTER(htype, structname, fieldname) PB_SIZE_OFFSET_PTR_##htype(structname, fieldname) +#define PB_SIZE_OFFSET_CALLBACK(htype, structname, fieldname) PB_SIZE_OFFSET_CB_##htype(structname, fieldname) +#define PB_SIZE_OFFSET_REQUIRED(structname, fieldname) 0 +#define PB_SIZE_OFFSET_SINGULAR(structname, fieldname) 0 +#define PB_SIZE_OFFSET_ONEOF(structname, fieldname) PB_SIZE_OFFSET_ONEOF2(structname, PB_ONEOF_NAME(FULL, fieldname), PB_ONEOF_NAME(UNION, fieldname)) +#define PB_SIZE_OFFSET_ONEOF2(structname, fullname, unionname) PB_SIZE_OFFSET_ONEOF3(structname, fullname, unionname) +#define PB_SIZE_OFFSET_ONEOF3(structname, fullname, unionname) pb_delta(structname, fullname, which_##unionname) +#define PB_SIZE_OFFSET_OPTIONAL(structname, fieldname) pb_delta(structname, fieldname, has_##fieldname) +#define PB_SIZE_OFFSET_REPEATED(structname, fieldname) pb_delta(structname, fieldname, fieldname##_count) +#define PB_SIZE_OFFSET_FIXARRAY(structname, fieldname) 0 +#define PB_SIZE_OFFSET_PTR_REQUIRED(structname, fieldname) 0 +#define PB_SIZE_OFFSET_PTR_SINGULAR(structname, fieldname) 0 +#define PB_SIZE_OFFSET_PTR_ONEOF(structname, fieldname) PB_SIZE_OFFSET_ONEOF(structname, fieldname) +#define PB_SIZE_OFFSET_PTR_OPTIONAL(structname, fieldname) 0 +#define PB_SIZE_OFFSET_PTR_REPEATED(structname, fieldname) PB_SIZE_OFFSET_REPEATED(structname, fieldname) +#define PB_SIZE_OFFSET_PTR_FIXARRAY(structname, fieldname) 0 +#define PB_SIZE_OFFSET_CB_REQUIRED(structname, fieldname) 0 +#define PB_SIZE_OFFSET_CB_SINGULAR(structname, fieldname) 0 +#define PB_SIZE_OFFSET_CB_ONEOF(structname, fieldname) PB_SIZE_OFFSET_ONEOF(structname, fieldname) +#define PB_SIZE_OFFSET_CB_OPTIONAL(structname, fieldname) 0 +#define PB_SIZE_OFFSET_CB_REPEATED(structname, fieldname) 0 +#define PB_SIZE_OFFSET_CB_FIXARRAY(structname, fieldname) 0 + +#define PB_ARRAY_SIZE_STATIC(htype, structname, fieldname) PB_ARRAY_SIZE_##htype(structname, fieldname) +#define PB_ARRAY_SIZE_POINTER(htype, structname, fieldname) 1 +#define PB_ARRAY_SIZE_CALLBACK(htype, structname, fieldname) 1 +#define PB_ARRAY_SIZE_REQUIRED(structname, fieldname) 1 +#define PB_ARRAY_SIZE_SINGULAR(structname, fieldname) 1 +#define PB_ARRAY_SIZE_OPTIONAL(structname, fieldname) 1 +#define PB_ARRAY_SIZE_ONEOF(structname, fieldname) 1 +#define PB_ARRAY_SIZE_REPEATED(structname, fieldname) pb_arraysize(structname, fieldname) +#define PB_ARRAY_SIZE_FIXARRAY(structname, fieldname) pb_arraysize(structname, fieldname) + +#define PB_DATA_SIZE_STATIC(htype, structname, fieldname) PB_DATA_SIZE_##htype(structname, fieldname) +#define PB_DATA_SIZE_POINTER(htype, structname, fieldname) PB_DATA_SIZE_PTR_##htype(structname, fieldname) +#define PB_DATA_SIZE_CALLBACK(htype, structname, fieldname) PB_DATA_SIZE_CB_##htype(structname, fieldname) +#define PB_DATA_SIZE_REQUIRED(structname, fieldname) pb_membersize(structname, fieldname) +#define PB_DATA_SIZE_SINGULAR(structname, fieldname) pb_membersize(structname, fieldname) +#define PB_DATA_SIZE_OPTIONAL(structname, fieldname) pb_membersize(structname, fieldname) +#define PB_DATA_SIZE_ONEOF(structname, fieldname) pb_membersize(structname, PB_ONEOF_NAME(FULL, fieldname)) +#define PB_DATA_SIZE_REPEATED(structname, fieldname) pb_membersize(structname, fieldname[0]) +#define PB_DATA_SIZE_FIXARRAY(structname, fieldname) pb_membersize(structname, fieldname[0]) +#define PB_DATA_SIZE_PTR_REQUIRED(structname, fieldname) pb_membersize(structname, fieldname[0]) +#define PB_DATA_SIZE_PTR_SINGULAR(structname, fieldname) pb_membersize(structname, fieldname[0]) +#define PB_DATA_SIZE_PTR_OPTIONAL(structname, fieldname) pb_membersize(structname, fieldname[0]) +#define PB_DATA_SIZE_PTR_ONEOF(structname, fieldname) pb_membersize(structname, PB_ONEOF_NAME(FULL, fieldname)[0]) +#define PB_DATA_SIZE_PTR_REPEATED(structname, fieldname) pb_membersize(structname, fieldname[0]) +#define PB_DATA_SIZE_PTR_FIXARRAY(structname, fieldname) pb_membersize(structname, fieldname[0]) +#define PB_DATA_SIZE_CB_REQUIRED(structname, fieldname) pb_membersize(structname, fieldname) +#define PB_DATA_SIZE_CB_SINGULAR(structname, fieldname) pb_membersize(structname, fieldname) +#define PB_DATA_SIZE_CB_OPTIONAL(structname, fieldname) pb_membersize(structname, fieldname) +#define PB_DATA_SIZE_CB_ONEOF(structname, fieldname) pb_membersize(structname, PB_ONEOF_NAME(FULL, fieldname)) +#define PB_DATA_SIZE_CB_REPEATED(structname, fieldname) pb_membersize(structname, fieldname) +#define PB_DATA_SIZE_CB_FIXARRAY(structname, fieldname) pb_membersize(structname, fieldname) + +#define PB_ONEOF_NAME(type, tuple) PB_EXPAND(PB_ONEOF_NAME_##type tuple) +#define PB_ONEOF_NAME_UNION(unionname, membername, fullname) unionname +#define PB_ONEOF_NAME_MEMBER(unionname, membername, fullname) membername +#define PB_ONEOF_NAME_FULL(unionname, membername, fullname) fullname + +#define PB_GEN_SUBMSG_INFO(structname, atype, htype, ltype, fieldname, tag) \ + PB_SUBMSG_INFO_##htype(ltype, structname, fieldname) + +#define PB_SUBMSG_INFO_REQUIRED(ltype, structname, fieldname) PB_SUBMSG_INFO_##ltype(structname##_##fieldname##_MSGTYPE) +#define PB_SUBMSG_INFO_SINGULAR(ltype, structname, fieldname) PB_SUBMSG_INFO_##ltype(structname##_##fieldname##_MSGTYPE) +#define PB_SUBMSG_INFO_OPTIONAL(ltype, structname, fieldname) PB_SUBMSG_INFO_##ltype(structname##_##fieldname##_MSGTYPE) +#define PB_SUBMSG_INFO_ONEOF(ltype, structname, fieldname) PB_SUBMSG_INFO_ONEOF2(ltype, structname, PB_ONEOF_NAME(UNION, fieldname), PB_ONEOF_NAME(MEMBER, fieldname)) +#define PB_SUBMSG_INFO_ONEOF2(ltype, structname, unionname, membername) PB_SUBMSG_INFO_ONEOF3(ltype, structname, unionname, membername) +#define PB_SUBMSG_INFO_ONEOF3(ltype, structname, unionname, membername) PB_SUBMSG_INFO_##ltype(structname##_##unionname##_##membername##_MSGTYPE) +#define PB_SUBMSG_INFO_REPEATED(ltype, structname, fieldname) PB_SUBMSG_INFO_##ltype(structname##_##fieldname##_MSGTYPE) +#define PB_SUBMSG_INFO_FIXARRAY(ltype, structname, fieldname) PB_SUBMSG_INFO_##ltype(structname##_##fieldname##_MSGTYPE) +#define PB_SUBMSG_INFO_BOOL(t) +#define PB_SUBMSG_INFO_BYTES(t) +#define PB_SUBMSG_INFO_DOUBLE(t) +#define PB_SUBMSG_INFO_ENUM(t) +#define PB_SUBMSG_INFO_UENUM(t) +#define PB_SUBMSG_INFO_FIXED32(t) +#define PB_SUBMSG_INFO_FIXED64(t) +#define PB_SUBMSG_INFO_FLOAT(t) +#define PB_SUBMSG_INFO_INT32(t) +#define PB_SUBMSG_INFO_INT64(t) +#define PB_SUBMSG_INFO_MESSAGE(t) PB_SUBMSG_DESCRIPTOR(t) +#define PB_SUBMSG_INFO_MSG_W_CB(t) PB_SUBMSG_DESCRIPTOR(t) +#define PB_SUBMSG_INFO_SFIXED32(t) +#define PB_SUBMSG_INFO_SFIXED64(t) +#define PB_SUBMSG_INFO_SINT32(t) +#define PB_SUBMSG_INFO_SINT64(t) +#define PB_SUBMSG_INFO_STRING(t) +#define PB_SUBMSG_INFO_UINT32(t) +#define PB_SUBMSG_INFO_UINT64(t) +#define PB_SUBMSG_INFO_EXTENSION(t) +#define PB_SUBMSG_INFO_FIXED_LENGTH_BYTES(t) +#define PB_SUBMSG_DESCRIPTOR(t) &(t##_msg), + +/* The field descriptors use a variable width format, with width of either + * 1, 2, 4 or 8 of 32-bit words. The two lowest bytes of the first byte always + * encode the descriptor size, 6 lowest bits of field tag number, and 8 bits + * of the field type. + * + * Descriptor size is encoded as 0 = 1 word, 1 = 2 words, 2 = 4 words, 3 = 8 words. + * + * Formats, listed starting with the least significant bit of the first word. + * 1 word: [2-bit len] [6-bit tag] [8-bit type] [8-bit data_offset] [4-bit size_offset] [4-bit data_size] + * + * 2 words: [2-bit len] [6-bit tag] [8-bit type] [12-bit array_size] [4-bit size_offset] + * [16-bit data_offset] [12-bit data_size] [4-bit tag>>6] + * + * 4 words: [2-bit len] [6-bit tag] [8-bit type] [16-bit array_size] + * [8-bit size_offset] [24-bit tag>>6] + * [32-bit data_offset] + * [32-bit data_size] + * + * 8 words: [2-bit len] [6-bit tag] [8-bit type] [16-bit reserved] + * [8-bit size_offset] [24-bit tag>>6] + * [32-bit data_offset] + * [32-bit data_size] + * [32-bit array_size] + * [32-bit reserved] + * [32-bit reserved] + * [32-bit reserved] + */ + +#define PB_FIELDINFO_1(tag, type, data_offset, data_size, size_offset, array_size) \ + (0 | (((tag) << 2) & 0xFF) | ((type) << 8) | (((uint32_t)(data_offset) &0xFF) << 16) | \ + (((uint32_t)(size_offset) &0x0F) << 24) | (((uint32_t)(data_size) &0x0F) << 28)), + +#define PB_FIELDINFO_2(tag, type, data_offset, data_size, size_offset, array_size) \ + (1 | (((tag) << 2) & 0xFF) | ((type) << 8) | (((uint32_t)(array_size) &0xFFF) << 16) | (((uint32_t)(size_offset) &0x0F) << 28)), \ + (((uint32_t)(data_offset) &0xFFFF) | (((uint32_t)(data_size) &0xFFF) << 16) | (((uint32_t)(tag) &0x2c0) << 22)), + +#define PB_FIELDINFO_4(tag, type, data_offset, data_size, size_offset, array_size) \ + (2 | (((tag) << 2) & 0xFF) | ((type) << 8) | (((uint32_t)(array_size) &0xFFFF) << 16)), \ + ((uint32_t)(int8_t)(size_offset) | (((uint32_t)(tag) << 2) & 0xFFFFFF00)), \ + (data_offset), (data_size), + +#define PB_FIELDINFO_8(tag, type, data_offset, data_size, size_offset, array_size) \ + (3 | (((tag) << 2) & 0xFF) | ((type) << 8)), \ + ((uint32_t)(int8_t)(size_offset) | (((uint32_t)(tag) << 2) & 0xFFFFFF00)), \ + (data_offset), (data_size), (array_size) + +/* These assertions verify that the field information fits in the allocated space. + * The generator tries to automatically determine the correct width that can fit all + * data associated with a message. These asserts will fail only if there has been a + * problem in the automatic logic - this may be worth reporting as a bug. As a workaround, + * you can increase the descriptor width by defining PB_FIELDINFO_WIDTH or by setting + * descriptorsize option in .options file. + */ +#define PB_FITS(value, bits) ((uint32_t)(value) < ((uint32_t) 1 << bits)) +#define PB_FIELDINFO_ASSERT_1(tag, type, data_offset, data_size, size_offset, array_size) \ + PB_STATIC_ASSERT(PB_FITS(tag, 6) && PB_FITS(data_offset, 8) && PB_FITS(size_offset, 4) && PB_FITS(data_size, 4) && PB_FITS(array_size, 1), FIELDINFO_DOES_NOT_FIT_width1_field##tag) + +#define PB_FIELDINFO_ASSERT_2(tag, type, data_offset, data_size, size_offset, array_size) \ + PB_STATIC_ASSERT(PB_FITS(tag, 10) && PB_FITS(data_offset, 16) && PB_FITS(size_offset, 4) && PB_FITS(data_size, 12) && PB_FITS(array_size, 12), FIELDINFO_DOES_NOT_FIT_width2_field##tag) + +#ifndef PB_FIELD_32BIT +/* Maximum field sizes are still 16-bit if pb_size_t is 16-bit */ +#define PB_FIELDINFO_ASSERT_4(tag, type, data_offset, data_size, size_offset, array_size) \ + PB_STATIC_ASSERT(PB_FITS(tag, 16) && PB_FITS(data_offset, 16) && PB_FITS((int8_t) size_offset, 8) && PB_FITS(data_size, 16) && PB_FITS(array_size, 16), FIELDINFO_DOES_NOT_FIT_width4_field##tag) + +#define PB_FIELDINFO_ASSERT_8(tag, type, data_offset, data_size, size_offset, array_size) \ + PB_STATIC_ASSERT(PB_FITS(tag, 16) && PB_FITS(data_offset, 16) && PB_FITS((int8_t) size_offset, 8) && PB_FITS(data_size, 16) && PB_FITS(array_size, 16), FIELDINFO_DOES_NOT_FIT_width8_field##tag) +#else +/* Up to 32-bit fields supported. + * Note that the checks are against 31 bits to avoid compiler warnings about shift wider than type in the test. + * I expect that there is no reasonable use for >2GB messages with nanopb anyway. + */ +#define PB_FIELDINFO_ASSERT_4(tag, type, data_offset, data_size, size_offset, array_size) \ + PB_STATIC_ASSERT(PB_FITS(tag, 30) && PB_FITS(data_offset, 31) && PB_FITS((int8_t) size_offset, 8) && PB_FITS(data_size, 31) && PB_FITS(array_size, 16), FIELDINFO_DOES_NOT_FIT_width4_field##tag) + +#define PB_FIELDINFO_ASSERT_8(tag, type, data_offset, data_size, size_offset, array_size) \ + PB_STATIC_ASSERT(PB_FITS(tag, 30) && PB_FITS(data_offset, 31) && PB_FITS((int8_t) size_offset, 8) && PB_FITS(data_size, 31) && PB_FITS(array_size, 31), FIELDINFO_DOES_NOT_FIT_width8_field##tag) +#endif + +/* Automatic picking of FIELDINFO width: + * Uses width 1 when possible, otherwise resorts to width 2. + */ + +#ifndef PB_FIELDINFO_WIDTH +#define PB_FIELDINFO_WIDTH_AUTO(atype, htype, ltype) PB_FIELDINFO_WIDTH_##atype(htype, ltype) +#define PB_FIELDINFO_WIDTH_STATIC(htype, ltype) PB_FIELDINFO_WIDTH_##htype(ltype) +#define PB_FIELDINFO_WIDTH_POINTER(htype, ltype) PB_FIELDINFO_WIDTH_##htype(ltype) +#define PB_FIELDINFO_WIDTH_CALLBACK(htype, ltype) 2 +#define PB_FIELDINFO_WIDTH_REQUIRED(ltype) PB_FIELDINFO_WIDTH_##ltype +#define PB_FIELDINFO_WIDTH_SINGULAR(ltype) PB_FIELDINFO_WIDTH_##ltype +#define PB_FIELDINFO_WIDTH_OPTIONAL(ltype) PB_FIELDINFO_WIDTH_##ltype +#define PB_FIELDINFO_WIDTH_ONEOF(ltype) PB_FIELDINFO_WIDTH_##ltype +#define PB_FIELDINFO_WIDTH_REPEATED(ltype) 2 +#define PB_FIELDINFO_WIDTH_FIXARRAY(ltype) 2 +#define PB_FIELDINFO_WIDTH_BOOL 1 +#define PB_FIELDINFO_WIDTH_BYTES 2 +#define PB_FIELDINFO_WIDTH_DOUBLE 1 +#define PB_FIELDINFO_WIDTH_ENUM 1 +#define PB_FIELDINFO_WIDTH_UENUM 1 +#define PB_FIELDINFO_WIDTH_FIXED32 1 +#define PB_FIELDINFO_WIDTH_FIXED64 1 +#define PB_FIELDINFO_WIDTH_FLOAT 1 +#define PB_FIELDINFO_WIDTH_INT32 1 +#define PB_FIELDINFO_WIDTH_INT64 1 +#define PB_FIELDINFO_WIDTH_MESSAGE 2 +#define PB_FIELDINFO_WIDTH_SFIXED32 1 +#define PB_FIELDINFO_WIDTH_SFIXED64 1 +#define PB_FIELDINFO_WIDTH_SINT32 1 +#define PB_FIELDINFO_WIDTH_SINT64 1 +#define PB_FIELDINFO_WIDTH_STRING 2 +#define PB_FIELDINFO_WIDTH_UINT32 1 +#define PB_FIELDINFO_WIDTH_UINT64 1 +#define PB_FIELDINFO_WIDTH_EXTENSION 1 +#define PB_FIELDINFO_WIDTH_FIXED_LENGTH_BYTES 2 +#else +#define PB_FIELDINFO_WIDTH_AUTO(atype, htype, ltype) PB_FIELDINFO_WIDTH +#endif + +/* The mapping from protobuf types to LTYPEs is done using these macros. */ +#define PB_LTYPE_MAP_BOOL PB_LTYPE_BOOL +#define PB_LTYPE_MAP_BYTES PB_LTYPE_BYTES +#define PB_LTYPE_MAP_DOUBLE PB_LTYPE_FIXED64 +#define PB_LTYPE_MAP_ENUM PB_LTYPE_VARINT +#define PB_LTYPE_MAP_UENUM PB_LTYPE_UVARINT +#define PB_LTYPE_MAP_FIXED32 PB_LTYPE_FIXED32 +#define PB_LTYPE_MAP_FIXED64 PB_LTYPE_FIXED64 +#define PB_LTYPE_MAP_FLOAT PB_LTYPE_FIXED32 +#define PB_LTYPE_MAP_INT32 PB_LTYPE_VARINT +#define PB_LTYPE_MAP_INT64 PB_LTYPE_VARINT +#define PB_LTYPE_MAP_MESSAGE PB_LTYPE_SUBMESSAGE +#define PB_LTYPE_MAP_MSG_W_CB PB_LTYPE_SUBMSG_W_CB +#define PB_LTYPE_MAP_SFIXED32 PB_LTYPE_FIXED32 +#define PB_LTYPE_MAP_SFIXED64 PB_LTYPE_FIXED64 +#define PB_LTYPE_MAP_SINT32 PB_LTYPE_SVARINT +#define PB_LTYPE_MAP_SINT64 PB_LTYPE_SVARINT +#define PB_LTYPE_MAP_STRING PB_LTYPE_STRING +#define PB_LTYPE_MAP_UINT32 PB_LTYPE_UVARINT +#define PB_LTYPE_MAP_UINT64 PB_LTYPE_UVARINT +#define PB_LTYPE_MAP_EXTENSION PB_LTYPE_EXTENSION +#define PB_LTYPE_MAP_FIXED_LENGTH_BYTES PB_LTYPE_FIXED_LENGTH_BYTES + +/* These macros are used for giving out error messages. + * They are mostly a debugging aid; the main error information + * is the true/false return value from functions. + * Some code space can be saved by disabling the error + * messages if not used. + * + * PB_SET_ERROR() sets the error message if none has been set yet. + * msg must be a constant string literal. + * PB_GET_ERROR() always returns a pointer to a string. + * PB_RETURN_ERROR() sets the error and returns false from current + * function. + */ +#ifdef PB_NO_ERRMSG +#define PB_SET_ERROR(stream, msg) PB_UNUSED(stream) +#define PB_GET_ERROR(stream) "(errmsg disabled)" +#else +#define PB_SET_ERROR(stream, msg) (stream->errmsg = (stream)->errmsg ? (stream)->errmsg : (msg)) +#define PB_GET_ERROR(stream) ((stream)->errmsg ? (stream)->errmsg : "(none)") +#endif + +#define PB_RETURN_ERROR(stream, msg) return PB_SET_ERROR(stream, msg), false + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#ifdef __cplusplus +#if __cplusplus >= 201103L +#define PB_CONSTEXPR constexpr +#else // __cplusplus >= 201103L +#define PB_CONSTEXPR +#endif // __cplusplus >= 201103L + +#if __cplusplus >= 201703L +#define PB_INLINE_CONSTEXPR inline constexpr +#else // __cplusplus >= 201703L +#define PB_INLINE_CONSTEXPR PB_CONSTEXPR +#endif // __cplusplus >= 201703L + +namespace nanopb { +// Each type will be partially specialized by the generator. +template +struct MessageDescriptor; +} // namespace nanopb +#endif /* __cplusplus */ + +#endif diff --git a/c/src/third-party/nanopb/pb_common.c b/c/src/third-party/nanopb/pb_common.c new file mode 100755 index 000000000..c18782da1 --- /dev/null +++ b/c/src/third-party/nanopb/pb_common.c @@ -0,0 +1,280 @@ +/******************************************************************************* + * Copyright (c) 2011 Petteri Aimonen + * + * This software is provided 'as-is', without any express or + * implied warranty. In no event will the authors be held liable + * for any damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + *******************************************************************************/ + +/* pb_common.c: Common support functions for pb_encode.c and pb_decode.c. + * + * 2014 Petteri Aimonen + */ + +#include "pb_common.h" + +static bool load_descriptor_values(pb_field_iter_t* iter) { + uint32_t word0; + uint32_t data_offset; + uint8_t format; + int8_t size_offset; + + if (iter->index >= iter->descriptor->field_count) + return false; + + word0 = PB_PROGMEM_READU32(iter->descriptor->field_info[iter->field_info_index]); + format = word0 & 3; + iter->tag = (pb_size_t)((word0 >> 2) & 0x3F); + iter->type = (pb_type_t)((word0 >> 8) & 0xFF); + + if (format == 0) { + /* 1-word format */ + iter->array_size = 1; + size_offset = (int8_t)((word0 >> 24) & 0x0F); + data_offset = (word0 >> 16) & 0xFF; + iter->data_size = (pb_size_t)((word0 >> 28) & 0x0F); + } else if (format == 1) { + /* 2-word format */ + uint32_t word1 = PB_PROGMEM_READU32(iter->descriptor->field_info[iter->field_info_index + 1]); + + iter->array_size = (pb_size_t)((word0 >> 16) & 0x0FFF); + iter->tag = (pb_size_t)(iter->tag | ((word1 >> 28) << 6)); + size_offset = (int8_t)((word0 >> 28) & 0x0F); + data_offset = word1 & 0xFFFF; + iter->data_size = (pb_size_t)((word1 >> 16) & 0x0FFF); + } else if (format == 2) { + /* 4-word format */ + uint32_t word1 = PB_PROGMEM_READU32(iter->descriptor->field_info[iter->field_info_index + 1]); + uint32_t word2 = PB_PROGMEM_READU32(iter->descriptor->field_info[iter->field_info_index + 2]); + uint32_t word3 = PB_PROGMEM_READU32(iter->descriptor->field_info[iter->field_info_index + 3]); + + iter->array_size = (pb_size_t)(word0 >> 16); + iter->tag = (pb_size_t)(iter->tag | ((word1 >> 8) << 6)); + size_offset = (int8_t)(word1 & 0xFF); + data_offset = word2; + iter->data_size = (pb_size_t) word3; + } else { + /* 8-word format */ + uint32_t word1 = PB_PROGMEM_READU32(iter->descriptor->field_info[iter->field_info_index + 1]); + uint32_t word2 = PB_PROGMEM_READU32(iter->descriptor->field_info[iter->field_info_index + 2]); + uint32_t word3 = PB_PROGMEM_READU32(iter->descriptor->field_info[iter->field_info_index + 3]); + uint32_t word4 = PB_PROGMEM_READU32(iter->descriptor->field_info[iter->field_info_index + 4]); + + iter->array_size = (pb_size_t) word4; + iter->tag = (pb_size_t)(iter->tag | ((word1 >> 8) << 6)); + size_offset = (int8_t)(word1 & 0xFF); + data_offset = word2; + iter->data_size = (pb_size_t) word3; + } + + iter->pField = (char*) iter->message + data_offset; + + if (size_offset) { + iter->pSize = (char*) iter->pField - size_offset; + } else if (PB_HTYPE(iter->type) == PB_HTYPE_REPEATED && + (PB_ATYPE(iter->type) == PB_ATYPE_STATIC || + PB_ATYPE(iter->type) == PB_ATYPE_POINTER)) { + /* Fixed count array */ + iter->pSize = &iter->array_size; + } else { + iter->pSize = NULL; + } + + if (PB_ATYPE(iter->type) == PB_ATYPE_POINTER && iter->pField != NULL) { + iter->pData = *(void**) iter->pField; + } else { + iter->pData = iter->pField; + } + + if (PB_LTYPE_IS_SUBMSG(iter->type)) { + iter->submsg_desc = iter->descriptor->submsg_info[iter->submessage_index]; + } else { + iter->submsg_desc = NULL; + } + + return true; +} + +static void advance_iterator(pb_field_iter_t* iter) { + iter->index++; + + if (iter->index >= iter->descriptor->field_count) { + /* Restart */ + iter->index = 0; + iter->field_info_index = 0; + iter->submessage_index = 0; + iter->required_field_index = 0; + } else { + /* Increment indexes based on previous field type. + * All field info formats have the following fields: + * - lowest 2 bits tell the amount of words in the descriptor (2^n words) + * - bits 2..7 give the lowest bits of tag number. + * - bits 8..15 give the field type. + */ + uint32_t prev_descriptor = PB_PROGMEM_READU32(iter->descriptor->field_info[iter->field_info_index]); + pb_type_t prev_type = (prev_descriptor >> 8) & 0xFF; + pb_size_t descriptor_len = (pb_size_t)(1 << (prev_descriptor & 3)); + + iter->field_info_index = (pb_size_t)(iter->field_info_index + descriptor_len); + + if (PB_HTYPE(prev_type) == PB_HTYPE_REQUIRED) { + iter->required_field_index++; + } + + if (PB_LTYPE_IS_SUBMSG(prev_type)) { + iter->submessage_index++; + } + } +} + +bool pb_field_iter_begin(pb_field_iter_t* iter, const pb_msgdesc_t* desc, void* message) { + memset(iter, 0, sizeof(*iter)); + + iter->descriptor = desc; + iter->message = message; + + return load_descriptor_values(iter); +} + +bool pb_field_iter_begin_extension(pb_field_iter_t* iter, pb_extension_t* extension) { + const pb_msgdesc_t* msg = (const pb_msgdesc_t*) extension->type->arg; + bool status; + + uint32_t word0 = PB_PROGMEM_READU32(msg->field_info[0]); + if (PB_ATYPE(word0 >> 8) == PB_ATYPE_POINTER) { + /* For pointer extensions, the pointer is stored directly + * in the extension structure. This avoids having an extra + * indirection. */ + status = pb_field_iter_begin(iter, msg, &extension->dest); + } else { + status = pb_field_iter_begin(iter, msg, extension->dest); + } + + iter->pSize = &extension->found; + return status; +} + +bool pb_field_iter_next(pb_field_iter_t* iter) { + advance_iterator(iter); + (void) load_descriptor_values(iter); + return iter->index != 0; +} + +bool pb_field_iter_find(pb_field_iter_t* iter, uint32_t tag) { + if (iter->tag == tag) { + return true; /* Nothing to do, correct field already. */ + } else { + pb_size_t start = iter->index; + uint32_t fieldinfo; + + do { + /* Advance iterator but don't load values yet */ + advance_iterator(iter); + + /* Do fast check for tag number match */ + fieldinfo = PB_PROGMEM_READU32(iter->descriptor->field_info[iter->field_info_index]); + + if (((fieldinfo >> 2) & 0x3F) == (tag & 0x3F)) { + /* Good candidate, check further */ + (void) load_descriptor_values(iter); + + if (iter->tag == tag && + PB_LTYPE(iter->type) != PB_LTYPE_EXTENSION) { + /* Found it */ + return true; + } + } + } while (iter->index != start); + + /* Searched all the way back to start, and found nothing. */ + (void) load_descriptor_values(iter); + return false; + } +} + +bool pb_default_field_callback(pb_istream_t* istream, pb_ostream_t* ostream, const pb_field_t* field) { + if (field->data_size == sizeof(pb_callback_t)) { + pb_callback_t* pCallback = (pb_callback_t*) field->pData; + + if (pCallback != NULL) { + if (istream != NULL && pCallback->funcs.decode != NULL) { + return pCallback->funcs.decode(istream, field, &pCallback->arg); + } + + if (ostream != NULL && pCallback->funcs.encode != NULL) { + return pCallback->funcs.encode(ostream, field, &pCallback->arg); + } + } + } + + return true; /* Success, but didn't do anything */ +} + +#ifdef PB_VALIDATE_UTF8 + +/* This function checks whether a string is valid UTF-8 text. + * + * Algorithm is adapted from https://www.cl.cam.ac.uk/~mgk25/ucs/utf8_check.c + * Original copyright: Markus Kuhn 2005-03-30 + * Licensed under "Short code license", which allows use under MIT license or + * any compatible with it. + */ + +bool pb_validate_utf8(const char* str) { + const pb_byte_t* s = (const pb_byte_t*) str; + while (*s) { + if (*s < 0x80) { + /* 0xxxxxxx */ + s++; + } else if ((s[0] & 0xe0) == 0xc0) { + /* 110XXXXx 10xxxxxx */ + if ((s[1] & 0xc0) != 0x80 || + (s[0] & 0xfe) == 0xc0) /* overlong? */ + return false; + else + s += 2; + } else if ((s[0] & 0xf0) == 0xe0) { + /* 1110XXXX 10Xxxxxx 10xxxxxx */ + if ((s[1] & 0xc0) != 0x80 || + (s[2] & 0xc0) != 0x80 || + (s[0] == 0xe0 && (s[1] & 0xe0) == 0x80) || /* overlong? */ + (s[0] == 0xed && (s[1] & 0xe0) == 0xa0) || /* surrogate? */ + (s[0] == 0xef && s[1] == 0xbf && + (s[2] & 0xfe) == 0xbe)) /* U+FFFE or U+FFFF? */ + return false; + else + s += 3; + } else if ((s[0] & 0xf8) == 0xf0) { + /* 11110XXX 10XXxxxx 10xxxxxx 10xxxxxx */ + if ((s[1] & 0xc0) != 0x80 || + (s[2] & 0xc0) != 0x80 || + (s[3] & 0xc0) != 0x80 || + (s[0] == 0xf0 && (s[1] & 0xf0) == 0x80) || /* overlong? */ + (s[0] == 0xf4 && s[1] > 0x8f) || s[0] > 0xf4) /* > U+10FFFF? */ + return false; + else + s += 4; + } else { + return false; + } + } + + return true; +} + +#endif diff --git a/c/src/third-party/nanopb/pb_common.h b/c/src/third-party/nanopb/pb_common.h new file mode 100755 index 000000000..672ec2a3c --- /dev/null +++ b/c/src/third-party/nanopb/pb_common.h @@ -0,0 +1,61 @@ +/******************************************************************************* + * Copyright (c) 2011 Petteri Aimonen + * + * This software is provided 'as-is', without any express or + * implied warranty. In no event will the authors be held liable + * for any damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + *******************************************************************************/ + +/* pb_common.h: Common support functions for pb_encode.c and pb_decode.c. + * These functions are rarely needed by applications directly. + */ + +#ifndef PB_COMMON_H_INCLUDED +#define PB_COMMON_H_INCLUDED + +#include "pb.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Initialize the field iterator structure to beginning. + * Returns false if the message type is empty. */ +bool pb_field_iter_begin(pb_field_iter_t* iter, const pb_msgdesc_t* desc, void* message); + +/* Get a field iterator for extension field. */ +bool pb_field_iter_begin_extension(pb_field_iter_t* iter, pb_extension_t* extension); + +/* Advance the iterator to the next field. + * Returns false when the iterator wraps back to the first field. */ +bool pb_field_iter_next(pb_field_iter_t* iter); + +/* Advance the iterator until it points at a field with the given tag. + * Returns false if no such field exists. */ +bool pb_field_iter_find(pb_field_iter_t* iter, uint32_t tag); + +#ifdef PB_VALIDATE_UTF8 +/* Validate UTF-8 text string */ +bool pb_validate_utf8(const char* s); +#endif + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif diff --git a/c/src/third-party/nanopb/pb_decode.c b/c/src/third-party/nanopb/pb_decode.c new file mode 100755 index 000000000..3d4749887 --- /dev/null +++ b/c/src/third-party/nanopb/pb_decode.c @@ -0,0 +1,1491 @@ +/******************************************************************************* + * Copyright (c) 2011 Petteri Aimonen + * + * This software is provided 'as-is', without any express or + * implied warranty. In no event will the authors be held liable + * for any damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + *******************************************************************************/ + +/* pb_decode.c -- decode a protobuf using minimal resources + * + * 2011 Petteri Aimonen + */ + +/* Use the GCC warn_unused_result attribute to check that all return values + * are propagated correctly. On other compilers and gcc before 3.4.0 just + * ignore the annotation. + */ +#if !defined(__GNUC__) || (__GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 4) +#define checkreturn +#else +#define checkreturn __attribute__((warn_unused_result)) +#endif + +#include "pb_decode.h" +#include "pb.h" +#include "pb_common.h" + +/************************************** + * Declarations internal to this file * + **************************************/ + +static bool checkreturn buf_read(pb_istream_t* stream, pb_byte_t* buf, size_t count); +static bool checkreturn pb_decode_varint32_eof(pb_istream_t* stream, uint32_t* dest, bool* eof); +static bool checkreturn read_raw_value(pb_istream_t* stream, pb_wire_type_t wire_type, pb_byte_t* buf, size_t* size); +static bool checkreturn decode_basic_field(pb_istream_t* stream, pb_field_iter_t* field); +static bool checkreturn decode_static_field(pb_istream_t* stream, pb_wire_type_t wire_type, pb_field_iter_t* field); +static bool checkreturn decode_pointer_field(pb_istream_t* stream, pb_wire_type_t wire_type, pb_field_iter_t* field); +static bool checkreturn decode_callback_field(pb_istream_t* stream, pb_wire_type_t wire_type, pb_field_iter_t* field); +static bool checkreturn decode_field(pb_istream_t* stream, pb_wire_type_t wire_type, pb_field_iter_t* field); +static bool checkreturn default_extension_decoder(pb_istream_t* stream, pb_extension_t* extension, uint32_t tag, pb_wire_type_t wire_type); +static bool checkreturn decode_extension(pb_istream_t* stream, uint32_t tag, pb_wire_type_t wire_type, pb_field_iter_t* iter); +static bool checkreturn find_extension_field(pb_field_iter_t* iter); +static bool pb_message_set_to_defaults(pb_field_iter_t* iter); +static bool checkreturn pb_dec_bool(pb_istream_t* stream, const pb_field_iter_t* field); +static bool checkreturn pb_dec_varint(pb_istream_t* stream, const pb_field_iter_t* field); +static bool checkreturn pb_dec_fixed(pb_istream_t* stream, const pb_field_iter_t* field); +static bool checkreturn pb_dec_bytes(pb_istream_t* stream, const pb_field_iter_t* field); +static bool checkreturn pb_dec_string(pb_istream_t* stream, const pb_field_iter_t* field); +static bool checkreturn pb_dec_submessage(pb_istream_t* stream, const pb_field_iter_t* field); +static bool checkreturn pb_dec_fixed_length_bytes(pb_istream_t* stream, const pb_field_iter_t* field); +static bool checkreturn pb_skip_varint(pb_istream_t* stream); +static bool checkreturn pb_skip_string(pb_istream_t* stream); + +#ifdef PB_ENABLE_MALLOC +static bool checkreturn allocate_field(pb_istream_t* stream, void* pData, size_t data_size, size_t array_size); +static void initialize_pointer_field(void* pItem, pb_field_iter_t* field); +static bool checkreturn pb_release_union_field(pb_istream_t* stream, pb_field_iter_t* field); +static void pb_release_single_field(pb_field_iter_t* field); +#endif + +#ifdef PB_WITHOUT_64BIT +#define pb_int64_t int32_t +#define pb_uint64_t uint32_t +#else +#define pb_int64_t int64_t +#define pb_uint64_t uint64_t +#endif + +typedef struct { + uint32_t bitfield[(PB_MAX_REQUIRED_FIELDS + 31) / 32]; +} pb_fields_seen_t; + +/******************************* + * pb_istream_t implementation * + *******************************/ + +static bool checkreturn buf_read(pb_istream_t* stream, pb_byte_t* buf, size_t count) { + size_t i; + const pb_byte_t* source = (const pb_byte_t*) stream->state; + stream->state = (pb_byte_t*) stream->state + count; + + if (buf != NULL) { + for (i = 0; i < count; i++) + buf[i] = source[i]; + } + + return true; +} + +bool checkreturn pb_read(pb_istream_t* stream, pb_byte_t* buf, size_t count) { + if (count == 0) + return true; + +#ifndef PB_BUFFER_ONLY + if (buf == NULL && stream->callback != buf_read) { + /* Skip input bytes */ + pb_byte_t tmp[16]; + while (count > 16) { + if (!pb_read(stream, tmp, 16)) + return false; + + count -= 16; + } + + return pb_read(stream, tmp, count); + } +#endif + + if (stream->bytes_left < count) + PB_RETURN_ERROR(stream, "end-of-stream"); + +#ifndef PB_BUFFER_ONLY + if (!stream->callback(stream, buf, count)) + PB_RETURN_ERROR(stream, "io error"); +#else + if (!buf_read(stream, buf, count)) + return false; +#endif + + stream->bytes_left -= count; + return true; +} + +/* Read a single byte from input stream. buf may not be NULL. + * This is an optimization for the varint decoding. */ +static bool checkreturn pb_readbyte(pb_istream_t* stream, pb_byte_t* buf) { + if (stream->bytes_left == 0) + PB_RETURN_ERROR(stream, "end-of-stream"); + +#ifndef PB_BUFFER_ONLY + if (!stream->callback(stream, buf, 1)) + PB_RETURN_ERROR(stream, "io error"); +#else + *buf = *(const pb_byte_t*) stream->state; + stream->state = (pb_byte_t*) stream->state + 1; +#endif + + stream->bytes_left--; + + return true; +} + +pb_istream_t pb_istream_from_buffer(const pb_byte_t* buf, size_t bufsize) { + pb_istream_t stream; + /* Cast away the const from buf without a compiler error. We are + * careful to use it only in a const manner in the callbacks. + */ + union { + void* state; + const void* c_state; + } state; +#ifdef PB_BUFFER_ONLY + stream.callback = NULL; +#else + stream.callback = &buf_read; +#endif + state.c_state = buf; + stream.state = state.state; + stream.bytes_left = bufsize; +#ifndef PB_NO_ERRMSG + stream.errmsg = NULL; +#endif + return stream; +} + +/******************** + * Helper functions * + ********************/ + +static bool checkreturn pb_decode_varint32_eof(pb_istream_t* stream, uint32_t* dest, bool* eof) { + pb_byte_t byte; + uint32_t result; + + if (!pb_readbyte(stream, &byte)) { + if (stream->bytes_left == 0) { + if (eof) { + *eof = true; + } + } + + return false; + } + + if ((byte & 0x80) == 0) { + /* Quick case, 1 byte value */ + result = byte; + } else { + /* Multibyte case */ + uint_fast8_t bitpos = 7; + result = byte & 0x7F; + + do { + if (!pb_readbyte(stream, &byte)) + return false; + + if (bitpos >= 32) { + /* Note: The varint could have trailing 0x80 bytes, or 0xFF for negative. */ + uint8_t sign_extension = (bitpos < 63) ? 0xFF : 0x01; + + if ((byte & 0x7F) != 0x00 && ((result >> 31) == 0 || byte != sign_extension)) { + PB_RETURN_ERROR(stream, "varint overflow"); + } + } else { + result |= (uint32_t)(byte & 0x7F) << bitpos; + } + bitpos = (uint_fast8_t)(bitpos + 7); + } while (byte & 0x80); + + if (bitpos == 35 && (byte & 0x70) != 0) { + /* The last byte was at bitpos=28, so only bottom 4 bits fit. */ + PB_RETURN_ERROR(stream, "varint overflow"); + } + } + + *dest = result; + return true; +} + +bool checkreturn pb_decode_varint32(pb_istream_t* stream, uint32_t* dest) { + return pb_decode_varint32_eof(stream, dest, NULL); +} + +#ifndef PB_WITHOUT_64BIT +bool checkreturn pb_decode_varint(pb_istream_t* stream, uint64_t* dest) { + pb_byte_t byte; + uint_fast8_t bitpos = 0; + uint64_t result = 0; + + do { + if (bitpos >= 64) + PB_RETURN_ERROR(stream, "varint overflow"); + + if (!pb_readbyte(stream, &byte)) + return false; + + result |= (uint64_t)(byte & 0x7F) << bitpos; + bitpos = (uint_fast8_t)(bitpos + 7); + } while (byte & 0x80); + + *dest = result; + return true; +} +#endif + +bool checkreturn pb_skip_varint(pb_istream_t* stream) { + pb_byte_t byte; + do { + if (!pb_read(stream, &byte, 1)) + return false; + } while (byte & 0x80); + return true; +} + +bool checkreturn pb_skip_string(pb_istream_t* stream) { + uint32_t length; + if (!pb_decode_varint32(stream, &length)) + return false; + + if ((size_t) length != length) { + PB_RETURN_ERROR(stream, "size too large"); + } + + return pb_read(stream, NULL, (size_t) length); +} + +bool checkreturn pb_decode_tag(pb_istream_t* stream, pb_wire_type_t* wire_type, uint32_t* tag, bool* eof) { + uint32_t temp; + *eof = false; + *wire_type = (pb_wire_type_t) 0; + *tag = 0; + + if (!pb_decode_varint32_eof(stream, &temp, eof)) { + return false; + } + + *tag = temp >> 3; + *wire_type = (pb_wire_type_t)(temp & 7); + return true; +} + +bool checkreturn pb_skip_field(pb_istream_t* stream, pb_wire_type_t wire_type) { + switch (wire_type) { + case PB_WT_VARINT: return pb_skip_varint(stream); + case PB_WT_64BIT: return pb_read(stream, NULL, 8); + case PB_WT_STRING: return pb_skip_string(stream); + case PB_WT_32BIT: return pb_read(stream, NULL, 4); + default: PB_RETURN_ERROR(stream, "invalid wire_type"); + } +} + +/* Read a raw value to buffer, for the purpose of passing it to callback as + * a substream. Size is maximum size on call, and actual size on return. + */ +static bool checkreturn read_raw_value(pb_istream_t* stream, pb_wire_type_t wire_type, pb_byte_t* buf, size_t* size) { + size_t max_size = *size; + switch (wire_type) { + case PB_WT_VARINT: + *size = 0; + do { + (*size)++; + if (*size > max_size) + PB_RETURN_ERROR(stream, "varint overflow"); + + if (!pb_read(stream, buf, 1)) + return false; + } while (*buf++ & 0x80); + return true; + + case PB_WT_64BIT: + *size = 8; + return pb_read(stream, buf, 8); + + case PB_WT_32BIT: + *size = 4; + return pb_read(stream, buf, 4); + + case PB_WT_STRING: + /* Calling read_raw_value with a PB_WT_STRING is an error. + * Explicitly handle this case and fallthrough to default to avoid + * compiler warnings. + */ + + default: PB_RETURN_ERROR(stream, "invalid wire_type"); + } +} + +/* Decode string length from stream and return a substream with limited length. + * Remember to close the substream using pb_close_string_substream(). + */ +bool checkreturn pb_make_string_substream(pb_istream_t* stream, pb_istream_t* substream) { + uint32_t size; + if (!pb_decode_varint32(stream, &size)) + return false; + + *substream = *stream; + if (substream->bytes_left < size) + PB_RETURN_ERROR(stream, "parent stream too short"); + + substream->bytes_left = (size_t) size; + stream->bytes_left -= (size_t) size; + return true; +} + +bool checkreturn pb_close_string_substream(pb_istream_t* stream, pb_istream_t* substream) { + if (substream->bytes_left) { + if (!pb_read(substream, NULL, substream->bytes_left)) + return false; + } + + stream->state = substream->state; + +#ifndef PB_NO_ERRMSG + stream->errmsg = substream->errmsg; +#endif + return true; +} + +/************************* + * Decode a single field * + *************************/ + +static bool checkreturn decode_basic_field(pb_istream_t* stream, pb_field_iter_t* field) { + switch (PB_LTYPE(field->type)) { + case PB_LTYPE_BOOL: + return pb_dec_bool(stream, field); + + case PB_LTYPE_VARINT: + case PB_LTYPE_UVARINT: + case PB_LTYPE_SVARINT: + return pb_dec_varint(stream, field); + + case PB_LTYPE_FIXED32: + case PB_LTYPE_FIXED64: + return pb_dec_fixed(stream, field); + + case PB_LTYPE_BYTES: + return pb_dec_bytes(stream, field); + + case PB_LTYPE_STRING: + return pb_dec_string(stream, field); + + case PB_LTYPE_SUBMESSAGE: + case PB_LTYPE_SUBMSG_W_CB: + return pb_dec_submessage(stream, field); + + case PB_LTYPE_FIXED_LENGTH_BYTES: + return pb_dec_fixed_length_bytes(stream, field); + + default: + PB_RETURN_ERROR(stream, "invalid field type"); + } +} + +static bool checkreturn decode_static_field(pb_istream_t* stream, pb_wire_type_t wire_type, pb_field_iter_t* field) { + switch (PB_HTYPE(field->type)) { + case PB_HTYPE_REQUIRED: + return decode_basic_field(stream, field); + + case PB_HTYPE_OPTIONAL: + if (field->pSize != NULL) + *(bool*) field->pSize = true; + return decode_basic_field(stream, field); + + case PB_HTYPE_REPEATED: + if (wire_type == PB_WT_STRING && PB_LTYPE(field->type) <= PB_LTYPE_LAST_PACKABLE) { + /* Packed array */ + bool status = true; + pb_istream_t substream; + pb_size_t* size = (pb_size_t*) field->pSize; + field->pData = (char*) field->pField + field->data_size * (*size); + + if (!pb_make_string_substream(stream, &substream)) + return false; + + while (substream.bytes_left > 0 && *size < field->array_size) { + if (!decode_basic_field(&substream, field)) { + status = false; + break; + } + (*size)++; + field->pData = (char*) field->pData + field->data_size; + } + + if (substream.bytes_left != 0) + PB_RETURN_ERROR(stream, "array overflow"); + if (!pb_close_string_substream(stream, &substream)) + return false; + + return status; + } else { + /* Repeated field */ + pb_size_t* size = (pb_size_t*) field->pSize; + field->pData = (char*) field->pField + field->data_size * (*size); + + if ((*size)++ >= field->array_size) + PB_RETURN_ERROR(stream, "array overflow"); + + return decode_basic_field(stream, field); + } + + case PB_HTYPE_ONEOF: + *(pb_size_t*) field->pSize = field->tag; + if (PB_LTYPE_IS_SUBMSG(field->type)) { + /* We memset to zero so that any callbacks are set to NULL. + * This is because the callbacks might otherwise have values + * from some other union field. + * If callbacks are needed inside oneof field, use .proto + * option submsg_callback to have a separate callback function + * that can set the fields before submessage is decoded. + * pb_dec_submessage() will set any default values. */ + memset(field->pData, 0, (size_t) field->data_size); + } + return decode_basic_field(stream, field); + + default: + PB_RETURN_ERROR(stream, "invalid field type"); + } +} + +#ifdef PB_ENABLE_MALLOC +/* Allocate storage for the field and store the pointer at iter->pData. + * array_size is the number of entries to reserve in an array. + * Zero size is not allowed, use pb_free() for releasing. + */ +static bool checkreturn allocate_field(pb_istream_t* stream, void* pData, size_t data_size, size_t array_size) { + void* ptr = *(void**) pData; + + if (data_size == 0 || array_size == 0) + PB_RETURN_ERROR(stream, "invalid size"); + + /* Check for multiplication overflows. + * This code avoids the costly division if the sizes are small enough. + * Multiplication is safe as long as only half of bits are set + * in either multiplicand. + */ + { + const size_t check_limit = (size_t) 1 << (sizeof(size_t) * 4); + if (data_size >= check_limit || array_size >= check_limit) { + const size_t size_max = (size_t) -1; + if (size_max / array_size < data_size) { + PB_RETURN_ERROR(stream, "size too large"); + } + } + } + + /* Allocate new or expand previous allocation */ + /* Note: on failure the old pointer will remain in the structure, + * the message must be freed by caller also on error return. */ + ptr = pb_realloc(ptr, array_size * data_size); + if (ptr == NULL) + PB_RETURN_ERROR(stream, "realloc failed"); + + *(void**) pData = ptr; + return true; +} + +/* Clear a newly allocated item in case it contains a pointer, or is a submessage. */ +static void initialize_pointer_field(void* pItem, pb_field_iter_t* field) { + if (PB_LTYPE(field->type) == PB_LTYPE_STRING || + PB_LTYPE(field->type) == PB_LTYPE_BYTES) { + *(void**) pItem = NULL; + } else if (PB_LTYPE_IS_SUBMSG(field->type)) { + /* We memset to zero so that any callbacks are set to NULL. + * Then set any default values. */ + pb_field_iter_t submsg_iter; + memset(pItem, 0, field->data_size); + + if (pb_field_iter_begin(&submsg_iter, field->submsg_desc, pItem)) { + (void) pb_message_set_to_defaults(&submsg_iter); + } + } +} +#endif + +static bool checkreturn decode_pointer_field(pb_istream_t* stream, pb_wire_type_t wire_type, pb_field_iter_t* field) { +#ifndef PB_ENABLE_MALLOC + PB_UNUSED(wire_type); + PB_UNUSED(field); + PB_RETURN_ERROR(stream, "no malloc support"); +#else + switch (PB_HTYPE(field->type)) { + case PB_HTYPE_REQUIRED: + case PB_HTYPE_OPTIONAL: + case PB_HTYPE_ONEOF: + if (PB_LTYPE_IS_SUBMSG(field->type) && *(void**) field->pField != NULL) { + /* Duplicate field, have to release the old allocation first. */ + /* FIXME: Does this work correctly for oneofs? */ + pb_release_single_field(field); + } + + if (PB_HTYPE(field->type) == PB_HTYPE_ONEOF) { + *(pb_size_t*) field->pSize = field->tag; + } + + if (PB_LTYPE(field->type) == PB_LTYPE_STRING || + PB_LTYPE(field->type) == PB_LTYPE_BYTES) { + /* pb_dec_string and pb_dec_bytes handle allocation themselves */ + field->pData = field->pField; + return decode_basic_field(stream, field); + } else { + if (!allocate_field(stream, field->pField, field->data_size, 1)) + return false; + + field->pData = *(void**) field->pField; + initialize_pointer_field(field->pData, field); + return decode_basic_field(stream, field); + } + + case PB_HTYPE_REPEATED: + if (wire_type == PB_WT_STRING && PB_LTYPE(field->type) <= PB_LTYPE_LAST_PACKABLE) { + /* Packed array, multiple items come in at once. */ + bool status = true; + pb_size_t* size = (pb_size_t*) field->pSize; + size_t allocated_size = *size; + pb_istream_t substream; + + if (!pb_make_string_substream(stream, &substream)) + return false; + + while (substream.bytes_left) { + if ((size_t) *size + 1 > allocated_size) { + /* Allocate more storage. This tries to guess the + * number of remaining entries. Round the division + * upwards. */ + allocated_size += (substream.bytes_left - 1) / field->data_size + 1; + + if (!allocate_field(&substream, field->pField, field->data_size, allocated_size)) { + status = false; + break; + } + } + + /* Decode the array entry */ + field->pData = *(char**) field->pField + field->data_size * (*size); + initialize_pointer_field(field->pData, field); + if (!decode_basic_field(&substream, field)) { + status = false; + break; + } + + if (*size == PB_SIZE_MAX) { +#ifndef PB_NO_ERRMSG + stream->errmsg = "too many array entries"; +#endif + status = false; + break; + } + + (*size)++; + } + if (!pb_close_string_substream(stream, &substream)) + return false; + + return status; + } else { + /* Normal repeated field, i.e. only one item at a time. */ + pb_size_t* size = (pb_size_t*) field->pSize; + + if (*size == PB_SIZE_MAX) + PB_RETURN_ERROR(stream, "too many array entries"); + + (*size)++; + if (!allocate_field(stream, field->pField, field->data_size, *size)) + return false; + + field->pData = *(char**) field->pField + field->data_size * (*size - 1); + initialize_pointer_field(field->pData, field); + return decode_basic_field(stream, field); + } + + default: + PB_RETURN_ERROR(stream, "invalid field type"); + } +#endif +} + +static bool checkreturn decode_callback_field(pb_istream_t* stream, pb_wire_type_t wire_type, pb_field_iter_t* field) { + if (!field->descriptor->field_callback) + return pb_skip_field(stream, wire_type); + + if (wire_type == PB_WT_STRING) { + pb_istream_t substream; + size_t prev_bytes_left; + + if (!pb_make_string_substream(stream, &substream)) + return false; + + do { + prev_bytes_left = substream.bytes_left; + if (!field->descriptor->field_callback(&substream, NULL, field)) + PB_RETURN_ERROR(stream, "callback failed"); + } while (substream.bytes_left > 0 && substream.bytes_left < prev_bytes_left); + + if (!pb_close_string_substream(stream, &substream)) + return false; + + return true; + } else { + /* Copy the single scalar value to stack. + * This is required so that we can limit the stream length, + * which in turn allows to use same callback for packed and + * not-packed fields. */ + pb_istream_t substream; + pb_byte_t buffer[10]; + size_t size = sizeof(buffer); + + if (!read_raw_value(stream, wire_type, buffer, &size)) + return false; + substream = pb_istream_from_buffer(buffer, size); + + return field->descriptor->field_callback(&substream, NULL, field); + } +} + +static bool checkreturn decode_field(pb_istream_t* stream, pb_wire_type_t wire_type, pb_field_iter_t* field) { +#ifdef PB_ENABLE_MALLOC + /* When decoding an oneof field, check if there is old data that must be + * released first. */ + if (PB_HTYPE(field->type) == PB_HTYPE_ONEOF) { + if (!pb_release_union_field(stream, field)) + return false; + } +#endif + + switch (PB_ATYPE(field->type)) { + case PB_ATYPE_STATIC: + return decode_static_field(stream, wire_type, field); + + case PB_ATYPE_POINTER: + return decode_pointer_field(stream, wire_type, field); + + case PB_ATYPE_CALLBACK: + return decode_callback_field(stream, wire_type, field); + + default: + PB_RETURN_ERROR(stream, "invalid field type"); + } +} + +/* Default handler for extension fields. Expects to have a pb_msgdesc_t + * pointer in the extension->type->arg field, pointing to a message with + * only one field in it. */ +static bool checkreturn default_extension_decoder(pb_istream_t* stream, + pb_extension_t* extension, uint32_t tag, pb_wire_type_t wire_type) { + pb_field_iter_t iter; + + if (!pb_field_iter_begin_extension(&iter, extension)) + PB_RETURN_ERROR(stream, "invalid extension"); + + if (iter.tag != tag) + return true; + + extension->found = true; + return decode_field(stream, wire_type, &iter); +} + +/* Try to decode an unknown field as an extension field. Tries each extension + * decoder in turn, until one of them handles the field or loop ends. */ +static bool checkreturn decode_extension(pb_istream_t* stream, + uint32_t tag, pb_wire_type_t wire_type, pb_field_iter_t* iter) { + pb_extension_t* extension = *(pb_extension_t* const*) iter->pData; + size_t pos = stream->bytes_left; + + while (extension != NULL && pos == stream->bytes_left) { + bool status; + if (extension->type->decode) + status = extension->type->decode(stream, extension, tag, wire_type); + else + status = default_extension_decoder(stream, extension, tag, wire_type); + + if (!status) + return false; + + extension = extension->next; + } + + return true; +} + +/* Step through the iterator until an extension field is found or until all + * entries have been checked. There can be only one extension field per + * message. Returns false if no extension field is found. */ +static bool checkreturn find_extension_field(pb_field_iter_t* iter) { + pb_size_t start = iter->index; + + do { + if (PB_LTYPE(iter->type) == PB_LTYPE_EXTENSION) + return true; + (void) pb_field_iter_next(iter); + } while (iter->index != start); + + return false; +} + +/* Initialize message fields to default values, recursively */ +static bool pb_field_set_to_default(pb_field_iter_t* field) { + pb_type_t type; + type = field->type; + + if (PB_LTYPE(type) == PB_LTYPE_EXTENSION) { + pb_extension_t* ext = *(pb_extension_t* const*) field->pData; + while (ext != NULL) { + pb_field_iter_t ext_iter; + if (pb_field_iter_begin_extension(&ext_iter, ext)) { + ext->found = false; + if (!pb_message_set_to_defaults(&ext_iter)) + return false; + } + ext = ext->next; + } + } else if (PB_ATYPE(type) == PB_ATYPE_STATIC) { + bool init_data = true; + if (PB_HTYPE(type) == PB_HTYPE_OPTIONAL && field->pSize != NULL) { + /* Set has_field to false. Still initialize the optional field + * itself also. */ + *(bool*) field->pSize = false; + } else if (PB_HTYPE(type) == PB_HTYPE_REPEATED || + PB_HTYPE(type) == PB_HTYPE_ONEOF) { + /* REPEATED: Set array count to 0, no need to initialize contents. + ONEOF: Set which_field to 0. */ + *(pb_size_t*) field->pSize = 0; + init_data = false; + } + + if (init_data) { + if (PB_LTYPE_IS_SUBMSG(field->type)) { + /* Initialize submessage to defaults */ + pb_field_iter_t submsg_iter; + if (pb_field_iter_begin(&submsg_iter, field->submsg_desc, field->pData)) { + if (!pb_message_set_to_defaults(&submsg_iter)) + return false; + } + } else { + /* Initialize to zeros */ + memset(field->pData, 0, (size_t) field->data_size); + } + } + } else if (PB_ATYPE(type) == PB_ATYPE_POINTER) { + /* Initialize the pointer to NULL. */ + *(void**) field->pField = NULL; + + /* Initialize array count to 0. */ + if (PB_HTYPE(type) == PB_HTYPE_REPEATED || + PB_HTYPE(type) == PB_HTYPE_ONEOF) { + *(pb_size_t*) field->pSize = 0; + } + } else if (PB_ATYPE(type) == PB_ATYPE_CALLBACK) { + /* Don't overwrite callback */ + } + + return true; +} + +static bool pb_message_set_to_defaults(pb_field_iter_t* iter) { + pb_istream_t defstream = PB_ISTREAM_EMPTY; + uint32_t tag = 0; + pb_wire_type_t wire_type = PB_WT_VARINT; + bool eof; + + if (iter->descriptor->default_value) { + defstream = pb_istream_from_buffer(iter->descriptor->default_value, (size_t) -1); + if (!pb_decode_tag(&defstream, &wire_type, &tag, &eof)) + return false; + } + + do { + if (!pb_field_set_to_default(iter)) + return false; + + if (tag != 0 && iter->tag == tag) { + /* We have a default value for this field in the defstream */ + if (!decode_field(&defstream, wire_type, iter)) + return false; + if (!pb_decode_tag(&defstream, &wire_type, &tag, &eof)) + return false; + + if (iter->pSize) + *(bool*) iter->pSize = false; + } + } while (pb_field_iter_next(iter)); + + return true; +} + +/********************* + * Decode all fields * + *********************/ + +static bool checkreturn pb_decode_inner(pb_istream_t* stream, const pb_msgdesc_t* fields, void* dest_struct, unsigned int flags) { + uint32_t extension_range_start = 0; + + /* 'fixed_count_field' and 'fixed_count_size' track position of a repeated fixed + * count field. This can only handle _one_ repeated fixed count field that + * is unpacked and unordered among other (non repeated fixed count) fields. + */ + pb_size_t fixed_count_field = PB_SIZE_MAX; + pb_size_t fixed_count_size = 0; + pb_size_t fixed_count_total_size = 0; + + pb_fields_seen_t fields_seen = {{0, 0}}; + const uint32_t allbits = ~(uint32_t) 0; + pb_field_iter_t iter; + + /* Return value ignored, as empty message types will be correctly handled by + * pb_field_iter_find() anyway. */ + (void) pb_field_iter_begin(&iter, fields, dest_struct); + + while (stream->bytes_left) { + uint32_t tag; + pb_wire_type_t wire_type; + bool eof; + + if (!pb_decode_tag(stream, &wire_type, &tag, &eof)) { + if (eof) + break; + else + return false; + } + + if (tag == 0) { + if (flags & PB_DECODE_NULLTERMINATED) { + break; + } else { + PB_RETURN_ERROR(stream, "zero tag"); + } + } + + if (!pb_field_iter_find(&iter, tag) || PB_LTYPE(iter.type) == PB_LTYPE_EXTENSION) { + /* No match found, check if it matches an extension. */ + if (tag >= extension_range_start) { + if (!find_extension_field(&iter)) + extension_range_start = (uint32_t) -1; + else + extension_range_start = iter.tag; + + if (tag >= extension_range_start) { + size_t pos = stream->bytes_left; + + if (!decode_extension(stream, tag, wire_type, &iter)) + return false; + + if (pos != stream->bytes_left) { + /* The field was handled */ + continue; + } + } + } + + /* No match found, skip data */ + if (!pb_skip_field(stream, wire_type)) + return false; + continue; + } + + /* If a repeated fixed count field was found, get size from + * 'fixed_count_field' as there is no counter contained in the struct. + */ + if (PB_HTYPE(iter.type) == PB_HTYPE_REPEATED && iter.pSize == &iter.array_size) { + if (fixed_count_field != iter.index) { + /* If the new fixed count field does not match the previous one, + * check that the previous one is NULL or that it finished + * receiving all the expected data. + */ + if (fixed_count_field != PB_SIZE_MAX && + fixed_count_size != fixed_count_total_size) { + PB_RETURN_ERROR(stream, "wrong size for fixed count field"); + } + + fixed_count_field = iter.index; + fixed_count_size = 0; + fixed_count_total_size = iter.array_size; + } + + iter.pSize = &fixed_count_size; + } + + if (PB_HTYPE(iter.type) == PB_HTYPE_REQUIRED && iter.required_field_index < PB_MAX_REQUIRED_FIELDS) { + uint32_t tmp = ((uint32_t) 1 << (iter.required_field_index & 31)); + fields_seen.bitfield[iter.required_field_index >> 5] |= tmp; + } + + if (!decode_field(stream, wire_type, &iter)) + return false; + } + + /* Check that all elements of the last decoded fixed count field were present. */ + if (fixed_count_field != PB_SIZE_MAX && + fixed_count_size != fixed_count_total_size) { + PB_RETURN_ERROR(stream, "wrong size for fixed count field"); + } + + /* Check that all required fields were present. */ + { + /* First figure out the number of required fields by + * seeking to the end of the field array. Usually we + * are already close to end after decoding. + */ + pb_size_t req_field_count; + pb_type_t last_type; + pb_size_t i; + do { + req_field_count = iter.required_field_index; + last_type = iter.type; + } while (pb_field_iter_next(&iter)); + + /* Fixup if last field was also required. */ + if (PB_HTYPE(last_type) == PB_HTYPE_REQUIRED && iter.tag != 0) + req_field_count++; + + if (req_field_count > PB_MAX_REQUIRED_FIELDS) + req_field_count = PB_MAX_REQUIRED_FIELDS; + + if (req_field_count > 0) { + /* Check the whole words */ + for (i = 0; i < (req_field_count >> 5); i++) { + if (fields_seen.bitfield[i] != allbits) + PB_RETURN_ERROR(stream, "missing required field"); + } + + /* Check the remaining bits (if any) */ + if ((req_field_count & 31) != 0) { + if (fields_seen.bitfield[req_field_count >> 5] != + (allbits >> (uint8_t)(32 - (req_field_count & 31)))) { + PB_RETURN_ERROR(stream, "missing required field"); + } + } + } + } + + return true; +} + +bool checkreturn pb_decode_ex(pb_istream_t* stream, const pb_msgdesc_t* fields, void* dest_struct, unsigned int flags) { + bool status; + + if ((flags & PB_DECODE_NOINIT) == 0) { + pb_field_iter_t iter; + + if (pb_field_iter_begin(&iter, fields, dest_struct)) { + if (!pb_message_set_to_defaults(&iter)) + PB_RETURN_ERROR(stream, "failed to set defaults"); + } + } + + if ((flags & PB_DECODE_DELIMITED) == 0) { + status = pb_decode_inner(stream, fields, dest_struct, flags); + } else { + pb_istream_t substream; + if (!pb_make_string_substream(stream, &substream)) + return false; + + status = pb_decode_inner(&substream, fields, dest_struct, flags); + + if (!pb_close_string_substream(stream, &substream)) + return false; + } + +#ifdef PB_ENABLE_MALLOC + if (!status) + pb_release(fields, dest_struct); +#endif + + return status; +} + +bool checkreturn pb_decode(pb_istream_t* stream, const pb_msgdesc_t* fields, void* dest_struct) { + return pb_decode_ex(stream, fields, dest_struct, 0); +} + +#ifdef PB_ENABLE_MALLOC +/* Given an oneof field, if there has already been a field inside this oneof, + * release it before overwriting with a different one. */ +static bool pb_release_union_field(pb_istream_t* stream, pb_field_iter_t* field) { + pb_field_iter_t old_field = *field; + pb_size_t old_tag = *(pb_size_t*) field->pSize; /* Previous which_ value */ + pb_size_t new_tag = field->tag; /* New which_ value */ + + if (old_tag == 0) + return true; /* Ok, no old data in union */ + + if (old_tag == new_tag) + return true; /* Ok, old data is of same type => merge */ + + /* Release old data. The find can fail if the message struct contains + * invalid data. */ + if (!pb_field_iter_find(&old_field, old_tag)) + PB_RETURN_ERROR(stream, "invalid union tag"); + + pb_release_single_field(&old_field); + + return true; +} + +static void pb_release_single_field(pb_field_iter_t* field) { + pb_type_t type; + type = field->type; + + if (PB_HTYPE(type) == PB_HTYPE_ONEOF) { + if (*(pb_size_t*) field->pSize != field->tag) + return; /* This is not the current field in the union */ + } + + /* Release anything contained inside an extension or submsg. + * This has to be done even if the submsg itself is statically + * allocated. */ + if (PB_LTYPE(type) == PB_LTYPE_EXTENSION) { + /* Release fields from all extensions in the linked list */ + pb_extension_t* ext = *(pb_extension_t**) field->pData; + while (ext != NULL) { + pb_field_iter_t ext_iter; + if (pb_field_iter_begin_extension(&ext_iter, ext)) { + pb_release_single_field(&ext_iter); + } + ext = ext->next; + } + } else if (PB_LTYPE_IS_SUBMSG(type) && PB_ATYPE(type) != PB_ATYPE_CALLBACK) { + /* Release fields in submessage or submsg array */ + pb_size_t count = 1; + + if (PB_ATYPE(type) == PB_ATYPE_POINTER) { + field->pData = *(void**) field->pField; + } else { + field->pData = field->pField; + } + + if (PB_HTYPE(type) == PB_HTYPE_REPEATED) { + count = *(pb_size_t*) field->pSize; + + if (PB_ATYPE(type) == PB_ATYPE_STATIC && count > field->array_size) { + /* Protect against corrupted _count fields */ + count = field->array_size; + } + } + + if (field->pData) { + while (count--) { + pb_release(field->submsg_desc, field->pData); + field->pData = (char*) field->pData + field->data_size; + } + } + } + + if (PB_ATYPE(type) == PB_ATYPE_POINTER) { + if (PB_HTYPE(type) == PB_HTYPE_REPEATED && + (PB_LTYPE(type) == PB_LTYPE_STRING || + PB_LTYPE(type) == PB_LTYPE_BYTES)) { + /* Release entries in repeated string or bytes array */ + void** pItem = *(void***) field->pField; + pb_size_t count = *(pb_size_t*) field->pSize; + while (count--) { + pb_free(*pItem); + *pItem++ = NULL; + } + } + + if (PB_HTYPE(type) == PB_HTYPE_REPEATED) { + /* We are going to release the array, so set the size to 0 */ + *(pb_size_t*) field->pSize = 0; + } + + /* Release main pointer */ + pb_free(*(void**) field->pField); + *(void**) field->pField = NULL; + } +} + +void pb_release(const pb_msgdesc_t* fields, void* dest_struct) { + pb_field_iter_t iter; + + if (!dest_struct) + return; /* Ignore NULL pointers, similar to free() */ + + if (!pb_field_iter_begin(&iter, fields, dest_struct)) + return; /* Empty message type */ + + do { + pb_release_single_field(&iter); + } while (pb_field_iter_next(&iter)); +} +#endif + +/* Field decoders */ + +bool pb_decode_bool(pb_istream_t* stream, bool* dest) { + uint32_t value; + if (!pb_decode_varint32(stream, &value)) + return false; + + *(bool*) dest = (value != 0); + return true; +} + +bool pb_decode_svarint(pb_istream_t* stream, pb_int64_t* dest) { + pb_uint64_t value; + if (!pb_decode_varint(stream, &value)) + return false; + + if (value & 1) + *dest = (pb_int64_t)(~(value >> 1)); + else + *dest = (pb_int64_t)(value >> 1); + + return true; +} + +bool pb_decode_fixed32(pb_istream_t* stream, void* dest) { + union { + uint32_t fixed32; + pb_byte_t bytes[4]; + } u; + + if (!pb_read(stream, u.bytes, 4)) + return false; + +#if defined(__BYTE_ORDER) && __BYTE_ORDER == __LITTLE_ENDIAN && CHAR_BIT == 8 + /* fast path - if we know that we're on little endian, assign directly */ + *(uint32_t*) dest = u.fixed32; +#else + *(uint32_t*) dest = ((uint32_t) u.bytes[0] << 0) | + ((uint32_t) u.bytes[1] << 8) | + ((uint32_t) u.bytes[2] << 16) | + ((uint32_t) u.bytes[3] << 24); +#endif + return true; +} + +#ifndef PB_WITHOUT_64BIT +bool pb_decode_fixed64(pb_istream_t* stream, void* dest) { + union { + uint64_t fixed64; + pb_byte_t bytes[8]; + } u; + + if (!pb_read(stream, u.bytes, 8)) + return false; + +#if defined(__BYTE_ORDER) && __BYTE_ORDER == __LITTLE_ENDIAN && CHAR_BIT == 8 + /* fast path - if we know that we're on little endian, assign directly */ + *(uint64_t*) dest = u.fixed64; +#else + *(uint64_t*) dest = ((uint64_t) u.bytes[0] << 0) | + ((uint64_t) u.bytes[1] << 8) | + ((uint64_t) u.bytes[2] << 16) | + ((uint64_t) u.bytes[3] << 24) | + ((uint64_t) u.bytes[4] << 32) | + ((uint64_t) u.bytes[5] << 40) | + ((uint64_t) u.bytes[6] << 48) | + ((uint64_t) u.bytes[7] << 56); +#endif + return true; +} +#endif + +static bool checkreturn pb_dec_bool(pb_istream_t* stream, const pb_field_iter_t* field) { + return pb_decode_bool(stream, (bool*) field->pData); +} + +static bool checkreturn pb_dec_varint(pb_istream_t* stream, const pb_field_iter_t* field) { + if (PB_LTYPE(field->type) == PB_LTYPE_UVARINT) { + pb_uint64_t value, clamped; + if (!pb_decode_varint(stream, &value)) + return false; + + /* Cast to the proper field size, while checking for overflows */ + if (field->data_size == sizeof(pb_uint64_t)) + clamped = *(pb_uint64_t*) field->pData = value; + else if (field->data_size == sizeof(uint32_t)) + clamped = *(uint32_t*) field->pData = (uint32_t) value; + else if (field->data_size == sizeof(uint_least16_t)) + clamped = *(uint_least16_t*) field->pData = (uint_least16_t) value; + else if (field->data_size == sizeof(uint_least8_t)) + clamped = *(uint_least8_t*) field->pData = (uint_least8_t) value; + else + PB_RETURN_ERROR(stream, "invalid data_size"); + + if (clamped != value) + PB_RETURN_ERROR(stream, "integer too large"); + + return true; + } else { + pb_uint64_t value; + pb_int64_t svalue; + pb_int64_t clamped; + + if (PB_LTYPE(field->type) == PB_LTYPE_SVARINT) { + if (!pb_decode_svarint(stream, &svalue)) + return false; + } else { + if (!pb_decode_varint(stream, &value)) + return false; + + /* See issue 97: Google's C++ protobuf allows negative varint values to + * be cast as int32_t, instead of the int64_t that should be used when + * encoding. Previous nanopb versions had a bug in encoding. In order to + * not break decoding of such messages, we cast <=32 bit fields to + * int32_t first to get the sign correct. + */ + if (field->data_size == sizeof(pb_int64_t)) + svalue = (pb_int64_t) value; + else + svalue = (int32_t) value; + } + + /* Cast to the proper field size, while checking for overflows */ + if (field->data_size == sizeof(pb_int64_t)) + clamped = *(pb_int64_t*) field->pData = svalue; + else if (field->data_size == sizeof(int32_t)) + clamped = *(int32_t*) field->pData = (int32_t) svalue; + else if (field->data_size == sizeof(int_least16_t)) + clamped = *(int_least16_t*) field->pData = (int_least16_t) svalue; + else if (field->data_size == sizeof(int_least8_t)) + clamped = *(int_least8_t*) field->pData = (int_least8_t) svalue; + else + PB_RETURN_ERROR(stream, "invalid data_size"); + + if (clamped != svalue) + PB_RETURN_ERROR(stream, "integer too large"); + + return true; + } +} + +static bool checkreturn pb_dec_fixed(pb_istream_t* stream, const pb_field_iter_t* field) { +#ifdef PB_CONVERT_DOUBLE_FLOAT + if (field->data_size == sizeof(float) && PB_LTYPE(field->type) == PB_LTYPE_FIXED64) { + return pb_decode_double_as_float(stream, (float*) field->pData); + } +#endif + + if (field->data_size == sizeof(uint32_t)) { + return pb_decode_fixed32(stream, field->pData); + } +#ifndef PB_WITHOUT_64BIT + else if (field->data_size == sizeof(uint64_t)) { + return pb_decode_fixed64(stream, field->pData); + } +#endif + else { + PB_RETURN_ERROR(stream, "invalid data_size"); + } +} + +static bool checkreturn pb_dec_bytes(pb_istream_t* stream, const pb_field_iter_t* field) { + uint32_t size; + size_t alloc_size; + pb_bytes_array_t* dest; + + if (!pb_decode_varint32(stream, &size)) + return false; + + if (size > PB_SIZE_MAX) + PB_RETURN_ERROR(stream, "bytes overflow"); + + alloc_size = PB_BYTES_ARRAY_T_ALLOCSIZE(size); + if (size > alloc_size) + PB_RETURN_ERROR(stream, "size too large"); + + if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) { +#ifndef PB_ENABLE_MALLOC + PB_RETURN_ERROR(stream, "no malloc support"); +#else + if (!allocate_field(stream, field->pData, alloc_size, 1)) + return false; + dest = *(pb_bytes_array_t**) field->pData; +#endif + } else { + if (alloc_size > field->data_size) + PB_RETURN_ERROR(stream, "bytes overflow"); + dest = (pb_bytes_array_t*) field->pData; + } + + dest->size = (pb_size_t) size; + return pb_read(stream, dest->bytes, (size_t) size); +} + +static bool checkreturn pb_dec_string(pb_istream_t* stream, const pb_field_iter_t* field) { + uint32_t size; + size_t alloc_size; + pb_byte_t* dest = (pb_byte_t*) field->pData; + + if (!pb_decode_varint32(stream, &size)) + return false; + + /* Space for null terminator */ + alloc_size = (size_t)(size + 1); + + if (alloc_size < size) + PB_RETURN_ERROR(stream, "size too large"); + + if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) { +#ifndef PB_ENABLE_MALLOC + PB_RETURN_ERROR(stream, "no malloc support"); +#else + if (!allocate_field(stream, field->pData, alloc_size, 1)) + return false; + dest = *(pb_byte_t**) field->pData; +#endif + } else { + if (alloc_size > field->data_size) + PB_RETURN_ERROR(stream, "string overflow"); + } + + dest[size] = 0; + + if (!pb_read(stream, dest, (size_t) size)) + return false; + +#ifdef PB_VALIDATE_UTF8 + if (!pb_validate_utf8((const char*) dest)) + PB_RETURN_ERROR(stream, "invalid utf8"); +#endif + + return true; +} + +static bool checkreturn pb_dec_submessage(pb_istream_t* stream, const pb_field_iter_t* field) { + bool status = true; + pb_istream_t substream; + + if (!pb_make_string_substream(stream, &substream)) + return false; + + if (field->submsg_desc == NULL) + PB_RETURN_ERROR(stream, "invalid field descriptor"); + + /* New array entries need to be initialized, while required and optional + * submessages have already been initialized in the top-level pb_decode. */ + if (PB_HTYPE(field->type) == PB_HTYPE_REPEATED || + PB_HTYPE(field->type) == PB_HTYPE_ONEOF) { + pb_field_iter_t submsg_iter; + if (pb_field_iter_begin(&submsg_iter, field->submsg_desc, field->pData)) { + if (!pb_message_set_to_defaults(&submsg_iter)) + PB_RETURN_ERROR(stream, "failed to set defaults"); + } + } + + /* Submessages can have a separate message-level callback that is called + * before decoding the message. Typically it is used to set callback fields + * inside oneofs. */ + if (PB_LTYPE(field->type) == PB_LTYPE_SUBMSG_W_CB && field->pSize != NULL) { + /* Message callback is stored right before pSize. */ + pb_callback_t* callback = (pb_callback_t*) field->pSize - 1; + if (callback->funcs.decode) { + status = callback->funcs.decode(&substream, field, &callback->arg); + } + } + + /* Now decode the submessage contents */ + if (status) { + status = pb_decode_noinit(&substream, field->submsg_desc, field->pData); + } + + if (!pb_close_string_substream(stream, &substream)) + return false; + + return status; +} + +static bool checkreturn pb_dec_fixed_length_bytes(pb_istream_t* stream, const pb_field_iter_t* field) { + uint32_t size; + + if (!pb_decode_varint32(stream, &size)) + return false; + + if (size > PB_SIZE_MAX) + PB_RETURN_ERROR(stream, "bytes overflow"); + + if (size == 0) { + /* As a special case, treat empty bytes string as all zeros for fixed_length_bytes. */ + memset(field->pData, 0, (size_t) field->data_size); + return true; + } + + if (size != field->data_size) + PB_RETURN_ERROR(stream, "incorrect fixed length bytes size"); + + return pb_read(stream, (pb_byte_t*) field->pData, (size_t) field->data_size); +} + +#ifdef PB_CONVERT_DOUBLE_FLOAT +bool pb_decode_double_as_float(pb_istream_t* stream, float* dest) { + uint8_t sign; + int exponent; + uint32_t mantissa; + uint64_t value; + union { + float f; + uint32_t i; + } out; + + if (!pb_decode_fixed64(stream, &value)) + return false; + + /* Decompose input value */ + sign = (uint8_t)((value >> 63) & 1); + exponent = (int) ((value >> 52) & 0x7FF) - 1023; + mantissa = (value >> 28) & 0xFFFFFF; /* Highest 24 bits */ + + /* Figure if value is in range representable by floats. */ + if (exponent == 1024) { + /* Special value */ + exponent = 128; + } else if (exponent > 127) { + /* Too large, convert to infinity */ + exponent = 128; + mantissa = 0; + } else if (exponent < -150) { + /* Too small, convert to zero */ + exponent = -127; + mantissa = 0; + } else if (exponent < -126) { + /* Denormalized */ + mantissa |= 0x1000000; + mantissa >>= (-126 - exponent); + exponent = -127; + } + + /* Round off mantissa */ + mantissa = (mantissa + 1) >> 1; + + /* Check if mantissa went over 2.0 */ + if (mantissa & 0x800000) { + exponent += 1; + mantissa &= 0x7FFFFF; + mantissa >>= 1; + } + + /* Combine fields */ + out.i = mantissa; + out.i |= (uint32_t)(exponent + 127) << 23; + out.i |= (uint32_t) sign << 31; + + *dest = out.f; + return true; +} +#endif diff --git a/c/src/third-party/nanopb/pb_decode.h b/c/src/third-party/nanopb/pb_decode.h new file mode 100755 index 000000000..d60bb32ec --- /dev/null +++ b/c/src/third-party/nanopb/pb_decode.h @@ -0,0 +1,215 @@ +/******************************************************************************* + * Copyright (c) 2011 Petteri Aimonen + * + * This software is provided 'as-is', without any express or + * implied warranty. In no event will the authors be held liable + * for any damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + *******************************************************************************/ + +/* pb_decode.h: Functions to decode protocol buffers. Depends on pb_decode.c. + * The main function is pb_decode. You also need an input stream, and the + * field descriptions created by nanopb_generator.py. + */ + +#ifndef PB_DECODE_H_INCLUDED +#define PB_DECODE_H_INCLUDED + +#include "pb.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Structure for defining custom input streams. You will need to provide + * a callback function to read the bytes from your storage, which can be + * for example a file or a network socket. + * + * The callback must conform to these rules: + * + * 1) Return false on IO errors. This will cause decoding to abort. + * 2) You can use state to store your own data (e.g. buffer pointer), + * and rely on pb_read to verify that no-body reads past bytes_left. + * 3) Your callback may be used with substreams, in which case bytes_left + * is different than from the main stream. Don't use bytes_left to compute + * any pointers. + */ +struct pb_istream_s { +#ifdef PB_BUFFER_ONLY + /* Callback pointer is not used in buffer-only configuration. + * Having an int pointer here allows binary compatibility but + * gives an error if someone tries to assign callback function. + */ + int* callback; +#else + bool (*callback)(pb_istream_t* stream, pb_byte_t* buf, size_t count); +#endif + + void* state; /* Free field for use by callback implementation */ + size_t bytes_left; + +#ifndef PB_NO_ERRMSG + const char* errmsg; +#endif +}; + +#ifndef PB_NO_ERRMSG +#define PB_ISTREAM_EMPTY \ + { 0, 0, 0, 0 } +#else +#define PB_ISTREAM_EMPTY \ + { 0, 0, 0 } +#endif + +/*************************** + * Main decoding functions * + ***************************/ + +/* Decode a single protocol buffers message from input stream into a C structure. + * Returns true on success, false on any failure. + * The actual struct pointed to by dest must match the description in fields. + * Callback fields of the destination structure must be initialized by caller. + * All other fields will be initialized by this function. + * + * Example usage: + * MyMessage msg = {}; + * uint8_t buffer[64]; + * pb_istream_t stream; + * + * // ... read some data into buffer ... + * + * stream = pb_istream_from_buffer(buffer, count); + * pb_decode(&stream, MyMessage_fields, &msg); + */ +bool pb_decode(pb_istream_t* stream, const pb_msgdesc_t* fields, void* dest_struct); + +/* Extended version of pb_decode, with several options to control + * the decoding process: + * + * PB_DECODE_NOINIT: Do not initialize the fields to default values. + * This is slightly faster if you do not need the default + * values and instead initialize the structure to 0 using + * e.g. memset(). This can also be used for merging two + * messages, i.e. combine already existing data with new + * values. + * + * PB_DECODE_DELIMITED: Input message starts with the message size as varint. + * Corresponds to parseDelimitedFrom() in Google's + * protobuf API. + * + * PB_DECODE_NULLTERMINATED: Stop reading when field tag is read as 0. This allows + * reading null terminated messages. + * NOTE: Until nanopb-0.4.0, pb_decode() also allows + * null-termination. This behaviour is not supported in + * most other protobuf implementations, so PB_DECODE_DELIMITED + * is a better option for compatibility. + * + * Multiple flags can be combined with bitwise or (| operator) + */ +#define PB_DECODE_NOINIT 0x01U +#define PB_DECODE_DELIMITED 0x02U +#define PB_DECODE_NULLTERMINATED 0x04U +bool pb_decode_ex(pb_istream_t* stream, const pb_msgdesc_t* fields, void* dest_struct, unsigned int flags); + +/* Defines for backwards compatibility with code written before nanopb-0.4.0 */ +#define pb_decode_noinit(s, f, d) pb_decode_ex(s, f, d, PB_DECODE_NOINIT) +#define pb_decode_delimited(s, f, d) pb_decode_ex(s, f, d, PB_DECODE_DELIMITED) +#define pb_decode_delimited_noinit(s, f, d) pb_decode_ex(s, f, d, PB_DECODE_DELIMITED | PB_DECODE_NOINIT) +#define pb_decode_nullterminated(s, f, d) pb_decode_ex(s, f, d, PB_DECODE_NULLTERMINATED) + +#ifdef PB_ENABLE_MALLOC +/* Release any allocated pointer fields. If you use dynamic allocation, you should + * call this for any successfully decoded message when you are done with it. If + * pb_decode() returns with an error, the message is already released. + */ +void pb_release(const pb_msgdesc_t* fields, void* dest_struct); +#endif + +/************************************** + * Functions for manipulating streams * + **************************************/ + +/* Create an input stream for reading from a memory buffer. + * + * Alternatively, you can use a custom stream that reads directly from e.g. + * a file or a network socket. + */ +pb_istream_t pb_istream_from_buffer(const pb_byte_t* buf, size_t bufsize); + +/* Function to read from a pb_istream_t. You can use this if you need to + * read some custom header data, or to read data in field callbacks. + */ +bool pb_read(pb_istream_t* stream, pb_byte_t* buf, size_t count); + +/************************************************ + * Helper functions for writing field callbacks * + ************************************************/ + +/* Decode the tag for the next field in the stream. Gives the wire type and + * field tag. At end of the message, returns false and sets eof to true. */ +bool pb_decode_tag(pb_istream_t* stream, pb_wire_type_t* wire_type, uint32_t* tag, bool* eof); + +/* Skip the field payload data, given the wire type. */ +bool pb_skip_field(pb_istream_t* stream, pb_wire_type_t wire_type); + +/* Decode an integer in the varint format. This works for enum, int32, + * int64, uint32 and uint64 field types. */ +#ifndef PB_WITHOUT_64BIT +bool pb_decode_varint(pb_istream_t* stream, uint64_t* dest); +#else +#define pb_decode_varint pb_decode_varint32 +#endif + +/* Decode an integer in the varint format. This works for enum, int32, + * and uint32 field types. */ +bool pb_decode_varint32(pb_istream_t* stream, uint32_t* dest); + +/* Decode a bool value in varint format. */ +bool pb_decode_bool(pb_istream_t* stream, bool* dest); + +/* Decode an integer in the zig-zagged svarint format. This works for sint32 + * and sint64. */ +#ifndef PB_WITHOUT_64BIT +bool pb_decode_svarint(pb_istream_t* stream, int64_t* dest); +#else +bool pb_decode_svarint(pb_istream_t* stream, int32_t* dest); +#endif + +/* Decode a fixed32, sfixed32 or float value. You need to pass a pointer to + * a 4-byte wide C variable. */ +bool pb_decode_fixed32(pb_istream_t* stream, void* dest); + +#ifndef PB_WITHOUT_64BIT +/* Decode a fixed64, sfixed64 or double value. You need to pass a pointer to + * a 8-byte wide C variable. */ +bool pb_decode_fixed64(pb_istream_t* stream, void* dest); +#endif + +#ifdef PB_CONVERT_DOUBLE_FLOAT +/* Decode a double value into float variable. */ +bool pb_decode_double_as_float(pb_istream_t* stream, float* dest); +#endif + +/* Make a limited-length substream for reading a PB_WT_STRING field. */ +bool pb_make_string_substream(pb_istream_t* stream, pb_istream_t* substream); +bool pb_close_string_substream(pb_istream_t* stream, pb_istream_t* substream); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif diff --git a/c/src/third-party/nanopb/pb_encode.c b/c/src/third-party/nanopb/pb_encode.c new file mode 100755 index 000000000..f7549fd16 --- /dev/null +++ b/c/src/third-party/nanopb/pb_encode.c @@ -0,0 +1,861 @@ +/******************************************************************************* + * Copyright (c) 2011 Petteri Aimonen + * + * This software is provided 'as-is', without any express or + * implied warranty. In no event will the authors be held liable + * for any damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + *******************************************************************************/ + +/* pb_encode.c -- encode a protobuf using minimal resources + * + * 2011 Petteri Aimonen + */ + +#include "pb_encode.h" +#include "pb.h" +#include "pb_common.h" + +/* Use the GCC warn_unused_result attribute to check that all return values + * are propagated correctly. On other compilers and gcc before 3.4.0 just + * ignore the annotation. + */ +#if !defined(__GNUC__) || (__GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 4) +#define checkreturn +#else +#define checkreturn __attribute__((warn_unused_result)) +#endif + +/************************************** + * Declarations internal to this file * + **************************************/ +static bool checkreturn buf_write(pb_ostream_t* stream, const pb_byte_t* buf, size_t count); +static bool checkreturn encode_array(pb_ostream_t* stream, pb_field_iter_t* field); +static bool checkreturn pb_check_proto3_default_value(const pb_field_iter_t* field); +static bool checkreturn encode_basic_field(pb_ostream_t* stream, const pb_field_iter_t* field); +static bool checkreturn encode_callback_field(pb_ostream_t* stream, const pb_field_iter_t* field); +static bool checkreturn encode_field(pb_ostream_t* stream, pb_field_iter_t* field); +static bool checkreturn encode_extension_field(pb_ostream_t* stream, const pb_field_iter_t* field); +static bool checkreturn default_extension_encoder(pb_ostream_t* stream, const pb_extension_t* extension); +static void* pb_const_cast(const void* p); +static bool checkreturn pb_encode_varint_32(pb_ostream_t* stream, uint32_t low, uint32_t high); +static bool checkreturn pb_enc_bool(pb_ostream_t* stream, const pb_field_iter_t* field); +static bool checkreturn pb_enc_varint(pb_ostream_t* stream, const pb_field_iter_t* field); +static bool checkreturn pb_enc_fixed(pb_ostream_t* stream, const pb_field_iter_t* field); +static bool checkreturn pb_enc_bytes(pb_ostream_t* stream, const pb_field_iter_t* field); +static bool checkreturn pb_enc_string(pb_ostream_t* stream, const pb_field_iter_t* field); +static bool checkreturn pb_enc_submessage(pb_ostream_t* stream, const pb_field_iter_t* field); +static bool checkreturn pb_enc_fixed_length_bytes(pb_ostream_t* stream, const pb_field_iter_t* field); + +#ifdef PB_WITHOUT_64BIT +#define pb_int64_t int32_t +#define pb_uint64_t uint32_t +#else +#define pb_int64_t int64_t +#define pb_uint64_t uint64_t +#endif + +/******************************* + * pb_ostream_t implementation * + *******************************/ + +static bool checkreturn buf_write(pb_ostream_t* stream, const pb_byte_t* buf, size_t count) { + size_t i; + pb_byte_t* dest = (pb_byte_t*) stream->state; + stream->state = dest + count; + + for (i = 0; i < count; i++) + dest[i] = buf[i]; + + return true; +} + +pb_ostream_t pb_ostream_from_buffer(pb_byte_t* buf, size_t bufsize) { + pb_ostream_t stream; +#ifdef PB_BUFFER_ONLY + stream.callback = (void*) 1; /* Just a marker value */ +#else + stream.callback = &buf_write; +#endif + stream.state = buf; + stream.max_size = bufsize; + stream.bytes_written = 0; +#ifndef PB_NO_ERRMSG + stream.errmsg = NULL; +#endif + return stream; +} + +bool checkreturn pb_write(pb_ostream_t* stream, const pb_byte_t* buf, size_t count) { + if (count > 0 && stream->callback != NULL) { + if (stream->bytes_written + count > stream->max_size) + PB_RETURN_ERROR(stream, "stream full"); + +#ifdef PB_BUFFER_ONLY + if (!buf_write(stream, buf, count)) + PB_RETURN_ERROR(stream, "io error"); +#else + if (!stream->callback(stream, buf, count)) + PB_RETURN_ERROR(stream, "io error"); +#endif + } + + stream->bytes_written += count; + return true; +} + +/************************* + * Encode a single field * + *************************/ + +/* Read a bool value without causing undefined behavior even if the value + * is invalid. See issue #434 and + * https://stackoverflow.com/questions/27661768/weird-results-for-conditional + */ +static bool safe_read_bool(const void* pSize) { + const char* p = (const char*) pSize; + size_t i; + for (i = 0; i < sizeof(bool); i++) { + if (p[i] != 0) + return true; + } + return false; +} + +/* Encode a static array. Handles the size calculations and possible packing. */ +static bool checkreturn encode_array(pb_ostream_t* stream, pb_field_iter_t* field) { + pb_size_t i; + pb_size_t count; +#ifndef PB_ENCODE_ARRAYS_UNPACKED + size_t size; +#endif + + count = *(pb_size_t*) field->pSize; + + if (count == 0) + return true; + + if (PB_ATYPE(field->type) != PB_ATYPE_POINTER && count > field->array_size) + PB_RETURN_ERROR(stream, "array max size exceeded"); + +#ifndef PB_ENCODE_ARRAYS_UNPACKED + /* We always pack arrays if the datatype allows it. */ + if (PB_LTYPE(field->type) <= PB_LTYPE_LAST_PACKABLE) { + if (!pb_encode_tag(stream, PB_WT_STRING, field->tag)) + return false; + + /* Determine the total size of packed array. */ + if (PB_LTYPE(field->type) == PB_LTYPE_FIXED32) { + size = 4 * (size_t) count; + } else if (PB_LTYPE(field->type) == PB_LTYPE_FIXED64) { + size = 8 * (size_t) count; + } else { + pb_ostream_t sizestream = PB_OSTREAM_SIZING; + void* pData_orig = field->pData; + for (i = 0; i < count; i++) { + if (!pb_enc_varint(&sizestream, field)) + PB_RETURN_ERROR(stream, PB_GET_ERROR(&sizestream)); + field->pData = (char*) field->pData + field->data_size; + } + field->pData = pData_orig; + size = sizestream.bytes_written; + } + + if (!pb_encode_varint(stream, (pb_uint64_t) size)) + return false; + + if (stream->callback == NULL) + return pb_write(stream, NULL, size); /* Just sizing.. */ + + /* Write the data */ + for (i = 0; i < count; i++) { + if (PB_LTYPE(field->type) == PB_LTYPE_FIXED32 || PB_LTYPE(field->type) == PB_LTYPE_FIXED64) { + if (!pb_enc_fixed(stream, field)) + return false; + } else { + if (!pb_enc_varint(stream, field)) + return false; + } + + field->pData = (char*) field->pData + field->data_size; + } + } else /* Unpacked fields */ +#endif + { + for (i = 0; i < count; i++) { + /* Normally the data is stored directly in the array entries, but + * for pointer-type string and bytes fields, the array entries are + * actually pointers themselves also. So we have to dereference once + * more to get to the actual data. */ + if (PB_ATYPE(field->type) == PB_ATYPE_POINTER && + (PB_LTYPE(field->type) == PB_LTYPE_STRING || + PB_LTYPE(field->type) == PB_LTYPE_BYTES)) { + bool status; + void* pData_orig = field->pData; + field->pData = *(void* const*) field->pData; + + if (!field->pData) { + /* Null pointer in array is treated as empty string / bytes */ + status = pb_encode_tag_for_field(stream, field) && + pb_encode_varint(stream, 0); + } else { + status = encode_basic_field(stream, field); + } + + field->pData = pData_orig; + + if (!status) + return false; + } else { + if (!encode_basic_field(stream, field)) + return false; + } + field->pData = (char*) field->pData + field->data_size; + } + } + + return true; +} + +/* In proto3, all fields are optional and are only encoded if their value is "non-zero". + * This function implements the check for the zero value. */ +static bool checkreturn pb_check_proto3_default_value(const pb_field_iter_t* field) { + pb_type_t type = field->type; + + if (PB_ATYPE(type) == PB_ATYPE_STATIC) { + if (PB_HTYPE(type) == PB_HTYPE_REQUIRED) { + /* Required proto2 fields inside proto3 submessage, pretty rare case */ + return false; + } else if (PB_HTYPE(type) == PB_HTYPE_REPEATED) { + /* Repeated fields inside proto3 submessage: present if count != 0 */ + return *(const pb_size_t*) field->pSize == 0; + } else if (PB_HTYPE(type) == PB_HTYPE_ONEOF) { + /* Oneof fields */ + return *(const pb_size_t*) field->pSize == 0; + } else if (PB_HTYPE(type) == PB_HTYPE_OPTIONAL && field->pSize != NULL) { + /* Proto2 optional fields inside proto3 message, or proto3 + * submessage fields. */ + return safe_read_bool(field->pSize) == false; + } + + /* Rest is proto3 singular fields */ + if (PB_LTYPE(type) == PB_LTYPE_BYTES) { + const pb_bytes_array_t* bytes = (const pb_bytes_array_t*) field->pData; + return bytes->size == 0; + } else if (PB_LTYPE(type) == PB_LTYPE_STRING) { + return *(const char*) field->pData == '\0'; + } else if (PB_LTYPE(type) == PB_LTYPE_FIXED_LENGTH_BYTES) { + /* Fixed length bytes is only empty if its length is fixed + * as 0. Which would be pretty strange, but we can check + * it anyway. */ + return field->data_size == 0; + } else if (PB_LTYPE_IS_SUBMSG(type)) { + /* Check all fields in the submessage to find if any of them + * are non-zero. The comparison cannot be done byte-per-byte + * because the C struct may contain padding bytes that must + * be skipped. Note that usually proto3 submessages have + * a separate has_field that is checked earlier in this if. + */ + pb_field_iter_t iter; + if (pb_field_iter_begin(&iter, field->submsg_desc, field->pData)) { + do { + if (!pb_check_proto3_default_value(&iter)) { + return false; + } + } while (pb_field_iter_next(&iter)); + } + return true; + } + } + + { + /* Catch-all branch that does byte-per-byte comparison for zero value. + * + * This is for all pointer fields, and for static PB_LTYPE_VARINT, + * UVARINT, SVARINT, FIXED32, FIXED64, EXTENSION fields, and also + * callback fields. These all have integer or pointer value which + * can be compared with 0. + */ + pb_size_t i; + const char* p = (const char*) field->pData; + for (i = 0; i < field->data_size; i++) { + if (p[i] != 0) { + return false; + } + } + + return true; + } +} + +/* Encode a field with static or pointer allocation, i.e. one whose data + * is available to the encoder directly. */ +static bool checkreturn encode_basic_field(pb_ostream_t* stream, const pb_field_iter_t* field) { + if (!field->pData) { + /* Missing pointer field */ + return true; + } + + if (!pb_encode_tag_for_field(stream, field)) + return false; + + switch (PB_LTYPE(field->type)) { + case PB_LTYPE_BOOL: + return pb_enc_bool(stream, field); + + case PB_LTYPE_VARINT: + case PB_LTYPE_UVARINT: + case PB_LTYPE_SVARINT: + return pb_enc_varint(stream, field); + + case PB_LTYPE_FIXED32: + case PB_LTYPE_FIXED64: + return pb_enc_fixed(stream, field); + + case PB_LTYPE_BYTES: + return pb_enc_bytes(stream, field); + + case PB_LTYPE_STRING: + return pb_enc_string(stream, field); + + case PB_LTYPE_SUBMESSAGE: + case PB_LTYPE_SUBMSG_W_CB: + return pb_enc_submessage(stream, field); + + case PB_LTYPE_FIXED_LENGTH_BYTES: + return pb_enc_fixed_length_bytes(stream, field); + + default: + PB_RETURN_ERROR(stream, "invalid field type"); + } +} + +/* Encode a field with callback semantics. This means that a user function is + * called to provide and encode the actual data. */ +static bool checkreturn encode_callback_field(pb_ostream_t* stream, const pb_field_iter_t* field) { + if (field->descriptor->field_callback != NULL) { + if (!field->descriptor->field_callback(NULL, stream, field)) + PB_RETURN_ERROR(stream, "callback error"); + } + return true; +} + +/* Encode a single field of any callback, pointer or static type. */ +static bool checkreturn encode_field(pb_ostream_t* stream, pb_field_iter_t* field) { + /* Check field presence */ + if (PB_HTYPE(field->type) == PB_HTYPE_ONEOF) { + if (*(const pb_size_t*) field->pSize != field->tag) { + /* Different type oneof field */ + return true; + } + } else if (PB_HTYPE(field->type) == PB_HTYPE_OPTIONAL) { + if (field->pSize) { + if (safe_read_bool(field->pSize) == false) { + /* Missing optional field */ + return true; + } + } else if (PB_ATYPE(field->type) == PB_ATYPE_STATIC) { + /* Proto3 singular field */ + if (pb_check_proto3_default_value(field)) + return true; + } + } + + if (!field->pData) { + if (PB_HTYPE(field->type) == PB_HTYPE_REQUIRED) + PB_RETURN_ERROR(stream, "missing required field"); + + /* Pointer field set to NULL */ + return true; + } + + /* Then encode field contents */ + if (PB_ATYPE(field->type) == PB_ATYPE_CALLBACK) { + return encode_callback_field(stream, field); + } else if (PB_HTYPE(field->type) == PB_HTYPE_REPEATED) { + return encode_array(stream, field); + } else { + return encode_basic_field(stream, field); + } +} + +/* Default handler for extension fields. Expects to have a pb_msgdesc_t + * pointer in the extension->type->arg field, pointing to a message with + * only one field in it. */ +static bool checkreturn default_extension_encoder(pb_ostream_t* stream, const pb_extension_t* extension) { + pb_field_iter_t iter; + + if (!pb_field_iter_begin_extension(&iter, (pb_extension_t*) pb_const_cast(extension))) + PB_RETURN_ERROR(stream, "invalid extension"); + + return encode_field(stream, &iter); +} + +/* Walk through all the registered extensions and give them a chance + * to encode themselves. */ +static bool checkreturn encode_extension_field(pb_ostream_t* stream, const pb_field_iter_t* field) { + const pb_extension_t* extension = *(const pb_extension_t* const*) field->pData; + + while (extension) { + bool status; + if (extension->type->encode) + status = extension->type->encode(stream, extension); + else + status = default_extension_encoder(stream, extension); + + if (!status) + return false; + + extension = extension->next; + } + + return true; +} + +/********************* + * Encode all fields * + *********************/ + +static void* pb_const_cast(const void* p) { + /* Note: this casts away const, in order to use the common field iterator + * logic for both encoding and decoding. */ + union { + void* p1; + const void* p2; + } t; + t.p2 = p; + return t.p1; +} + +bool checkreturn pb_encode(pb_ostream_t* stream, const pb_msgdesc_t* fields, const void* src_struct) { + pb_field_iter_t iter; + if (!pb_field_iter_begin(&iter, fields, pb_const_cast(src_struct))) + return true; /* Empty message type */ + + do { + if (PB_LTYPE(iter.type) == PB_LTYPE_EXTENSION) { + /* Special case for the extension field placeholder */ + if (!encode_extension_field(stream, &iter)) + return false; + } else { + /* Regular field */ + if (!encode_field(stream, &iter)) + return false; + } + } while (pb_field_iter_next(&iter)); + + return true; +} + +bool checkreturn pb_encode_ex(pb_ostream_t* stream, const pb_msgdesc_t* fields, const void* src_struct, unsigned int flags) { + if ((flags & PB_ENCODE_DELIMITED) != 0) { + return pb_encode_submessage(stream, fields, src_struct); + } else if ((flags & PB_ENCODE_NULLTERMINATED) != 0) { + const pb_byte_t zero = 0; + + if (!pb_encode(stream, fields, src_struct)) + return false; + + return pb_write(stream, &zero, 1); + } else { + return pb_encode(stream, fields, src_struct); + } +} + +bool pb_get_encoded_size(size_t* size, const pb_msgdesc_t* fields, const void* src_struct) { + pb_ostream_t stream = PB_OSTREAM_SIZING; + + if (!pb_encode(&stream, fields, src_struct)) + return false; + + *size = stream.bytes_written; + return true; +} + +/******************** + * Helper functions * + ********************/ + +/* This function avoids 64-bit shifts as they are quite slow on many platforms. */ +static bool checkreturn pb_encode_varint_32(pb_ostream_t* stream, uint32_t low, uint32_t high) { + size_t i = 0; + pb_byte_t buffer[10]; + pb_byte_t byte = (pb_byte_t)(low & 0x7F); + low >>= 7; + + while (i < 4 && (low != 0 || high != 0)) { + byte |= 0x80; + buffer[i++] = byte; + byte = (pb_byte_t)(low & 0x7F); + low >>= 7; + } + + if (high) { + byte = (pb_byte_t)(byte | ((high & 0x07) << 4)); + high >>= 3; + + while (high) { + byte |= 0x80; + buffer[i++] = byte; + byte = (pb_byte_t)(high & 0x7F); + high >>= 7; + } + } + + buffer[i++] = byte; + + return pb_write(stream, buffer, i); +} + +bool checkreturn pb_encode_varint(pb_ostream_t* stream, pb_uint64_t value) { + if (value <= 0x7F) { + /* Fast path: single byte */ + pb_byte_t byte = (pb_byte_t) value; + return pb_write(stream, &byte, 1); + } else { +#ifdef PB_WITHOUT_64BIT + return pb_encode_varint_32(stream, value, 0); +#else + return pb_encode_varint_32(stream, (uint32_t) value, (uint32_t)(value >> 32)); +#endif + } +} + +bool checkreturn pb_encode_svarint(pb_ostream_t* stream, pb_int64_t value) { + pb_uint64_t zigzagged; + if (value < 0) + zigzagged = ~((pb_uint64_t) value << 1); + else + zigzagged = (pb_uint64_t) value << 1; + + return pb_encode_varint(stream, zigzagged); +} + +bool checkreturn pb_encode_fixed32(pb_ostream_t* stream, const void* value) { + uint32_t val = *(const uint32_t*) value; + pb_byte_t bytes[4]; + bytes[0] = (pb_byte_t)(val & 0xFF); + bytes[1] = (pb_byte_t)((val >> 8) & 0xFF); + bytes[2] = (pb_byte_t)((val >> 16) & 0xFF); + bytes[3] = (pb_byte_t)((val >> 24) & 0xFF); + return pb_write(stream, bytes, 4); +} + +#ifndef PB_WITHOUT_64BIT +bool checkreturn pb_encode_fixed64(pb_ostream_t* stream, const void* value) { + uint64_t val = *(const uint64_t*) value; + pb_byte_t bytes[8]; + bytes[0] = (pb_byte_t)(val & 0xFF); + bytes[1] = (pb_byte_t)((val >> 8) & 0xFF); + bytes[2] = (pb_byte_t)((val >> 16) & 0xFF); + bytes[3] = (pb_byte_t)((val >> 24) & 0xFF); + bytes[4] = (pb_byte_t)((val >> 32) & 0xFF); + bytes[5] = (pb_byte_t)((val >> 40) & 0xFF); + bytes[6] = (pb_byte_t)((val >> 48) & 0xFF); + bytes[7] = (pb_byte_t)((val >> 56) & 0xFF); + return pb_write(stream, bytes, 8); +} +#endif + +bool checkreturn pb_encode_tag(pb_ostream_t* stream, pb_wire_type_t wiretype, uint32_t field_number) { + pb_uint64_t tag = ((pb_uint64_t) field_number << 3) | wiretype; + return pb_encode_varint(stream, tag); +} + +bool pb_encode_tag_for_field(pb_ostream_t* stream, const pb_field_iter_t* field) { + pb_wire_type_t wiretype; + switch (PB_LTYPE(field->type)) { + case PB_LTYPE_BOOL: + case PB_LTYPE_VARINT: + case PB_LTYPE_UVARINT: + case PB_LTYPE_SVARINT: + wiretype = PB_WT_VARINT; + break; + + case PB_LTYPE_FIXED32: + wiretype = PB_WT_32BIT; + break; + + case PB_LTYPE_FIXED64: + wiretype = PB_WT_64BIT; + break; + + case PB_LTYPE_BYTES: + case PB_LTYPE_STRING: + case PB_LTYPE_SUBMESSAGE: + case PB_LTYPE_SUBMSG_W_CB: + case PB_LTYPE_FIXED_LENGTH_BYTES: + wiretype = PB_WT_STRING; + break; + + default: + PB_RETURN_ERROR(stream, "invalid field type"); + } + + return pb_encode_tag(stream, wiretype, field->tag); +} + +bool checkreturn pb_encode_string(pb_ostream_t* stream, const pb_byte_t* buffer, size_t size) { + if (!pb_encode_varint(stream, (pb_uint64_t) size)) + return false; + + return pb_write(stream, buffer, size); +} + +bool checkreturn pb_encode_submessage(pb_ostream_t* stream, const pb_msgdesc_t* fields, const void* src_struct) { + /* First calculate the message size using a non-writing substream. */ + pb_ostream_t substream = PB_OSTREAM_SIZING; + size_t size; + bool status; + + if (!pb_encode(&substream, fields, src_struct)) { +#ifndef PB_NO_ERRMSG + stream->errmsg = substream.errmsg; +#endif + return false; + } + + size = substream.bytes_written; + + if (!pb_encode_varint(stream, (pb_uint64_t) size)) + return false; + + if (stream->callback == NULL) + return pb_write(stream, NULL, size); /* Just sizing */ + + if (stream->bytes_written + size > stream->max_size) + PB_RETURN_ERROR(stream, "stream full"); + + /* Use a substream to verify that a callback doesn't write more than + * what it did the first time. */ + substream.callback = stream->callback; + substream.state = stream->state; + substream.max_size = size; + substream.bytes_written = 0; +#ifndef PB_NO_ERRMSG + substream.errmsg = NULL; +#endif + + status = pb_encode(&substream, fields, src_struct); + + stream->bytes_written += substream.bytes_written; + stream->state = substream.state; +#ifndef PB_NO_ERRMSG + stream->errmsg = substream.errmsg; +#endif + + if (substream.bytes_written != size) + PB_RETURN_ERROR(stream, "submsg size changed"); + + return status; +} + +/* Field encoders */ + +static bool checkreturn pb_enc_bool(pb_ostream_t* stream, const pb_field_iter_t* field) { + uint32_t value = safe_read_bool(field->pData) ? 1 : 0; + PB_UNUSED(field); + return pb_encode_varint(stream, value); +} + +static bool checkreturn pb_enc_varint(pb_ostream_t* stream, const pb_field_iter_t* field) { + if (PB_LTYPE(field->type) == PB_LTYPE_UVARINT) { + /* Perform unsigned integer extension */ + pb_uint64_t value = 0; + + if (field->data_size == sizeof(uint_least8_t)) + value = *(const uint_least8_t*) field->pData; + else if (field->data_size == sizeof(uint_least16_t)) + value = *(const uint_least16_t*) field->pData; + else if (field->data_size == sizeof(uint32_t)) + value = *(const uint32_t*) field->pData; + else if (field->data_size == sizeof(pb_uint64_t)) + value = *(const pb_uint64_t*) field->pData; + else + PB_RETURN_ERROR(stream, "invalid data_size"); + + return pb_encode_varint(stream, value); + } else { + /* Perform signed integer extension */ + pb_int64_t value = 0; + + if (field->data_size == sizeof(int_least8_t)) + value = *(const int_least8_t*) field->pData; + else if (field->data_size == sizeof(int_least16_t)) + value = *(const int_least16_t*) field->pData; + else if (field->data_size == sizeof(int32_t)) + value = *(const int32_t*) field->pData; + else if (field->data_size == sizeof(pb_int64_t)) + value = *(const pb_int64_t*) field->pData; + else + PB_RETURN_ERROR(stream, "invalid data_size"); + + if (PB_LTYPE(field->type) == PB_LTYPE_SVARINT) + return pb_encode_svarint(stream, value); +#ifdef PB_WITHOUT_64BIT + else if (value < 0) + return pb_encode_varint_32(stream, (uint32_t) value, (uint32_t) -1); +#endif + else + return pb_encode_varint(stream, (pb_uint64_t) value); + } +} + +static bool checkreturn pb_enc_fixed(pb_ostream_t* stream, const pb_field_iter_t* field) { +#ifdef PB_CONVERT_DOUBLE_FLOAT + if (field->data_size == sizeof(float) && PB_LTYPE(field->type) == PB_LTYPE_FIXED64) { + return pb_encode_float_as_double(stream, *(float*) field->pData); + } +#endif + + if (field->data_size == sizeof(uint32_t)) { + return pb_encode_fixed32(stream, field->pData); + } +#ifndef PB_WITHOUT_64BIT + else if (field->data_size == sizeof(uint64_t)) { + return pb_encode_fixed64(stream, field->pData); + } +#endif + else { + PB_RETURN_ERROR(stream, "invalid data_size"); + } +} + +static bool checkreturn pb_enc_bytes(pb_ostream_t* stream, const pb_field_iter_t* field) { + const pb_bytes_array_t* bytes = NULL; + + bytes = (const pb_bytes_array_t*) field->pData; + + if (bytes == NULL) { + /* Treat null pointer as an empty bytes field */ + return pb_encode_string(stream, NULL, 0); + } + + if (PB_ATYPE(field->type) == PB_ATYPE_STATIC && + PB_BYTES_ARRAY_T_ALLOCSIZE(bytes->size) > field->data_size) { + PB_RETURN_ERROR(stream, "bytes size exceeded"); + } + + return pb_encode_string(stream, bytes->bytes, (size_t) bytes->size); +} + +static bool checkreturn pb_enc_string(pb_ostream_t* stream, const pb_field_iter_t* field) { + size_t size = 0; + size_t max_size = (size_t) field->data_size; + const char* str = (const char*) field->pData; + + if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) { + max_size = (size_t) -1; + } else { + /* pb_dec_string() assumes string fields end with a null + * terminator when the type isn't PB_ATYPE_POINTER, so we + * shouldn't allow more than max-1 bytes to be written to + * allow space for the null terminator. + */ + if (max_size == 0) + PB_RETURN_ERROR(stream, "zero-length string"); + + max_size -= 1; + } + + if (str == NULL) { + size = 0; /* Treat null pointer as an empty string */ + } else { + const char* p = str; + + /* strnlen() is not always available, so just use a loop */ + while (size < max_size && *p != '\0') { + size++; + p++; + } + + if (*p != '\0') { + PB_RETURN_ERROR(stream, "unterminated string"); + } + } + +#ifdef PB_VALIDATE_UTF8 + if (!pb_validate_utf8(str)) + PB_RETURN_ERROR(stream, "invalid utf8"); +#endif + + return pb_encode_string(stream, (const pb_byte_t*) str, size); +} + +static bool checkreturn pb_enc_submessage(pb_ostream_t* stream, const pb_field_iter_t* field) { + if (field->submsg_desc == NULL) + PB_RETURN_ERROR(stream, "invalid field descriptor"); + + if (PB_LTYPE(field->type) == PB_LTYPE_SUBMSG_W_CB && field->pSize != NULL) { + /* Message callback is stored right before pSize. */ + pb_callback_t* callback = (pb_callback_t*) field->pSize - 1; + if (callback->funcs.encode) { + if (!callback->funcs.encode(stream, field, &callback->arg)) + return false; + } + } + + return pb_encode_submessage(stream, field->submsg_desc, field->pData); +} + +static bool checkreturn pb_enc_fixed_length_bytes(pb_ostream_t* stream, const pb_field_iter_t* field) { + return pb_encode_string(stream, (const pb_byte_t*) field->pData, (size_t) field->data_size); +} + +#ifdef PB_CONVERT_DOUBLE_FLOAT +bool pb_encode_float_as_double(pb_ostream_t* stream, float value) { + union { + float f; + uint32_t i; + } in; + uint8_t sign; + int exponent; + uint64_t mantissa; + + in.f = value; + + /* Decompose input value */ + sign = (uint8_t)((in.i >> 31) & 1); + exponent = (int) ((in.i >> 23) & 0xFF) - 127; + mantissa = in.i & 0x7FFFFF; + + if (exponent == 128) { + /* Special value (NaN etc.) */ + exponent = 1024; + } else if (exponent == -127) { + if (!mantissa) { + /* Zero */ + exponent = -1023; + } else { + /* Denormalized */ + mantissa <<= 1; + while (!(mantissa & 0x800000)) { + mantissa <<= 1; + exponent--; + } + mantissa &= 0x7FFFFF; + } + } + + /* Combine fields */ + mantissa <<= 29; + mantissa |= (uint64_t)(exponent + 1023) << 52; + mantissa |= (uint64_t) sign << 63; + + return pb_encode_fixed64(stream, &mantissa); +} +#endif diff --git a/c/src/third-party/nanopb/pb_encode.h b/c/src/third-party/nanopb/pb_encode.h new file mode 100755 index 000000000..908ed0fd2 --- /dev/null +++ b/c/src/third-party/nanopb/pb_encode.h @@ -0,0 +1,208 @@ +/******************************************************************************* + * Copyright (c) 2011 Petteri Aimonen + * + * This software is provided 'as-is', without any express or + * implied warranty. In no event will the authors be held liable + * for any damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + *******************************************************************************/ + +/* pb_encode.h: Functions to encode protocol buffers. Depends on pb_encode.c. + * The main function is pb_encode. You also need an output stream, and the + * field descriptions created by nanopb_generator.py. + */ + +#ifndef PB_ENCODE_H_INCLUDED +#define PB_ENCODE_H_INCLUDED + +#include "pb.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Structure for defining custom output streams. You will need to provide + * a callback function to write the bytes to your storage, which can be + * for example a file or a network socket. + * + * The callback must conform to these rules: + * + * 1) Return false on IO errors. This will cause encoding to abort. + * 2) You can use state to store your own data (e.g. buffer pointer). + * 3) pb_write will update bytes_written after your callback runs. + * 4) Substreams will modify max_size and bytes_written. Don't use them + * to calculate any pointers. + */ +struct pb_ostream_s { +#ifdef PB_BUFFER_ONLY + /* Callback pointer is not used in buffer-only configuration. + * Having an int pointer here allows binary compatibility but + * gives an error if someone tries to assign callback function. + * Also, NULL pointer marks a 'sizing stream' that does not + * write anything. + */ + int* callback; +#else + bool (*callback)(pb_ostream_t* stream, const pb_byte_t* buf, size_t count); +#endif + void* state; /* Free field for use by callback implementation. */ + size_t max_size; /* Limit number of output bytes written (or use SIZE_MAX). */ + size_t bytes_written; /* Number of bytes written so far. */ + +#ifndef PB_NO_ERRMSG + const char* errmsg; +#endif +}; + +/*************************** + * Main encoding functions * + ***************************/ + +/* Encode a single protocol buffers message from C structure into a stream. + * Returns true on success, false on any failure. + * The actual struct pointed to by src_struct must match the description in fields. + * All required fields in the struct are assumed to have been filled in. + * + * Example usage: + * MyMessage msg = {}; + * uint8_t buffer[64]; + * pb_ostream_t stream; + * + * msg.field1 = 42; + * stream = pb_ostream_from_buffer(buffer, sizeof(buffer)); + * pb_encode(&stream, MyMessage_fields, &msg); + */ +bool pb_encode(pb_ostream_t* stream, const pb_msgdesc_t* fields, const void* src_struct); + +/* Extended version of pb_encode, with several options to control the + * encoding process: + * + * PB_ENCODE_DELIMITED: Prepend the length of message as a varint. + * Corresponds to writeDelimitedTo() in Google's + * protobuf API. + * + * PB_ENCODE_NULLTERMINATED: Append a null byte to the message for termination. + * NOTE: This behaviour is not supported in most other + * protobuf implementations, so PB_ENCODE_DELIMITED + * is a better option for compatibility. + */ +#define PB_ENCODE_DELIMITED 0x02U +#define PB_ENCODE_NULLTERMINATED 0x04U +bool pb_encode_ex(pb_ostream_t* stream, const pb_msgdesc_t* fields, const void* src_struct, unsigned int flags); + +/* Defines for backwards compatibility with code written before nanopb-0.4.0 */ +#define pb_encode_delimited(s, f, d) pb_encode_ex(s, f, d, PB_ENCODE_DELIMITED) +#define pb_encode_nullterminated(s, f, d) pb_encode_ex(s, f, d, PB_ENCODE_NULLTERMINATED) + +/* Encode the message to get the size of the encoded data, but do not store + * the data. */ +bool pb_get_encoded_size(size_t* size, const pb_msgdesc_t* fields, const void* src_struct); + +/************************************** + * Functions for manipulating streams * + **************************************/ + +/* Create an output stream for writing into a memory buffer. + * The number of bytes written can be found in stream.bytes_written after + * encoding the message. + * + * Alternatively, you can use a custom stream that writes directly to e.g. + * a file or a network socket. + */ +pb_ostream_t pb_ostream_from_buffer(pb_byte_t* buf, size_t bufsize); + +/* Pseudo-stream for measuring the size of a message without actually storing + * the encoded data. + * + * Example usage: + * MyMessage msg = {}; + * pb_ostream_t stream = PB_OSTREAM_SIZING; + * pb_encode(&stream, MyMessage_fields, &msg); + * printf("Message size is %d\n", stream.bytes_written); + */ +#ifndef PB_NO_ERRMSG +#define PB_OSTREAM_SIZING \ + { 0, 0, 0, 0, 0 } +#else +#define PB_OSTREAM_SIZING \ + { 0, 0, 0, 0 } +#endif + +/* Function to write into a pb_ostream_t stream. You can use this if you need + * to append or prepend some custom headers to the message. + */ +bool pb_write(pb_ostream_t* stream, const pb_byte_t* buf, size_t count); + +/************************************************ + * Helper functions for writing field callbacks * + ************************************************/ + +/* Encode field header based on type and field number defined in the field + * structure. Call this from the callback before writing out field contents. */ +bool pb_encode_tag_for_field(pb_ostream_t* stream, const pb_field_iter_t* field); + +/* Encode field header by manually specifing wire type. You need to use this + * if you want to write out packed arrays from a callback field. */ +bool pb_encode_tag(pb_ostream_t* stream, pb_wire_type_t wiretype, uint32_t field_number); + +/* Encode an integer in the varint format. + * This works for bool, enum, int32, int64, uint32 and uint64 field types. */ +#ifndef PB_WITHOUT_64BIT +bool pb_encode_varint(pb_ostream_t* stream, uint64_t value); +#else +bool pb_encode_varint(pb_ostream_t* stream, uint32_t value); +#endif + +/* Encode an integer in the zig-zagged svarint format. + * This works for sint32 and sint64. */ +#ifndef PB_WITHOUT_64BIT +bool pb_encode_svarint(pb_ostream_t* stream, int64_t value); +#else +bool pb_encode_svarint(pb_ostream_t* stream, int32_t value); +#endif + +/* Encode a string or bytes type field. For strings, pass strlen(s) as size. */ +bool pb_encode_string(pb_ostream_t* stream, const pb_byte_t* buffer, size_t size); + +/* Encode a fixed32, sfixed32 or float value. + * You need to pass a pointer to a 4-byte wide C variable. */ +bool pb_encode_fixed32(pb_ostream_t* stream, const void* value); + +#ifndef PB_WITHOUT_64BIT +/* Encode a fixed64, sfixed64 or double value. + * You need to pass a pointer to a 8-byte wide C variable. */ +bool pb_encode_fixed64(pb_ostream_t* stream, const void* value); +#endif + +#ifdef PB_CONVERT_DOUBLE_FLOAT +/* Encode a float value so that it appears like a double in the encoded + * message. */ +bool pb_encode_float_as_double(pb_ostream_t* stream, float value); +#endif + +/* Encode a submessage field. + * You need to pass the pb_field_t array and pointer to struct, just like + * with pb_encode(). This internally encodes the submessage twice, first to + * calculate message size and then to actually write it out. + */ +bool pb_encode_submessage(pb_ostream_t* stream, const pb_msgdesc_t* fields, const void* src_struct); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif diff --git a/src/third-party/segger_rtt/CMakeLists.txt b/c/src/third-party/segger_rtt/CMakeLists.txt similarity index 100% rename from src/third-party/segger_rtt/CMakeLists.txt rename to c/src/third-party/segger_rtt/CMakeLists.txt diff --git a/src/third-party/segger_rtt/SEGGER_RTT.c b/c/src/third-party/segger_rtt/SEGGER_RTT.c similarity index 100% rename from src/third-party/segger_rtt/SEGGER_RTT.c rename to c/src/third-party/segger_rtt/SEGGER_RTT.c diff --git a/src/third-party/segger_rtt/SEGGER_RTT.h b/c/src/third-party/segger_rtt/SEGGER_RTT.h similarity index 100% rename from src/third-party/segger_rtt/SEGGER_RTT.h rename to c/src/third-party/segger_rtt/SEGGER_RTT.h diff --git a/src/third-party/segger_rtt/SEGGER_RTT_Conf.h b/c/src/third-party/segger_rtt/SEGGER_RTT_Conf.h similarity index 100% rename from src/third-party/segger_rtt/SEGGER_RTT_Conf.h rename to c/src/third-party/segger_rtt/SEGGER_RTT_Conf.h diff --git a/src/third-party/segger_rtt/SEGGER_RTT_printf.c b/c/src/third-party/segger_rtt/SEGGER_RTT_printf.c similarity index 100% rename from src/third-party/segger_rtt/SEGGER_RTT_printf.c rename to c/src/third-party/segger_rtt/SEGGER_RTT_printf.c diff --git a/src/third-party/tommath/CMakeLists.txt b/c/src/third-party/tommath/CMakeLists.txt similarity index 100% rename from src/third-party/tommath/CMakeLists.txt rename to c/src/third-party/tommath/CMakeLists.txt diff --git a/c/src/third-party/tommath/LICENSE b/c/src/third-party/tommath/LICENSE new file mode 100644 index 000000000..b23b3c867 --- /dev/null +++ b/c/src/third-party/tommath/LICENSE @@ -0,0 +1,26 @@ + The LibTom license + +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/c/src/third-party/tommath/README b/c/src/third-party/tommath/README new file mode 100644 index 000000000..d151d0c75 --- /dev/null +++ b/c/src/third-party/tommath/README @@ -0,0 +1,7 @@ +- version: 1.1.0 +- website: https://github.com/libtom/libtommath +- download: https://github.com/libtom/libtommath/releases/tag/v1.1.0 +- notes: + - **DO NOT** modify `tommath_superclass.h` + - See `CMakeLists.txt` for required files + diff --git a/src/third-party/tommath/bn_error.c b/c/src/third-party/tommath/bn_error.c similarity index 100% rename from src/third-party/tommath/bn_error.c rename to c/src/third-party/tommath/bn_error.c diff --git a/src/third-party/tommath/bn_fast_mp_invmod.c b/c/src/third-party/tommath/bn_fast_mp_invmod.c similarity index 100% rename from src/third-party/tommath/bn_fast_mp_invmod.c rename to c/src/third-party/tommath/bn_fast_mp_invmod.c diff --git a/src/third-party/tommath/bn_fast_mp_montgomery_reduce.c b/c/src/third-party/tommath/bn_fast_mp_montgomery_reduce.c similarity index 100% rename from src/third-party/tommath/bn_fast_mp_montgomery_reduce.c rename to c/src/third-party/tommath/bn_fast_mp_montgomery_reduce.c diff --git a/src/third-party/tommath/bn_fast_s_mp_mul_digs.c b/c/src/third-party/tommath/bn_fast_s_mp_mul_digs.c similarity index 100% rename from src/third-party/tommath/bn_fast_s_mp_mul_digs.c rename to c/src/third-party/tommath/bn_fast_s_mp_mul_digs.c diff --git a/src/third-party/tommath/bn_fast_s_mp_mul_high_digs.c b/c/src/third-party/tommath/bn_fast_s_mp_mul_high_digs.c similarity index 100% rename from src/third-party/tommath/bn_fast_s_mp_mul_high_digs.c rename to c/src/third-party/tommath/bn_fast_s_mp_mul_high_digs.c diff --git a/src/third-party/tommath/bn_fast_s_mp_sqr.c b/c/src/third-party/tommath/bn_fast_s_mp_sqr.c similarity index 100% rename from src/third-party/tommath/bn_fast_s_mp_sqr.c rename to c/src/third-party/tommath/bn_fast_s_mp_sqr.c diff --git a/src/third-party/tommath/bn_mp_2expt.c b/c/src/third-party/tommath/bn_mp_2expt.c similarity index 100% rename from src/third-party/tommath/bn_mp_2expt.c rename to c/src/third-party/tommath/bn_mp_2expt.c diff --git a/src/third-party/tommath/bn_mp_abs.c b/c/src/third-party/tommath/bn_mp_abs.c similarity index 100% rename from src/third-party/tommath/bn_mp_abs.c rename to c/src/third-party/tommath/bn_mp_abs.c diff --git a/src/third-party/tommath/bn_mp_add.c b/c/src/third-party/tommath/bn_mp_add.c similarity index 100% rename from src/third-party/tommath/bn_mp_add.c rename to c/src/third-party/tommath/bn_mp_add.c diff --git a/src/third-party/tommath/bn_mp_add_d.c b/c/src/third-party/tommath/bn_mp_add_d.c similarity index 100% rename from src/third-party/tommath/bn_mp_add_d.c rename to c/src/third-party/tommath/bn_mp_add_d.c diff --git a/src/third-party/tommath/bn_mp_addmod.c b/c/src/third-party/tommath/bn_mp_addmod.c similarity index 100% rename from src/third-party/tommath/bn_mp_addmod.c rename to c/src/third-party/tommath/bn_mp_addmod.c diff --git a/src/third-party/tommath/bn_mp_and.c b/c/src/third-party/tommath/bn_mp_and.c similarity index 100% rename from src/third-party/tommath/bn_mp_and.c rename to c/src/third-party/tommath/bn_mp_and.c diff --git a/src/third-party/tommath/bn_mp_balance_mul.c b/c/src/third-party/tommath/bn_mp_balance_mul.c similarity index 100% rename from src/third-party/tommath/bn_mp_balance_mul.c rename to c/src/third-party/tommath/bn_mp_balance_mul.c diff --git a/src/third-party/tommath/bn_mp_clamp.c b/c/src/third-party/tommath/bn_mp_clamp.c similarity index 100% rename from src/third-party/tommath/bn_mp_clamp.c rename to c/src/third-party/tommath/bn_mp_clamp.c diff --git a/src/third-party/tommath/bn_mp_clear.c b/c/src/third-party/tommath/bn_mp_clear.c similarity index 100% rename from src/third-party/tommath/bn_mp_clear.c rename to c/src/third-party/tommath/bn_mp_clear.c diff --git a/src/third-party/tommath/bn_mp_clear_multi.c b/c/src/third-party/tommath/bn_mp_clear_multi.c similarity index 100% rename from src/third-party/tommath/bn_mp_clear_multi.c rename to c/src/third-party/tommath/bn_mp_clear_multi.c diff --git a/src/third-party/tommath/bn_mp_cmp.c b/c/src/third-party/tommath/bn_mp_cmp.c similarity index 100% rename from src/third-party/tommath/bn_mp_cmp.c rename to c/src/third-party/tommath/bn_mp_cmp.c diff --git a/src/third-party/tommath/bn_mp_cmp_d.c b/c/src/third-party/tommath/bn_mp_cmp_d.c similarity index 100% rename from src/third-party/tommath/bn_mp_cmp_d.c rename to c/src/third-party/tommath/bn_mp_cmp_d.c diff --git a/src/third-party/tommath/bn_mp_cmp_mag.c b/c/src/third-party/tommath/bn_mp_cmp_mag.c similarity index 100% rename from src/third-party/tommath/bn_mp_cmp_mag.c rename to c/src/third-party/tommath/bn_mp_cmp_mag.c diff --git a/src/third-party/tommath/bn_mp_cnt_lsb.c b/c/src/third-party/tommath/bn_mp_cnt_lsb.c similarity index 100% rename from src/third-party/tommath/bn_mp_cnt_lsb.c rename to c/src/third-party/tommath/bn_mp_cnt_lsb.c diff --git a/src/third-party/tommath/bn_mp_complement.c b/c/src/third-party/tommath/bn_mp_complement.c similarity index 100% rename from src/third-party/tommath/bn_mp_complement.c rename to c/src/third-party/tommath/bn_mp_complement.c diff --git a/src/third-party/tommath/bn_mp_copy.c b/c/src/third-party/tommath/bn_mp_copy.c similarity index 100% rename from src/third-party/tommath/bn_mp_copy.c rename to c/src/third-party/tommath/bn_mp_copy.c diff --git a/src/third-party/tommath/bn_mp_count_bits.c b/c/src/third-party/tommath/bn_mp_count_bits.c similarity index 100% rename from src/third-party/tommath/bn_mp_count_bits.c rename to c/src/third-party/tommath/bn_mp_count_bits.c diff --git a/src/third-party/tommath/bn_mp_decr.c b/c/src/third-party/tommath/bn_mp_decr.c similarity index 100% rename from src/third-party/tommath/bn_mp_decr.c rename to c/src/third-party/tommath/bn_mp_decr.c diff --git a/src/third-party/tommath/bn_mp_div.c b/c/src/third-party/tommath/bn_mp_div.c similarity index 100% rename from src/third-party/tommath/bn_mp_div.c rename to c/src/third-party/tommath/bn_mp_div.c diff --git a/src/third-party/tommath/bn_mp_div_2.c b/c/src/third-party/tommath/bn_mp_div_2.c similarity index 100% rename from src/third-party/tommath/bn_mp_div_2.c rename to c/src/third-party/tommath/bn_mp_div_2.c diff --git a/src/third-party/tommath/bn_mp_div_2d.c b/c/src/third-party/tommath/bn_mp_div_2d.c similarity index 100% rename from src/third-party/tommath/bn_mp_div_2d.c rename to c/src/third-party/tommath/bn_mp_div_2d.c diff --git a/src/third-party/tommath/bn_mp_div_3.c b/c/src/third-party/tommath/bn_mp_div_3.c similarity index 100% rename from src/third-party/tommath/bn_mp_div_3.c rename to c/src/third-party/tommath/bn_mp_div_3.c diff --git a/src/third-party/tommath/bn_mp_div_d.c b/c/src/third-party/tommath/bn_mp_div_d.c similarity index 100% rename from src/third-party/tommath/bn_mp_div_d.c rename to c/src/third-party/tommath/bn_mp_div_d.c diff --git a/src/third-party/tommath/bn_mp_dr_is_modulus.c b/c/src/third-party/tommath/bn_mp_dr_is_modulus.c similarity index 100% rename from src/third-party/tommath/bn_mp_dr_is_modulus.c rename to c/src/third-party/tommath/bn_mp_dr_is_modulus.c diff --git a/src/third-party/tommath/bn_mp_dr_reduce.c b/c/src/third-party/tommath/bn_mp_dr_reduce.c similarity index 100% rename from src/third-party/tommath/bn_mp_dr_reduce.c rename to c/src/third-party/tommath/bn_mp_dr_reduce.c diff --git a/src/third-party/tommath/bn_mp_dr_setup.c b/c/src/third-party/tommath/bn_mp_dr_setup.c similarity index 100% rename from src/third-party/tommath/bn_mp_dr_setup.c rename to c/src/third-party/tommath/bn_mp_dr_setup.c diff --git a/src/third-party/tommath/bn_mp_exch.c b/c/src/third-party/tommath/bn_mp_exch.c similarity index 100% rename from src/third-party/tommath/bn_mp_exch.c rename to c/src/third-party/tommath/bn_mp_exch.c diff --git a/src/third-party/tommath/bn_mp_export.c b/c/src/third-party/tommath/bn_mp_export.c similarity index 100% rename from src/third-party/tommath/bn_mp_export.c rename to c/src/third-party/tommath/bn_mp_export.c diff --git a/src/third-party/tommath/bn_mp_expt_d.c b/c/src/third-party/tommath/bn_mp_expt_d.c similarity index 100% rename from src/third-party/tommath/bn_mp_expt_d.c rename to c/src/third-party/tommath/bn_mp_expt_d.c diff --git a/src/third-party/tommath/bn_mp_expt_d_ex.c b/c/src/third-party/tommath/bn_mp_expt_d_ex.c similarity index 100% rename from src/third-party/tommath/bn_mp_expt_d_ex.c rename to c/src/third-party/tommath/bn_mp_expt_d_ex.c diff --git a/src/third-party/tommath/bn_mp_exptmod.c b/c/src/third-party/tommath/bn_mp_exptmod.c similarity index 100% rename from src/third-party/tommath/bn_mp_exptmod.c rename to c/src/third-party/tommath/bn_mp_exptmod.c diff --git a/src/third-party/tommath/bn_mp_exptmod_fast.c b/c/src/third-party/tommath/bn_mp_exptmod_fast.c similarity index 100% rename from src/third-party/tommath/bn_mp_exptmod_fast.c rename to c/src/third-party/tommath/bn_mp_exptmod_fast.c diff --git a/src/third-party/tommath/bn_mp_exteuclid.c b/c/src/third-party/tommath/bn_mp_exteuclid.c similarity index 100% rename from src/third-party/tommath/bn_mp_exteuclid.c rename to c/src/third-party/tommath/bn_mp_exteuclid.c diff --git a/src/third-party/tommath/bn_mp_fread.c b/c/src/third-party/tommath/bn_mp_fread.c similarity index 100% rename from src/third-party/tommath/bn_mp_fread.c rename to c/src/third-party/tommath/bn_mp_fread.c diff --git a/src/third-party/tommath/bn_mp_fwrite.c b/c/src/third-party/tommath/bn_mp_fwrite.c similarity index 100% rename from src/third-party/tommath/bn_mp_fwrite.c rename to c/src/third-party/tommath/bn_mp_fwrite.c diff --git a/src/third-party/tommath/bn_mp_gcd.c b/c/src/third-party/tommath/bn_mp_gcd.c similarity index 100% rename from src/third-party/tommath/bn_mp_gcd.c rename to c/src/third-party/tommath/bn_mp_gcd.c diff --git a/src/third-party/tommath/bn_mp_get_bit.c b/c/src/third-party/tommath/bn_mp_get_bit.c similarity index 100% rename from src/third-party/tommath/bn_mp_get_bit.c rename to c/src/third-party/tommath/bn_mp_get_bit.c diff --git a/src/third-party/tommath/bn_mp_get_double.c b/c/src/third-party/tommath/bn_mp_get_double.c similarity index 100% rename from src/third-party/tommath/bn_mp_get_double.c rename to c/src/third-party/tommath/bn_mp_get_double.c diff --git a/src/third-party/tommath/bn_mp_get_int.c b/c/src/third-party/tommath/bn_mp_get_int.c similarity index 100% rename from src/third-party/tommath/bn_mp_get_int.c rename to c/src/third-party/tommath/bn_mp_get_int.c diff --git a/src/third-party/tommath/bn_mp_get_long.c b/c/src/third-party/tommath/bn_mp_get_long.c similarity index 100% rename from src/third-party/tommath/bn_mp_get_long.c rename to c/src/third-party/tommath/bn_mp_get_long.c diff --git a/src/third-party/tommath/bn_mp_get_long_long.c b/c/src/third-party/tommath/bn_mp_get_long_long.c similarity index 100% rename from src/third-party/tommath/bn_mp_get_long_long.c rename to c/src/third-party/tommath/bn_mp_get_long_long.c diff --git a/src/third-party/tommath/bn_mp_grow.c b/c/src/third-party/tommath/bn_mp_grow.c similarity index 100% rename from src/third-party/tommath/bn_mp_grow.c rename to c/src/third-party/tommath/bn_mp_grow.c diff --git a/src/third-party/tommath/bn_mp_ilogb.c b/c/src/third-party/tommath/bn_mp_ilogb.c similarity index 100% rename from src/third-party/tommath/bn_mp_ilogb.c rename to c/src/third-party/tommath/bn_mp_ilogb.c diff --git a/src/third-party/tommath/bn_mp_import.c b/c/src/third-party/tommath/bn_mp_import.c similarity index 100% rename from src/third-party/tommath/bn_mp_import.c rename to c/src/third-party/tommath/bn_mp_import.c diff --git a/src/third-party/tommath/bn_mp_incr.c b/c/src/third-party/tommath/bn_mp_incr.c similarity index 100% rename from src/third-party/tommath/bn_mp_incr.c rename to c/src/third-party/tommath/bn_mp_incr.c diff --git a/src/third-party/tommath/bn_mp_init.c b/c/src/third-party/tommath/bn_mp_init.c similarity index 100% rename from src/third-party/tommath/bn_mp_init.c rename to c/src/third-party/tommath/bn_mp_init.c diff --git a/src/third-party/tommath/bn_mp_init_copy.c b/c/src/third-party/tommath/bn_mp_init_copy.c similarity index 100% rename from src/third-party/tommath/bn_mp_init_copy.c rename to c/src/third-party/tommath/bn_mp_init_copy.c diff --git a/src/third-party/tommath/bn_mp_init_multi.c b/c/src/third-party/tommath/bn_mp_init_multi.c similarity index 100% rename from src/third-party/tommath/bn_mp_init_multi.c rename to c/src/third-party/tommath/bn_mp_init_multi.c diff --git a/src/third-party/tommath/bn_mp_init_set.c b/c/src/third-party/tommath/bn_mp_init_set.c similarity index 100% rename from src/third-party/tommath/bn_mp_init_set.c rename to c/src/third-party/tommath/bn_mp_init_set.c diff --git a/src/third-party/tommath/bn_mp_init_set_int.c b/c/src/third-party/tommath/bn_mp_init_set_int.c similarity index 100% rename from src/third-party/tommath/bn_mp_init_set_int.c rename to c/src/third-party/tommath/bn_mp_init_set_int.c diff --git a/src/third-party/tommath/bn_mp_init_size.c b/c/src/third-party/tommath/bn_mp_init_size.c similarity index 100% rename from src/third-party/tommath/bn_mp_init_size.c rename to c/src/third-party/tommath/bn_mp_init_size.c diff --git a/src/third-party/tommath/bn_mp_invmod.c b/c/src/third-party/tommath/bn_mp_invmod.c similarity index 100% rename from src/third-party/tommath/bn_mp_invmod.c rename to c/src/third-party/tommath/bn_mp_invmod.c diff --git a/src/third-party/tommath/bn_mp_invmod_slow.c b/c/src/third-party/tommath/bn_mp_invmod_slow.c similarity index 100% rename from src/third-party/tommath/bn_mp_invmod_slow.c rename to c/src/third-party/tommath/bn_mp_invmod_slow.c diff --git a/src/third-party/tommath/bn_mp_is_square.c b/c/src/third-party/tommath/bn_mp_is_square.c similarity index 100% rename from src/third-party/tommath/bn_mp_is_square.c rename to c/src/third-party/tommath/bn_mp_is_square.c diff --git a/src/third-party/tommath/bn_mp_iseven.c b/c/src/third-party/tommath/bn_mp_iseven.c similarity index 100% rename from src/third-party/tommath/bn_mp_iseven.c rename to c/src/third-party/tommath/bn_mp_iseven.c diff --git a/src/third-party/tommath/bn_mp_isodd.c b/c/src/third-party/tommath/bn_mp_isodd.c similarity index 100% rename from src/third-party/tommath/bn_mp_isodd.c rename to c/src/third-party/tommath/bn_mp_isodd.c diff --git a/src/third-party/tommath/bn_mp_jacobi.c b/c/src/third-party/tommath/bn_mp_jacobi.c similarity index 100% rename from src/third-party/tommath/bn_mp_jacobi.c rename to c/src/third-party/tommath/bn_mp_jacobi.c diff --git a/src/third-party/tommath/bn_mp_karatsuba_mul.c b/c/src/third-party/tommath/bn_mp_karatsuba_mul.c similarity index 100% rename from src/third-party/tommath/bn_mp_karatsuba_mul.c rename to c/src/third-party/tommath/bn_mp_karatsuba_mul.c diff --git a/src/third-party/tommath/bn_mp_karatsuba_sqr.c b/c/src/third-party/tommath/bn_mp_karatsuba_sqr.c similarity index 100% rename from src/third-party/tommath/bn_mp_karatsuba_sqr.c rename to c/src/third-party/tommath/bn_mp_karatsuba_sqr.c diff --git a/src/third-party/tommath/bn_mp_kronecker.c b/c/src/third-party/tommath/bn_mp_kronecker.c similarity index 100% rename from src/third-party/tommath/bn_mp_kronecker.c rename to c/src/third-party/tommath/bn_mp_kronecker.c diff --git a/src/third-party/tommath/bn_mp_lcm.c b/c/src/third-party/tommath/bn_mp_lcm.c similarity index 100% rename from src/third-party/tommath/bn_mp_lcm.c rename to c/src/third-party/tommath/bn_mp_lcm.c diff --git a/src/third-party/tommath/bn_mp_lshd.c b/c/src/third-party/tommath/bn_mp_lshd.c similarity index 100% rename from src/third-party/tommath/bn_mp_lshd.c rename to c/src/third-party/tommath/bn_mp_lshd.c diff --git a/src/third-party/tommath/bn_mp_mod.c b/c/src/third-party/tommath/bn_mp_mod.c similarity index 100% rename from src/third-party/tommath/bn_mp_mod.c rename to c/src/third-party/tommath/bn_mp_mod.c diff --git a/src/third-party/tommath/bn_mp_mod_2d.c b/c/src/third-party/tommath/bn_mp_mod_2d.c similarity index 100% rename from src/third-party/tommath/bn_mp_mod_2d.c rename to c/src/third-party/tommath/bn_mp_mod_2d.c diff --git a/src/third-party/tommath/bn_mp_mod_d.c b/c/src/third-party/tommath/bn_mp_mod_d.c similarity index 100% rename from src/third-party/tommath/bn_mp_mod_d.c rename to c/src/third-party/tommath/bn_mp_mod_d.c diff --git a/src/third-party/tommath/bn_mp_montgomery_calc_normalization.c b/c/src/third-party/tommath/bn_mp_montgomery_calc_normalization.c similarity index 100% rename from src/third-party/tommath/bn_mp_montgomery_calc_normalization.c rename to c/src/third-party/tommath/bn_mp_montgomery_calc_normalization.c diff --git a/src/third-party/tommath/bn_mp_montgomery_reduce.c b/c/src/third-party/tommath/bn_mp_montgomery_reduce.c similarity index 100% rename from src/third-party/tommath/bn_mp_montgomery_reduce.c rename to c/src/third-party/tommath/bn_mp_montgomery_reduce.c diff --git a/src/third-party/tommath/bn_mp_montgomery_setup.c b/c/src/third-party/tommath/bn_mp_montgomery_setup.c similarity index 100% rename from src/third-party/tommath/bn_mp_montgomery_setup.c rename to c/src/third-party/tommath/bn_mp_montgomery_setup.c diff --git a/src/third-party/tommath/bn_mp_mul.c b/c/src/third-party/tommath/bn_mp_mul.c similarity index 100% rename from src/third-party/tommath/bn_mp_mul.c rename to c/src/third-party/tommath/bn_mp_mul.c diff --git a/src/third-party/tommath/bn_mp_mul_2.c b/c/src/third-party/tommath/bn_mp_mul_2.c similarity index 100% rename from src/third-party/tommath/bn_mp_mul_2.c rename to c/src/third-party/tommath/bn_mp_mul_2.c diff --git a/src/third-party/tommath/bn_mp_mul_2d.c b/c/src/third-party/tommath/bn_mp_mul_2d.c similarity index 100% rename from src/third-party/tommath/bn_mp_mul_2d.c rename to c/src/third-party/tommath/bn_mp_mul_2d.c diff --git a/src/third-party/tommath/bn_mp_mul_d.c b/c/src/third-party/tommath/bn_mp_mul_d.c similarity index 100% rename from src/third-party/tommath/bn_mp_mul_d.c rename to c/src/third-party/tommath/bn_mp_mul_d.c diff --git a/src/third-party/tommath/bn_mp_mulmod.c b/c/src/third-party/tommath/bn_mp_mulmod.c similarity index 100% rename from src/third-party/tommath/bn_mp_mulmod.c rename to c/src/third-party/tommath/bn_mp_mulmod.c diff --git a/src/third-party/tommath/bn_mp_n_root.c b/c/src/third-party/tommath/bn_mp_n_root.c similarity index 100% rename from src/third-party/tommath/bn_mp_n_root.c rename to c/src/third-party/tommath/bn_mp_n_root.c diff --git a/src/third-party/tommath/bn_mp_n_root_ex.c b/c/src/third-party/tommath/bn_mp_n_root_ex.c similarity index 100% rename from src/third-party/tommath/bn_mp_n_root_ex.c rename to c/src/third-party/tommath/bn_mp_n_root_ex.c diff --git a/src/third-party/tommath/bn_mp_neg.c b/c/src/third-party/tommath/bn_mp_neg.c similarity index 100% rename from src/third-party/tommath/bn_mp_neg.c rename to c/src/third-party/tommath/bn_mp_neg.c diff --git a/src/third-party/tommath/bn_mp_or.c b/c/src/third-party/tommath/bn_mp_or.c similarity index 100% rename from src/third-party/tommath/bn_mp_or.c rename to c/src/third-party/tommath/bn_mp_or.c diff --git a/src/third-party/tommath/bn_mp_prime_fermat.c b/c/src/third-party/tommath/bn_mp_prime_fermat.c similarity index 100% rename from src/third-party/tommath/bn_mp_prime_fermat.c rename to c/src/third-party/tommath/bn_mp_prime_fermat.c diff --git a/src/third-party/tommath/bn_mp_prime_frobenius_underwood.c b/c/src/third-party/tommath/bn_mp_prime_frobenius_underwood.c similarity index 100% rename from src/third-party/tommath/bn_mp_prime_frobenius_underwood.c rename to c/src/third-party/tommath/bn_mp_prime_frobenius_underwood.c diff --git a/src/third-party/tommath/bn_mp_prime_is_divisible.c b/c/src/third-party/tommath/bn_mp_prime_is_divisible.c similarity index 100% rename from src/third-party/tommath/bn_mp_prime_is_divisible.c rename to c/src/third-party/tommath/bn_mp_prime_is_divisible.c diff --git a/src/third-party/tommath/bn_mp_prime_is_prime.c b/c/src/third-party/tommath/bn_mp_prime_is_prime.c similarity index 100% rename from src/third-party/tommath/bn_mp_prime_is_prime.c rename to c/src/third-party/tommath/bn_mp_prime_is_prime.c diff --git a/src/third-party/tommath/bn_mp_prime_miller_rabin.c b/c/src/third-party/tommath/bn_mp_prime_miller_rabin.c similarity index 100% rename from src/third-party/tommath/bn_mp_prime_miller_rabin.c rename to c/src/third-party/tommath/bn_mp_prime_miller_rabin.c diff --git a/src/third-party/tommath/bn_mp_prime_next_prime.c b/c/src/third-party/tommath/bn_mp_prime_next_prime.c similarity index 100% rename from src/third-party/tommath/bn_mp_prime_next_prime.c rename to c/src/third-party/tommath/bn_mp_prime_next_prime.c diff --git a/src/third-party/tommath/bn_mp_prime_rabin_miller_trials.c b/c/src/third-party/tommath/bn_mp_prime_rabin_miller_trials.c similarity index 100% rename from src/third-party/tommath/bn_mp_prime_rabin_miller_trials.c rename to c/src/third-party/tommath/bn_mp_prime_rabin_miller_trials.c diff --git a/src/third-party/tommath/bn_mp_prime_random_ex.c b/c/src/third-party/tommath/bn_mp_prime_random_ex.c similarity index 100% rename from src/third-party/tommath/bn_mp_prime_random_ex.c rename to c/src/third-party/tommath/bn_mp_prime_random_ex.c diff --git a/src/third-party/tommath/bn_mp_prime_strong_lucas_selfridge.c b/c/src/third-party/tommath/bn_mp_prime_strong_lucas_selfridge.c similarity index 100% rename from src/third-party/tommath/bn_mp_prime_strong_lucas_selfridge.c rename to c/src/third-party/tommath/bn_mp_prime_strong_lucas_selfridge.c diff --git a/src/third-party/tommath/bn_mp_radix_size.c b/c/src/third-party/tommath/bn_mp_radix_size.c similarity index 100% rename from src/third-party/tommath/bn_mp_radix_size.c rename to c/src/third-party/tommath/bn_mp_radix_size.c diff --git a/src/third-party/tommath/bn_mp_radix_smap.c b/c/src/third-party/tommath/bn_mp_radix_smap.c similarity index 100% rename from src/third-party/tommath/bn_mp_radix_smap.c rename to c/src/third-party/tommath/bn_mp_radix_smap.c diff --git a/src/third-party/tommath/bn_mp_rand.c b/c/src/third-party/tommath/bn_mp_rand.c similarity index 100% rename from src/third-party/tommath/bn_mp_rand.c rename to c/src/third-party/tommath/bn_mp_rand.c diff --git a/src/third-party/tommath/bn_mp_read_radix.c b/c/src/third-party/tommath/bn_mp_read_radix.c similarity index 100% rename from src/third-party/tommath/bn_mp_read_radix.c rename to c/src/third-party/tommath/bn_mp_read_radix.c diff --git a/src/third-party/tommath/bn_mp_read_signed_bin.c b/c/src/third-party/tommath/bn_mp_read_signed_bin.c similarity index 100% rename from src/third-party/tommath/bn_mp_read_signed_bin.c rename to c/src/third-party/tommath/bn_mp_read_signed_bin.c diff --git a/src/third-party/tommath/bn_mp_read_unsigned_bin.c b/c/src/third-party/tommath/bn_mp_read_unsigned_bin.c similarity index 100% rename from src/third-party/tommath/bn_mp_read_unsigned_bin.c rename to c/src/third-party/tommath/bn_mp_read_unsigned_bin.c diff --git a/src/third-party/tommath/bn_mp_reduce.c b/c/src/third-party/tommath/bn_mp_reduce.c similarity index 100% rename from src/third-party/tommath/bn_mp_reduce.c rename to c/src/third-party/tommath/bn_mp_reduce.c diff --git a/src/third-party/tommath/bn_mp_reduce_2k.c b/c/src/third-party/tommath/bn_mp_reduce_2k.c similarity index 100% rename from src/third-party/tommath/bn_mp_reduce_2k.c rename to c/src/third-party/tommath/bn_mp_reduce_2k.c diff --git a/src/third-party/tommath/bn_mp_reduce_2k_l.c b/c/src/third-party/tommath/bn_mp_reduce_2k_l.c similarity index 100% rename from src/third-party/tommath/bn_mp_reduce_2k_l.c rename to c/src/third-party/tommath/bn_mp_reduce_2k_l.c diff --git a/src/third-party/tommath/bn_mp_reduce_2k_setup.c b/c/src/third-party/tommath/bn_mp_reduce_2k_setup.c similarity index 100% rename from src/third-party/tommath/bn_mp_reduce_2k_setup.c rename to c/src/third-party/tommath/bn_mp_reduce_2k_setup.c diff --git a/src/third-party/tommath/bn_mp_reduce_2k_setup_l.c b/c/src/third-party/tommath/bn_mp_reduce_2k_setup_l.c similarity index 100% rename from src/third-party/tommath/bn_mp_reduce_2k_setup_l.c rename to c/src/third-party/tommath/bn_mp_reduce_2k_setup_l.c diff --git a/src/third-party/tommath/bn_mp_reduce_is_2k.c b/c/src/third-party/tommath/bn_mp_reduce_is_2k.c similarity index 100% rename from src/third-party/tommath/bn_mp_reduce_is_2k.c rename to c/src/third-party/tommath/bn_mp_reduce_is_2k.c diff --git a/src/third-party/tommath/bn_mp_reduce_is_2k_l.c b/c/src/third-party/tommath/bn_mp_reduce_is_2k_l.c similarity index 100% rename from src/third-party/tommath/bn_mp_reduce_is_2k_l.c rename to c/src/third-party/tommath/bn_mp_reduce_is_2k_l.c diff --git a/src/third-party/tommath/bn_mp_reduce_setup.c b/c/src/third-party/tommath/bn_mp_reduce_setup.c similarity index 100% rename from src/third-party/tommath/bn_mp_reduce_setup.c rename to c/src/third-party/tommath/bn_mp_reduce_setup.c diff --git a/src/third-party/tommath/bn_mp_rshd.c b/c/src/third-party/tommath/bn_mp_rshd.c similarity index 100% rename from src/third-party/tommath/bn_mp_rshd.c rename to c/src/third-party/tommath/bn_mp_rshd.c diff --git a/src/third-party/tommath/bn_mp_set.c b/c/src/third-party/tommath/bn_mp_set.c similarity index 100% rename from src/third-party/tommath/bn_mp_set.c rename to c/src/third-party/tommath/bn_mp_set.c diff --git a/src/third-party/tommath/bn_mp_set_double.c b/c/src/third-party/tommath/bn_mp_set_double.c similarity index 100% rename from src/third-party/tommath/bn_mp_set_double.c rename to c/src/third-party/tommath/bn_mp_set_double.c diff --git a/src/third-party/tommath/bn_mp_set_int.c b/c/src/third-party/tommath/bn_mp_set_int.c similarity index 100% rename from src/third-party/tommath/bn_mp_set_int.c rename to c/src/third-party/tommath/bn_mp_set_int.c diff --git a/src/third-party/tommath/bn_mp_set_long.c b/c/src/third-party/tommath/bn_mp_set_long.c similarity index 100% rename from src/third-party/tommath/bn_mp_set_long.c rename to c/src/third-party/tommath/bn_mp_set_long.c diff --git a/src/third-party/tommath/bn_mp_set_long_long.c b/c/src/third-party/tommath/bn_mp_set_long_long.c similarity index 100% rename from src/third-party/tommath/bn_mp_set_long_long.c rename to c/src/third-party/tommath/bn_mp_set_long_long.c diff --git a/src/third-party/tommath/bn_mp_shrink.c b/c/src/third-party/tommath/bn_mp_shrink.c similarity index 100% rename from src/third-party/tommath/bn_mp_shrink.c rename to c/src/third-party/tommath/bn_mp_shrink.c diff --git a/src/third-party/tommath/bn_mp_signed_bin_size.c b/c/src/third-party/tommath/bn_mp_signed_bin_size.c similarity index 100% rename from src/third-party/tommath/bn_mp_signed_bin_size.c rename to c/src/third-party/tommath/bn_mp_signed_bin_size.c diff --git a/src/third-party/tommath/bn_mp_sqr.c b/c/src/third-party/tommath/bn_mp_sqr.c similarity index 100% rename from src/third-party/tommath/bn_mp_sqr.c rename to c/src/third-party/tommath/bn_mp_sqr.c diff --git a/src/third-party/tommath/bn_mp_sqrmod.c b/c/src/third-party/tommath/bn_mp_sqrmod.c similarity index 100% rename from src/third-party/tommath/bn_mp_sqrmod.c rename to c/src/third-party/tommath/bn_mp_sqrmod.c diff --git a/src/third-party/tommath/bn_mp_sqrt.c b/c/src/third-party/tommath/bn_mp_sqrt.c similarity index 100% rename from src/third-party/tommath/bn_mp_sqrt.c rename to c/src/third-party/tommath/bn_mp_sqrt.c diff --git a/src/third-party/tommath/bn_mp_sqrtmod_prime.c b/c/src/third-party/tommath/bn_mp_sqrtmod_prime.c similarity index 100% rename from src/third-party/tommath/bn_mp_sqrtmod_prime.c rename to c/src/third-party/tommath/bn_mp_sqrtmod_prime.c diff --git a/src/third-party/tommath/bn_mp_sub.c b/c/src/third-party/tommath/bn_mp_sub.c similarity index 100% rename from src/third-party/tommath/bn_mp_sub.c rename to c/src/third-party/tommath/bn_mp_sub.c diff --git a/src/third-party/tommath/bn_mp_sub_d.c b/c/src/third-party/tommath/bn_mp_sub_d.c similarity index 100% rename from src/third-party/tommath/bn_mp_sub_d.c rename to c/src/third-party/tommath/bn_mp_sub_d.c diff --git a/src/third-party/tommath/bn_mp_submod.c b/c/src/third-party/tommath/bn_mp_submod.c similarity index 100% rename from src/third-party/tommath/bn_mp_submod.c rename to c/src/third-party/tommath/bn_mp_submod.c diff --git a/src/third-party/tommath/bn_mp_tc_and.c b/c/src/third-party/tommath/bn_mp_tc_and.c similarity index 100% rename from src/third-party/tommath/bn_mp_tc_and.c rename to c/src/third-party/tommath/bn_mp_tc_and.c diff --git a/src/third-party/tommath/bn_mp_tc_div_2d.c b/c/src/third-party/tommath/bn_mp_tc_div_2d.c similarity index 100% rename from src/third-party/tommath/bn_mp_tc_div_2d.c rename to c/src/third-party/tommath/bn_mp_tc_div_2d.c diff --git a/src/third-party/tommath/bn_mp_tc_or.c b/c/src/third-party/tommath/bn_mp_tc_or.c similarity index 100% rename from src/third-party/tommath/bn_mp_tc_or.c rename to c/src/third-party/tommath/bn_mp_tc_or.c diff --git a/src/third-party/tommath/bn_mp_tc_xor.c b/c/src/third-party/tommath/bn_mp_tc_xor.c similarity index 100% rename from src/third-party/tommath/bn_mp_tc_xor.c rename to c/src/third-party/tommath/bn_mp_tc_xor.c diff --git a/src/third-party/tommath/bn_mp_to_signed_bin.c b/c/src/third-party/tommath/bn_mp_to_signed_bin.c similarity index 100% rename from src/third-party/tommath/bn_mp_to_signed_bin.c rename to c/src/third-party/tommath/bn_mp_to_signed_bin.c diff --git a/src/third-party/tommath/bn_mp_to_signed_bin_n.c b/c/src/third-party/tommath/bn_mp_to_signed_bin_n.c similarity index 100% rename from src/third-party/tommath/bn_mp_to_signed_bin_n.c rename to c/src/third-party/tommath/bn_mp_to_signed_bin_n.c diff --git a/src/third-party/tommath/bn_mp_to_unsigned_bin.c b/c/src/third-party/tommath/bn_mp_to_unsigned_bin.c similarity index 100% rename from src/third-party/tommath/bn_mp_to_unsigned_bin.c rename to c/src/third-party/tommath/bn_mp_to_unsigned_bin.c diff --git a/src/third-party/tommath/bn_mp_to_unsigned_bin_n.c b/c/src/third-party/tommath/bn_mp_to_unsigned_bin_n.c similarity index 100% rename from src/third-party/tommath/bn_mp_to_unsigned_bin_n.c rename to c/src/third-party/tommath/bn_mp_to_unsigned_bin_n.c diff --git a/src/third-party/tommath/bn_mp_toom_mul.c b/c/src/third-party/tommath/bn_mp_toom_mul.c similarity index 100% rename from src/third-party/tommath/bn_mp_toom_mul.c rename to c/src/third-party/tommath/bn_mp_toom_mul.c diff --git a/src/third-party/tommath/bn_mp_toom_sqr.c b/c/src/third-party/tommath/bn_mp_toom_sqr.c similarity index 100% rename from src/third-party/tommath/bn_mp_toom_sqr.c rename to c/src/third-party/tommath/bn_mp_toom_sqr.c diff --git a/src/third-party/tommath/bn_mp_toradix.c b/c/src/third-party/tommath/bn_mp_toradix.c similarity index 100% rename from src/third-party/tommath/bn_mp_toradix.c rename to c/src/third-party/tommath/bn_mp_toradix.c diff --git a/src/third-party/tommath/bn_mp_toradix_n.c b/c/src/third-party/tommath/bn_mp_toradix_n.c similarity index 100% rename from src/third-party/tommath/bn_mp_toradix_n.c rename to c/src/third-party/tommath/bn_mp_toradix_n.c diff --git a/src/third-party/tommath/bn_mp_unsigned_bin_size.c b/c/src/third-party/tommath/bn_mp_unsigned_bin_size.c similarity index 100% rename from src/third-party/tommath/bn_mp_unsigned_bin_size.c rename to c/src/third-party/tommath/bn_mp_unsigned_bin_size.c diff --git a/src/third-party/tommath/bn_mp_xor.c b/c/src/third-party/tommath/bn_mp_xor.c similarity index 100% rename from src/third-party/tommath/bn_mp_xor.c rename to c/src/third-party/tommath/bn_mp_xor.c diff --git a/src/third-party/tommath/bn_mp_zero.c b/c/src/third-party/tommath/bn_mp_zero.c similarity index 100% rename from src/third-party/tommath/bn_mp_zero.c rename to c/src/third-party/tommath/bn_mp_zero.c diff --git a/src/third-party/tommath/bn_prime_tab.c b/c/src/third-party/tommath/bn_prime_tab.c similarity index 100% rename from src/third-party/tommath/bn_prime_tab.c rename to c/src/third-party/tommath/bn_prime_tab.c diff --git a/src/third-party/tommath/bn_reverse.c b/c/src/third-party/tommath/bn_reverse.c similarity index 100% rename from src/third-party/tommath/bn_reverse.c rename to c/src/third-party/tommath/bn_reverse.c diff --git a/src/third-party/tommath/bn_s_mp_add.c b/c/src/third-party/tommath/bn_s_mp_add.c similarity index 100% rename from src/third-party/tommath/bn_s_mp_add.c rename to c/src/third-party/tommath/bn_s_mp_add.c diff --git a/src/third-party/tommath/bn_s_mp_exptmod.c b/c/src/third-party/tommath/bn_s_mp_exptmod.c similarity index 100% rename from src/third-party/tommath/bn_s_mp_exptmod.c rename to c/src/third-party/tommath/bn_s_mp_exptmod.c diff --git a/src/third-party/tommath/bn_s_mp_mul_digs.c b/c/src/third-party/tommath/bn_s_mp_mul_digs.c similarity index 100% rename from src/third-party/tommath/bn_s_mp_mul_digs.c rename to c/src/third-party/tommath/bn_s_mp_mul_digs.c diff --git a/src/third-party/tommath/bn_s_mp_mul_high_digs.c b/c/src/third-party/tommath/bn_s_mp_mul_high_digs.c similarity index 100% rename from src/third-party/tommath/bn_s_mp_mul_high_digs.c rename to c/src/third-party/tommath/bn_s_mp_mul_high_digs.c diff --git a/src/third-party/tommath/bn_s_mp_sqr.c b/c/src/third-party/tommath/bn_s_mp_sqr.c similarity index 100% rename from src/third-party/tommath/bn_s_mp_sqr.c rename to c/src/third-party/tommath/bn_s_mp_sqr.c diff --git a/src/third-party/tommath/bn_s_mp_sub.c b/c/src/third-party/tommath/bn_s_mp_sub.c similarity index 100% rename from src/third-party/tommath/bn_s_mp_sub.c rename to c/src/third-party/tommath/bn_s_mp_sub.c diff --git a/src/third-party/tommath/bncore.c b/c/src/third-party/tommath/bncore.c similarity index 100% rename from src/third-party/tommath/bncore.c rename to c/src/third-party/tommath/bncore.c diff --git a/src/third-party/tommath/tommath.h b/c/src/third-party/tommath/tommath.h similarity index 100% rename from src/third-party/tommath/tommath.h rename to c/src/third-party/tommath/tommath.h diff --git a/src/third-party/tommath/tommath_class.h b/c/src/third-party/tommath/tommath_class.h similarity index 100% rename from src/third-party/tommath/tommath_class.h rename to c/src/third-party/tommath/tommath_class.h diff --git a/src/third-party/tommath/tommath_private.h b/c/src/third-party/tommath/tommath_private.h similarity index 100% rename from src/third-party/tommath/tommath_private.h rename to c/src/third-party/tommath/tommath_private.h diff --git a/src/third-party/tommath/tommath_superclass.h b/c/src/third-party/tommath/tommath_superclass.h similarity index 100% rename from src/third-party/tommath/tommath_superclass.h rename to c/src/third-party/tommath/tommath_superclass.h diff --git a/src/transport/CMakeLists.txt b/c/src/transport/CMakeLists.txt similarity index 100% rename from src/transport/CMakeLists.txt rename to c/src/transport/CMakeLists.txt diff --git a/src/transport/curl/CMakeLists.txt b/c/src/transport/curl/CMakeLists.txt similarity index 99% rename from src/transport/curl/CMakeLists.txt rename to c/src/transport/curl/CMakeLists.txt index a604d999d..d79a32532 100644 --- a/src/transport/curl/CMakeLists.txt +++ b/c/src/transport/curl/CMakeLists.txt @@ -31,6 +31,7 @@ # You should have received a copy of the GNU Affero General Public License along # with this program. If not, see . ############################################################################### +include("${PROJECT_SOURCE_DIR}/c/compiler.cmake") # add a option option(LIBCURL_LINKTYPE "Link type for curl" SHARED) @@ -56,8 +57,6 @@ else () endif () message(STATUS "check for curl....: ${CURL_FOUND} ") -#ADD_DEFINITIONS(-DCURL_BLOCKING) - if (CURL_FOUND) message(STATUS "Found CURL version: ${CURL_VERSION_STRING} shoudl be type=${LIBCURL_LINKTYPE} but ${LIBCURL_TYPE}") message(STATUS "Using CURL include dir(s): ${CURL_INCLUDE_DIRS}") diff --git a/src/transport/curl/in3_curl.c b/c/src/transport/curl/in3_curl.c similarity index 97% rename from src/transport/curl/in3_curl.c rename to c/src/transport/curl/in3_curl.c index b76174b67..f2ec41e7c 100644 --- a/src/transport/curl/in3_curl.c +++ b/c/src/transport/curl/in3_curl.c @@ -34,6 +34,7 @@ #include "in3_curl.h" #include "../../core/client/client.h" +#include "../../core/client/version.h" #include "../../core/util/log.h" #include "../../core/util/mem.h" #include "../../core/util/utils.h" @@ -94,6 +95,7 @@ in3_ret_t send_curl_nonblocking(const char** urls, int urls_len, char* payload, headers = curl_slist_append(headers, "Accept: application/json"); headers = curl_slist_append(headers, "Content-Type: application/json"); headers = curl_slist_append(headers, "charsets: utf-8"); + headers = curl_slist_append(headers, "User-Agent: in3 curl " IN3_VERSION); for (transfers = 0; transfers < min(CURL_MAX_PARALLEL, urls_len); transfers++) readDataNonBlocking(cm, urls[transfers], payload, headers, result + transfers, timeout); @@ -153,6 +155,7 @@ static void readDataBlocking(const char* url, char* payload, in3_response_t* r, headers = curl_slist_append(headers, "Accept: application/json"); headers = curl_slist_append(headers, "Content-Type: application/json"); headers = curl_slist_append(headers, "charsets: utf-8"); + headers = curl_slist_append(headers, "User-Agent: in3 curl " IN3_VERSION); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*) r); @@ -165,7 +168,6 @@ static void readDataBlocking(const char* url, char* payload, in3_response_t* r, sb_add_chars(&r->error, "curl_easy_perform() failed:"); sb_add_chars(&r->error, (char*) curl_easy_strerror(res)); } - curl_slist_free_all(headers); /* always cleanup */ curl_easy_cleanup(curl); diff --git a/src/transport/curl/in3_curl.h b/c/src/transport/curl/in3_curl.h similarity index 100% rename from src/transport/curl/in3_curl.h rename to c/src/transport/curl/in3_curl.h diff --git a/src/transport/http/CMakeLists.txt b/c/src/transport/http/CMakeLists.txt similarity index 97% rename from src/transport/http/CMakeLists.txt rename to c/src/transport/http/CMakeLists.txt index decf2ed5f..68d519e24 100644 --- a/src/transport/http/CMakeLists.txt +++ b/c/src/transport/http/CMakeLists.txt @@ -31,6 +31,7 @@ # You should have received a copy of the GNU Affero General Public License along # with this program. If not, see . ############################################################################### +include("${PROJECT_SOURCE_DIR}/c/compiler.cmake") add_library(transport_http_o OBJECT in3_http.c) target_compile_definitions(transport_http_o PRIVATE -D_POSIX_C_SOURCE=199309L) diff --git a/src/transport/http/in3_http.c b/c/src/transport/http/in3_http.c similarity index 100% rename from src/transport/http/in3_http.c rename to c/src/transport/http/in3_http.c diff --git a/src/transport/http/in3_http.h b/c/src/transport/http/in3_http.h similarity index 100% rename from src/transport/http/in3_http.h rename to c/src/transport/http/in3_http.h diff --git a/src/verifier/CMakeLists.txt b/c/src/verifier/CMakeLists.txt similarity index 95% rename from src/verifier/CMakeLists.txt rename to c/src/verifier/CMakeLists.txt index 1a01f3ac1..a4b807ac7 100644 --- a/src/verifier/CMakeLists.txt +++ b/c/src/verifier/CMakeLists.txt @@ -45,4 +45,12 @@ endif() if (ETH_FULL) add_subdirectory(eth1/full) add_subdirectory(eth1/evm) -endif() \ No newline at end of file +endif() + +if (IPFS) + add_subdirectory(ipfs) +endif() + +IF (BTC) + add_subdirectory(btc) +ENDIF(BTC) diff --git a/c/src/verifier/btc/CMakeLists.txt b/c/src/verifier/btc/CMakeLists.txt new file mode 100644 index 000000000..12fa71201 --- /dev/null +++ b/c/src/verifier/btc/CMakeLists.txt @@ -0,0 +1,12 @@ + +include("${PROJECT_SOURCE_DIR}/c/compiler.cmake") + +# static lib +add_library(btc_o OBJECT + btc_merkle.c + btc_serialize.c + btc.c +) + +add_library(btc STATIC $) +target_link_libraries(btc core crypto tommath) diff --git a/c/src/verifier/btc/btc.c b/c/src/verifier/btc/btc.c new file mode 100644 index 000000000..e610ab51a --- /dev/null +++ b/c/src/verifier/btc/btc.c @@ -0,0 +1,219 @@ +#include "btc.h" +#include "../../core/client/keys.h" +#include "../../core/util/mem.h" +#include "../../core/util/utils.h" +#include "btc_merkle.h" +#include "btc_serialize.h" +#include +#include + +// check if 2 byte arrays are equal where one is a bytes while the other one is a hex string (without 0x) +static bool equals_hex(bytes_t data, char* hex) { + uint32_t sl = hex ? strlen(hex) : 0, bl = sl >> 1; // calc len of bytes from hex + if (bl != data.len || sl % 1) return false; // we do not support odd length of hex + for (uint32_t i = 0; i < bl; i++) { // compare each byte + if (data.data[i] != ((hexchar_to_int(hex[i << 1]) << 4) | (hexchar_to_int(hex[(i << 1) + 1])))) return false; // cancel on first difference + } + return true; +} + +// handle the request before sending it out the the node. +// not needed yet. +static in3_ret_t btc_handle_intern(in3_ctx_t* ctx, in3_response_t** response) { + if (ctx->len > 1 || !response) return IN3_ENOTSUP; // internal handling is only possible for single requests (at least for now) + return IN3_OK; +} + +/** + * verify proof of work of the blockheader + */ +static in3_ret_t btc_verify_header(in3_vctx_t* vc, uint8_t* block_header, bytes32_t dst_hash) { + bytes32_t target; + btc_target(bytes(block_header, 80), target); // check target + btc_hash(bytes(block_header, 80), dst_hash); // check blockhash + return (memcmp(target, dst_hash, 32) < 0) ? vc_err(vc, "Invalid proof of work. the hash is greater than the target") : IN3_OK; +} + +/** + * verify the finality block. + */ +in3_ret_t btc_check_finality(in3_vctx_t* vc, bytes32_t block_hash, int finality, bytes_t final_blocks) { + bytes32_t parent_hash, tmp; + in3_ret_t ret = IN3_OK; + memcpy(parent_hash, block_hash, 32); // we start with the current block hash as parent + for (int i = 0, p = 0; i < finality; i++, p += 80) { // go through all requested finality blocks + if (p + 80 > (int) final_blocks.len) return vc_err(vc, "Not enough finality blockheaders"); // the bytes need to be long enough + rev_copy(tmp, btc_block_get(bytes(final_blocks.data + p, 80), BTC_B_PARENT_HASH).data); // copy the parent hash of the block inito tmp + if (memcmp(tmp, parent_hash, 32)) return vc_err(vc, "wrong parent_hash in finality block"); // check parent hash + if ((ret = btc_verify_header(vc, final_blocks.data + p, parent_hash))) return ret; // check the headers proof of work and set the new parent hash + } + return ret; +} + +/** + * check a block + */ +in3_ret_t btc_verify_block(in3_vctx_t* vc, bytes32_t block_hash, bool json) { + uint8_t block_header[80]; + bytes32_t tmp, tmp2; + in3_ret_t ret = IN3_OK; + if (json) + btc_serialize_block_header(vc->result, block_header); // we need to serialize the header first, so we can check the hash + else // + hex_to_bytes(d_string(vc->result), 160, block_header, 80); // or use the first 80 byte of the block + + // verify the proof of work + if ((ret = btc_verify_header(vc, block_header, tmp))) return ret; + + // check blockhash + if (memcmp(tmp, block_hash, 32)) return vc_err(vc, "Invalid blockhash"); + + // check merkleroot + if (json) { + d_token_t* tx = d_get(vc->result, key("tx")); // get transactions node + int tx_count = d_len(tx), i = 0; // and count its length + bytes32_t* tx_hashes = alloca(tx_count); // to reserve hashes-array + for (d_iterator_t iter = d_iter(tx); iter.left; d_iter_next(&iter), i++) // iterate through all txs + hex_to_bytes(d_string(iter.token), 64, tx_hashes[i], 32); // and copy the hash into the array + btc_merkle_create_root(tx_hashes, tx_count, tmp); // calculate the merkle root + rev_copy(tmp2, tmp); // we need to turn it into little endian be cause ini the header it is store as le. + if (memcmp(tmp2, btc_block_get(bytes(block_header, 80), BTC_B_MERKLE_ROOT).data, 32)) return vc_err(vc, "Invalid Merkle root"); // compare the hash + // + btc_target(bytes(block_header, 80), tmp2); // get current target + uint64_t difficulty = 0xFFFF000000000000L / bytes_to_long(tmp2 + 4, 8); // and calc the difficulty + if (difficulty >> 2 != d_get_long(vc->result, "difficulty") >> 2) return vc_err(vc, "Wrong difficulty"); // which must match the one in the json + if (!equals_hex(bytes(block_hash, 32), d_get_string(vc->result, "hash"))) return vc_err(vc, "Wrong blockhash in json"); // check the requested hash + if (d_get_int(vc->result, "nTx") != (int32_t) tx_count) return vc_err(vc, "Wrong nTx"); // check the nuumber of transactions + + } else { + char* block_hex = d_string(vc->result); + uint8_t* block_data = alloca(strlen(block_hex) / 2); + bytes_t block = bytes(block_data, strlen(block_hex) / 2); + hex_to_bytes(block_hex, -1, block.data, block.len); + int tx_count = btc_get_transaction_count(block); + bytes_t* transactions = alloca(tx_count); + bytes32_t* tx_hashes = alloca(tx_count); + btc_get_transactions(block, transactions); + + // now calculate the transactionhashes + for (int i = 0; i < tx_count; i++) + btc_hash(transactions[i], tx_hashes[i]); + btc_merkle_create_root(tx_hashes, tx_count, tmp); + rev_copy(tmp2, tmp); + if (memcmp(tmp2, btc_block_get(block, BTC_B_MERKLE_ROOT).data, 32)) return vc_err(vc, "Invalid Merkle root"); + } + + // check finality blocks + if (vc->ctx->requests_configs->finality) + return btc_check_finality(vc, block_hash, vc->ctx->requests_configs->finality, d_to_bytes(d_get(vc->proof, key("final")))); + + return IN3_OK; +} + +//in3_ret_t in3_verify_transaction(in3_vctx_t* vc, bytes32_t transaction_hash, bool json) { +//TODO +//} + +in3_ret_t in3_verify_btc(in3_vctx_t* vc) { + char* method = d_get_stringk(vc->request, K_METHOD); + d_token_t* params = d_get(vc->request, K_PARAMS); + bytes32_t hash; + + // make sure we want to verify + if (vc->config->verification == VERIFICATION_NEVER) return IN3_OK; + + // do we have a result? if not it is a vaslid error-response + if (!vc->result || d_type(vc->result) == T_NULL) return IN3_OK; + + // do we support this request? + if (!method) return vc_err(vc, "No Method in request defined!"); + + if (strcmp(method, "getblock") == 0) { + d_token_t* block_hash = d_get_at(params, 0); + if (d_len(params) < 1 || d_type(params) != T_ARRAY || d_type(block_hash) != T_STRING || d_len(block_hash) != 64) return vc_err(vc, "Invalid params"); + hex_to_bytes(d_string(block_hash), 64, hash, 32); + return btc_verify_block(vc, hash, d_len(params) > 1 ? d_get_int_at(params, 1) : 1); + } + return vc_err(vc, "Unsupported method"); +} + +void in3_register_btc() { + in3_verifier_t* v = _calloc(1, sizeof(in3_verifier_t)); + v->type = CHAIN_BTC; + v->pre_handle = btc_handle_intern; + v->verify = in3_verify_btc; + in3_register_verifier(v); +} +/* +static void print_hex(char* prefix, uint8_t* data, int len) { + printf("%s0x", prefix); + for (int i = 0; i < len; i++) printf("%02x", data[i]); + printf("\n"); +} +static void print(char* prefix, bytes_t data, char* type) { + uint8_t tmp[32]; + if (strcmp(type, "hash") == 0) { + rev_copy(tmp, data.data); + data.data = tmp; + } + + if (strcmp(type, "int") == 0) { + printf("%s%i\n", prefix, le_to_int(data.data)); + return; + } + + print_hex(prefix, data.data, data.len); +} + +int main() { + + char* block_hex = BLOCK_B; + + uint8_t block_data[strlen(block_hex) / 2]; + bytes_t block = bytes(block_data, strlen(block_hex) / 2); + hex_to_bytes(block_hex, -1, block.data, block.len); + + print("version = ", btc_block_get(block, BTC_B_VERSION), "hex"); + print("parent_hash= ", btc_block_get(block, BTC_B_PARENT_HASH), "hash"); + print("merkle_root= ", btc_block_get(block, BTC_B_MERKLE_ROOT), "hash"); + print("timestamp = ", btc_block_get(block, BTC_B_TIMESTAMP), "int"); + print("bits = ", btc_block_get(block, BTC_B_BITS), "hex"); + print("nonce = ", btc_block_get(block, BTC_B_NONCE), "hex"); + + bytes32_t hash; + btc_hash(btc_block_get(block, BTC_B_HEADER), hash); + print_hex("hash = ", hash, 32); + print("header = ", btc_block_get(block, BTC_B_HEADER), "hex"); + + btc_target(block, hash); + print("target = ", bytes(hash, 32), "hash"); + + int tx_count = btc_get_transaction_count(block); + printf("tx_cnt = %i\n", tx_count); + bytes_t transactions[tx_count]; + btc_get_transactions(block, transactions); + + bytes32_t tx_hashes[tx_count]; + + // now calculate the transactionhashes + for (int i = 0; i < tx_count; i++) { + btc_hash(transactions[i], tx_hashes[i]); + printf(" %i : ", i); + print("", bytes(tx_hashes[i], 32), "hex"); + } + + bytes32_t root; + btc_merkle_create_root(tx_hashes, tx_count, root); + print("root = ", bytes(root, 32), "hex"); + + int proof_index = 3; + + bytes_t* proof = btc_merkle_create_proof(tx_hashes, tx_count, proof_index); + print("proof= ", *proof, "hex"); + int verified = btc_merkle_verify_proof(root, *proof, proof_index, tx_hashes[proof_index]); + + printf("VERIFIED : %i\n", verified); + + // print("rest \n", bytes(block.data + 80, block.len - 80), "hex"); +} +*/ \ No newline at end of file diff --git a/c/src/verifier/btc/btc.h b/c/src/verifier/btc/btc.h new file mode 100644 index 000000000..5ce4dc84f --- /dev/null +++ b/c/src/verifier/btc/btc.h @@ -0,0 +1,19 @@ +// @PUBLIC_HEADER +/** @file + * Bitcoin verification. + * */ + +#ifndef in3_btc_h__ +#define in3_btc_h__ + +#include "../../core/client/verifier.h" + +/** entry-function to execute the verification context. */ +in3_ret_t in3_verify_btc(in3_vctx_t* v); + +/** + * this function should only be called once and will register the bitcoin verifier. + */ +void in3_register_btc(); + +#endif // in3_btc_h__ \ No newline at end of file diff --git a/c/src/verifier/btc/btc_merkle.c b/c/src/verifier/btc/btc_merkle.c new file mode 100644 index 000000000..d2a68d9ef --- /dev/null +++ b/c/src/verifier/btc/btc_merkle.c @@ -0,0 +1,67 @@ +#include "btc_merkle.h" +#include "../../core/util/mem.h" +#include "../../third-party/crypto/sha2.h" +#include "btc_serialize.h" +#include +#include + +// creates the root hash by calling this function recursivly until we end up with only one root hash. +static void create_proofs(uint8_t* hashes, int hashes_len, SHA256_CTX* ctx, bytes_builder_t* bb, int index) { + int res_count = (hashes_len + 1) >> 1; + uint8_t* dst; + for (int i = 0, j = 0; i < res_count; i++, j += 64) { + if (bb && index >> 1 == i) bb_write_raw_bytes(bb, hashes + (i << 1 == index ? (hashes_len == index + 1 ? j : j + 32) : j), 32); + + dst = hashes + (i << 5); + sha256_Init(ctx); + sha256_Update(ctx, hashes + j, 32); + sha256_Update(ctx, hashes + (((i << 1) + 1) == hashes_len ? j : j + 32), 32); + sha256_Final(ctx, dst); + sha256_Init(ctx); + sha256_Update(ctx, dst, 32); + sha256_Final(ctx, dst); + } + if (res_count > 1) create_proofs(hashes, res_count, ctx, bb, index >> 1); +} + +in3_ret_t btc_merkle_create_root(bytes32_t* hashes, int hashes_len, bytes32_t dst) { + uint8_t* tmp = alloca(hashes_len << 5); // we create an byte array with hashes_len*32 to store all hashes + SHA256_CTX ctx; // we want to reuse the struct later + if (hashes_len == 0) { // emptyList = NULL hash + memset(dst, 0, 32); + return IN3_OK; + } + for (int i = 0; i < hashes_len; i++) rev_copy(tmp + (i << 5), hashes[i]); // copy the hashes in reverse order into the buffer + create_proofs(tmp, hashes_len, &ctx, NULL, -1); // reduce the roothash until we have only one left. + rev_copy(dst, tmp); // the first hash in the buffer is the root hash, which copy reverse again. + return IN3_OK; // no way to create an exception here. +} + +bytes_t* btc_merkle_create_proof(bytes32_t* hashes, int hashes_len, int index) { + uint8_t* tmp = alloca(hashes_len << 5); // we create an byte array with hashes_len*32 to store all hashes + SHA256_CTX ctx; // we want to reuse the struct later + if (hashes_len == 0 || index >= hashes_len) return NULL; + bytes_builder_t* bb = bb_new(); + for (int i = 0; i < hashes_len; i++) rev_copy(tmp + (i << 5), hashes[i]); // copy the hashes in reverse order into the buffer + create_proofs(tmp, hashes_len, &ctx, bb, index); // reduce the roothash until we have only one left. + return bb_move_to_bytes(bb); +} + +int btc_merkle_verify_proof(bytes32_t root_hash, bytes_t proof, int index, bytes32_t start_hash) { + SHA256_CTX ctx; // we want to reuse the struct later + bytes32_t hash, target; + rev_copy(hash, start_hash); + rev_copy(target, root_hash); + uint8_t* p = proof.data; + for (; proof.len; index = index >> 1, p += 32, proof.len -= 32) { + if (memcmp(target, hash, 32) == 0) return 1; + sha256_Init(&ctx); + sha256_Update(&ctx, index % 2 ? p : hash, 32); + sha256_Update(&ctx, index % 2 ? hash : p, 32); + sha256_Final(&ctx, hash); + sha256_Init(&ctx); + sha256_Update(&ctx, hash, 32); + sha256_Final(&ctx, hash); + } + return memcmp(target, hash, 32) == 0 ? 1 : 0; +} diff --git a/c/src/verifier/btc/btc_merkle.h b/c/src/verifier/btc/btc_merkle.h new file mode 100644 index 000000000..fcdeb19fc --- /dev/null +++ b/c/src/verifier/btc/btc_merkle.h @@ -0,0 +1,12 @@ +#ifndef _BTC_MERKLE_H +#define _BTC_MERKLE_H + +#include "../../core/util/bytes.h" +#include "../../core/util/error.h" +#include + +in3_ret_t btc_merkle_create_root(bytes32_t* hashes, int hashes_len, bytes32_t dst); +bytes_t* btc_merkle_create_proof(bytes32_t* hashes, int hashes_len, int index); +int btc_merkle_verify_proof(bytes32_t root_hash, bytes_t proof, int index, bytes32_t start_hash); + +#endif // _BTC_MERKLE_H \ No newline at end of file diff --git a/c/src/verifier/btc/btc_serialize.c b/c/src/verifier/btc/btc_serialize.c new file mode 100644 index 000000000..22f32873b --- /dev/null +++ b/c/src/verifier/btc/btc_serialize.c @@ -0,0 +1,137 @@ +#include "btc_serialize.h" +#include "../../core/util/data.h" +#include "../../core/util/utils.h" +#include "../../third-party/crypto/sha2.h" +#include "../../third-party/tommath/tommath.h" +#include + +static void rev_hex(char* hex, uint8_t* dst, int l) { + int len = hex ? strlen(hex) : 0, i, j, out_len = (len + 1) >> 1; + if (out_len > l) + out_len = l; + else if (out_len < l) + memset(dst + out_len, 0, l - out_len); + + if (len % 1) { + dst[out_len - 1] = hexchar_to_int(*hex); + out_len--; + hex++; + } + + for (i = 0, j = out_len - 1; j >= 0; j--, i += 2) + dst[j] = (hexchar_to_int(hex[i]) << 4) | hexchar_to_int(hex[i + 1]); +} + +bytes_t btc_block_get(bytes_t block, btc_block_field field) { + switch (field) { + case BTC_B_VERSION: return bytes(block.data, 4); + case BTC_B_PARENT_HASH: return bytes(block.data + 4, 32); + case BTC_B_MERKLE_ROOT: return bytes(block.data + 36, 32); + case BTC_B_TIMESTAMP: return bytes(block.data + 68, 4); + case BTC_B_BITS: return bytes(block.data + 72, 4); + case BTC_B_NONCE: return bytes(block.data + 76, 4); + case BTC_B_HEADER: return bytes(block.data, 80); + } +} +void btc_hash(bytes_t data, bytes32_t dst) { + bytes32_t tmp; + SHA256_CTX ctx; + sha256_Init(&ctx); + sha256_Update(&ctx, data.data, data.len); + sha256_Final(&ctx, tmp); + sha256_Init(&ctx); + sha256_Update(&ctx, tmp, 32); + sha256_Final(&ctx, tmp); + rev_copy(dst, tmp); +} + +// copy 32 bytes in revers order +void rev_copy(uint8_t* dst, uint8_t* src) { + for (int i = 0; i < 32; i++) dst[31 - i] = src[i]; +} +void rev_copyl(uint8_t* dst, bytes_t src, int l) { + if (src.len < (uint32_t) l) { + memset(dst + src.len, 0, l - src.len); + l = src.len; + } + for (int i = 0; i < l; i++) dst[l - 1 - i] = src.data[i]; +} + +uint32_t le_to_int(uint8_t* data) { + return (((uint32_t) data[3]) << 24) | (((uint32_t) data[2]) << 16) | (((uint32_t) data[1]) << 8) | data[0]; +} + +uint64_t le_to_long(uint8_t* data) { + return (((uint64_t) data[7]) << 24) | (((uint64_t) data[6]) << 24) | (((uint64_t) data[5]) << 24) | (((uint64_t) data[4]) << 24) | + (((uint64_t) data[3]) << 24) | (((uint64_t) data[2]) << 16) | (((uint64_t) data[1]) << 8) | data[0]; +} + +void btc_target(bytes_t block, bytes32_t target) { + uint8_t *bits = btc_block_get(block, BTC_B_BITS).data, tmp[32]; + memset(tmp, 0, 32); + memcpy(tmp + bits[3] - 3, bits, 3); + rev_copy(target, tmp); +} + +uint32_t decode_var_int(uint8_t* p, uint64_t* val) { + if (*p == 0xfd) { + *val = (((uint32_t) p[2]) << 8) | p[1]; + return 3; + } + + if (*p == 0xfe) { + *val = le_to_int(p + 1); + return 5; + } + + if (*p == 0xff) { + *val = le_to_long(p + 1); + return 9; + } + *val = *p; + return 1; +} + +int btc_get_transaction_count(bytes_t block) { + uint64_t count; + decode_var_int(block.data + 80, &count); + return (int) count; +} + +int btc_get_transactions(bytes_t block, bytes_t* dst) { + uint64_t count; + uint8_t* p = block.data + 80 + decode_var_int(block.data + 80, &count); + for (unsigned int i = 0; i < count; i++) p += (dst[i] = btc_get_transaction(p)).len; + return count; +} + +bytes_t btc_get_transaction(uint8_t* data) { + uint64_t len; + uint8_t* p = data + 4 + decode_var_int(data + 4, &len); + for (unsigned int i = 0; i < len; i++) p += btc_get_txinput(p).len; + p += decode_var_int(p, &len); + for (unsigned int i = 0; i < len; i++) p += btc_get_txoutput(p).len; + return bytes(data, (p - data) + 4); +} + +bytes_t btc_get_txinput(uint8_t* data) { + uint64_t len; + uint32_t l = decode_var_int(data + 36, &len); + return bytes(data, 40 + l + len); +} + +bytes_t btc_get_txoutput(uint8_t* data) { + uint64_t len; + uint32_t l = decode_var_int(data + 8, &len); + return bytes(data, 8 + l + len); +} + +in3_ret_t btc_serialize_block_header(d_token_t* data, uint8_t* block_header) { + rev_hex(d_get_string(data, "versionHex"), block_header, 4); + rev_hex(d_get_string(data, "previousblockhash"), block_header + 4, 32); + rev_hex(d_get_string(data, "merkleroot"), block_header + 36, 32); + rev_copyl(block_header + 68, d_to_bytes(d_get(data, key("time"))), 4); + rev_hex(d_get_string(data, "bits"), block_header + 72, 4); + rev_copyl(block_header + 76, d_to_bytes(d_get(data, key("nonce"))), 4); + return IN3_OK; +} diff --git a/c/src/verifier/btc/btc_serialize.h b/c/src/verifier/btc/btc_serialize.h new file mode 100644 index 000000000..91533ad64 --- /dev/null +++ b/c/src/verifier/btc/btc_serialize.h @@ -0,0 +1,37 @@ +#ifndef _BTC_SERIALIZE_H +#define _BTC_SERIALIZE_H + +#include "../../core/util/bytes.h" +#include "../../core/util/data.h" +#include "../../core/util/error.h" +#include + +/** type of a token. */ +typedef enum { + BTC_B_VERSION = 0, + BTC_B_PARENT_HASH = 1, + BTC_B_MERKLE_ROOT = 2, + BTC_B_TIMESTAMP = 3, + BTC_B_BITS = 4, + BTC_B_NONCE = 5, + BTC_B_HEADER = 15 + +} btc_block_field; + +bytes_t btc_block_get(bytes_t block, btc_block_field field); +void btc_hash(bytes_t data, bytes32_t dst); +in3_ret_t btc_serialize_block_header(d_token_t* data, uint8_t* block_header); + +// copy 32 bytes in revers order +void rev_copy(uint8_t* dst, uint8_t* src); +uint32_t le_to_int(uint8_t* data); +uint64_t le_to_long(uint8_t* data); +void btc_target(bytes_t block, bytes32_t target); +uint32_t decode_var_int(uint8_t* p, uint64_t* val); +int btc_get_transaction_count(bytes_t block); +int btc_get_transactions(bytes_t block, bytes_t* dst); +bytes_t btc_get_transaction(uint8_t* data); +bytes_t btc_get_txinput(uint8_t* data); +bytes_t btc_get_txoutput(uint8_t* data); + +#endif // _BTC_SERIALIZE_H \ No newline at end of file diff --git a/src/verifier/eth1/basic/CMakeLists.txt b/c/src/verifier/eth1/basic/CMakeLists.txt similarity index 97% rename from src/verifier/eth1/basic/CMakeLists.txt rename to c/src/verifier/eth1/basic/CMakeLists.txt index 324b4cccf..43f11fa93 100644 --- a/src/verifier/eth1/basic/CMakeLists.txt +++ b/c/src/verifier/eth1/basic/CMakeLists.txt @@ -31,6 +31,7 @@ # You should have received a copy of the GNU Affero General Public License along # with this program. If not, see . ############################################################################### +include("${PROJECT_SOURCE_DIR}/c/compiler.cmake") # static lib diff --git a/src/verifier/eth1/basic/eth_account.c b/c/src/verifier/eth1/basic/eth_account.c similarity index 100% rename from src/verifier/eth1/basic/eth_account.c rename to c/src/verifier/eth1/basic/eth_account.c diff --git a/src/verifier/eth1/basic/eth_basic.c b/c/src/verifier/eth1/basic/eth_basic.c similarity index 100% rename from src/verifier/eth1/basic/eth_basic.c rename to c/src/verifier/eth1/basic/eth_basic.c diff --git a/src/verifier/eth1/basic/eth_basic.h b/c/src/verifier/eth1/basic/eth_basic.h similarity index 100% rename from src/verifier/eth1/basic/eth_basic.h rename to c/src/verifier/eth1/basic/eth_basic.h diff --git a/src/verifier/eth1/basic/eth_getBlock.c b/c/src/verifier/eth1/basic/eth_getBlock.c similarity index 100% rename from src/verifier/eth1/basic/eth_getBlock.c rename to c/src/verifier/eth1/basic/eth_getBlock.c diff --git a/src/verifier/eth1/basic/eth_getLog.c b/c/src/verifier/eth1/basic/eth_getLog.c similarity index 99% rename from src/verifier/eth1/basic/eth_getLog.c rename to c/src/verifier/eth1/basic/eth_getLog.c index 98317d431..9bf0b40ee 100644 --- a/src/verifier/eth1/basic/eth_getLog.c +++ b/c/src/verifier/eth1/basic/eth_getLog.c @@ -212,7 +212,7 @@ in3_ret_t eth_verify_eth_getLog(in3_vctx_t* vc, int l_logs) { for (d_iterator_t it = d_iter(d_get(vc->proof, K_LOG_PROOF)); it.left; d_iter_next(&it)) { // verify that block number matches key - if (d_get_longk(it.token, K_NUMBER) != strtoull(d_get_keystr(it.token->key), NULL, 16)) + if (d_get_longk(it.token, K_NUMBER) != _strtoull(d_get_keystr(it.token->key), NULL, 16)) return vc_err(vc, "block number mismatch"); // verify the blockheader of the log entry diff --git a/src/verifier/eth1/basic/eth_getTransaction.c b/c/src/verifier/eth1/basic/eth_getTransaction.c similarity index 99% rename from src/verifier/eth1/basic/eth_getTransaction.c rename to c/src/verifier/eth1/basic/eth_getTransaction.c index 78bf77e18..41140f526 100644 --- a/src/verifier/eth1/basic/eth_getTransaction.c +++ b/c/src/verifier/eth1/basic/eth_getTransaction.c @@ -209,7 +209,7 @@ in3_ret_t eth_verify_eth_getTransactionByBlock(in3_vctx_t* vc, d_token_t* blk, u return vc_err(vc, "No block hash & number found"); } - if (d_get(vc->result, K_TRANSACTION_INDEX) && tx_idx != (uint32_t)d_get_intk(vc->result, K_TRANSACTION_INDEX)) + if (d_get(vc->result, K_TRANSACTION_INDEX) && tx_idx != (uint32_t) d_get_intk(vc->result, K_TRANSACTION_INDEX)) return vc_err(vc, "The transaction index does not match the required"); res = eth_verify_blockheader(vc, blockHeader, d_get_byteskl(vc->result, K_BLOCK_HASH, 32)); diff --git a/src/verifier/eth1/basic/filter.c b/c/src/verifier/eth1/basic/filter.c similarity index 97% rename from src/verifier/eth1/basic/filter.c rename to c/src/verifier/eth1/basic/filter.c index a320a828b..06b3564ba 100644 --- a/src/verifier/eth1/basic/filter.c +++ b/c/src/verifier/eth1/basic/filter.c @@ -149,9 +149,9 @@ static void filter_release(in3_filter_t* f) { static in3_filter_t* filter_new(in3_filter_type_t ft) { in3_filter_t* f = _malloc(sizeof *f); if (f) { - f->type = ft; - f->release = filter_release; - f->last_block = 0; + f->type = ft; + f->release = filter_release; + f->last_block = 0; f->is_first_usage = true; } return f; @@ -246,7 +246,7 @@ in3_ret_t filter_get_changes(in3_ctx_t* ctx, size_t id, sb_t* result) { sb_add_chars(result, "[]"); } else { sb_t* params = sb_new("["); - char* fopt_ = filter_opt_set_fromBlock(fopt, f->last_block, !f->is_first_usage); + char* fopt_ = filter_opt_set_fromBlock(fopt, f->last_block, !f->is_first_usage); sb_add_chars(params, fopt_); ctx_ = in3_client_rpc_ctx(in3, "eth_getLogs", sb_add_char(params, ']')->data); sb_free(params); @@ -261,7 +261,7 @@ in3_ret_t filter_get_changes(in3_ctx_t* ctx, size_t id, sb_t* result) { sb_add_chars(result, jr); _free(jr); ctx_free(ctx_); - f->last_block = blkno + 1; + f->last_block = blkno + 1; f->is_first_usage = false; } return IN3_OK; @@ -274,6 +274,7 @@ in3_ret_t filter_get_changes(in3_ctx_t* ctx, size_t id, sb_t* result) { sprintf(params, "[\"0x%" PRIx64 "\", false]", i); ctx_ = in3_client_rpc_ctx(in3, "eth_getBlockByNumber", params); if ((res = ctx_get_error(ctx_, 0)) != IN3_OK) { + ctx->verification_state = res; // error or block doesn't exist (unlikely) in3_log_warn("Failed to get block by number!\n"); continue; diff --git a/src/verifier/eth1/basic/filter.h b/c/src/verifier/eth1/basic/filter.h similarity index 100% rename from src/verifier/eth1/basic/filter.h rename to c/src/verifier/eth1/basic/filter.h diff --git a/src/verifier/eth1/basic/signer-priv.h b/c/src/verifier/eth1/basic/signer-priv.h similarity index 100% rename from src/verifier/eth1/basic/signer-priv.h rename to c/src/verifier/eth1/basic/signer-priv.h diff --git a/src/verifier/eth1/basic/signer.c b/c/src/verifier/eth1/basic/signer.c similarity index 99% rename from src/verifier/eth1/basic/signer.c rename to c/src/verifier/eth1/basic/signer.c index 977e0d0c2..637d1795d 100644 --- a/src/verifier/eth1/basic/signer.c +++ b/c/src/verifier/eth1/basic/signer.c @@ -248,7 +248,7 @@ bytes_t sign_tx(d_token_t* tx, in3_ctx_t* ctx) { res = IN3_EINVAL; // free temp resources - if (new_json) json_free(new_json); + if (ctx->verification_state != IN3_WAITING && new_json) json_free(new_json); b_free(raw); if (res < 0) { b_free(nonce_cpy); diff --git a/src/verifier/eth1/basic/signer.h b/c/src/verifier/eth1/basic/signer.h similarity index 100% rename from src/verifier/eth1/basic/signer.h rename to c/src/verifier/eth1/basic/signer.h diff --git a/src/verifier/eth1/basic/trie.c b/c/src/verifier/eth1/basic/trie.c similarity index 100% rename from src/verifier/eth1/basic/trie.c rename to c/src/verifier/eth1/basic/trie.c diff --git a/src/verifier/eth1/basic/trie.h b/c/src/verifier/eth1/basic/trie.h similarity index 100% rename from src/verifier/eth1/basic/trie.h rename to c/src/verifier/eth1/basic/trie.h diff --git a/src/verifier/eth1/evm/CMakeLists.txt b/c/src/verifier/eth1/evm/CMakeLists.txt similarity index 97% rename from src/verifier/eth1/evm/CMakeLists.txt rename to c/src/verifier/eth1/evm/CMakeLists.txt index 4d1e3fba0..db1664344 100644 --- a/src/verifier/eth1/evm/CMakeLists.txt +++ b/c/src/verifier/eth1/evm/CMakeLists.txt @@ -31,6 +31,7 @@ # You should have received a copy of the GNU Affero General Public License along # with this program. If not, see . ############################################################################### +include("${PROJECT_SOURCE_DIR}/c/compiler.cmake") add_library(evm_o OBJECT evm.c diff --git a/src/verifier/eth1/evm/accounts.c b/c/src/verifier/eth1/evm/accounts.c similarity index 100% rename from src/verifier/eth1/evm/accounts.c rename to c/src/verifier/eth1/evm/accounts.c diff --git a/src/verifier/eth1/evm/accounts.h b/c/src/verifier/eth1/evm/accounts.h similarity index 100% rename from src/verifier/eth1/evm/accounts.h rename to c/src/verifier/eth1/evm/accounts.h diff --git a/src/verifier/eth1/evm/big.c b/c/src/verifier/eth1/evm/big.c similarity index 100% rename from src/verifier/eth1/evm/big.c rename to c/src/verifier/eth1/evm/big.c diff --git a/src/verifier/eth1/evm/big.h b/c/src/verifier/eth1/evm/big.h similarity index 100% rename from src/verifier/eth1/evm/big.h rename to c/src/verifier/eth1/evm/big.h diff --git a/src/verifier/eth1/evm/call.c b/c/src/verifier/eth1/evm/call.c similarity index 100% rename from src/verifier/eth1/evm/call.c rename to c/src/verifier/eth1/evm/call.c diff --git a/src/verifier/eth1/evm/code.c b/c/src/verifier/eth1/evm/code.c similarity index 100% rename from src/verifier/eth1/evm/code.c rename to c/src/verifier/eth1/evm/code.c diff --git a/src/verifier/eth1/evm/code.h b/c/src/verifier/eth1/evm/code.h similarity index 100% rename from src/verifier/eth1/evm/code.h rename to c/src/verifier/eth1/evm/code.h diff --git a/src/verifier/eth1/evm/env.c b/c/src/verifier/eth1/evm/env.c similarity index 100% rename from src/verifier/eth1/evm/env.c rename to c/src/verifier/eth1/evm/env.c diff --git a/src/verifier/eth1/evm/evm.c b/c/src/verifier/eth1/evm/evm.c similarity index 99% rename from src/verifier/eth1/evm/evm.c rename to c/src/verifier/eth1/evm/evm.c index a2378bf0c..965f88213 100644 --- a/src/verifier/eth1/evm/evm.c +++ b/c/src/verifier/eth1/evm/evm.c @@ -46,7 +46,7 @@ #include #include #include - +int exit_zero(void) { return 0; } int evm_stack_push(evm_t* evm, uint8_t* data, uint8_t len) { if (evm->stack_size == EVM_STACK_LIMIT || len > 32) return EVM_ERROR_STACK_LIMIT; // we need to make sure the data ref is not part of the stack and would be ionvalidated now diff --git a/src/verifier/eth1/evm/evm.h b/c/src/verifier/eth1/evm/evm.h similarity index 99% rename from src/verifier/eth1/evm/evm.h rename to c/src/verifier/eth1/evm/evm.h index 99cdddefa..d46d72632 100644 --- a/src/verifier/eth1/evm/evm.h +++ b/c/src/verifier/eth1/evm/evm.h @@ -39,7 +39,7 @@ #include "../../../core/util/bytes.h" #ifndef evm_h__ #define evm_h__ - +int exit_zero(void); //#define EVM_GAS /** the current state of the evm*/ typedef enum evm_state { @@ -146,7 +146,7 @@ typedef enum evm_state { if (key != EVM_ENV_BLOCKHASH) { \ account_t* ac = evm_get_account(evm, address, 0); \ uint8_t tmp[4]; \ - uint8_t hash[32]; \ + uint8_t hash[32]; \ if (ac) { \ data = NULL; \ if (key == EVM_ENV_BALANCE) { \ @@ -183,7 +183,7 @@ typedef enum evm_state { #define OP_LOG(...) EVM_ERROR_UNSUPPORTED_CALL_OPCODE #define OP_SLOAD_GAS(...) #define OP_CREATE(...) EVM_ERROR_UNSUPPORTED_CALL_OPCODE -#define OP_ACCOUNT_GAS(...) 0 +#define OP_ACCOUNT_GAS(...) exit_zero() #define OP_SELFDESTRUCT(...) EVM_ERROR_UNSUPPORTED_CALL_OPCODE #define OP_EXTCODECOPY_GAS(evm) #define OP_SSTORE(...) EVM_ERROR_UNSUPPORTED_CALL_OPCODE diff --git a/src/verifier/eth1/evm/evm_mem.c b/c/src/verifier/eth1/evm/evm_mem.c similarity index 100% rename from src/verifier/eth1/evm/evm_mem.c rename to c/src/verifier/eth1/evm/evm_mem.c diff --git a/src/verifier/eth1/evm/evm_mem.h b/c/src/verifier/eth1/evm/evm_mem.h similarity index 100% rename from src/verifier/eth1/evm/evm_mem.h rename to c/src/verifier/eth1/evm/evm_mem.h diff --git a/src/verifier/eth1/evm/gas.c b/c/src/verifier/eth1/evm/gas.c similarity index 100% rename from src/verifier/eth1/evm/gas.c rename to c/src/verifier/eth1/evm/gas.c diff --git a/src/verifier/eth1/evm/gas.h b/c/src/verifier/eth1/evm/gas.h similarity index 100% rename from src/verifier/eth1/evm/gas.h rename to c/src/verifier/eth1/evm/gas.h diff --git a/src/verifier/eth1/evm/opcodes.c b/c/src/verifier/eth1/evm/opcodes.c similarity index 99% rename from src/verifier/eth1/evm/opcodes.c rename to c/src/verifier/eth1/evm/opcodes.c index 6c4cfb5d0..cba7884bf 100644 --- a/src/verifier/eth1/evm/opcodes.c +++ b/c/src/verifier/eth1/evm/opcodes.c @@ -43,8 +43,8 @@ #include "../nano/rlp.h" #include "../nano/serialize.h" #include "big.h" -#include "gas.h" #include "evm_mem.h" +#include "gas.h" #include #include #include @@ -262,7 +262,7 @@ int op_shift(evm_t* evm, uint8_t left) { else if (left == 2) { // signed shift right big_shift_right(res, 32, pos); if (l == 32 && (*b & 128)) { // the original number was signed - for (l = 0; l> 3; l++) res[l] = 0xFF; + for (l = 0; l < (pos >> 3); l++) res[l] = 0xFF; l = 8 - (pos % 8); res[pos >> 3] |= (0XFF >> l) << l; return evm_stack_push(evm, res, 32); diff --git a/src/verifier/eth1/evm/opcodes.h b/c/src/verifier/eth1/evm/opcodes.h similarity index 100% rename from src/verifier/eth1/evm/opcodes.h rename to c/src/verifier/eth1/evm/opcodes.h diff --git a/src/verifier/eth1/evm/pre_blake2.c b/c/src/verifier/eth1/evm/pre_blake2.c similarity index 100% rename from src/verifier/eth1/evm/pre_blake2.c rename to c/src/verifier/eth1/evm/pre_blake2.c diff --git a/src/verifier/eth1/evm/pre_ec.c b/c/src/verifier/eth1/evm/pre_ec.c similarity index 100% rename from src/verifier/eth1/evm/pre_ec.c rename to c/src/verifier/eth1/evm/pre_ec.c diff --git a/src/verifier/eth1/evm/precompiled.c b/c/src/verifier/eth1/evm/precompiled.c similarity index 100% rename from src/verifier/eth1/evm/precompiled.c rename to c/src/verifier/eth1/evm/precompiled.c diff --git a/src/verifier/eth1/evm/precompiled.h b/c/src/verifier/eth1/evm/precompiled.h similarity index 100% rename from src/verifier/eth1/evm/precompiled.h rename to c/src/verifier/eth1/evm/precompiled.h diff --git a/src/verifier/eth1/full/CMakeLists.txt b/c/src/verifier/eth1/full/CMakeLists.txt similarity index 97% rename from src/verifier/eth1/full/CMakeLists.txt rename to c/src/verifier/eth1/full/CMakeLists.txt index e3a80da2a..45af78498 100644 --- a/src/verifier/eth1/full/CMakeLists.txt +++ b/c/src/verifier/eth1/full/CMakeLists.txt @@ -31,6 +31,7 @@ # You should have received a copy of the GNU Affero General Public License along # with this program. If not, see . ############################################################################### +include("${PROJECT_SOURCE_DIR}/c/compiler.cmake") add_library(eth_full_o OBJECT eth_full.c diff --git a/src/verifier/eth1/full/eth_full.c b/c/src/verifier/eth1/full/eth_full.c similarity index 98% rename from src/verifier/eth1/full/eth_full.c rename to c/src/verifier/eth1/full/eth_full.c index beb6d37d2..cd3c2a1f5 100644 --- a/src/verifier/eth1/full/eth_full.c +++ b/c/src/verifier/eth1/full/eth_full.c @@ -121,6 +121,6 @@ void in3_register_eth_full() { in3_verifier_t* v = _calloc(1, sizeof(in3_verifier_t)); v->type = CHAIN_ETH; v->pre_handle = eth_handle_intern; - v->verify = in3_verify_eth_full; + v->verify = (in3_verify) in3_verify_eth_full; in3_register_verifier(v); } diff --git a/src/verifier/eth1/full/eth_full.h b/c/src/verifier/eth1/full/eth_full.h similarity index 100% rename from src/verifier/eth1/full/eth_full.h rename to c/src/verifier/eth1/full/eth_full.h diff --git a/src/verifier/eth1/nano/CMakeLists.txt b/c/src/verifier/eth1/nano/CMakeLists.txt similarity index 97% rename from src/verifier/eth1/nano/CMakeLists.txt rename to c/src/verifier/eth1/nano/CMakeLists.txt index faa790fb8..19b68948a 100644 --- a/src/verifier/eth1/nano/CMakeLists.txt +++ b/c/src/verifier/eth1/nano/CMakeLists.txt @@ -31,6 +31,8 @@ # You should have received a copy of the GNU Affero General Public License along # with this program. If not, see . ############################################################################### +include("${PROJECT_SOURCE_DIR}/c/compiler.cmake") + OPTION(POA "support POA verification including validatorlist updates" OFF) IF (POA) add_definitions(-DPOA) diff --git a/src/verifier/eth1/nano/blockheader.c b/c/src/verifier/eth1/nano/blockheader.c similarity index 100% rename from src/verifier/eth1/nano/blockheader.c rename to c/src/verifier/eth1/nano/blockheader.c diff --git a/src/verifier/eth1/nano/chains.h b/c/src/verifier/eth1/nano/chains.h similarity index 100% rename from src/verifier/eth1/nano/chains.h rename to c/src/verifier/eth1/nano/chains.h diff --git a/src/verifier/eth1/nano/chainspec.c b/c/src/verifier/eth1/nano/chainspec.c similarity index 98% rename from src/verifier/eth1/nano/chainspec.c rename to c/src/verifier/eth1/nano/chainspec.c index 6b3bb2bf3..6b64a726b 100644 --- a/src/verifier/eth1/nano/chainspec.c +++ b/c/src/verifier/eth1/nano/chainspec.c @@ -41,7 +41,7 @@ // linked list of chain specs typedef struct spec_ { - chain_id_t chain_id; + chain_id_t chain_id; chainspec_t* spec; struct spec_* next; } spec_t; @@ -60,7 +60,13 @@ static void fill_aura(d_token_t* validators, consensus_transition_t* t d_token_t* contract = d_get(validators, key("contract")); d_token_t* list = d_get(validators, key("list")); if (!contract) contract = d_get(validators, key("safeContract")); + +#ifndef __ZEPHYR__ if (block) t->transition_block = atoll(block); +#else + if (block) t->transition_block = atoi(block); +#endif + t->type = ETH_POA_AURA; if (contract) { t->contract = _calloc(20, 1); @@ -165,7 +171,7 @@ chainspec_t* chainspec_create_from_json(d_token_t* data) { d_token_t* genesis = d_get(data, key("genesis")); if (!genesis) return log_error("no genesis specified"); - if ((params = d_get(d_get(engine, key("Ethash")), key("params")))) + if (d_get(d_get(engine, key("Ethash")), key("params"))) spec->consensus_transitions->type = ETH_POW; else if ((params = d_get(d_get(d_get(engine, key("authorityRound")), key("params")), key("validators")))) { spec->consensus_transitions->type = ETH_POA_AURA; @@ -179,7 +185,7 @@ chainspec_t* chainspec_create_from_json(d_token_t* data) { } else fill_aura(params, spec->consensus_transitions, NULL); - } else if ((params = d_get(d_get(engine, key("clique")), key("params")))) { + } else if (d_get(d_get(engine, key("clique")), key("params"))) { bytes_t* extra = d_get_bytes(genesis, "extraData"); if (!extra) return log_error("no extra data in the genesis-block"); spec->consensus_transitions->type = ETH_POA_CLIQUE; diff --git a/src/verifier/eth1/nano/chainspec.h b/c/src/verifier/eth1/nano/chainspec.h similarity index 100% rename from src/verifier/eth1/nano/chainspec.h rename to c/src/verifier/eth1/nano/chainspec.h diff --git a/src/verifier/eth1/nano/eth_nano.c b/c/src/verifier/eth1/nano/eth_nano.c similarity index 100% rename from src/verifier/eth1/nano/eth_nano.c rename to c/src/verifier/eth1/nano/eth_nano.c diff --git a/src/verifier/eth1/nano/eth_nano.h b/c/src/verifier/eth1/nano/eth_nano.h similarity index 100% rename from src/verifier/eth1/nano/eth_nano.h rename to c/src/verifier/eth1/nano/eth_nano.h diff --git a/src/verifier/eth1/nano/merkle.c b/c/src/verifier/eth1/nano/merkle.c similarity index 100% rename from src/verifier/eth1/nano/merkle.c rename to c/src/verifier/eth1/nano/merkle.c diff --git a/src/verifier/eth1/nano/merkle.h b/c/src/verifier/eth1/nano/merkle.h similarity index 100% rename from src/verifier/eth1/nano/merkle.h rename to c/src/verifier/eth1/nano/merkle.h diff --git a/src/verifier/eth1/nano/registry.c b/c/src/verifier/eth1/nano/registry.c similarity index 100% rename from src/verifier/eth1/nano/registry.c rename to c/src/verifier/eth1/nano/registry.c diff --git a/src/verifier/eth1/nano/rlp.c b/c/src/verifier/eth1/nano/rlp.c similarity index 100% rename from src/verifier/eth1/nano/rlp.c rename to c/src/verifier/eth1/nano/rlp.c diff --git a/src/verifier/eth1/nano/rlp.h b/c/src/verifier/eth1/nano/rlp.h similarity index 100% rename from src/verifier/eth1/nano/rlp.h rename to c/src/verifier/eth1/nano/rlp.h diff --git a/src/verifier/eth1/nano/serialize.c b/c/src/verifier/eth1/nano/serialize.c similarity index 100% rename from src/verifier/eth1/nano/serialize.c rename to c/src/verifier/eth1/nano/serialize.c diff --git a/src/verifier/eth1/nano/serialize.h b/c/src/verifier/eth1/nano/serialize.h similarity index 100% rename from src/verifier/eth1/nano/serialize.h rename to c/src/verifier/eth1/nano/serialize.h diff --git a/src/verifier/eth1/nano/signature.c b/c/src/verifier/eth1/nano/signature.c similarity index 100% rename from src/verifier/eth1/nano/signature.c rename to c/src/verifier/eth1/nano/signature.c diff --git a/src/verifier/eth1/nano/txreceipt.c b/c/src/verifier/eth1/nano/txreceipt.c similarity index 100% rename from src/verifier/eth1/nano/txreceipt.c rename to c/src/verifier/eth1/nano/txreceipt.c diff --git a/src/verifier/eth1/nano/vhist.c b/c/src/verifier/eth1/nano/vhist.c similarity index 100% rename from src/verifier/eth1/nano/vhist.c rename to c/src/verifier/eth1/nano/vhist.c diff --git a/src/verifier/eth1/nano/vhist.h b/c/src/verifier/eth1/nano/vhist.h similarity index 100% rename from src/verifier/eth1/nano/vhist.h rename to c/src/verifier/eth1/nano/vhist.h diff --git a/src/verifier/eth1/rpc/CMakeLists.txt b/c/src/verifier/eth1/rpc/CMakeLists.txt similarity index 100% rename from src/verifier/eth1/rpc/CMakeLists.txt rename to c/src/verifier/eth1/rpc/CMakeLists.txt diff --git a/src/verifier/eth1/rpc/rpc.c b/c/src/verifier/eth1/rpc/rpc.c similarity index 100% rename from src/verifier/eth1/rpc/rpc.c rename to c/src/verifier/eth1/rpc/rpc.c diff --git a/src/verifier/eth1/rpc/rpc.h b/c/src/verifier/eth1/rpc/rpc.h similarity index 100% rename from src/verifier/eth1/rpc/rpc.h rename to c/src/verifier/eth1/rpc/rpc.h diff --git a/c/src/verifier/ipfs/CMakeLists.txt b/c/src/verifier/ipfs/CMakeLists.txt new file mode 100644 index 000000000..9543daae8 --- /dev/null +++ b/c/src/verifier/ipfs/CMakeLists.txt @@ -0,0 +1,48 @@ +############################################################################### +# This file is part of the Incubed project. +# Sources: https://github.com/slockit/in3-c +# +# Copyright (C) 2018-2019 slock.it GmbH, Blockchains LLC +# +# +# COMMERCIAL LICENSE USAGE +# +# Licensees holding a valid commercial license may use this file in accordance +# with the commercial license agreement provided with the Software or, alternatively, +# in accordance with the terms contained in a written agreement between you and +# slock.it GmbH/Blockchains LLC. For licensing terms and conditions or further +# information please contact slock.it at in3@slock.it. +# +# Alternatively, this file may be used under the AGPL license as follows: +# +# AGPL LICENSE USAGE +# +# This program is free software: you can redistribute it and/or modify it under the +# terms of the GNU Affero General Public License as published by the Free Software +# Foundation, either version 3 of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. +# [Permissions of this strong copyleft license are conditioned on making available +# complete source code of licensed works and modifications, which include larger +# works using a licensed work, under the same license. Copyright and license notices +# must be preserved. Contributors provide an express grant of patent rights.] +# You should have received a copy of the GNU Affero General Public License along +# with this program. If not, see . +############################################################################### +include("${PROJECT_SOURCE_DIR}/c/compiler.cmake") + +# static lib +add_library(ipfs_o OBJECT + ipfs.c + ipfs.pb.c + ../../third-party/nanopb/pb_encode.c + ../../third-party/nanopb/pb_decode.c + ../../third-party/nanopb/pb_common.c + ../../third-party/multihash/errors.c + ../../third-party/multihash/hashes.c + ../../third-party/multihash/multihash.c) +add_library(ipfs STATIC $) + +target_link_libraries(ipfs eth_nano b64) \ No newline at end of file diff --git a/c/src/verifier/ipfs/ipfs.c b/c/src/verifier/ipfs/ipfs.c new file mode 100644 index 000000000..e8568f6f4 --- /dev/null +++ b/c/src/verifier/ipfs/ipfs.c @@ -0,0 +1,174 @@ + +#include "ipfs.h" +#include "../../core/client/keys.h" +#include "../../core/util/mem.h" +#include "../../third-party/crypto/base58.h" +#include "../../third-party/crypto/sha2.h" +#include "../../third-party/libb64/cdecode.h" +#include "../../third-party/multihash/hashes.h" +#include "../../third-party/multihash/multihash.h" +#include "../../third-party/nanopb/pb_decode.h" +#include "../../third-party/nanopb/pb_encode.h" +#include "ipfs.pb.h" +#include + +#define GOTO_RET(label, val) \ + do { \ + ret = val; \ + goto label; \ + } while (0) + +typedef struct data_ { + size_t len; + const uint8_t* buf; +} cb_arg_bytes_t; + +static bool cb_encode_bytes(pb_ostream_t* stream, const pb_field_t* field, void* const* arg) { + cb_arg_bytes_t* data = *arg; + return pb_encode_tag_for_field(stream, field) && pb_encode_string(stream, data->buf, data->len); +} + +static size_t pb_encode_size(const pb_msgdesc_t* fields, const void* src_struct) { + pb_ostream_t s_ = PB_OSTREAM_SIZING; + if (pb_encode(&s_, fields, src_struct)) + return s_.bytes_written; + return 0; +} + +static in3_ret_t ipfs_create_hash(const uint8_t* content, size_t len, int hash, char** b58) { + in3_ret_t ret = IN3_OK; + cb_arg_bytes_t tmp = {.buf = NULL, .len = 0}; + pb_ostream_t stream; + size_t wlen = 0; + uint8_t * buf1 = NULL, *buf2 = NULL, *out = NULL; + + Data data = Data_init_zero; + data.Type = Data_DataType_File; + data.has_filesize = true; + data.filesize = len; + data.Data.funcs.encode = &cb_encode_bytes; + tmp.buf = content; + tmp.len = len; + data.Data.arg = &tmp; + + wlen = pb_encode_size(Data_fields, &data); + if ((buf1 = _malloc(wlen)) == NULL) + GOTO_RET(EXIT, IN3_ENOMEM); + + stream = pb_ostream_from_buffer(buf1, wlen); + if (!pb_encode(&stream, Data_fields, &data)) + GOTO_RET(EXIT, IN3_EUNKNOWN); + + PBNode node = PBNode_init_zero; + node.Data.funcs.encode = &cb_encode_bytes; + tmp.buf = buf1; + tmp.len = stream.bytes_written; + node.Data.arg = &tmp; + + wlen = pb_encode_size(PBNode_fields, &node); + if ((buf2 = _malloc(wlen)) == NULL) + GOTO_RET(EXIT, IN3_ENOMEM); + + stream = pb_ostream_from_buffer(buf2, wlen); + if (!pb_encode(&stream, PBNode_fields, &node)) + GOTO_RET(EXIT, IN3_EUNKNOWN); + + uint8_t* digest = NULL; + size_t digest_len = 0; + if (hash == MH_H_SHA2_256) { + uint8_t d_[32] = {0}; + digest_len = 32; + SHA256_CTX ctx; + sha256_Init(&ctx); + sha256_Update(&ctx, buf2, stream.bytes_written); + sha256_Final(&ctx, d_); + digest = d_; + } + + if (digest == NULL) + GOTO_RET(EXIT, IN3_ENOTSUP); + + size_t mhlen = mh_new_length(hash, digest_len); + if ((out = _malloc(mhlen)) == NULL) + GOTO_RET(EXIT, IN3_ENOMEM); + + if (mh_new(out, hash, digest, digest_len) < 0) + GOTO_RET(EXIT, IN3_EUNKNOWN); + + size_t b58sz = 64; + *b58 = _malloc(b58sz); + if (!b58enc(*b58, &b58sz, out, mhlen)) + ret = IN3_EUNKNOWN; + +EXIT: + _free(out); + _free(buf2); + _free(buf1); + return ret; +} + +in3_ret_t ipfs_verify_hash(const char* content, const char* encoding, const char* requested_hash) { + bytes_t* buf = NULL; + if (!strcmp(encoding, "hex")) + buf = hex_to_new_bytes(content, strlen(content)); + else if (!strcmp(encoding, "utf8")) + buf = b_new(content, strlen(content)); + else if (!strcmp(encoding, "base64")) { + size_t l = 0; + uint8_t* data = base64_decode(content, &l); + buf = b_new((char*) data, l); + free(data); + } else + return IN3_ENOTSUP; + + if (buf == NULL) + return IN3_ENOMEM; + + char* out = NULL; + in3_ret_t ret = ipfs_create_hash(buf->data, buf->len, MH_H_SHA2_256, &out); + if (ret == IN3_OK) + ret = !strcmp(requested_hash, out) ? IN3_OK : IN3_EINVALDT; + + _free(out); + b_free(buf); + return ret; +} + +in3_ret_t in3_verify_ipfs(in3_vctx_t* vc) { + char* method = NULL; + d_token_t* params = d_get(vc->request, K_PARAMS); + + if (vc->config->verification == VERIFICATION_NEVER) + return IN3_OK; + + // do we have a result? if not it is a vaslid error-response + if (!vc->result) + return IN3_OK; + + // do we support this request? + if (!(method = d_get_stringk(vc->request, K_METHOD))) + return vc_err(vc, "No Method in request defined!"); + + if (strcmp(method, "in3_nodeList") && d_type(vc->result) != T_STRING) + return vc_err(vc, "Invalid response!"); + + if (strcmp(method, "in3_nodeList") == 0) + return true; + else if (strcmp(method, "ipfs_get") == 0) + return ipfs_verify_hash(d_string(vc->result), + d_get_string_at(params, 1) ? d_get_string_at(params, 1) : "base64", + d_get_string_at(params, 0)); + else if (strcmp(method, "ipfs_put") == 0) + return ipfs_verify_hash(d_get_string_at(params, 0), + d_get_string_at(params, 1) ? d_get_string_at(params, 1) : "base64", + d_string(vc->result)); + else + return vc_err(vc, "method cannot be verified with ipfs verifier!"); +} + +void in3_register_ipfs() { + in3_verifier_t* v = _calloc(1, sizeof(in3_verifier_t)); + v->type = CHAIN_IPFS; + v->verify = in3_verify_ipfs; + in3_register_verifier(v); +} diff --git a/c/src/verifier/ipfs/ipfs.h b/c/src/verifier/ipfs/ipfs.h new file mode 100644 index 000000000..06b5d8c47 --- /dev/null +++ b/c/src/verifier/ipfs/ipfs.h @@ -0,0 +1,55 @@ +/******************************************************************************* + * This file is part of the Incubed project. + * Sources: https://github.com/slockit/in3-c + * + * Copyright (C) 2018-2019 slock.it GmbH, Blockchains LLC + * + * + * COMMERCIAL LICENSE USAGE + * + * Licensees holding a valid commercial license may use this file in accordance + * with the commercial license agreement provided with the Software or, alternatively, + * in accordance with the terms contained in a written agreement between you and + * slock.it GmbH/Blockchains LLC. For licensing terms and conditions or further + * information please contact slock.it at in3@slock.it. + * + * Alternatively, this file may be used under the AGPL license as follows: + * + * AGPL LICENSE USAGE + * + * This program is free software: you can redistribute it and/or modify it under the + * terms of the GNU Affero General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + * [Permissions of this strong copyleft license are conditioned on making available + * complete source code of licensed works and modifications, which include larger + * works using a licensed work, under the same license. Copyright and license notices + * must be preserved. Contributors provide an express grant of patent rights.] + * You should have received a copy of the GNU Affero General Public License along + * with this program. If not, see . + *******************************************************************************/ + +// @PUBLIC_HEADER +/** @file + * IPFS verification. + * */ +#ifndef IN3_IPFS_H +#define IN3_IPFS_H + +#include "../../core/client/verifier.h" + +/** verifies an IPFS hash. Supported encoding schemes - hex, utf8 and base64 */ +in3_ret_t ipfs_verify_hash(const char* content, const char* encoding, const char* requsted_hash); + +/** entry-function to execute the verification context. */ +in3_ret_t in3_verify_ipfs(in3_vctx_t* vc); + +/** + * this function should only be called once and will register the IPFS verifier. + */ +void in3_register_ipfs(); + +#endif //IN3_IPFS_H diff --git a/c/src/verifier/ipfs/ipfs.pb.c b/c/src/verifier/ipfs/ipfs.pb.c new file mode 100644 index 000000000..bb65576fa --- /dev/null +++ b/c/src/verifier/ipfs/ipfs.pb.c @@ -0,0 +1,13 @@ +/* Automatically generated nanopb constant definitions */ +/* Generated by nanopb-0.4.0 */ + +#include "ipfs.pb.h" +#if PB_PROTO_HEADER_VERSION != 40 +#error Regenerate this file with the current version of nanopb generator. +#endif + +PB_BIND(Data, Data, AUTO) + +PB_BIND(PBLink, PBLink, AUTO) + +PB_BIND(PBNode, PBNode, AUTO) diff --git a/c/src/verifier/ipfs/ipfs.pb.h b/c/src/verifier/ipfs/ipfs.pb.h new file mode 100644 index 000000000..db3956f00 --- /dev/null +++ b/c/src/verifier/ipfs/ipfs.pb.h @@ -0,0 +1,130 @@ +/* Automatically generated nanopb header */ +/* Generated by nanopb-0.4.0 */ + +#ifndef PB_IPFS_PB_H_INCLUDED +#define PB_IPFS_PB_H_INCLUDED +#include "../../third-party/nanopb/pb.h" + +#if PB_PROTO_HEADER_VERSION != 40 +#error Regenerate this file with the current version of nanopb generator. +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Enum definitions */ +typedef enum _Data_DataType { + Data_DataType_Raw = 0, + Data_DataType_Directory = 1, + Data_DataType_File = 2, + Data_DataType_Metadata = 3, + Data_DataType_Symlink = 4, + Data_DataType_HAMTShard = 5 +} Data_DataType; + +/* Struct definitions */ +typedef struct _PBNode { + pb_callback_t Data; + pb_callback_t Links; +} PBNode; + +typedef struct _Data { + Data_DataType Type; + pb_callback_t Data; + bool has_filesize; + uint64_t filesize; + pb_callback_t blocksizes; + bool has_hashType; + uint64_t hashType; + bool has_fanout; + uint64_t fanout; +} Data; + +typedef struct _PBLink { + pb_callback_t Hash; + pb_callback_t Name; + bool has_Tsize; + uint64_t Tsize; +} PBLink; + +/* Helper constants for enums */ +#define _Data_DataType_MIN Data_DataType_Raw +#define _Data_DataType_MAX Data_DataType_HAMTShard +#define _Data_DataType_ARRAYSIZE ((Data_DataType)(Data_DataType_HAMTShard + 1)) + +/* Initializer values for message structs */ +#define Data_init_default \ + { _Data_DataType_MIN, {{NULL}, NULL}, false, 0, {{NULL}, NULL}, false, 0, false, 0 } +#define PBLink_init_default \ + { {{NULL}, NULL}, {{NULL}, NULL}, false, 0 } +#define PBNode_init_default \ + { \ + {{NULL}, NULL}, { {NULL}, NULL } \ + } +#define Data_init_zero \ + { _Data_DataType_MIN, {{NULL}, NULL}, false, 0, {{NULL}, NULL}, false, 0, false, 0 } +#define PBLink_init_zero \ + { {{NULL}, NULL}, {{NULL}, NULL}, false, 0 } +#define PBNode_init_zero \ + { \ + {{NULL}, NULL}, { {NULL}, NULL } \ + } + +/* Field tags (for use in manual encoding/decoding) */ +#define PBNode_Links_tag 2 +#define PBNode_Data_tag 1 +#define Data_Type_tag 1 +#define Data_Data_tag 2 +#define Data_filesize_tag 3 +#define Data_blocksizes_tag 4 +#define Data_hashType_tag 5 +#define Data_fanout_tag 6 +#define PBLink_Hash_tag 1 +#define PBLink_Name_tag 2 +#define PBLink_Tsize_tag 3 + +/* Struct field encoding specification for nanopb */ +#define Data_FIELDLIST(X, a) \ + X(a, STATIC, REQUIRED, UENUM, Type, 1) \ + X(a, CALLBACK, OPTIONAL, BYTES, Data, 2) \ + X(a, STATIC, OPTIONAL, UINT64, filesize, 3) \ + X(a, CALLBACK, REPEATED, UINT64, blocksizes, 4) \ + X(a, STATIC, OPTIONAL, UINT64, hashType, 5) \ + X(a, STATIC, OPTIONAL, UINT64, fanout, 6) +#define Data_CALLBACK pb_default_field_callback +#define Data_DEFAULT NULL + +#define PBLink_FIELDLIST(X, a) \ + X(a, CALLBACK, OPTIONAL, BYTES, Hash, 1) \ + X(a, CALLBACK, OPTIONAL, STRING, Name, 2) \ + X(a, STATIC, OPTIONAL, UINT64, Tsize, 3) +#define PBLink_CALLBACK pb_default_field_callback +#define PBLink_DEFAULT NULL + +#define PBNode_FIELDLIST(X, a) \ + X(a, CALLBACK, OPTIONAL, BYTES, Data, 1) \ + X(a, CALLBACK, REPEATED, MESSAGE, Links, 2) +#define PBNode_CALLBACK pb_default_field_callback +#define PBNode_DEFAULT NULL +#define PBNode_Links_MSGTYPE PBLink + +extern const pb_msgdesc_t Data_msg; +extern const pb_msgdesc_t PBLink_msg; +extern const pb_msgdesc_t PBNode_msg; + +/* Defines for backwards compatibility with code written before nanopb-0.4.0 */ +#define Data_fields &Data_msg +#define PBLink_fields &PBLink_msg +#define PBNode_fields &PBNode_msg + +/* Maximum encoded size of messages (where known) */ +/* Data_size depends on runtime parameters */ +/* PBLink_size depends on runtime parameters */ +/* PBNode_size depends on runtime parameters */ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif diff --git a/c/src/verifier/ipfs/ipfs.proto b/c/src/verifier/ipfs/ipfs.proto new file mode 100644 index 000000000..39f43efab --- /dev/null +++ b/c/src/verifier/ipfs/ipfs.proto @@ -0,0 +1,34 @@ +syntax = "proto2"; + +message Data { + enum DataType { + Raw = 0; + Directory = 1; + File = 2; + Metadata = 3; + Symlink = 4; + HAMTShard = 5; + } + + required DataType Type = 1; + optional bytes Data = 2; + optional uint64 filesize = 3; + repeated uint64 blocksizes = 4; + + optional uint64 hashType = 5; + optional uint64 fanout = 6; +} + +message PBLink { + optional bytes Hash = 1; + optional string Name = 2; + optional uint64 Tsize = 3; +} + +// An IPFS MerkleDAG Node +message PBNode { + repeated PBLink Links = 2; + optional bytes Data = 1; +} + + diff --git a/test/CMakeLists.txt b/c/test/CMakeLists.txt similarity index 80% rename from test/CMakeLists.txt rename to c/test/CMakeLists.txt index 2f5647ddf..d06784a8b 100644 --- a/test/CMakeLists.txt +++ b/c/test/CMakeLists.txt @@ -31,21 +31,30 @@ # You should have received a copy of the GNU Affero General Public License along # with this program. If not, see . ############################################################################### +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/test) +set_property(GLOBAL PROPERTY C_STANDARD 99) + +#include("${PROJECT_SOURCE_DIR}/c/compiler.cmake") include_directories(. ../src) -include(cmake/code-coverage.cmake) # handle codecoverage if (CODE_COVERAGE) + add_compile_options(-fprofile-instr-generate -fcoverage-mapping) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-instr-generate -fcoverage-mapping") + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-instr-generate -fcoverage-mapping") + set (LDFLAGS "${LDFLAGS} -fprofile-instr-generate -fcoverage-mapping") + set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fprofile-instr-generate -fcoverage-mapping") + + # we exclude all headers, tests and thridparty-code - set(coverage_excludes "EXCLUDE" "test/*" "*.h" "src/third-party/*" "../src/third-party/*") - add_code_coverage_all_targets(${coverage_excludes}) + set(coverage_excludes "EXCLUDE" "c/test/*" "*.h" "c/src/third-party/*" "../c/src/third-party/*") endif() # first we build the runners add_executable(runner runner.c) -target_link_libraries(runner eth_full eth_api) +target_link_libraries(runner eth_full eth_api ipfs) add_executable(vmrunner vm_runner.c test_evm.c test_trie.c test_rlp.c) target_link_libraries(vmrunner eth_full) @@ -59,14 +68,16 @@ file(GLOB files "unit_tests/*.c") foreach (file ${files}) get_filename_component(testname "${file}" NAME_WE) add_executable("${testname}" "${file}" util/transport.c unity/unity.c) - target_code_coverage("${testname}" "" AUTO ALL ${coverage_excludes}) - target_link_libraries("${testname}" core eth_full eth_api) + target_link_libraries("${testname}" core eth_full eth_api ipfs ipfs_api) add_test( NAME "in3_${testname}" - COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${testname} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/.. + COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${testname} + WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/.. ) - add_dependencies(tests "${testname}") + set_tests_properties("in3_${testname}" PROPERTIES + ENVIRONMENT LLVM_PROFILE_FILE=in3_${testname}.profraw + ) + add_dependencies(tests "${testname}") endforeach () @@ -84,25 +95,14 @@ foreach (file ${files}) get_filename_component(testname "${file}" NAME_WE) add_test( NAME "in3_${testname}" - COMMAND ${CMAKE_CURRENT_BINARY_DIR}/runner ${file} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/.. + COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/runner ${file} + WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/.. + ) + set_tests_properties("in3_${testname}" PROPERTIES + ENVIRONMENT LLVM_PROFILE_FILE=in3_${testname}.profraw ) + endforeach () -target_code_coverage(runner "${files}" AUTO ALL ${coverage_excludes}) - -file(GLOB files - "testdata/evm/TrieTests/*.json" - "testdata/evm/RLPTests/*.json" - "testdata/evm/vmTests/vmArithmeticTest/*.json" - "testdata/evm/vmTests/vmBitwiseLocigOperation/*.json" -# "testdata/evm/GeneralStateTests/stRandom2/*.json" -# "testdata/evm/GeneralStateTests/stRandom/*.json" - "testdata/evm/GeneralStateTests/stMemoryTest/*.json" -# "testdata/evm/GeneralStateTests/stCodeCopyTest/*.json" -# "testdata/evm/GeneralStateTests/stRefundTest/*.json" -# "testdata/evm/GeneralStateTests/stLogTests/*.json" -) -target_code_coverage(vmrunner "${files}" AUTO ALL ${coverage_excludes}) foreach (testdir @@ -186,13 +186,16 @@ foreach (testdir get_filename_component(testname "${file}" NAME_WE) add_test( NAME "evm/${testdir}/${testname}" - COMMAND ${CMAKE_CURRENT_BINARY_DIR}/vmrunner ${file} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/.. + COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/vmrunner ${file} + WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/.. ) - set_tests_properties("evm/${testdir}/${testname}" PROPERTIES TIMEOUT 9) + set_tests_properties("evm/${testdir}/${testname}" PROPERTIES + TIMEOUT 9 + ENVIRONMENT LLVM_PROFILE_FILE=evm_${testdir}_${testname}.profraw + ) + endforeach () endforeach () - set_property(TARGET runner PROPERTY C_STANDARD 99) set_property(TARGET vmrunner PROPERTY C_STANDARD 99) diff --git a/test/cmake/COPYING-CMAKE-SCRIPTS.txt b/c/test/cmake/COPYING-CMAKE-SCRIPTS.txt similarity index 100% rename from test/cmake/COPYING-CMAKE-SCRIPTS.txt rename to c/test/cmake/COPYING-CMAKE-SCRIPTS.txt diff --git a/test/cmake/FindCheck.cmake b/c/test/cmake/FindCheck.cmake similarity index 100% rename from test/cmake/FindCheck.cmake rename to c/test/cmake/FindCheck.cmake diff --git a/test/cmake/config.h.in b/c/test/cmake/config.h.in similarity index 100% rename from test/cmake/config.h.in rename to c/test/cmake/config.h.in diff --git a/c/test/qemu/CMakeLists.txt b/c/test/qemu/CMakeLists.txt new file mode 100644 index 000000000..2e351811b --- /dev/null +++ b/c/test/qemu/CMakeLists.txt @@ -0,0 +1,37 @@ +cmake_minimum_required(VERSION 3.13.1) + +include($ENV{ZEPHYR_BASE}/cmake/app/boilerplate.cmake NO_POLICY_SCOPE) +project(z_in3) + +target_sources(app PRIVATE src/main.c) + +ADD_DEFINITIONS(-DTEST) +ADD_DEFINITIONS(-DDEBUG) + +SET(CMAKE_BUILD_TYPE Debug) +SET(CMAKE_VERBOSE_MAKEFILE ON) +ADD_DEFINITIONS(-DZEPHYR_OS) +ADD_DEFINITIONS(-DZEPHYR) +ADD_DEFINITIONS(-DIN3_MATH_LITE) + +set(IN3_SRC ../..) +set(IN3_DEPS +${IN3_SRC}/src/core +${IN3_SRC}/src/verifier/eth1/basic +${IN3_SRC}/src/verifier/eth1/nano +${IN3_SRC}/src/api/eth1 +${IN3_SRC}/src/api/utils +${IN3_SRC}/src/third-party +) + +foreach(dep ${IN3_DEPS}) + file(GLOB files "${dep}/**/*.c") + file(GLOB files2 "${dep}/*.c") + message("${files}") + message("${files2}") + target_sources(app PRIVATE "${files}" "${files2}") + include_directories ("${dep}") +endforeach() +target_include_directories (app PRIVATE "../include") + + diff --git a/c/test/qemu/README.rst b/c/test/qemu/README.rst new file mode 100644 index 000000000..678e24f16 --- /dev/null +++ b/c/test/qemu/README.rst @@ -0,0 +1 @@ +Exit QEMU by pressing :kbd:`CTRL+A` :kbd:`x`. diff --git a/c/test/qemu/prj.conf b/c/test/qemu/prj.conf new file mode 100644 index 000000000..a3a32712b --- /dev/null +++ b/c/test/qemu/prj.conf @@ -0,0 +1,7 @@ +# nothing here +CONFIG_HEAP_MEM_POOL_SIZE=59436 +CONFIG_PRINTK=y +CONFIG_MAIN_STACK_SIZE=2084 +#CONFIG_ASSERT=y +#CONFIG_DEBUG_OPTIMIZATIONS=y +#SYSTEM_CLOCK_DISABLE=y \ No newline at end of file diff --git a/c/test/qemu/sample.yaml b/c/test/qemu/sample.yaml new file mode 100644 index 000000000..e8e08712f --- /dev/null +++ b/c/test/qemu/sample.yaml @@ -0,0 +1,9 @@ +sample: + description: quemu in3 + name: in3 +tests: + in3: + tags: in3 + build_only: false + timeout: 60 + platform_whitelist: qemu_cortex_m3 diff --git a/c/test/qemu/src/block_number.h b/c/test/qemu/src/block_number.h new file mode 100644 index 000000000..b9b643197 --- /dev/null +++ b/c/test/qemu/src/block_number.h @@ -0,0 +1,5 @@ +// Imported from file 'block_number.bin' +const unsigned char block_number_res[] = { + 0xcd,0x41,0x64,0xb6,0xf9,0x23,0x32,0x2e,0x30,0x00,0xb6,0x89,0xbe,0x20,0x40,0x69,0x34,0x8d,0xa1,0x77,0x34,0x67,0x6b,0x72,0xa0,0x45,0x08,0xbe,0x1f,0xe8,0x09,0x1c,0xae,0xbc,0x69,0xe4,0xd4,0xbc,0x68,0x08,0x22,0xa1,0x87,0xa0,0xbe,0x20,0x40,0x69,0x3c,0xfa,0x25,0x32,0x2e,0x31,0x2e,0x30,0x00 +}; +const unsigned int block_number_res_len = 57; diff --git a/test/testdata/mock/eth_call_response_binary.h b/c/test/qemu/src/eth_call_response_binary.h similarity index 100% rename from test/testdata/mock/eth_call_response_binary.h rename to c/test/qemu/src/eth_call_response_binary.h diff --git a/c/test/qemu/src/main.c b/c/test/qemu/src/main.c new file mode 100644 index 000000000..b6549311a --- /dev/null +++ b/c/test/qemu/src/main.c @@ -0,0 +1,107 @@ +/******************************************************************************* + * This file is part of the Incubed project. + * Sources: https://github.com/slockit/in3-c + * + * Copyright (C) 2018-2019 slock.it GmbH, Blockchains LLC + * + * + * COMMERCIAL LICENSE USAGE + * + * Licensees holding a valid commercial license may use this file in accordance + * with the commercial license agreement provided with the Software or, alternatively, + * in accordance with the terms contained in a written agreement between you and + * slock.it GmbH/Blockchains LLC. For licensing terms and conditions or further + * information please contact slock.it at in3@slock.it. + * + * Alternatively, this file may be used under the AGPL license as follows: + * + * AGPL LICENSE USAGE + * + * This program is free software: you can redistribute it and/or modify it under the + * terms of the GNU Affero General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + * [Permissions of this strong copyleft license are conditioned on making available + * complete source code of licensed works and modifications, which include larger + * works using a licensed work, under the same license. Copyright and license notices + * must be preserved. Contributors provide an express grant of patent rights.] + * You should have received a copy of the GNU Affero General Public License along + * with this program. If not, see . + *******************************************************************************/ + +#include "block_number.h" +#include "eth_api.h" //wrapper for easier use +#include "eth_basic.h" // the full ethereum verifier containing the EVM +#include "receipt.h" +#include "util/log.h" +#include "util/mem.h" +/** + * In3 Setup and usage + * **/ +/* Perform in3 requests for http transport */ +in3_ret_t local_transport_func(char** urls, int urls_len, char* payload, in3_response_t* result) { + for (int i = 0; i < urls_len; i++) { + if (strstr(payload, "eth_getTransactionReceipt") != NULL) { + printk("Returning eth_getTransactionReceipt ...\n"); + sb_add_range(&(result[i].result), mock_tx_receipt, 0, mock_tx_receipt_len); + } else if (strstr(payload, "eth_blockNumber") != NULL) { + printk("Returning eth_blockNumber ...\n"); + sb_add_range(&(result[i].result), block_number_res, 0, block_number_res_len); + } else { + in3_log_debug("Not supported for this mock\n"); + } + } + return IN3_OK; +} + +in3_ret_t transport_mock(in3_request_t* req) { + return local_transport_func((char**) req->urls, req->urls_len, req->payload, req->results); +} + +in3_t* init_in3(in3_transport_send custom_transport, chain_id_t chain) { + in3_t* in3 = NULL; + //int err; + in3_log_set_quiet(0); + in3_log_set_level(LOG_DEBUG); + in3_register_eth_basic(); + in3 = in3_for_chain(chain); + if (custom_transport) + in3->transport = custom_transport; // use curl to handle the requests + in3->request_count = 1; // number of requests to sendp + in3->max_attempts = 1; + in3->request_count = 1; // number of requests to sendp + in3->chain_id = chain; + in3->flags = FLAGS_STATS | FLAGS_INCLUDE_CODE | FLAGS_BINARY; + for (int i = 0; i < in3->chains_length; i++) { + _free(in3->chains[i].nodelist_upd8_params); + in3->chains[i].nodelist_upd8_params = NULL; + } + return in3; +} + +//this instruction makes the qemu exit, not in a clean way yet but it works +static inline void _exit_qemu() { + register u32_t r0 __asm__("r0"); + r0 = 0x18; + register u32_t r1 __asm__("r1"); + r1 = 0x20026; + __asm__ volatile("bkpt #0xAB"); +} + +void main() { + // the hash of transaction whose receipt we want to get + in3_t* in3 = init_in3(transport_mock, 0x5); + bytes32_t tx_hash; + hex_to_bytes("0x8e7fb87e95c69a780490fce3ea14b44c78366fc45baa6cb86a582166c10c6d9d", -1, tx_hash, 32); + // get the tx receipt by hash + eth_tx_receipt_t* txr = eth_getTransactionReceipt(in3, tx_hash); + printk("status: %d ", txr->status); + printk("gas: %lld ", txr->gas_used); + printk("IN3 TEST PASSED !\n"); + eth_tx_receipt_free(txr); + in3_free(in3); + _exit_qemu(); +} diff --git a/c/test/qemu/src/receipt.h b/c/test/qemu/src/receipt.h new file mode 100644 index 000000000..2eb0eb25d --- /dev/null +++ b/c/test/qemu/src/receipt.h @@ -0,0 +1,61 @@ +// Imported from file 'receipt.bin' +const unsigned char mock_tx_receipt[] = { + 0xdc,0x25,0x41,0x64,0xb6,0xf9,0x23,0x32,0x2e,0x30,0x00,0xb6,0x89,0x6c,0x9a,0x5b,0x1c,0x20,0x1c,0x9d,0x59,0x2c,0x4a,0xd3,0xfb,0xa0,0x2f,0x7a,0xa0,0x63, + 0xe8,0x04,0x8b,0x3f,0xf1,0x25,0x51,0xfd,0x37,0x7e,0x78,0x06,0x1a,0xb6,0xad,0x14,0x6c,0xc8,0xdf,0x4d,0x64,0xca,0xbe,0x17,0xa7,0xa4,0xf5,0xc4,0xc0,0x5e, + 0x7f,0xbe,0x01,0x0d,0x16,0x04,0x96,0x14,0x19,0x29,0xc1,0x5f,0x4e,0x81,0x8a,0xbf,0x25,0x49,0x51,0x06,0x22,0xa5,0x0c,0x44,0x0c,0x47,0x42,0x23,0x68,0xd2, + 0xbd,0x69,0x3f,0xc5,0x97,0x40,0xcf,0xd4,0x1d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x94,0xa1, + 0x3a,0x1b,0x14,0xf7,0xc8,0xc3,0xb2,0x6b,0x89,0x58,0xa8,0x83,0x4a,0xc7,0xbd,0xa5,0x40,0xef,0x55,0x2f,0x13,0x51,0x50,0x6e,0xd6,0x1c,0x20,0x8e,0x7f,0xb8, + 0x7e,0x95,0xc6,0x9a,0x78,0x04,0x90,0xfc,0xe3,0xea,0x14,0xb4,0x4c,0x78,0x36,0x6f,0xc4,0x5b,0xaa,0x6c,0xb8,0x6a,0x58,0x21,0x66,0xc1,0x0c,0x6d,0x9d,0x04, + 0xba,0xa1,0x34,0x8d,0xa1,0x77,0x34,0x68,0x4e,0xe4,0x67,0x42,0x18,0x2c,0x72,0x65,0x63,0x65,0x69,0x70,0x74,0x50,0x72,0x6f,0x6f,0x66,0x00,0xc7,0xe9,0x1d, + 0x02,0x5f,0xf9,0x02,0x5c,0xa0,0x9c,0xd2,0x2d,0x20,0x9f,0x24,0x34,0x41,0x47,0x49,0x4d,0x05,0xd1,0x3f,0x33,0x5b,0x6e,0x63,0xaf,0x93,0x0a,0xbd,0xc6,0x0f, + 0x3d,0xb6,0x36,0x27,0x58,0x9e,0x14,0x38,0xa0,0x1d,0xcc,0x4d,0xe8,0xde,0xc7,0x5d,0x7a,0xab,0x85,0xb5,0x67,0xb6,0xcc,0xd4,0x1a,0xd3,0x12,0x45,0x1b,0x94, + 0x8a,0x74,0x13,0xf0,0xa1,0x42,0xfd,0x40,0xd4,0x93,0x47,0x94,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xa0,0x8e,0xef,0x75,0x82,0x04,0x88,0xf6,0xee,0x9f,0xf2,0x3b,0x41,0x98,0x3b,0x4a,0x62,0x9f,0xb2,0x92,0x9c,0xa7,0xf6,0xa7,0x96,0x05,0xf1,0xea, + 0x23,0xf3,0x92,0xc5,0xe4,0xa0,0xe9,0x29,0x31,0x82,0x30,0x6e,0x29,0xfe,0xd2,0xde,0xb3,0xb0,0x80,0x94,0x53,0x0a,0xa8,0x1f,0xf3,0x0c,0xb8,0xe5,0x5d,0xd1, + 0xdc,0x42,0xaf,0xb5,0x0d,0xfd,0x1f,0x88,0xa0,0x9b,0x2e,0xb5,0x94,0xe0,0x36,0x3e,0xd0,0x48,0x7f,0xbb,0x7e,0x51,0x60,0x64,0x36,0xde,0x95,0xf5,0x83,0x6f, + 0x2b,0xf1,0xc5,0x20,0xfb,0x34,0x4b,0xcf,0x5d,0x21,0x02,0xb9,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x01,0x83,0x17,0xa7,0xa4,0x83,0x7a,0x12,0x00,0x83,0x01,0x0d,0x16,0x84,0x5d,0xb6,0xf9,0x5b,0xb8,0x61,0xd8,0x83,0x01,0x09,0x03,0x84,0x67,0x65,0x74,0x68, + 0x88,0x67,0x6f,0x31,0x2e,0x31,0x32,0x2e,0x39,0x85,0x6c,0x69,0x6e,0x75,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9e,0x58,0x9a,0x28,0x29,0xf6,0xfe,0x4b, + 0x72,0xd4,0xff,0x51,0x1f,0xda,0xa4,0x64,0xa9,0xa8,0xcf,0x16,0xcd,0x10,0x40,0x81,0x38,0x1d,0xe0,0x2d,0xfd,0xff,0x0f,0xaf,0x59,0xdc,0xd0,0x8d,0xff,0xa6, + 0x74,0x91,0x01,0x84,0x93,0x71,0x0b,0x2a,0x48,0x74,0xbb,0x54,0x7a,0x09,0xd1,0x38,0x27,0xd5,0xe3,0x2f,0x2b,0xf2,0x82,0x38,0x5c,0x80,0x00,0xa0,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0xc8,0x42,0x1c,0x53,0xf8,0x51,0xa0,0xa1,0x7d,0xf2,0x72,0x66,0x01,0x9f,0x80,0x99,0xd5,0xb0,0xd7,0xcb, + 0x07,0x5a,0xe5,0x07,0x3c,0x46,0xb4,0x9f,0x78,0xeb,0x30,0xbd,0xcc,0xe5,0xa3,0xe5,0xaf,0xe1,0xdd,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xa0,0xe9,0xc1,0x17, + 0xde,0x30,0x4d,0x23,0x05,0x0c,0xcc,0x6a,0x30,0xd2,0xab,0x00,0x9a,0x34,0x5b,0x18,0xac,0x1a,0x31,0xdb,0x0d,0x36,0xcf,0x86,0xa1,0xd0,0x25,0xfe,0x93,0x80, + 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x1c,0x8f,0xf8,0x8d,0x31,0xb8,0x8a,0xf8,0x88,0x32,0x85,0x04,0xa8,0x17,0xc8,0x00,0x82,0xa3,0xd7,0x94,0xf7,0xc8,0xc3, + 0xb2,0x6b,0x89,0x58,0xa8,0x83,0x4a,0xc7,0xbd,0xa5,0x40,0xef,0x55,0x2f,0x13,0x51,0x50,0x80,0xa4,0x59,0xce,0x7d,0x4c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x2e,0xa0,0xb9,0x51,0xcc, + 0x1b,0xd2,0x3c,0x76,0x79,0x23,0x7b,0xa7,0x19,0xc2,0x5a,0xe9,0x76,0xe1,0x27,0xd5,0xfa,0xf6,0x8a,0x79,0x79,0x95,0x8d,0x5c,0xa4,0x78,0xe3,0xf5,0x25,0xa0, + 0x4e,0x37,0x8e,0x47,0xec,0xcb,0xa2,0xe0,0x28,0x6c,0x9b,0xc6,0x24,0xad,0xe7,0x7c,0xa7,0x6e,0x8d,0xca,0x4a,0x9d,0x5a,0xc0,0x91,0xff,0xa9,0x30,0x90,0x7c, + 0x09,0x39,0xfb,0x5c,0x42,0x1c,0x53,0xf8,0x51,0xa0,0x3f,0xac,0x69,0x22,0x29,0xde,0x62,0xb0,0x61,0xff,0xe3,0x97,0x55,0xa7,0x18,0x36,0xe9,0x11,0x2c,0x77, + 0xb8,0x86,0x73,0x9d,0xa4,0xeb,0x76,0xc8,0x25,0xdf,0xf1,0xbc,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xa0,0x4a,0x74,0x08,0x27,0xb8,0xda,0x89,0x4c,0x04,0x66, + 0x90,0x00,0x94,0x7e,0x5b,0xc7,0x24,0x7c,0x88,0x41,0x2e,0xb1,0x6a,0xc1,0x31,0xdc,0xfc,0xaa,0xbf,0x28,0xcf,0xf8,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, + 0x1d,0x01,0x13,0xf9,0x01,0x10,0x31,0xb9,0x01,0x0c,0xf9,0x01,0x09,0x01,0x83,0x01,0x0d,0x16,0xb9,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xb9,0xd2,0xa1,0xb2,0x97,0x40,0x61,0xed,0x80,0x3c,0xfa,0x25,0x32,0x2e,0x31,0x2e,0x30,0x00,0x87,0xa0,0xbe,0x20, + 0x81,0x38,0x6b,0x72,0xa0,0x45,0x08,0xbe,0x1f,0xe8,0x09,0x1c,0xae,0xbd,0x02,0x59,0xe4,0xd4,0xbd,0x02,0x4e,0x08,0x22,0xa3 +}; +const unsigned int mock_tx_receipt_len = 1704; diff --git a/test/runner.c b/c/test/runner.c similarity index 87% rename from test/runner.c rename to c/test/runner.c index 48cdb51e2..c27cd8f2a 100644 --- a/test/runner.c +++ b/c/test/runner.c @@ -41,6 +41,7 @@ #include "../src/core/util/log.h" #include "../src/core/util/mem.h" #include "../src/verifier/eth1/full/eth_full.h" +#include "../src/verifier/ipfs/ipfs.h" #include #include #include @@ -106,8 +107,8 @@ char* readContent(char* name) { len += r; if (feof(file)) break; size_t new_alloc = allocated * 2; - buffer = _realloc(buffer, new_alloc, allocated); - allocated = new_alloc; + buffer = realloc(buffer, new_alloc); + allocated = new_alloc; } buffer[len] = 0; @@ -117,8 +118,10 @@ char* readContent(char* name) { return buffer; } -static bytes_t* _tmp_response; -static int fuzz_pos = -1; +static int fuzz_pos = -1; +static d_token_t* _tmp_responses = NULL; +static int _tmp_pos = 0; +static bool _tmp_bin = false; static int find_hex(char* str, int start, int len) { int i; @@ -163,42 +166,46 @@ static str_range_t find_prop_name(char* p, char* start) { return res; } -static void prepare_response(int count, d_token_t* response_array, int as_bin, int fuzz_pos) { - if (!as_bin) { +static void prepare_response(int count, d_token_t* response_array, int as_bin, int _fuzz_pos) { + _tmp_responses = response_array; + _tmp_bin = as_bin; + fuzz_pos = _fuzz_pos; + _tmp_pos = 0; +} + +static int send_mock(in3_request_t* req) { + int i; + bytes_t response; + if (d_len(_tmp_responses) <= _tmp_pos) { + for (i = 0; i < req->urls_len; i++) + sb_add_chars(&(req->results + i)->error, "Reached end of available responses!"); + return IN3_EINVAL; + } + + if (!_tmp_bin) { sb_t* sb = sb_new(NULL); - str_range_t r = d_to_json(d_get_at(response_array, 0)); + str_range_t r = d_to_json(d_get_at(_tmp_responses, _tmp_pos)); sb_add_char(sb, '['); sb_add_range(sb, r.data, 0, r.len); sb_add_char(sb, ']'); if (fuzz_pos >= 0) mod_hex(sb->data + fuzz_pos + 1); - _tmp_response = _malloc(sizeof(bytes_t)); - _tmp_response->data = (uint8_t*) sb->data; - _tmp_response->len = sb->len; + response = bytes((uint8_t*) sb->data, sb->len); _free(sb); } else { bytes_builder_t* bb = bb_new(); - d_serialize_binary(bb, response_array + 1); - _tmp_response = _malloc(sizeof(bytes_t)); - _tmp_response->data = bb->b.data; - _tmp_response->len = bb->b.len; + d_serialize_binary(bb, _tmp_responses + _tmp_pos + 1); + response = bb->b; _free(bb); } -} -static int send_mock(in3_request_t* req) { // printf("payload: %s\n",payload); - int i; for (i = 0; i < req->urls_len; i++) - // rioght now we always add the same response - // TODO later support array of responses. - sb_add_range(&(req->results + i)->result, (char*) _tmp_response->data, 0, _tmp_response->len); + sb_add_range(&(req->results + i)->result, (char*) response.data, 0, response.len); - if (_tmp_response) { - free(_tmp_response->data); - free(_tmp_response); - } + _free(response.data); + _tmp_pos++; return 0; } @@ -211,10 +218,11 @@ int execRequest(in3_t* c, d_token_t* test, int must_fail) { char params[10000]; // configure in3 - c->request_count = (t = d_get(config, key("requestCount"))) ? d_int(t) : 1; - method = d_get_string(request, "method"); + c->request_count = (t = d_get(config, key("requestCount"))) ? d_int(t) : 1; + method = d_get_string(request, "method"); + bool intern = d_get_int(test, "intern"); + str_range_t s = d_to_json(d_get(request, key("params"))); - str_range_t s = d_to_json(d_get(request, key("params"))); if (!method) { printf("NO METHOD"); return -1; @@ -228,12 +236,26 @@ int execRequest(in3_t* c, d_token_t* test, int must_fail) { char *res = NULL, *err = NULL; int success = must_fail ? 0 : d_get_intkd(test, key("success"), 1); + if (intern) _tmp_pos++; // if this is a intern, then the first response is the expected, while the all other come after this. // _tmp_response = response; int is_bin = d_get_int(test, "binaryFormat"); in3_client_rpc(c, method, params, is_bin ? NULL : &res, &err); + if (res && intern) { + json_ctx_t* actual_json = parse_json(res); + d_token_t* actual = actual_json->result; + d_token_t* expected = d_get(response + 1, key("result")); + if (!d_eq(actual, expected)) { + err = _malloc(strlen(res) + 200); + sprintf(err, "wrong response: %s", res); + _free(res); + res = NULL; + } + json_free(actual_json); + } + if (err && res) { print_error("Error and Result set"); _free(err); @@ -290,8 +312,9 @@ int run_test(d_token_t* test, int counter, char* fuzz_prop, in3_proof_t proof) { in3_t* c = in3_for_chain(d_get_intkd(test, key("chainId"), 1)); int j; c->max_attempts = 1; - c->include_code = 1; + c->flags = FLAGS_STATS | FLAGS_INCLUDE_CODE | FLAGS_AUTO_UPDATE_LIST; c->transport = send_mock; + c->cache = NULL; d_token_t* first_res = d_get(d_get_at(d_get(test, key("response")), 0), key("result")); d_token_t* registry_id = d_type(first_res) == T_OBJECT ? d_get(first_res, key("registryId")) : NULL; for (j = 0; j < c->chains_length; j++) { @@ -321,9 +344,7 @@ int run_test(d_token_t* test, int counter, char* fuzz_prop, in3_proof_t proof) { } } } - int fail = execRequest(c, test, fuzz_prop != NULL); - in3_free(c); if (mem_get_memleak_cnt()) { @@ -428,6 +449,7 @@ int main(int argc, char* argv[]) { in3_log_set_level(LOG_INFO); in3_register_eth_full(); in3_register_eth_api(); + in3_register_ipfs(); int i = 0, size = 1; int testIndex = -1, membrk = -1; char** names = malloc(sizeof(char*)); diff --git a/test/test_evm.c b/c/test/test_evm.c similarity index 100% rename from test/test_evm.c rename to c/test/test_evm.c diff --git a/test/test_libcurl.c b/c/test/test_libcurl.c similarity index 100% rename from test/test_libcurl.c rename to c/test/test_libcurl.c diff --git a/test/test_rlp.c b/c/test/test_rlp.c similarity index 100% rename from test/test_rlp.c rename to c/test/test_rlp.c diff --git a/test/test_trie.c b/c/test/test_trie.c similarity index 100% rename from test/test_trie.c rename to c/test/test_trie.c diff --git a/test/test_utils.h b/c/test/test_utils.h similarity index 79% rename from test/test_utils.h rename to c/test/test_utils.h index 5304826b3..0d3b8e3a5 100644 --- a/test/test_utils.h +++ b/c/test/test_utils.h @@ -60,6 +60,30 @@ extern "C" { TEST_LOG_INTERNAL(#t, "Completed in %fs\n", TIMING_GET()); \ } while (0) +// if t is NULL, adds 10 to previously returned value and returns it +// otherwise expects t to point to a uint64_t value; if this value is non-zero the same value is returned +// otherwise the previously returned value is returned +static inline uint64_t mock_time(void* t) { + static uint64_t now = 0; + if (t) + now = (*(uint64_t*) t) ? *(uint64_t*) t : now; + else + now += 10; + return now; +} + +// a not-so-random number generator +// starts with zero and returns a number that is one more than the previously returned value, unless +// s is not NULL, in which case s is treated as a pointer to int and it's `pointed-to' value is returned +static inline int mock_rand(void* s) { + static uint64_t rand = 0; + if (s) + rand = *(int*) s; + else + rand += 1; + return rand; +} + #ifdef __cplusplus } #endif diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/addNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/addNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/addNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/addNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/addmodNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/addmodNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/addmodNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/addmodNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/andNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/andNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/andNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/andNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/balanceNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/balanceNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/balanceNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/balanceNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/byteNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/byteNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/byteNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/byteNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/callNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/callNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/callNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/callNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/callcodeNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/callcodeNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/callcodeNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/callcodeNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/calldatacopyNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/calldatacopyNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/calldatacopyNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/calldatacopyNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/calldataloadNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/calldataloadNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/calldataloadNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/calldataloadNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/codecopyNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/codecopyNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/codecopyNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/codecopyNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/createNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/createNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/createNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/createNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/delegatecallNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/delegatecallNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/delegatecallNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/delegatecallNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/divNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/divNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/divNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/divNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/eqNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/eqNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/eqNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/eqNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/expNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/expNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/expNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/expNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/extcodecopyNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/extcodecopyNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/extcodecopyNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/extcodecopyNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/extcodesizeNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/extcodesizeNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/extcodesizeNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/extcodesizeNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/gtNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/gtNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/gtNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/gtNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/iszeroNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/iszeroNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/iszeroNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/iszeroNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/jumpNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/jumpNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/jumpNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/jumpNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/jumpiNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/jumpiNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/jumpiNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/jumpiNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/log0NonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/log0NonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/log0NonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/log0NonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/log1NonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/log1NonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/log1NonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/log1NonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/log2NonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/log2NonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/log2NonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/log2NonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/log3NonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/log3NonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/log3NonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/log3NonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/ltNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/ltNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/ltNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/ltNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/mloadNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/mloadNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/mloadNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/mloadNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/modNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/modNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/modNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/modNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/mstore8NonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/mstore8NonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/mstore8NonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/mstore8NonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/mstoreNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/mstoreNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/mstoreNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/mstoreNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/mulNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/mulNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/mulNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/mulNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/mulmodNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/mulmodNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/mulmodNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/mulmodNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/notNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/notNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/notNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/notNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/orNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/orNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/orNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/orNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/returnNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/returnNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/returnNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/returnNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/sdivNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/sdivNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/sdivNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/sdivNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/sgtNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/sgtNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/sgtNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/sgtNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/sha3NonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/sha3NonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/sha3NonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/sha3NonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/signextNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/signextNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/signextNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/signextNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/sloadNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/sloadNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/sloadNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/sloadNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/sltNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/sltNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/sltNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/sltNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/smodNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/smodNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/smodNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/smodNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/sstoreNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/sstoreNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/sstoreNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/sstoreNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/subNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/subNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/subNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/subNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/suicideNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/suicideNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/suicideNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/suicideNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/xorNonConst.json b/c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/xorNonConst.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/xorNonConst.json rename to c/test/testdata/evm/GeneralStateTests/stArgsZeroOneBalance/xorNonConst.json diff --git a/test/testdata/evm/GeneralStateTests/stAttackTest/ContractCreationSpam.json b/c/test/testdata/evm/GeneralStateTests/stAttackTest/ContractCreationSpam.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stAttackTest/ContractCreationSpam.json rename to c/test/testdata/evm/GeneralStateTests/stAttackTest/ContractCreationSpam.json diff --git a/test/testdata/evm/GeneralStateTests/stAttackTest/CrashingTransaction.json b/c/test/testdata/evm/GeneralStateTests/stAttackTest/CrashingTransaction.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stAttackTest/CrashingTransaction.json rename to c/test/testdata/evm/GeneralStateTests/stAttackTest/CrashingTransaction.json diff --git a/test/testdata/evm/GeneralStateTests/stBadOpcode/badOpcodes.json b/c/test/testdata/evm/GeneralStateTests/stBadOpcode/badOpcodes.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stBadOpcode/badOpcodes.json rename to c/test/testdata/evm/GeneralStateTests/stBadOpcode/badOpcodes.json diff --git a/test/testdata/evm/GeneralStateTests/stBugs/evmBytecode.json b/c/test/testdata/evm/GeneralStateTests/stBugs/evmBytecode.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stBugs/evmBytecode.json rename to c/test/testdata/evm/GeneralStateTests/stBugs/evmBytecode.json diff --git a/test/testdata/evm/GeneralStateTests/stBugs/randomStatetestDEFAULT-Tue_07_58_41-15153-575192.json b/c/test/testdata/evm/GeneralStateTests/stBugs/randomStatetestDEFAULT-Tue_07_58_41-15153-575192.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stBugs/randomStatetestDEFAULT-Tue_07_58_41-15153-575192.json rename to c/test/testdata/evm/GeneralStateTests/stBugs/randomStatetestDEFAULT-Tue_07_58_41-15153-575192.json diff --git a/test/testdata/evm/GeneralStateTests/stBugs/returndatacopyPythonBug_Tue_03_48_41-1432.json b/c/test/testdata/evm/GeneralStateTests/stBugs/returndatacopyPythonBug_Tue_03_48_41-1432.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stBugs/returndatacopyPythonBug_Tue_03_48_41-1432.json rename to c/test/testdata/evm/GeneralStateTests/stBugs/returndatacopyPythonBug_Tue_03_48_41-1432.json diff --git a/test/testdata/evm/GeneralStateTests/stBugs/staticcall_createfails.json b/c/test/testdata/evm/GeneralStateTests/stBugs/staticcall_createfails.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stBugs/staticcall_createfails.json rename to c/test/testdata/evm/GeneralStateTests/stBugs/staticcall_createfails.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/call_OOG_additionalGasCosts1.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/call_OOG_additionalGasCosts1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/call_OOG_additionalGasCosts1.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/call_OOG_additionalGasCosts1.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/call_OOG_additionalGasCosts2.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/call_OOG_additionalGasCosts2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/call_OOG_additionalGasCosts2.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/call_OOG_additionalGasCosts2.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcall_00.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcall_00.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcall_00.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcall_00.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcall_00_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcall_00_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcall_00_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcall_00_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcall_00_OOGE_valueTransfer.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcall_00_OOGE_valueTransfer.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcall_00_OOGE_valueTransfer.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcall_00_OOGE_valueTransfer.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcall_00_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcall_00_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcall_00_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcall_00_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_000.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_000.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_000.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_000_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_000_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_000_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_000_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_000_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_000_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_000_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_000_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_000_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_000_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_000_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_000_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_000_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_000_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_000_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_000_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_000_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_000_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_000_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_000_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcall_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_001.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_001.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_001.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_001.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_001_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_001_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_001_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_001_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_001_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_001_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_001_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_001_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_001_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_001_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_001_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_001_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_001_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_001_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_001_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_001_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_001_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_001_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_001_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_001_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcallcode_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcode_01.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcode_01.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcode_01.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcode_01.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcode_01_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcode_01_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcode_01_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcode_01_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcode_01_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcode_01_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcode_01_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcode_01_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_010.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_010.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_010.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_010.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_010_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_010_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_010_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_010_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_010_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_010_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_010_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_010_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_010_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_010_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_010_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_010_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_010_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_010_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_010_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_010_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_010_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_010_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_010_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_010_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecall_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_011.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_011.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_011.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_011.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_011_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_011_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_011_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_011_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_011_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_011_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_011_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_011_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_011_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_011_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_011_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_011_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_011_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_011_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_011_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_011_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_011_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_011_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_011_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_011_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcallcodecallcode_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodeDynamicCode.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodeDynamicCode.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodeDynamicCode.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodeDynamicCode.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodeDynamicCode2SelfCall.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodeDynamicCode2SelfCall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodeDynamicCode2SelfCall.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodeDynamicCode2SelfCall.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodeEmptycontract.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodeEmptycontract.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodeEmptycontract.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodeEmptycontract.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodeInInitcodeToEmptyContract.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodeInInitcodeToEmptyContract.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodeInInitcodeToEmptyContract.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodeInInitcodeToEmptyContract.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodeInInitcodeToExisContractWithVTransferNEMoney.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodeInInitcodeToExisContractWithVTransferNEMoney.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodeInInitcodeToExisContractWithVTransferNEMoney.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodeInInitcodeToExisContractWithVTransferNEMoney.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodeInInitcodeToExistingContract.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodeInInitcodeToExistingContract.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodeInInitcodeToExistingContract.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodeInInitcodeToExistingContract.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodeInInitcodeToExistingContractWithValueTransfer.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodeInInitcodeToExistingContractWithValueTransfer.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodeInInitcodeToExistingContractWithValueTransfer.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodeInInitcodeToExistingContractWithValueTransfer.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcode_checkPC.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcode_checkPC.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcode_checkPC.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcode_checkPC.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecall_10.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecall_10.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecall_10.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecall_10.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecall_10_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecall_10_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecall_10_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecall_10_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecall_10_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecall_10_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecall_10_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecall_10_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_100.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_100.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_100.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_100.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_100_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_100_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_100_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_100_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_100_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_100_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_100_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_100_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_100_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_100_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_100_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_100_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_100_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_100_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_100_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_100_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_100_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_100_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_100_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_100_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcall_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_101.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_101.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_101.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_101.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_101_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_101_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_101_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_101_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_101_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_101_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_101_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_101_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_101_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_101_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_101_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_101_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_101_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_101_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_101_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_101_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_101_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_101_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_101_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_101_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcallcode_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcode_11.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcode_11.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcode_11.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcode_11.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcode_11_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcode_11_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcode_11_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcode_11_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcode_11_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcode_11_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcode_11_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcode_11_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_110.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_110.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_110.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_110.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_110_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_110_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_110_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_110_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_110_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_110_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_110_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_110_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_110_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_110_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_110_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_110_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_110_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_110_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_110_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_110_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_110_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_110_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_110_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_110_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecall_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_111.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_111.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_111.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_111.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_111_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_111_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_111_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_111_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_111_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_111_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_111_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_111_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_111_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_111_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_111_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_111_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_111_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_111_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_111_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_111_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_111_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_111_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_111_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_111_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stCallCodes/callcodecallcodecallcode_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/Call1024BalanceTooLow.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/Call1024BalanceTooLow.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/Call1024BalanceTooLow.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/Call1024BalanceTooLow.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/Call1024OOG.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/Call1024OOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/Call1024OOG.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/Call1024OOG.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/Call1024PreCalls.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/Call1024PreCalls.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/Call1024PreCalls.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/Call1024PreCalls.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/CallLoseGasOOG.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/CallLoseGasOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/CallLoseGasOOG.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/CallLoseGasOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/CallRecursiveBombPreCall.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/CallRecursiveBombPreCall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/CallRecursiveBombPreCall.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/CallRecursiveBombPreCall.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/Callcode1024BalanceTooLow.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/Callcode1024BalanceTooLow.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/Callcode1024BalanceTooLow.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/Callcode1024BalanceTooLow.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/Callcode1024OOG.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/Callcode1024OOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/Callcode1024OOG.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/Callcode1024OOG.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/CallcodeLoseGasOOG.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/CallcodeLoseGasOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/CallcodeLoseGasOOG.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/CallcodeLoseGasOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callOutput1.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callOutput1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callOutput1.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callOutput1.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callOutput2.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callOutput2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callOutput2.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callOutput2.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callOutput3.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callOutput3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callOutput3.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callOutput3.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callOutput3Fail.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callOutput3Fail.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callOutput3Fail.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callOutput3Fail.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callOutput3partial.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callOutput3partial.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callOutput3partial.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callOutput3partial.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callOutput3partialFail.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callOutput3partialFail.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callOutput3partialFail.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callOutput3partialFail.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callWithHighValue.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callWithHighValue.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callWithHighValue.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callWithHighValue.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callWithHighValueAndGasOOG.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callWithHighValueAndGasOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callWithHighValueAndGasOOG.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callWithHighValueAndGasOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callWithHighValueAndOOGatTxLevel.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callWithHighValueAndOOGatTxLevel.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callWithHighValueAndOOGatTxLevel.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callWithHighValueAndOOGatTxLevel.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callWithHighValueOOGinCall.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callWithHighValueOOGinCall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callWithHighValueOOGinCall.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callWithHighValueOOGinCall.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput1.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput1.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput1.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput2.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput2.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput2.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput3.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput3.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput3.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput3Fail.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput3Fail.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput3Fail.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput3Fail.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput3partial.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput3partial.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput3partial.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput3partial.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput3partialFail.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput3partialFail.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput3partialFail.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeOutput3partialFail.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeWithHighValue.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeWithHighValue.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeWithHighValue.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeWithHighValue.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeWithHighValueAndGasOOG.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeWithHighValueAndGasOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeWithHighValueAndGasOOG.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/callcodeWithHighValueAndGasOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createFailBalanceTooLow.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createFailBalanceTooLow.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createFailBalanceTooLow.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createFailBalanceTooLow.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createInitFailBadJumpDestination.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createInitFailBadJumpDestination.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createInitFailBadJumpDestination.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createInitFailBadJumpDestination.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createInitFailStackSizeLargerThan1024.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createInitFailStackSizeLargerThan1024.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createInitFailStackSizeLargerThan1024.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createInitFailStackSizeLargerThan1024.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createInitFailStackUnderflow.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createInitFailStackUnderflow.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createInitFailStackUnderflow.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createInitFailStackUnderflow.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createInitFailUndefinedInstruction.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createInitFailUndefinedInstruction.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createInitFailUndefinedInstruction.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createInitFailUndefinedInstruction.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createInitFail_OOGduringInit.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createInitFail_OOGduringInit.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createInitFail_OOGduringInit.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createInitFail_OOGduringInit.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createInitOOGforCREATE.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createInitOOGforCREATE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createInitOOGforCREATE.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createInitOOGforCREATE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createJS_ExampleContract.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createJS_ExampleContract.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createJS_ExampleContract.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createJS_ExampleContract.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createJS_NoCollision.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createJS_NoCollision.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createJS_NoCollision.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createJS_NoCollision.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createNameRegistratorPerTxs.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createNameRegistratorPerTxs.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createNameRegistratorPerTxs.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createNameRegistratorPerTxs.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createNameRegistratorPerTxsNotEnoughGas.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createNameRegistratorPerTxsNotEnoughGas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createNameRegistratorPerTxsNotEnoughGas.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createNameRegistratorPerTxsNotEnoughGas.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createNameRegistratorPreStore1NotEnoughGas.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createNameRegistratorPreStore1NotEnoughGas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createNameRegistratorPreStore1NotEnoughGas.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createNameRegistratorPreStore1NotEnoughGas.json diff --git a/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createNameRegistratorendowmentTooHigh.json b/c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createNameRegistratorendowmentTooHigh.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createNameRegistratorendowmentTooHigh.json rename to c/test/testdata/evm/GeneralStateTests/stCallCreateCallCodeTest/createNameRegistratorendowmentTooHigh.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_001_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcallcode_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcode_01.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcode_01.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcode_01.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcode_01.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcode_01_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcode_01_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcode_01_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcode_01_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcode_01_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcode_01_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcode_01_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcode_01_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_010_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecall_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_011_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcallcodecallcode_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecall_10.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecall_10.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecall_10.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecall_10.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecall_10_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecall_10_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecall_10_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecall_10_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecall_10_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecall_10_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecall_10_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecall_10_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_100_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcall_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_101_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcallcode_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcode_11.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcode_11.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcode_11.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcode_11.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcode_11_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcode_11_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcode_11_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcode_11_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcode_11_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcode_11_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcode_11_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcode_11_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_110_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecall_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_111_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesCallCodeHomestead/callcodecallcodecallcode_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_001.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_001.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_001.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_001.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_001_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_001_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_001_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_001_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_001_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_001_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_001_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_001_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_001_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_001_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_001_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_001_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_001_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_001_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_001_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_001_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_001_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_001_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_001_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_001_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcallcode_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcode_01.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcode_01.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcode_01.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcode_01.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcode_01_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcode_01_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcode_01_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcode_01_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcode_01_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcode_01_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcode_01_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcode_01_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_010.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_010.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_010.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_010.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_010_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_010_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_010_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_010_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_010_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_010_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_010_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_010_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_010_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_010_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_010_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_010_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_010_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_010_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_010_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_010_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_010_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_010_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_010_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_010_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecall_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_011.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_011.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_011.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_011.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_011_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_011_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_011_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_011_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_011_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_011_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_011_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_011_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_011_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_011_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_011_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_011_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_011_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_011_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_011_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_011_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_011_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_011_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_011_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_011_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcallcodecallcode_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecall_10.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecall_10.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecall_10.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecall_10.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecall_10_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecall_10_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecall_10_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecall_10_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecall_10_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecall_10_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecall_10_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecall_10_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_100.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_100.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_100.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_100.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_100_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_100_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_100_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_100_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_100_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_100_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_100_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_100_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_100_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_100_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_100_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_100_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_100_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_100_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_100_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_100_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_100_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_100_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_100_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_100_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcall_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_101.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_101.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_101.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_101.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_101_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_101_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_101_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_101_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_101_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_101_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_101_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_101_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_101_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_101_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_101_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_101_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_101_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_101_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_101_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_101_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_101_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_101_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_101_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_101_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcallcode_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcode_11.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcode_11.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcode_11.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcode_11.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcode_11_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcode_11_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcode_11_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcode_11_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcode_11_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcode_11_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcode_11_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcode_11_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_110.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_110.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_110.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_110.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_110_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_110_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_110_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_110_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_110_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_110_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_110_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_110_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_110_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_110_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_110_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_110_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_110_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_110_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_110_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_110_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_110_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_110_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_110_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_110_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecall_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_111_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stCallDelegateCodesHomestead/callcodecallcodecallcode_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/Call1024BalanceTooLow.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/Call1024BalanceTooLow.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/Call1024BalanceTooLow.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/Call1024BalanceTooLow.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/Call1024PreCalls.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/Call1024PreCalls.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/Call1024PreCalls.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/Call1024PreCalls.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/Callcode1024BalanceTooLow.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/Callcode1024BalanceTooLow.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/Callcode1024BalanceTooLow.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/Callcode1024BalanceTooLow.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcall_00_OOGE_1.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcall_00_OOGE_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/callcall_00_OOGE_1.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcall_00_OOGE_1.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcall_00_OOGE_2.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcall_00_OOGE_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/callcall_00_OOGE_2.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcall_00_OOGE_2.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcall_00_OOGE_valueTransfer.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcall_00_OOGE_valueTransfer.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/callcall_00_OOGE_valueTransfer.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcall_00_OOGE_valueTransfer.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcall_000_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcall_000_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcall_000_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcall_000_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcallcode_001_OOGMAfter_1.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcallcode_001_OOGMAfter_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcallcode_001_OOGMAfter_1.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcallcode_001_OOGMAfter_1.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcallcode_001_OOGMAfter_2.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcallcode_001_OOGMAfter_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcallcode_001_OOGMAfter_2.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcallcode_001_OOGMAfter_2.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcallcode_001_OOGMAfter_3.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcallcode_001_OOGMAfter_3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcallcode_001_OOGMAfter_3.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcallcode_001_OOGMAfter_3.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcodecall_010_OOGMAfter_1.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcodecall_010_OOGMAfter_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcodecall_010_OOGMAfter_1.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcodecall_010_OOGMAfter_1.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcodecall_010_OOGMAfter_2.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcodecall_010_OOGMAfter_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcodecall_010_OOGMAfter_2.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcodecall_010_OOGMAfter_2.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcodecall_010_OOGMAfter_3.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcodecall_010_OOGMAfter_3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcodecall_010_OOGMAfter_3.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcodecall_010_OOGMAfter_3.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcodecallcode_011_OOGMAfter_1.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcodecallcode_011_OOGMAfter_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcodecallcode_011_OOGMAfter_1.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcodecallcode_011_OOGMAfter_1.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcodecallcode_011_OOGMAfter_2.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcodecallcode_011_OOGMAfter_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcodecallcode_011_OOGMAfter_2.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcallcodecallcode_011_OOGMAfter_2.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcall_100_OOGMAfter_1.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcall_100_OOGMAfter_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcall_100_OOGMAfter_1.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcall_100_OOGMAfter_1.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcall_100_OOGMAfter_2.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcall_100_OOGMAfter_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcall_100_OOGMAfter_2.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcall_100_OOGMAfter_2.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcall_100_OOGMAfter_3.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcall_100_OOGMAfter_3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcall_100_OOGMAfter_3.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcall_100_OOGMAfter_3.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcallcode_101_OOGMAfter_1.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcallcode_101_OOGMAfter_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcallcode_101_OOGMAfter_1.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcallcode_101_OOGMAfter_1.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcallcode_101_OOGMAfter_2.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcallcode_101_OOGMAfter_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcallcode_101_OOGMAfter_2.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcallcode_101_OOGMAfter_2.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcallcode_101_OOGMAfter_3.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcallcode_101_OOGMAfter_3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcallcode_101_OOGMAfter_3.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcallcode_101_OOGMAfter_3.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecall_110_OOGMAfter_1.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecall_110_OOGMAfter_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecall_110_OOGMAfter_1.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecall_110_OOGMAfter_1.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecall_110_OOGMAfter_2.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecall_110_OOGMAfter_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecall_110_OOGMAfter_2.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecall_110_OOGMAfter_2.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecall_110_OOGMAfter_3.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecall_110_OOGMAfter_3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecall_110_OOGMAfter_3.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecall_110_OOGMAfter_3.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecallcode_111_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecallcode_111_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecallcode_111_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecallcode_111_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecallcode_111_OOGMAfter_1.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecallcode_111_OOGMAfter_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecallcode_111_OOGMAfter_1.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecallcode_111_OOGMAfter_1.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecallcode_111_OOGMAfter_2.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecallcode_111_OOGMAfter_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecallcode_111_OOGMAfter_2.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecallcode_111_OOGMAfter_2.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecallcode_111_OOGMAfter_3.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecallcode_111_OOGMAfter_3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecallcode_111_OOGMAfter_3.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/callcodecallcodecallcode_111_OOGMAfter_3.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/contractCreationMakeCallThatAskMoreGasThenTransactionProvided.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/contractCreationMakeCallThatAskMoreGasThenTransactionProvided.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/contractCreationMakeCallThatAskMoreGasThenTransactionProvided.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/contractCreationMakeCallThatAskMoreGasThenTransactionProvided.json diff --git a/test/testdata/evm/GeneralStateTests/stChangedEIP150/createInitFail_OOGduringInit.json b/c/test/testdata/evm/GeneralStateTests/stChangedEIP150/createInitFail_OOGduringInit.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stChangedEIP150/createInitFail_OOGduringInit.json rename to c/test/testdata/evm/GeneralStateTests/stChangedEIP150/createInitFail_OOGduringInit.json diff --git a/test/testdata/evm/GeneralStateTests/stCodeCopyTest/ExtCodeCopyTargetRangeLongerThanCodeTests.json b/c/test/testdata/evm/GeneralStateTests/stCodeCopyTest/ExtCodeCopyTargetRangeLongerThanCodeTests.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCodeCopyTest/ExtCodeCopyTargetRangeLongerThanCodeTests.json rename to c/test/testdata/evm/GeneralStateTests/stCodeCopyTest/ExtCodeCopyTargetRangeLongerThanCodeTests.json diff --git a/test/testdata/evm/GeneralStateTests/stCodeCopyTest/ExtCodeCopyTests.json b/c/test/testdata/evm/GeneralStateTests/stCodeCopyTest/ExtCodeCopyTests.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCodeCopyTest/ExtCodeCopyTests.json rename to c/test/testdata/evm/GeneralStateTests/stCodeCopyTest/ExtCodeCopyTests.json diff --git a/test/testdata/evm/GeneralStateTests/stCodeSizeLimit/codesizeInit.json b/c/test/testdata/evm/GeneralStateTests/stCodeSizeLimit/codesizeInit.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCodeSizeLimit/codesizeInit.json rename to c/test/testdata/evm/GeneralStateTests/stCodeSizeLimit/codesizeInit.json diff --git a/test/testdata/evm/GeneralStateTests/stCodeSizeLimit/codesizeOOGInvalidSize.json b/c/test/testdata/evm/GeneralStateTests/stCodeSizeLimit/codesizeOOGInvalidSize.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCodeSizeLimit/codesizeOOGInvalidSize.json rename to c/test/testdata/evm/GeneralStateTests/stCodeSizeLimit/codesizeOOGInvalidSize.json diff --git a/test/testdata/evm/GeneralStateTests/stCodeSizeLimit/codesizeValid.json b/c/test/testdata/evm/GeneralStateTests/stCodeSizeLimit/codesizeValid.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCodeSizeLimit/codesizeValid.json rename to c/test/testdata/evm/GeneralStateTests/stCodeSizeLimit/codesizeValid.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/CREATE2_Bounds.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/CREATE2_Bounds.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/CREATE2_Bounds.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/CREATE2_Bounds.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/CREATE2_Bounds2.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/CREATE2_Bounds2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/CREATE2_Bounds2.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/CREATE2_Bounds2.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/CREATE2_Bounds3.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/CREATE2_Bounds3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/CREATE2_Bounds3.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/CREATE2_Bounds3.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/CREATE2_ContractSuicideDuringInit_ThenStoreThenReturn.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/CREATE2_ContractSuicideDuringInit_ThenStoreThenReturn.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/CREATE2_ContractSuicideDuringInit_ThenStoreThenReturn.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/CREATE2_ContractSuicideDuringInit_ThenStoreThenReturn.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/CREATE2_Suicide.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/CREATE2_Suicide.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/CREATE2_Suicide.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/CREATE2_Suicide.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCode.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCode.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCode.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCode.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCodeReturndata.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCodeReturndata.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCodeReturndata.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCodeReturndata.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCodeReturndata2.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCodeReturndata2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCodeReturndata2.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCodeReturndata2.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCodeReturndata3.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCodeReturndata3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCodeReturndata3.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCodeReturndata3.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCodeReturndataSize.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCodeReturndataSize.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCodeReturndataSize.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCodeReturndataSize.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCodeRevert.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCodeRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCodeRevert.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCodeRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCodeRevert2.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCodeRevert2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCodeRevert2.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/Create2OOGafterInitCodeRevert2.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/Create2OnDepth1023.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/Create2OnDepth1023.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/Create2OnDepth1023.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/Create2OnDepth1023.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/Create2OnDepth1024.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/Create2OnDepth1024.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/Create2OnDepth1024.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/Create2OnDepth1024.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/Create2Recursive.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/Create2Recursive.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/Create2Recursive.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/Create2Recursive.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/CreateMessageReverted.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/CreateMessageReverted.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/CreateMessageReverted.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/CreateMessageReverted.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/CreateMessageRevertedOOGInInit.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/CreateMessageRevertedOOGInInit.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/CreateMessageRevertedOOGInInit.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/CreateMessageRevertedOOGInInit.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/RevertDepthCreate2OOG.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/RevertDepthCreate2OOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/RevertDepthCreate2OOG.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/RevertDepthCreate2OOG.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/RevertDepthCreateAddressCollision.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/RevertDepthCreateAddressCollision.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/RevertDepthCreateAddressCollision.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/RevertDepthCreateAddressCollision.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/RevertInCreateInInitCreate2.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/RevertInCreateInInitCreate2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/RevertInCreateInInitCreate2.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/RevertInCreateInInitCreate2.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/RevertOpcodeCreate.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/RevertOpcodeCreate.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/RevertOpcodeCreate.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/RevertOpcodeCreate.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/RevertOpcodeInCreateReturnsCreate2.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/RevertOpcodeInCreateReturnsCreate2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/RevertOpcodeInCreateReturnsCreate2.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/RevertOpcodeInCreateReturnsCreate2.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/call_outsize_then_create2_successful_then_returndatasize.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/call_outsize_then_create2_successful_then_returndatasize.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/call_outsize_then_create2_successful_then_returndatasize.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/call_outsize_then_create2_successful_then_returndatasize.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/call_then_create2_successful_then_returndatasize.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/call_then_create2_successful_then_returndatasize.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/call_then_create2_successful_then_returndatasize.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/call_then_create2_successful_then_returndatasize.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/create2InitCodes.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/create2InitCodes.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/create2InitCodes.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/create2InitCodes.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/create2SmartInitCode.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/create2SmartInitCode.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/create2SmartInitCode.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/create2SmartInitCode.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/create2callPrecompiles.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/create2callPrecompiles.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/create2callPrecompiles.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/create2callPrecompiles.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/create2checkFieldsInInitcode.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/create2checkFieldsInInitcode.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/create2checkFieldsInInitcode.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/create2checkFieldsInInitcode.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionBalance.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionBalance.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/create2collisionBalance.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionBalance.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionCode.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionCode.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/create2collisionCode.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionCode.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionCode2.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionCode2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/create2collisionCode2.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionCode2.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionNonce.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionNonce.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/create2collisionNonce.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionNonce.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionSelfdestructed.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionSelfdestructed.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/create2collisionSelfdestructed.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionSelfdestructed.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionSelfdestructed2.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionSelfdestructed2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/create2collisionSelfdestructed2.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionSelfdestructed2.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionSelfdestructedOOG.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionSelfdestructedOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/create2collisionSelfdestructedOOG.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionSelfdestructedOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionSelfdestructedRevert.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionSelfdestructedRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/create2collisionSelfdestructedRevert.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionSelfdestructedRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionStorage.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionStorage.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/create2collisionStorage.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/create2collisionStorage.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/create2noCash.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/create2noCash.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/create2noCash.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/create2noCash.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/returndatacopy_0_0_following_successful_create.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/returndatacopy_0_0_following_successful_create.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/returndatacopy_0_0_following_successful_create.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/returndatacopy_0_0_following_successful_create.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/returndatacopy_afterFailing_create.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/returndatacopy_afterFailing_create.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/returndatacopy_afterFailing_create.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/returndatacopy_afterFailing_create.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/returndatacopy_following_create.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/returndatacopy_following_create.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/returndatacopy_following_create.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/returndatacopy_following_create.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/returndatacopy_following_revert_in_create.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/returndatacopy_following_revert_in_create.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/returndatacopy_following_revert_in_create.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/returndatacopy_following_revert_in_create.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/returndatacopy_following_successful_create.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/returndatacopy_following_successful_create.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/returndatacopy_following_successful_create.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/returndatacopy_following_successful_create.json diff --git a/test/testdata/evm/GeneralStateTests/stCreate2/returndatasize_following_successful_create.json b/c/test/testdata/evm/GeneralStateTests/stCreate2/returndatasize_following_successful_create.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreate2/returndatasize_following_successful_create.json rename to c/test/testdata/evm/GeneralStateTests/stCreate2/returndatasize_following_successful_create.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_AcreateB_BSuicide_BStore.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_AcreateB_BSuicide_BStore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_AcreateB_BSuicide_BStore.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_AcreateB_BSuicide_BStore.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_ContractRETURNBigOffset.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_ContractRETURNBigOffset.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_ContractRETURNBigOffset.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_ContractRETURNBigOffset.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_ContractSSTOREDuringInit.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_ContractSSTOREDuringInit.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_ContractSSTOREDuringInit.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_ContractSSTOREDuringInit.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_ContractSuicideDuringInit.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_ContractSuicideDuringInit.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_ContractSuicideDuringInit.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_ContractSuicideDuringInit.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_ContractSuicideDuringInit_ThenStoreThenReturn.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_ContractSuicideDuringInit_ThenStoreThenReturn.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_ContractSuicideDuringInit_ThenStoreThenReturn.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_ContractSuicideDuringInit_ThenStoreThenReturn.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_ContractSuicideDuringInit_WithValue.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_ContractSuicideDuringInit_WithValue.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_ContractSuicideDuringInit_WithValue.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_ContractSuicideDuringInit_WithValue.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_ContractSuicideDuringInit_WithValueToItself.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_ContractSuicideDuringInit_WithValueToItself.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_ContractSuicideDuringInit_WithValueToItself.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_ContractSuicideDuringInit_WithValueToItself.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EContractCreateEContractInInit_Tr.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EContractCreateEContractInInit_Tr.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EContractCreateEContractInInit_Tr.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EContractCreateEContractInInit_Tr.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EContractCreateNEContractInInitOOG_Tr.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EContractCreateNEContractInInitOOG_Tr.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EContractCreateNEContractInInitOOG_Tr.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EContractCreateNEContractInInitOOG_Tr.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EContractCreateNEContractInInit_Tr.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EContractCreateNEContractInInit_Tr.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EContractCreateNEContractInInit_Tr.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EContractCreateNEContractInInit_Tr.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EContract_ThenCALLToNonExistentAcc.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EContract_ThenCALLToNonExistentAcc.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EContract_ThenCALLToNonExistentAcc.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EContract_ThenCALLToNonExistentAcc.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContract.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContract.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContract.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContract.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContractAndCallIt_0wei.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContractAndCallIt_0wei.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContractAndCallIt_0wei.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContractAndCallIt_0wei.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContractAndCallIt_1wei.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContractAndCallIt_1wei.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContractAndCallIt_1wei.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContractAndCallIt_1wei.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContractWithBalance.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContractWithBalance.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContractWithBalance.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContractWithBalance.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContractWithStorage.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContractWithStorage.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContractWithStorage.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContractWithStorage.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContractWithStorageAndCallIt_0wei.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContractWithStorageAndCallIt_0wei.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContractWithStorageAndCallIt_0wei.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContractWithStorageAndCallIt_0wei.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContractWithStorageAndCallIt_1wei.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContractWithStorageAndCallIt_1wei.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContractWithStorageAndCallIt_1wei.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_EmptyContractWithStorageAndCallIt_1wei.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_empty000CreateinInitCode_Transaction.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_empty000CreateinInitCode_Transaction.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_empty000CreateinInitCode_Transaction.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CREATE_empty000CreateinInitCode_Transaction.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CreateCollisionToEmpty.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CreateCollisionToEmpty.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CreateCollisionToEmpty.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CreateCollisionToEmpty.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCode.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCode.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCode.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCode.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeReturndata.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeReturndata.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeReturndata.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeReturndata.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeReturndata2.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeReturndata2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeReturndata2.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeReturndata2.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeReturndata3.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeReturndata3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeReturndata3.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeReturndata3.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeReturndataSize.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeReturndataSize.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeReturndataSize.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeReturndataSize.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeRevert.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeRevert.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeRevert2.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeRevert2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeRevert2.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/CreateOOGafterInitCodeRevert2.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/TransactionCollisionToEmpty.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/TransactionCollisionToEmpty.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/TransactionCollisionToEmpty.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/TransactionCollisionToEmpty.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/TransactionCollisionToEmptyButCode.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/TransactionCollisionToEmptyButCode.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/TransactionCollisionToEmptyButCode.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/TransactionCollisionToEmptyButCode.json diff --git a/test/testdata/evm/GeneralStateTests/stCreateTest/TransactionCollisionToEmptyButNonce.json b/c/test/testdata/evm/GeneralStateTests/stCreateTest/TransactionCollisionToEmptyButNonce.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stCreateTest/TransactionCollisionToEmptyButNonce.json rename to c/test/testdata/evm/GeneralStateTests/stCreateTest/TransactionCollisionToEmptyButNonce.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/Call1024BalanceTooLow.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/Call1024BalanceTooLow.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/Call1024BalanceTooLow.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/Call1024BalanceTooLow.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/Call1024OOG.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/Call1024OOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/Call1024OOG.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/Call1024OOG.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/Call1024PreCalls.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/Call1024PreCalls.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/Call1024PreCalls.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/Call1024PreCalls.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/CallLoseGasOOG.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/CallLoseGasOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/CallLoseGasOOG.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/CallLoseGasOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/CallRecursiveBombPreCall.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/CallRecursiveBombPreCall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/CallRecursiveBombPreCall.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/CallRecursiveBombPreCall.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/CallcodeLoseGasOOG.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/CallcodeLoseGasOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/CallcodeLoseGasOOG.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/CallcodeLoseGasOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/Delegatecall1024.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/Delegatecall1024.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/Delegatecall1024.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/Delegatecall1024.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/Delegatecall1024OOG.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/Delegatecall1024OOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/Delegatecall1024OOG.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/Delegatecall1024OOG.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callOutput1.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callOutput1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callOutput1.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callOutput1.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callOutput2.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callOutput2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callOutput2.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callOutput2.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callOutput3.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callOutput3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callOutput3.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callOutput3.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callOutput3Fail.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callOutput3Fail.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callOutput3Fail.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callOutput3Fail.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callOutput3partial.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callOutput3partial.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callOutput3partial.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callOutput3partial.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callOutput3partialFail.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callOutput3partialFail.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callOutput3partialFail.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callOutput3partialFail.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callWithHighValueAndGasOOG.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callWithHighValueAndGasOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callWithHighValueAndGasOOG.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callWithHighValueAndGasOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput1.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput1.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput1.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput2.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput2.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput2.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput3.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput3.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput3.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput3Fail.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput3Fail.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput3Fail.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput3Fail.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput3partial.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput3partial.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput3partial.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput3partial.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput3partialFail.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput3partialFail.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput3partialFail.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeOutput3partialFail.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeWithHighValueAndGasOOG.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeWithHighValueAndGasOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeWithHighValueAndGasOOG.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/callcodeWithHighValueAndGasOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/deleagateCallAfterValueTransfer.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/deleagateCallAfterValueTransfer.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/deleagateCallAfterValueTransfer.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/deleagateCallAfterValueTransfer.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallAndOOGatTxLevel.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallAndOOGatTxLevel.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallAndOOGatTxLevel.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallAndOOGatTxLevel.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallBasic.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallBasic.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallBasic.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallBasic.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallEmptycontract.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallEmptycontract.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallEmptycontract.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallEmptycontract.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallInInitcodeToEmptyContract.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallInInitcodeToEmptyContract.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallInInitcodeToEmptyContract.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallInInitcodeToEmptyContract.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallInInitcodeToExistingContract.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallInInitcodeToExistingContract.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallInInitcodeToExistingContract.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallInInitcodeToExistingContract.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallInInitcodeToExistingContractOOG.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallInInitcodeToExistingContractOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallInInitcodeToExistingContractOOG.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallInInitcodeToExistingContractOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallOOGinCall.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallOOGinCall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallOOGinCall.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallOOGinCall.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallSenderCheck.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallSenderCheck.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallSenderCheck.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallSenderCheck.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallValueCheck.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallValueCheck.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallValueCheck.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecallValueCheck.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecodeDynamicCode.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecodeDynamicCode.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecodeDynamicCode.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecodeDynamicCode.json diff --git a/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecodeDynamicCode2SelfCall.json b/c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecodeDynamicCode2SelfCall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecodeDynamicCode2SelfCall.json rename to c/test/testdata/evm/GeneralStateTests/stDelegatecallTestHomestead/delegatecodeDynamicCode2SelfCall.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150Specific/CallAndCallcodeConsumeMoreGasThenTransactionHas.json b/c/test/testdata/evm/GeneralStateTests/stEIP150Specific/CallAndCallcodeConsumeMoreGasThenTransactionHas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150Specific/CallAndCallcodeConsumeMoreGasThenTransactionHas.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150Specific/CallAndCallcodeConsumeMoreGasThenTransactionHas.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150Specific/CallAskMoreGasOnDepth2ThenTransactionHas.json b/c/test/testdata/evm/GeneralStateTests/stEIP150Specific/CallAskMoreGasOnDepth2ThenTransactionHas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150Specific/CallAskMoreGasOnDepth2ThenTransactionHas.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150Specific/CallAskMoreGasOnDepth2ThenTransactionHas.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150Specific/CallGoesOOGOnSecondLevel.json b/c/test/testdata/evm/GeneralStateTests/stEIP150Specific/CallGoesOOGOnSecondLevel.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150Specific/CallGoesOOGOnSecondLevel.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150Specific/CallGoesOOGOnSecondLevel.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150Specific/CallGoesOOGOnSecondLevel2.json b/c/test/testdata/evm/GeneralStateTests/stEIP150Specific/CallGoesOOGOnSecondLevel2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150Specific/CallGoesOOGOnSecondLevel2.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150Specific/CallGoesOOGOnSecondLevel2.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150Specific/CreateAndGasInsideCreate.json b/c/test/testdata/evm/GeneralStateTests/stEIP150Specific/CreateAndGasInsideCreate.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150Specific/CreateAndGasInsideCreate.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150Specific/CreateAndGasInsideCreate.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150Specific/DelegateCallOnEIP.json b/c/test/testdata/evm/GeneralStateTests/stEIP150Specific/DelegateCallOnEIP.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150Specific/DelegateCallOnEIP.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150Specific/DelegateCallOnEIP.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150Specific/ExecuteCallThatAskForeGasThenTrabsactionHas.json b/c/test/testdata/evm/GeneralStateTests/stEIP150Specific/ExecuteCallThatAskForeGasThenTrabsactionHas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150Specific/ExecuteCallThatAskForeGasThenTrabsactionHas.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150Specific/ExecuteCallThatAskForeGasThenTrabsactionHas.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150Specific/NewGasPriceForCodes.json b/c/test/testdata/evm/GeneralStateTests/stEIP150Specific/NewGasPriceForCodes.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150Specific/NewGasPriceForCodes.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150Specific/NewGasPriceForCodes.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150Specific/SuicideToExistingContract.json b/c/test/testdata/evm/GeneralStateTests/stEIP150Specific/SuicideToExistingContract.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150Specific/SuicideToExistingContract.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150Specific/SuicideToExistingContract.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150Specific/SuicideToNotExistingContract.json b/c/test/testdata/evm/GeneralStateTests/stEIP150Specific/SuicideToNotExistingContract.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150Specific/SuicideToNotExistingContract.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150Specific/SuicideToNotExistingContract.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150Specific/Transaction64Rule_d64e0.json b/c/test/testdata/evm/GeneralStateTests/stEIP150Specific/Transaction64Rule_d64e0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150Specific/Transaction64Rule_d64e0.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150Specific/Transaction64Rule_d64e0.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150Specific/Transaction64Rule_d64m1.json b/c/test/testdata/evm/GeneralStateTests/stEIP150Specific/Transaction64Rule_d64m1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150Specific/Transaction64Rule_d64m1.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150Specific/Transaction64Rule_d64m1.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150Specific/Transaction64Rule_d64p1.json b/c/test/testdata/evm/GeneralStateTests/stEIP150Specific/Transaction64Rule_d64p1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150Specific/Transaction64Rule_d64p1.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150Specific/Transaction64Rule_d64p1.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawBalanceGas.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawBalanceGas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawBalanceGas.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawBalanceGas.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGas.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGas.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGas.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasAsk.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasAsk.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasAsk.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasAsk.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasMemory.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasMemory.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasMemory.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasMemory.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasMemoryAsk.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasMemoryAsk.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasMemoryAsk.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasMemoryAsk.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasValueTransfer.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasValueTransfer.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasValueTransfer.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasValueTransfer.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasValueTransferAsk.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasValueTransferAsk.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasValueTransferAsk.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasValueTransferAsk.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasValueTransferMemory.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasValueTransferMemory.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasValueTransferMemory.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasValueTransferMemory.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasValueTransferMemoryAsk.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasValueTransferMemoryAsk.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasValueTransferMemoryAsk.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallCodeGasValueTransferMemoryAsk.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGas.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGas.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGas.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGasAsk.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGasAsk.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGasAsk.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGasAsk.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGasValueTransfer.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGasValueTransfer.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGasValueTransfer.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGasValueTransfer.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGasValueTransferAsk.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGasValueTransferAsk.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGasValueTransferAsk.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGasValueTransferAsk.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGasValueTransferMemory.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGasValueTransferMemory.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGasValueTransferMemory.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGasValueTransferMemory.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGasValueTransferMemoryAsk.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGasValueTransferMemoryAsk.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGasValueTransferMemoryAsk.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallGasValueTransferMemoryAsk.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallMemoryGas.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallMemoryGas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallMemoryGas.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallMemoryGas.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallMemoryGasAsk.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallMemoryGasAsk.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallMemoryGasAsk.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCallMemoryGasAsk.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCreateFailGasValueTransfer.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCreateFailGasValueTransfer.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCreateFailGasValueTransfer.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCreateFailGasValueTransfer.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCreateFailGasValueTransfer2.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCreateFailGasValueTransfer2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCreateFailGasValueTransfer2.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCreateFailGasValueTransfer2.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCreateGas.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCreateGas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCreateGas.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCreateGas.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCreateGasMemory.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCreateGasMemory.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCreateGasMemory.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCreateGasMemory.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCreateGasValueTransfer.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCreateGasValueTransfer.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCreateGasValueTransfer.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCreateGasValueTransfer.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCreateGasValueTransferMemory.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCreateGasValueTransferMemory.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCreateGasValueTransferMemory.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawCreateGasValueTransferMemory.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawDelegateCallGas.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawDelegateCallGas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawDelegateCallGas.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawDelegateCallGas.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawDelegateCallGasAsk.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawDelegateCallGasAsk.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawDelegateCallGasAsk.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawDelegateCallGasAsk.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawDelegateCallGasMemory.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawDelegateCallGasMemory.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawDelegateCallGasMemory.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawDelegateCallGasMemory.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawDelegateCallGasMemoryAsk.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawDelegateCallGasMemoryAsk.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawDelegateCallGasMemoryAsk.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawDelegateCallGasMemoryAsk.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawExtCodeCopyGas.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawExtCodeCopyGas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawExtCodeCopyGas.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawExtCodeCopyGas.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawExtCodeCopyMemoryGas.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawExtCodeCopyMemoryGas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawExtCodeCopyMemoryGas.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawExtCodeCopyMemoryGas.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawExtCodeSizeGas.json b/c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawExtCodeSizeGas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawExtCodeSizeGas.json rename to c/test/testdata/evm/GeneralStateTests/stEIP150singleCodeGasPrices/RawExtCodeSizeGas.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP158Specific/CALL_OneVCallSuicide.json b/c/test/testdata/evm/GeneralStateTests/stEIP158Specific/CALL_OneVCallSuicide.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP158Specific/CALL_OneVCallSuicide.json rename to c/test/testdata/evm/GeneralStateTests/stEIP158Specific/CALL_OneVCallSuicide.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP158Specific/CALL_ZeroVCallSuicide.json b/c/test/testdata/evm/GeneralStateTests/stEIP158Specific/CALL_ZeroVCallSuicide.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP158Specific/CALL_ZeroVCallSuicide.json rename to c/test/testdata/evm/GeneralStateTests/stEIP158Specific/CALL_ZeroVCallSuicide.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP158Specific/EXP_Empty.json b/c/test/testdata/evm/GeneralStateTests/stEIP158Specific/EXP_Empty.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP158Specific/EXP_Empty.json rename to c/test/testdata/evm/GeneralStateTests/stEIP158Specific/EXP_Empty.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP158Specific/EXTCODESIZE_toEpmty.json b/c/test/testdata/evm/GeneralStateTests/stEIP158Specific/EXTCODESIZE_toEpmty.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP158Specific/EXTCODESIZE_toEpmty.json rename to c/test/testdata/evm/GeneralStateTests/stEIP158Specific/EXTCODESIZE_toEpmty.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP158Specific/EXTCODESIZE_toNonExistent.json b/c/test/testdata/evm/GeneralStateTests/stEIP158Specific/EXTCODESIZE_toNonExistent.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP158Specific/EXTCODESIZE_toNonExistent.json rename to c/test/testdata/evm/GeneralStateTests/stEIP158Specific/EXTCODESIZE_toNonExistent.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP158Specific/callToEmptyThenCallError.json b/c/test/testdata/evm/GeneralStateTests/stEIP158Specific/callToEmptyThenCallError.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP158Specific/callToEmptyThenCallError.json rename to c/test/testdata/evm/GeneralStateTests/stEIP158Specific/callToEmptyThenCallError.json diff --git a/test/testdata/evm/GeneralStateTests/stEIP158Specific/vitalikTransactionTest.json b/c/test/testdata/evm/GeneralStateTests/stEIP158Specific/vitalikTransactionTest.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEIP158Specific/vitalikTransactionTest.json rename to c/test/testdata/evm/GeneralStateTests/stEIP158Specific/vitalikTransactionTest.json diff --git a/test/testdata/evm/GeneralStateTests/stEWASMTests/.gitkeep b/c/test/testdata/evm/GeneralStateTests/stEWASMTests/.gitkeep similarity index 100% rename from test/testdata/evm/GeneralStateTests/stEWASMTests/.gitkeep rename to c/test/testdata/evm/GeneralStateTests/stEWASMTests/.gitkeep diff --git a/test/testdata/evm/GeneralStateTests/stExample/add11.json b/c/test/testdata/evm/GeneralStateTests/stExample/add11.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExample/add11.json rename to c/test/testdata/evm/GeneralStateTests/stExample/add11.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/codeCopyZero.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/codeCopyZero.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/codeCopyZero.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/codeCopyZero.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/dynamicAccountOverwriteEmpty.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/dynamicAccountOverwriteEmpty.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/dynamicAccountOverwriteEmpty.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/dynamicAccountOverwriteEmpty.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeCopyBounds.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeCopyBounds.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeCopyBounds.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeCopyBounds.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashAccountWithoutCode.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashAccountWithoutCode.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashAccountWithoutCode.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashAccountWithoutCode.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashCALL.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashCALL.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashCALL.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashCALL.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashCALLCODE.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashCALLCODE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashCALLCODE.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashCALLCODE.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashChangedAccount.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashChangedAccount.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashChangedAccount.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashChangedAccount.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashCreatedAndDeletedAccount.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashCreatedAndDeletedAccount.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashCreatedAndDeletedAccount.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashCreatedAndDeletedAccount.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashCreatedAndDeletedAccountCall.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashCreatedAndDeletedAccountCall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashCreatedAndDeletedAccountCall.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashCreatedAndDeletedAccountCall.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashCreatedAndDeletedAccountRecheckInOuterCall.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashCreatedAndDeletedAccountRecheckInOuterCall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashCreatedAndDeletedAccountRecheckInOuterCall.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashCreatedAndDeletedAccountRecheckInOuterCall.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashCreatedAndDeletedAccountStaticCall.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashCreatedAndDeletedAccountStaticCall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashCreatedAndDeletedAccountStaticCall.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashCreatedAndDeletedAccountStaticCall.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDELEGATECALL.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDELEGATECALL.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDELEGATECALL.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDELEGATECALL.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDeletedAccount.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDeletedAccount.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDeletedAccount.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDeletedAccount.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDeletedAccount1.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDeletedAccount1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDeletedAccount1.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDeletedAccount1.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDeletedAccount2.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDeletedAccount2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDeletedAccount2.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDeletedAccount2.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDeletedAccount3.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDeletedAccount3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDeletedAccount3.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDeletedAccount3.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDeletedAccount4.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDeletedAccount4.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDeletedAccount4.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDeletedAccount4.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDynamicArgument.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDynamicArgument.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDynamicArgument.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashDynamicArgument.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashInInitCode.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashInInitCode.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashInInitCode.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashInInitCode.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashMaxCodeSize.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashMaxCodeSize.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashMaxCodeSize.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashMaxCodeSize.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashNewAccount.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashNewAccount.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashNewAccount.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashNewAccount.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashNonExistingAccount.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashNonExistingAccount.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashNonExistingAccount.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashNonExistingAccount.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashPrecompiles.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashPrecompiles.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashPrecompiles.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashPrecompiles.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashSTATICCALL.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashSTATICCALL.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashSTATICCALL.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashSTATICCALL.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashSelf.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashSelf.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashSelf.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashSelf.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashSelfInInit.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashSelfInInit.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashSelfInInit.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashSelfInInit.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashSubcallOOG.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashSubcallOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashSubcallOOG.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashSubcallOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashSubcallSuicide.json b/c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashSubcallSuicide.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashSubcallSuicide.json rename to c/test/testdata/evm/GeneralStateTests/stExtCodeHash/extCodeHashSubcallSuicide.json diff --git a/test/testdata/evm/GeneralStateTests/stHomesteadSpecific/contractCreationOOGdontLeaveEmptyContract.json b/c/test/testdata/evm/GeneralStateTests/stHomesteadSpecific/contractCreationOOGdontLeaveEmptyContract.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stHomesteadSpecific/contractCreationOOGdontLeaveEmptyContract.json rename to c/test/testdata/evm/GeneralStateTests/stHomesteadSpecific/contractCreationOOGdontLeaveEmptyContract.json diff --git a/test/testdata/evm/GeneralStateTests/stHomesteadSpecific/contractCreationOOGdontLeaveEmptyContractViaTransaction.json b/c/test/testdata/evm/GeneralStateTests/stHomesteadSpecific/contractCreationOOGdontLeaveEmptyContractViaTransaction.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stHomesteadSpecific/contractCreationOOGdontLeaveEmptyContractViaTransaction.json rename to c/test/testdata/evm/GeneralStateTests/stHomesteadSpecific/contractCreationOOGdontLeaveEmptyContractViaTransaction.json diff --git a/test/testdata/evm/GeneralStateTests/stHomesteadSpecific/createContractViaContract.json b/c/test/testdata/evm/GeneralStateTests/stHomesteadSpecific/createContractViaContract.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stHomesteadSpecific/createContractViaContract.json rename to c/test/testdata/evm/GeneralStateTests/stHomesteadSpecific/createContractViaContract.json diff --git a/test/testdata/evm/GeneralStateTests/stHomesteadSpecific/createContractViaContractOOGInitCode.json b/c/test/testdata/evm/GeneralStateTests/stHomesteadSpecific/createContractViaContractOOGInitCode.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stHomesteadSpecific/createContractViaContractOOGInitCode.json rename to c/test/testdata/evm/GeneralStateTests/stHomesteadSpecific/createContractViaContractOOGInitCode.json diff --git a/test/testdata/evm/GeneralStateTests/stHomesteadSpecific/createContractViaTransactionCost53000.json b/c/test/testdata/evm/GeneralStateTests/stHomesteadSpecific/createContractViaTransactionCost53000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stHomesteadSpecific/createContractViaTransactionCost53000.json rename to c/test/testdata/evm/GeneralStateTests/stHomesteadSpecific/createContractViaTransactionCost53000.json diff --git a/test/testdata/evm/GeneralStateTests/stInitCodeTest/CallContractToCreateContractAndCallItOOG.json b/c/test/testdata/evm/GeneralStateTests/stInitCodeTest/CallContractToCreateContractAndCallItOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stInitCodeTest/CallContractToCreateContractAndCallItOOG.json rename to c/test/testdata/evm/GeneralStateTests/stInitCodeTest/CallContractToCreateContractAndCallItOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stInitCodeTest/CallContractToCreateContractNoCash.json b/c/test/testdata/evm/GeneralStateTests/stInitCodeTest/CallContractToCreateContractNoCash.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stInitCodeTest/CallContractToCreateContractNoCash.json rename to c/test/testdata/evm/GeneralStateTests/stInitCodeTest/CallContractToCreateContractNoCash.json diff --git a/test/testdata/evm/GeneralStateTests/stInitCodeTest/CallContractToCreateContractOOG.json b/c/test/testdata/evm/GeneralStateTests/stInitCodeTest/CallContractToCreateContractOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stInitCodeTest/CallContractToCreateContractOOG.json rename to c/test/testdata/evm/GeneralStateTests/stInitCodeTest/CallContractToCreateContractOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stInitCodeTest/CallContractToCreateContractOOGBonusGas.json b/c/test/testdata/evm/GeneralStateTests/stInitCodeTest/CallContractToCreateContractOOGBonusGas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stInitCodeTest/CallContractToCreateContractOOGBonusGas.json rename to c/test/testdata/evm/GeneralStateTests/stInitCodeTest/CallContractToCreateContractOOGBonusGas.json diff --git a/test/testdata/evm/GeneralStateTests/stInitCodeTest/CallContractToCreateContractWhichWouldCreateContractIfCalled.json b/c/test/testdata/evm/GeneralStateTests/stInitCodeTest/CallContractToCreateContractWhichWouldCreateContractIfCalled.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stInitCodeTest/CallContractToCreateContractWhichWouldCreateContractIfCalled.json rename to c/test/testdata/evm/GeneralStateTests/stInitCodeTest/CallContractToCreateContractWhichWouldCreateContractIfCalled.json diff --git a/test/testdata/evm/GeneralStateTests/stInitCodeTest/CallContractToCreateContractWhichWouldCreateContractInInitCode.json b/c/test/testdata/evm/GeneralStateTests/stInitCodeTest/CallContractToCreateContractWhichWouldCreateContractInInitCode.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stInitCodeTest/CallContractToCreateContractWhichWouldCreateContractInInitCode.json rename to c/test/testdata/evm/GeneralStateTests/stInitCodeTest/CallContractToCreateContractWhichWouldCreateContractInInitCode.json diff --git a/test/testdata/evm/GeneralStateTests/stInitCodeTest/CallRecursiveContract.json b/c/test/testdata/evm/GeneralStateTests/stInitCodeTest/CallRecursiveContract.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stInitCodeTest/CallRecursiveContract.json rename to c/test/testdata/evm/GeneralStateTests/stInitCodeTest/CallRecursiveContract.json diff --git a/test/testdata/evm/GeneralStateTests/stInitCodeTest/CallTheContractToCreateEmptyContract.json b/c/test/testdata/evm/GeneralStateTests/stInitCodeTest/CallTheContractToCreateEmptyContract.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stInitCodeTest/CallTheContractToCreateEmptyContract.json rename to c/test/testdata/evm/GeneralStateTests/stInitCodeTest/CallTheContractToCreateEmptyContract.json diff --git a/test/testdata/evm/GeneralStateTests/stInitCodeTest/NotEnoughCashContractCreation.json b/c/test/testdata/evm/GeneralStateTests/stInitCodeTest/NotEnoughCashContractCreation.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stInitCodeTest/NotEnoughCashContractCreation.json rename to c/test/testdata/evm/GeneralStateTests/stInitCodeTest/NotEnoughCashContractCreation.json diff --git a/test/testdata/evm/GeneralStateTests/stInitCodeTest/OutOfGasContractCreation.json b/c/test/testdata/evm/GeneralStateTests/stInitCodeTest/OutOfGasContractCreation.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stInitCodeTest/OutOfGasContractCreation.json rename to c/test/testdata/evm/GeneralStateTests/stInitCodeTest/OutOfGasContractCreation.json diff --git a/test/testdata/evm/GeneralStateTests/stInitCodeTest/OutOfGasPrefundedContractCreation.json b/c/test/testdata/evm/GeneralStateTests/stInitCodeTest/OutOfGasPrefundedContractCreation.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stInitCodeTest/OutOfGasPrefundedContractCreation.json rename to c/test/testdata/evm/GeneralStateTests/stInitCodeTest/OutOfGasPrefundedContractCreation.json diff --git a/test/testdata/evm/GeneralStateTests/stInitCodeTest/ReturnTest.json b/c/test/testdata/evm/GeneralStateTests/stInitCodeTest/ReturnTest.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stInitCodeTest/ReturnTest.json rename to c/test/testdata/evm/GeneralStateTests/stInitCodeTest/ReturnTest.json diff --git a/test/testdata/evm/GeneralStateTests/stInitCodeTest/ReturnTest2.json b/c/test/testdata/evm/GeneralStateTests/stInitCodeTest/ReturnTest2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stInitCodeTest/ReturnTest2.json rename to c/test/testdata/evm/GeneralStateTests/stInitCodeTest/ReturnTest2.json diff --git a/test/testdata/evm/GeneralStateTests/stInitCodeTest/StackUnderFlowContractCreation.json b/c/test/testdata/evm/GeneralStateTests/stInitCodeTest/StackUnderFlowContractCreation.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stInitCodeTest/StackUnderFlowContractCreation.json rename to c/test/testdata/evm/GeneralStateTests/stInitCodeTest/StackUnderFlowContractCreation.json diff --git a/test/testdata/evm/GeneralStateTests/stInitCodeTest/TransactionCreateAutoSuicideContract.json b/c/test/testdata/evm/GeneralStateTests/stInitCodeTest/TransactionCreateAutoSuicideContract.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stInitCodeTest/TransactionCreateAutoSuicideContract.json rename to c/test/testdata/evm/GeneralStateTests/stInitCodeTest/TransactionCreateAutoSuicideContract.json diff --git a/test/testdata/evm/GeneralStateTests/stInitCodeTest/TransactionCreateRandomInitCode.json b/c/test/testdata/evm/GeneralStateTests/stInitCodeTest/TransactionCreateRandomInitCode.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stInitCodeTest/TransactionCreateRandomInitCode.json rename to c/test/testdata/evm/GeneralStateTests/stInitCodeTest/TransactionCreateRandomInitCode.json diff --git a/test/testdata/evm/GeneralStateTests/stInitCodeTest/TransactionCreateStopInInitcode.json b/c/test/testdata/evm/GeneralStateTests/stInitCodeTest/TransactionCreateStopInInitcode.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stInitCodeTest/TransactionCreateStopInInitcode.json rename to c/test/testdata/evm/GeneralStateTests/stInitCodeTest/TransactionCreateStopInInitcode.json diff --git a/test/testdata/evm/GeneralStateTests/stInitCodeTest/TransactionCreateSuicideInInitcode.json b/c/test/testdata/evm/GeneralStateTests/stInitCodeTest/TransactionCreateSuicideInInitcode.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stInitCodeTest/TransactionCreateSuicideInInitcode.json rename to c/test/testdata/evm/GeneralStateTests/stInitCodeTest/TransactionCreateSuicideInInitcode.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log0_emptyMem.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log0_emptyMem.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log0_emptyMem.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log0_emptyMem.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log0_logMemStartTooHigh.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log0_logMemStartTooHigh.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log0_logMemStartTooHigh.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log0_logMemStartTooHigh.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log0_logMemsizeTooHigh.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log0_logMemsizeTooHigh.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log0_logMemsizeTooHigh.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log0_logMemsizeTooHigh.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log0_logMemsizeZero.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log0_logMemsizeZero.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log0_logMemsizeZero.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log0_logMemsizeZero.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log0_nonEmptyMem.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log0_nonEmptyMem.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log0_nonEmptyMem.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log0_nonEmptyMem.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log0_nonEmptyMem_logMemSize1.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log0_nonEmptyMem_logMemSize1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log0_nonEmptyMem_logMemSize1.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log0_nonEmptyMem_logMemSize1.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log0_nonEmptyMem_logMemSize1_logMemStart31.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log0_nonEmptyMem_logMemSize1_logMemStart31.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log0_nonEmptyMem_logMemSize1_logMemStart31.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log0_nonEmptyMem_logMemSize1_logMemStart31.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log1_Caller.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log1_Caller.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log1_Caller.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log1_Caller.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log1_MaxTopic.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log1_MaxTopic.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log1_MaxTopic.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log1_MaxTopic.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log1_emptyMem.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log1_emptyMem.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log1_emptyMem.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log1_emptyMem.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log1_logMemStartTooHigh.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log1_logMemStartTooHigh.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log1_logMemStartTooHigh.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log1_logMemStartTooHigh.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log1_logMemsizeTooHigh.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log1_logMemsizeTooHigh.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log1_logMemsizeTooHigh.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log1_logMemsizeTooHigh.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log1_logMemsizeZero.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log1_logMemsizeZero.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log1_logMemsizeZero.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log1_logMemsizeZero.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log1_nonEmptyMem.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log1_nonEmptyMem.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log1_nonEmptyMem.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log1_nonEmptyMem.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log1_nonEmptyMem_logMemSize1.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log1_nonEmptyMem_logMemSize1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log1_nonEmptyMem_logMemSize1.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log1_nonEmptyMem_logMemSize1.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log1_nonEmptyMem_logMemSize1_logMemStart31.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log1_nonEmptyMem_logMemSize1_logMemStart31.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log1_nonEmptyMem_logMemSize1_logMemStart31.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log1_nonEmptyMem_logMemSize1_logMemStart31.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log2_Caller.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log2_Caller.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log2_Caller.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log2_Caller.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log2_MaxTopic.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log2_MaxTopic.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log2_MaxTopic.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log2_MaxTopic.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log2_emptyMem.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log2_emptyMem.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log2_emptyMem.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log2_emptyMem.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log2_logMemStartTooHigh.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log2_logMemStartTooHigh.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log2_logMemStartTooHigh.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log2_logMemStartTooHigh.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log2_logMemsizeTooHigh.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log2_logMemsizeTooHigh.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log2_logMemsizeTooHigh.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log2_logMemsizeTooHigh.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log2_logMemsizeZero.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log2_logMemsizeZero.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log2_logMemsizeZero.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log2_logMemsizeZero.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log2_nonEmptyMem.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log2_nonEmptyMem.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log2_nonEmptyMem.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log2_nonEmptyMem.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log2_nonEmptyMem_logMemSize1.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log2_nonEmptyMem_logMemSize1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log2_nonEmptyMem_logMemSize1.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log2_nonEmptyMem_logMemSize1.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log2_nonEmptyMem_logMemSize1_logMemStart31.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log2_nonEmptyMem_logMemSize1_logMemStart31.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log2_nonEmptyMem_logMemSize1_logMemStart31.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log2_nonEmptyMem_logMemSize1_logMemStart31.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log3_Caller.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log3_Caller.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log3_Caller.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log3_Caller.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log3_MaxTopic.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log3_MaxTopic.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log3_MaxTopic.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log3_MaxTopic.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log3_PC.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log3_PC.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log3_PC.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log3_PC.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log3_emptyMem.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log3_emptyMem.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log3_emptyMem.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log3_emptyMem.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log3_logMemStartTooHigh.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log3_logMemStartTooHigh.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log3_logMemStartTooHigh.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log3_logMemStartTooHigh.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log3_logMemsizeTooHigh.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log3_logMemsizeTooHigh.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log3_logMemsizeTooHigh.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log3_logMemsizeTooHigh.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log3_logMemsizeZero.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log3_logMemsizeZero.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log3_logMemsizeZero.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log3_logMemsizeZero.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log3_nonEmptyMem.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log3_nonEmptyMem.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log3_nonEmptyMem.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log3_nonEmptyMem.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log3_nonEmptyMem_logMemSize1.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log3_nonEmptyMem_logMemSize1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log3_nonEmptyMem_logMemSize1.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log3_nonEmptyMem_logMemSize1.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log3_nonEmptyMem_logMemSize1_logMemStart31.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log3_nonEmptyMem_logMemSize1_logMemStart31.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log3_nonEmptyMem_logMemSize1_logMemStart31.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log3_nonEmptyMem_logMemSize1_logMemStart31.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log4_Caller.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log4_Caller.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log4_Caller.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log4_Caller.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log4_MaxTopic.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log4_MaxTopic.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log4_MaxTopic.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log4_MaxTopic.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log4_PC.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log4_PC.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log4_PC.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log4_PC.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log4_emptyMem.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log4_emptyMem.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log4_emptyMem.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log4_emptyMem.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log4_logMemStartTooHigh.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log4_logMemStartTooHigh.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log4_logMemStartTooHigh.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log4_logMemStartTooHigh.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log4_logMemsizeTooHigh.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log4_logMemsizeTooHigh.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log4_logMemsizeTooHigh.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log4_logMemsizeTooHigh.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log4_logMemsizeZero.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log4_logMemsizeZero.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log4_logMemsizeZero.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log4_logMemsizeZero.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log4_nonEmptyMem.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log4_nonEmptyMem.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log4_nonEmptyMem.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log4_nonEmptyMem.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log4_nonEmptyMem_logMemSize1.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log4_nonEmptyMem_logMemSize1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log4_nonEmptyMem_logMemSize1.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log4_nonEmptyMem_logMemSize1.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/log4_nonEmptyMem_logMemSize1_logMemStart31.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/log4_nonEmptyMem_logMemSize1_logMemStart31.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/log4_nonEmptyMem_logMemSize1_logMemStart31.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/log4_nonEmptyMem_logMemSize1_logMemStart31.json diff --git a/test/testdata/evm/GeneralStateTests/stLogTests/logInOOG_Call.json b/c/test/testdata/evm/GeneralStateTests/stLogTests/logInOOG_Call.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stLogTests/logInOOG_Call.json rename to c/test/testdata/evm/GeneralStateTests/stLogTests/logInOOG_Call.json diff --git a/test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/CallAndCallcodeConsumeMoreGasThenTransactionHasWithMemExpandingCalls.json b/c/test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/CallAndCallcodeConsumeMoreGasThenTransactionHasWithMemExpandingCalls.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/CallAndCallcodeConsumeMoreGasThenTransactionHasWithMemExpandingCalls.json rename to c/test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/CallAndCallcodeConsumeMoreGasThenTransactionHasWithMemExpandingCalls.json diff --git a/test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/CallAskMoreGasOnDepth2ThenTransactionHasWithMemExpandingCalls.json b/c/test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/CallAskMoreGasOnDepth2ThenTransactionHasWithMemExpandingCalls.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/CallAskMoreGasOnDepth2ThenTransactionHasWithMemExpandingCalls.json rename to c/test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/CallAskMoreGasOnDepth2ThenTransactionHasWithMemExpandingCalls.json diff --git a/test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/CallGoesOOGOnSecondLevel2WithMemExpandingCalls.json b/c/test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/CallGoesOOGOnSecondLevel2WithMemExpandingCalls.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/CallGoesOOGOnSecondLevel2WithMemExpandingCalls.json rename to c/test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/CallGoesOOGOnSecondLevel2WithMemExpandingCalls.json diff --git a/test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/CallGoesOOGOnSecondLevelWithMemExpandingCalls.json b/c/test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/CallGoesOOGOnSecondLevelWithMemExpandingCalls.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/CallGoesOOGOnSecondLevelWithMemExpandingCalls.json rename to c/test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/CallGoesOOGOnSecondLevelWithMemExpandingCalls.json diff --git a/test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/CreateAndGasInsideCreateWithMemExpandingCalls.json b/c/test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/CreateAndGasInsideCreateWithMemExpandingCalls.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/CreateAndGasInsideCreateWithMemExpandingCalls.json rename to c/test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/CreateAndGasInsideCreateWithMemExpandingCalls.json diff --git a/test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/DelegateCallOnEIPWithMemExpandingCalls.json b/c/test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/DelegateCallOnEIPWithMemExpandingCalls.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/DelegateCallOnEIPWithMemExpandingCalls.json rename to c/test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/DelegateCallOnEIPWithMemExpandingCalls.json diff --git a/test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/ExecuteCallThatAskMoreGasThenTransactionHasWithMemExpandingCalls.json b/c/test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/ExecuteCallThatAskMoreGasThenTransactionHasWithMemExpandingCalls.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/ExecuteCallThatAskMoreGasThenTransactionHasWithMemExpandingCalls.json rename to c/test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/ExecuteCallThatAskMoreGasThenTransactionHasWithMemExpandingCalls.json diff --git a/test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/NewGasPriceForCodesWithMemExpandingCalls.json b/c/test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/NewGasPriceForCodesWithMemExpandingCalls.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/NewGasPriceForCodesWithMemExpandingCalls.json rename to c/test/testdata/evm/GeneralStateTests/stMemExpandingEIP150Calls/NewGasPriceForCodesWithMemExpandingCalls.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALLCODE_Bounds.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALLCODE_Bounds.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALLCODE_Bounds.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALLCODE_Bounds.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALLCODE_Bounds2.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALLCODE_Bounds2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALLCODE_Bounds2.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALLCODE_Bounds2.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALLCODE_Bounds3.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALLCODE_Bounds3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALLCODE_Bounds3.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALLCODE_Bounds3.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALLCODE_Bounds4.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALLCODE_Bounds4.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALLCODE_Bounds4.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALLCODE_Bounds4.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALL_Bounds.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALL_Bounds.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALL_Bounds.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALL_Bounds.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALL_Bounds2.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALL_Bounds2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALL_Bounds2.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALL_Bounds2.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALL_Bounds2a.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALL_Bounds2a.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALL_Bounds2a.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALL_Bounds2a.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALL_Bounds3.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALL_Bounds3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALL_Bounds3.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CALL_Bounds3.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CREATE_Bounds.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CREATE_Bounds.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/CREATE_Bounds.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CREATE_Bounds.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CREATE_Bounds2.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CREATE_Bounds2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/CREATE_Bounds2.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CREATE_Bounds2.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CREATE_Bounds3.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CREATE_Bounds3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/CREATE_Bounds3.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/CREATE_Bounds3.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/DELEGATECALL_Bounds.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/DELEGATECALL_Bounds.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/DELEGATECALL_Bounds.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/DELEGATECALL_Bounds.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/DELEGATECALL_Bounds2.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/DELEGATECALL_Bounds2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/DELEGATECALL_Bounds2.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/DELEGATECALL_Bounds2.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/DELEGATECALL_Bounds3.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/DELEGATECALL_Bounds3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/DELEGATECALL_Bounds3.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/DELEGATECALL_Bounds3.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/DUP_Bounds.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/DUP_Bounds.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/DUP_Bounds.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/DUP_Bounds.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/FillStack.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/FillStack.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/FillStack.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/FillStack.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/JUMPI_Bounds.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/JUMPI_Bounds.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/JUMPI_Bounds.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/JUMPI_Bounds.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/JUMP_Bounds.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/JUMP_Bounds.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/JUMP_Bounds.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/JUMP_Bounds.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/JUMP_Bounds2.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/JUMP_Bounds2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/JUMP_Bounds2.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/JUMP_Bounds2.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/MLOAD_Bounds.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/MLOAD_Bounds.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/MLOAD_Bounds.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/MLOAD_Bounds.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/MLOAD_Bounds2.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/MLOAD_Bounds2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/MLOAD_Bounds2.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/MLOAD_Bounds2.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/MLOAD_Bounds3.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/MLOAD_Bounds3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/MLOAD_Bounds3.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/MLOAD_Bounds3.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/MSTORE_Bounds.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/MSTORE_Bounds.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/MSTORE_Bounds.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/MSTORE_Bounds.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/MSTORE_Bounds2.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/MSTORE_Bounds2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/MSTORE_Bounds2.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/MSTORE_Bounds2.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/MSTORE_Bounds2a.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/MSTORE_Bounds2a.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/MSTORE_Bounds2a.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/MSTORE_Bounds2a.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/POP_Bounds.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/POP_Bounds.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/POP_Bounds.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/POP_Bounds.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/RETURN_Bounds.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/RETURN_Bounds.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/RETURN_Bounds.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/RETURN_Bounds.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/SLOAD_Bounds.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/SLOAD_Bounds.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/SLOAD_Bounds.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/SLOAD_Bounds.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/SSTORE_Bounds.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/SSTORE_Bounds.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/SSTORE_Bounds.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/SSTORE_Bounds.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/mload32bitBound.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/mload32bitBound.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/mload32bitBound.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/mload32bitBound.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/mload32bitBound2.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/mload32bitBound2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/mload32bitBound2.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/mload32bitBound2.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/mload32bitBound_Msize.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/mload32bitBound_Msize.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/mload32bitBound_Msize.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/mload32bitBound_Msize.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/mload32bitBound_return.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/mload32bitBound_return.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/mload32bitBound_return.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/mload32bitBound_return.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/mload32bitBound_return2.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/mload32bitBound_return2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/mload32bitBound_return2.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/mload32bitBound_return2.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/static_CALL_Bounds.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/static_CALL_Bounds.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/static_CALL_Bounds.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/static_CALL_Bounds.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/static_CALL_Bounds2.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/static_CALL_Bounds2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/static_CALL_Bounds2.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/static_CALL_Bounds2.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/static_CALL_Bounds2a.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/static_CALL_Bounds2a.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/static_CALL_Bounds2a.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/static_CALL_Bounds2a.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryStressTest/static_CALL_Bounds3.json b/c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/static_CALL_Bounds3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryStressTest/static_CALL_Bounds3.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryStressTest/static_CALL_Bounds3.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/callDataCopyOffset.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/callDataCopyOffset.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/callDataCopyOffset.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/callDataCopyOffset.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/calldatacopy_dejavu.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/calldatacopy_dejavu.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/calldatacopy_dejavu.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/calldatacopy_dejavu.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/calldatacopy_dejavu2.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/calldatacopy_dejavu2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/calldatacopy_dejavu2.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/calldatacopy_dejavu2.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/codeCopyOffset.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/codeCopyOffset.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/codeCopyOffset.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/codeCopyOffset.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/codecopy_dejavu.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/codecopy_dejavu.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/codecopy_dejavu.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/codecopy_dejavu.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/codecopy_dejavu2.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/codecopy_dejavu2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/codecopy_dejavu2.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/codecopy_dejavu2.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/extcodecopy_dejavu.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/extcodecopy_dejavu.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/extcodecopy_dejavu.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/extcodecopy_dejavu.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/log1_dejavu.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/log1_dejavu.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/log1_dejavu.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/log1_dejavu.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/log2_dejavu.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/log2_dejavu.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/log2_dejavu.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/log2_dejavu.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/log3_dejavu.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/log3_dejavu.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/log3_dejavu.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/log3_dejavu.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/log4_dejavu.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/log4_dejavu.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/log4_dejavu.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/log4_dejavu.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem0b_singleByte.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem0b_singleByte.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem0b_singleByte.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem0b_singleByte.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem31b_singleByte.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem31b_singleByte.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem31b_singleByte.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem31b_singleByte.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32b_singleByte.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32b_singleByte.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem32b_singleByte.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32b_singleByte.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb+1.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb+1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb+1.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb+1.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb+31.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb+31.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb+31.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb+31.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb+32.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb+32.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb+32.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb+32.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb+33.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb+33.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb+33.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb+33.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb-1.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb-1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb-1.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb-1.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb-31.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb-31.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb-31.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb-31.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb-32.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb-32.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb-32.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb-32.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb-33.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb-33.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb-33.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb-33.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte+1.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte+1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte+1.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte+1.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte+31.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte+31.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte+31.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte+31.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte+32.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte+32.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte+32.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte+32.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte+33.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte+33.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte+33.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte+33.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte-1.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte-1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte-1.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte-1.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte-31.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte-31.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte-31.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte-31.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte-32.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte-32.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte-32.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte-32.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte-33.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte-33.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte-33.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte-33.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem32kb_singleByte.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem33b_singleByte.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem33b_singleByte.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem33b_singleByte.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem33b_singleByte.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb+1.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb+1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb+1.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb+1.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb+31.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb+31.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb+31.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb+31.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb+32.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb+32.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb+32.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb+32.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb+33.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb+33.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb+33.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb+33.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb-1.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb-1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb-1.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb-1.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb-31.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb-31.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb-31.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb-31.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb-32.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb-32.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb-32.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb-32.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb-33.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb-33.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb-33.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb-33.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte+1.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte+1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte+1.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte+1.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte+31.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte+31.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte+31.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte+31.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte+32.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte+32.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte+32.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte+32.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte+33.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte+33.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte+33.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte+33.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte-1.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte-1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte-1.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte-1.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte-31.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte-31.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte-31.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte-31.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte-32.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte-32.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte-32.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte-32.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte-33.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte-33.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte-33.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte-33.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mem64kb_singleByte.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/memReturn.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/memReturn.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/memReturn.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/memReturn.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mload16bitBound.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mload16bitBound.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mload16bitBound.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mload16bitBound.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mload8bitBound.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mload8bitBound.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mload8bitBound.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mload8bitBound.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mload_dejavu.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mload_dejavu.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mload_dejavu.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mload_dejavu.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mstore_dejavu.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mstore_dejavu.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mstore_dejavu.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mstore_dejavu.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/mstroe8_dejavu.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/mstroe8_dejavu.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/mstroe8_dejavu.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/mstroe8_dejavu.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/sha3_dejavu.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/sha3_dejavu.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/sha3_dejavu.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/sha3_dejavu.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitGas_1023.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitGas_1023.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitGas_1023.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitGas_1023.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitGas_1024.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitGas_1024.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitGas_1024.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitGas_1024.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitGas_1025.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitGas_1025.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitGas_1025.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitGas_1025.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitPush31_1023.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitPush31_1023.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitPush31_1023.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitPush31_1023.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitPush31_1024.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitPush31_1024.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitPush31_1024.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitPush31_1024.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitPush31_1025.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitPush31_1025.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitPush31_1025.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitPush31_1025.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitPush32_1023.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitPush32_1023.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitPush32_1023.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitPush32_1023.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitPush32_1024.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitPush32_1024.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitPush32_1024.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitPush32_1024.json diff --git a/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitPush32_1025.json b/c/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitPush32_1025.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitPush32_1025.json rename to c/test/testdata/evm/GeneralStateTests/stMemoryTest/stackLimitPush32_1025.json diff --git a/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALL.json b/c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALL.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALL.json rename to c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALL.json diff --git a/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALLCODE.json b/c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALLCODE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALLCODE.json rename to c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALLCODE.json diff --git a/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALLCODE_ToEmpty.json b/c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALLCODE_ToEmpty.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALLCODE_ToEmpty.json rename to c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALLCODE_ToEmpty.json diff --git a/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALLCODE_ToNonNonZeroBalance.json b/c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALLCODE_ToNonNonZeroBalance.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALLCODE_ToNonNonZeroBalance.json rename to c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALLCODE_ToNonNonZeroBalance.json diff --git a/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALLCODE_ToOneStorageKey.json b/c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALLCODE_ToOneStorageKey.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALLCODE_ToOneStorageKey.json rename to c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALLCODE_ToOneStorageKey.json diff --git a/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALL_ToEmpty.json b/c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALL_ToEmpty.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALL_ToEmpty.json rename to c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALL_ToEmpty.json diff --git a/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALL_ToNonNonZeroBalance.json b/c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALL_ToNonNonZeroBalance.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALL_ToNonNonZeroBalance.json rename to c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALL_ToNonNonZeroBalance.json diff --git a/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALL_ToOneStorageKey.json b/c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALL_ToOneStorageKey.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALL_ToOneStorageKey.json rename to c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_CALL_ToOneStorageKey.json diff --git a/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_DELEGATECALL.json b/c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_DELEGATECALL.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_DELEGATECALL.json rename to c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_DELEGATECALL.json diff --git a/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_DELEGATECALL_ToEmpty.json b/c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_DELEGATECALL_ToEmpty.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_DELEGATECALL_ToEmpty.json rename to c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_DELEGATECALL_ToEmpty.json diff --git a/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_DELEGATECALL_ToNonNonZeroBalance.json b/c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_DELEGATECALL_ToNonNonZeroBalance.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_DELEGATECALL_ToNonNonZeroBalance.json rename to c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_DELEGATECALL_ToNonNonZeroBalance.json diff --git a/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_DELEGATECALL_ToOneStorageKey.json b/c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_DELEGATECALL_ToOneStorageKey.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_DELEGATECALL_ToOneStorageKey.json rename to c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_DELEGATECALL_ToOneStorageKey.json diff --git a/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_SUICIDE.json b/c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_SUICIDE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_SUICIDE.json rename to c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_SUICIDE.json diff --git a/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_SUICIDE_ToEmpty.json b/c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_SUICIDE_ToEmpty.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_SUICIDE_ToEmpty.json rename to c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_SUICIDE_ToEmpty.json diff --git a/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_SUICIDE_ToNonNonZeroBalance.json b/c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_SUICIDE_ToNonNonZeroBalance.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_SUICIDE_ToNonNonZeroBalance.json rename to c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_SUICIDE_ToNonNonZeroBalance.json diff --git a/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_SUICIDE_ToOneStorageKey.json b/c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_SUICIDE_ToOneStorageKey.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_SUICIDE_ToOneStorageKey.json rename to c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_SUICIDE_ToOneStorageKey.json diff --git a/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALL.json b/c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALL.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALL.json rename to c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALL.json diff --git a/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALL_ToEmpty.json b/c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALL_ToEmpty.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALL_ToEmpty.json rename to c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALL_ToEmpty.json diff --git a/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALL_ToNonNonZeroBalance.json b/c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALL_ToNonNonZeroBalance.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALL_ToNonNonZeroBalance.json rename to c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALL_ToNonNonZeroBalance.json diff --git a/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALL_ToOneStorageKey.json b/c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALL_ToOneStorageKey.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALL_ToOneStorageKey.json rename to c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALL_ToOneStorageKey.json diff --git a/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALLwithData.json b/c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALLwithData.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALLwithData.json rename to c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALLwithData.json diff --git a/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALLwithData_ToEmpty.json b/c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALLwithData_ToEmpty.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALLwithData_ToEmpty.json rename to c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALLwithData_ToEmpty.json diff --git a/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALLwithData_ToNonNonZeroBalance.json b/c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALLwithData_ToNonNonZeroBalance.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALLwithData_ToNonNonZeroBalance.json rename to c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALLwithData_ToNonNonZeroBalance.json diff --git a/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALLwithData_ToOneStorageKey.json b/c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALLwithData_ToOneStorageKey.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALLwithData_ToOneStorageKey.json rename to c/test/testdata/evm/GeneralStateTests/stNonZeroCallsTest/NonZeroValue_TransactionCALLwithData_ToOneStorageKey.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/identity_to_bigger.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/identity_to_bigger.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/identity_to_bigger.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/identity_to_bigger.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/identity_to_smaller.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/identity_to_smaller.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/identity_to_smaller.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/identity_to_smaller.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_0_0_1000000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_0_0_1000000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_0_0_1000000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_0_0_1000000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_0_0_155000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_0_0_155000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_0_0_155000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_0_0_155000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_1_0_1000000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_1_0_1000000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_1_0_1000000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_1_0_1000000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_1_0_155000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_1_0_155000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_1_0_155000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_1_0_155000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_1_0_20500.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_1_0_20500.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_1_0_20500.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_1_0_20500.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_1_0_22000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_1_0_22000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_1_0_22000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_1_0_22000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_1_0_25000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_1_0_25000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_1_0_25000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_1_0_25000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_1_0_35000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_1_0_35000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_1_0_35000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_1_0_35000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_3_100_1000000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_3_100_1000000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_3_100_1000000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_3_100_1000000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_3_100_155000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_3_100_155000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_3_100_155000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_3_100_155000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_3_100_20500.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_3_100_20500.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_3_100_20500.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_3_100_20500.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_3_100_22000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_3_100_22000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_3_100_22000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_3_100_22000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_3_100_25000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_3_100_25000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_3_100_25000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_3_100_25000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_3_100_35000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_3_100_35000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_3_100_35000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_0_3_100_35000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_0_1000000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_0_1000000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_0_1000000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_0_1000000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_0_155000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_0_155000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_0_155000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_0_155000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_0_20500.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_0_20500.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_0_20500.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_0_20500.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_0_22000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_0_22000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_0_22000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_0_22000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_0_25000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_0_25000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_0_25000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_0_25000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_0_35000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_0_35000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_0_35000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_0_35000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_1_1000000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_1_1000000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_1_1000000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_1_1000000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_1_155000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_1_155000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_1_155000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_1_155000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_1_20500.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_1_20500.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_1_20500.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_1_20500.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_1_22000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_1_22000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_1_22000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_1_22000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_1_25000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_1_25000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_1_25000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_1_25000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_1_35000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_1_35000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_1_35000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_0_1_35000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_1_1_1000000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_1_1_1000000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_1_1_1000000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_1_1_1000000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_1_1_155000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_1_1_155000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_1_1_155000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_1_1_155000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_1_1_20500.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_1_1_20500.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_1_1_20500.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_1_1_20500.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_1_1_22000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_1_1_22000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_1_1_22000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_1_1_22000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_1_1_25000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_1_1_25000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_1_1_25000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_1_1_25000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_1_1_35000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_1_1_35000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_1_1_35000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_1_1_1_35000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_22411_22000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_22411_22000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_22411_22000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_22411_22000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_0_1000000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_0_1000000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_0_1000000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_0_1000000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_0_155000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_0_155000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_0_155000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_0_155000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_0_20500.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_0_20500.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_0_20500.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_0_20500.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_0_22000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_0_22000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_0_22000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_0_22000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_0_25000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_0_25000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_0_25000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_0_25000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_0_35000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_0_35000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_0_35000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_0_35000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_1_1000000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_1_1000000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_1_1000000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_1_1000000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_1_155000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_1_155000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_1_155000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_1_155000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_1_20500.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_1_20500.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_1_20500.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_1_20500.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_1_25000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_1_25000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_1_25000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_1_25000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_1_35000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_1_35000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_1_35000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_1_35000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_37111_1000000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_37111_1000000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_37111_1000000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_37111_1000000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_37111_155000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_37111_155000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_37111_155000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_37111_155000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_37111_20500.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_37111_20500.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_37111_20500.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_37111_20500.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_37111_22000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_37111_22000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_37111_22000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_37111_22000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_37111_25000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_37111_25000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_37111_25000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_37111_25000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_37111_35000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_37111_35000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_37111_35000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_37111_35000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_97_1000000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_97_1000000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_97_1000000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_97_1000000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_97_155000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_97_155000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_97_155000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_97_155000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_97_20500.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_97_20500.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_97_20500.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_97_20500.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_97_22000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_97_22000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_97_22000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_97_22000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_97_25000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_97_25000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_97_25000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_97_25000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_97_35000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_97_35000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_97_35000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_37120_37111_97_35000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_39936_1_55201_1000000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_39936_1_55201_1000000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_39936_1_55201_1000000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_39936_1_55201_1000000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_39936_1_55201_155000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_39936_1_55201_155000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_39936_1_55201_155000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_39936_1_55201_155000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_39936_1_55201_20500.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_39936_1_55201_20500.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_39936_1_55201_20500.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_39936_1_55201_20500.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_39936_1_55201_22000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_39936_1_55201_22000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_39936_1_55201_22000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_39936_1_55201_22000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_39936_1_55201_25000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_39936_1_55201_25000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_39936_1_55201_25000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_39936_1_55201_25000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_39936_1_55201_35000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_39936_1_55201_35000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_39936_1_55201_35000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_39936_1_55201_35000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_09984_39936_1000000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_09984_39936_1000000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_09984_39936_1000000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_09984_39936_1000000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_09984_39936_155000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_09984_39936_155000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_09984_39936_155000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_09984_39936_155000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_09984_39936_22000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_09984_39936_22000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_09984_39936_22000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_09984_39936_22000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_09984_39936_25000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_09984_39936_25000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_09984_39936_25000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_09984_39936_25000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_09984_39936_35000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_09984_39936_35000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_09984_39936_35000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_09984_39936_35000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_28948_11579_20500.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_28948_11579_20500.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_28948_11579_20500.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_28948_11579_20500.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_5_100_1000000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_5_100_1000000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_5_100_1000000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_5_100_1000000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_5_100_155000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_5_100_155000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_5_100_155000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_5_100_155000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_5_100_20500.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_5_100_20500.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_5_100_20500.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_5_100_20500.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_5_100_22000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_5_100_22000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_5_100_22000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_5_100_22000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_5_100_25000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_5_100_25000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_5_100_25000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_5_100_25000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_5_100_35000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_5_100_35000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_5_100_35000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_3_5_100_35000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_49_2401_2401_1000000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_49_2401_2401_1000000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_49_2401_2401_1000000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_49_2401_2401_1000000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_49_2401_2401_155000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_49_2401_2401_155000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_49_2401_2401_155000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_49_2401_2401_155000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_49_2401_2401_20500.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_49_2401_2401_20500.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_49_2401_2401_20500.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_49_2401_2401_20500.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_49_2401_2401_22000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_49_2401_2401_22000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_49_2401_2401_22000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_49_2401_2401_22000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_49_2401_2401_25000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_49_2401_2401_25000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_49_2401_2401_25000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_49_2401_2401_25000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_49_2401_2401_35000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_49_2401_2401_35000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_49_2401_2401_35000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_49_2401_2401_35000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_55190_55190_42965_1000000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_55190_55190_42965_1000000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_55190_55190_42965_1000000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_55190_55190_42965_1000000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_55190_55190_42965_155000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_55190_55190_42965_155000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_55190_55190_42965_155000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_55190_55190_42965_155000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_55190_55190_42965_20500.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_55190_55190_42965_20500.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_55190_55190_42965_20500.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_55190_55190_42965_20500.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_55190_55190_42965_22000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_55190_55190_42965_22000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_55190_55190_42965_22000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_55190_55190_42965_22000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_55190_55190_42965_25000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_55190_55190_42965_25000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_55190_55190_42965_25000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_55190_55190_42965_25000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_55190_55190_42965_35000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_55190_55190_42965_35000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_55190_55190_42965_35000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_55190_55190_42965_35000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_9_37111_37111_1000000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_9_37111_37111_1000000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_9_37111_37111_1000000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_9_37111_37111_1000000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_9_37111_37111_155000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_9_37111_37111_155000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_9_37111_37111_155000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_9_37111_37111_155000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_9_37111_37111_20500.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_9_37111_37111_20500.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_9_37111_37111_20500.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_9_37111_37111_20500.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_9_37111_37111_22000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_9_37111_37111_22000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_9_37111_37111_22000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_9_37111_37111_22000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_9_37111_37111_35000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_9_37111_37111_35000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_9_37111_37111_35000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_9_37111_37111_35000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_9_3711_37111_25000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_9_3711_37111_25000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_9_3711_37111_25000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/modexp_9_3711_37111_25000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/sec80.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/sec80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts/sec80.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts/sec80.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0_0input.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0_0input.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0_0input.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0_0input.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0_Gas2999.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0_Gas2999.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0_Gas2999.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0_Gas2999.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0_NoGas.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0_NoGas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0_NoGas.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0_NoGas.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0_completeReturnValue.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0_completeReturnValue.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0_completeReturnValue.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0_completeReturnValue.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0_gas3000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0_gas3000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0_gas3000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0_gas3000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0_overlappingInputOutput.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0_overlappingInputOutput.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0_overlappingInputOutput.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover0_overlappingInputOutput.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover1.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover1.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover1.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover2.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover2.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover2.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover3.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover3.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover3.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover80.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover80.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecover80.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecoverH_prefixed0.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecoverH_prefixed0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecoverH_prefixed0.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecoverH_prefixed0.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecoverR_prefixed0.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecoverR_prefixed0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecoverR_prefixed0.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecoverR_prefixed0.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecoverS_prefixed0.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecoverS_prefixed0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecoverS_prefixed0.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecoverS_prefixed0.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecoverV_prefixed0.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecoverV_prefixed0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecoverV_prefixed0.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecoverV_prefixed0.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecoverV_prefixedf0.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecoverV_prefixedf0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecoverV_prefixedf0.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEEcrecoverV_prefixedf0.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentitiy_0.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentitiy_0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentitiy_0.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentitiy_0.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentitiy_1.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentitiy_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentitiy_1.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentitiy_1.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_1_nonzeroValue.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_1_nonzeroValue.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_1_nonzeroValue.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_1_nonzeroValue.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_2.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_2.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_2.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_3.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_3.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_3.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_4.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_4.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_4.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_4.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_4_gas17.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_4_gas17.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_4_gas17.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_4_gas17.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_4_gas18.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_4_gas18.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_4_gas18.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_4_gas18.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_5.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_5.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_5.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODEIdentity_5.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_0.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_0.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_0.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_1.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_1.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_1.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_2.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_2.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_2.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_3.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_3.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_3.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_3_postfixed0.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_3_postfixed0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_3_postfixed0.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_3_postfixed0.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_3_prefixed0.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_3_prefixed0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_3_prefixed0.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_3_prefixed0.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_4.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_4.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_4.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_4.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_4_gas719.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_4_gas719.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_4_gas719.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_4_gas719.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_5.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_5.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_5.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODERipemd160_5.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_0.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_0.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_0.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_1.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_1.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_1.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_1_nonzeroValue.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_1_nonzeroValue.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_1_nonzeroValue.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_1_nonzeroValue.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_2.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_2.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_2.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_3.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_3.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_3.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_3_postfix0.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_3_postfix0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_3_postfix0.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_3_postfix0.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_3_prefix0.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_3_prefix0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_3_prefix0.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_3_prefix0.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_4.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_4.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_4.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_4.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_4_gas99.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_4_gas99.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_4_gas99.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_4_gas99.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_5.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_5.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_5.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CALLCODESha256_5.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0_0input.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0_0input.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0_0input.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0_0input.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0_Gas2999.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0_Gas2999.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0_Gas2999.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0_Gas2999.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0_NoGas.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0_NoGas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0_NoGas.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0_NoGas.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0_completeReturnValue.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0_completeReturnValue.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0_completeReturnValue.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0_completeReturnValue.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0_gas3000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0_gas3000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0_gas3000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0_gas3000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0_overlappingInputOutput.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0_overlappingInputOutput.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0_overlappingInputOutput.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover0_overlappingInputOutput.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover1.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover1.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover1.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover2.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover2.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover2.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover3.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover3.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover3.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover80.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover80.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecover80.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverCheckLength.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverCheckLength.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverCheckLength.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverCheckLength.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverCheckLengthWrongV.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverCheckLengthWrongV.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverCheckLengthWrongV.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverCheckLengthWrongV.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverH_prefixed0.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverH_prefixed0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverH_prefixed0.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverH_prefixed0.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverInvalidSignature.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverInvalidSignature.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverInvalidSignature.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverInvalidSignature.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverR_prefixed0.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverR_prefixed0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverR_prefixed0.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverR_prefixed0.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverS_prefixed0.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverS_prefixed0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverS_prefixed0.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverS_prefixed0.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverUnrecoverableKey.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverUnrecoverableKey.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverUnrecoverableKey.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverUnrecoverableKey.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverV_prefixed0.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverV_prefixed0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverV_prefixed0.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallEcrecoverV_prefixed0.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentitiy_0.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentitiy_0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentitiy_0.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentitiy_0.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentitiy_1.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentitiy_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentitiy_1.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentitiy_1.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_1_nonzeroValue.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_1_nonzeroValue.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_1_nonzeroValue.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_1_nonzeroValue.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_2.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_2.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_2.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_3.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_3.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_3.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_4.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_4.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_4.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_4.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_4_gas17.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_4_gas17.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_4_gas17.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_4_gas17.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_4_gas18.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_4_gas18.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_4_gas18.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_4_gas18.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_5.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_5.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_5.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_5.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_6_inputShorterThanOutput.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_6_inputShorterThanOutput.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_6_inputShorterThanOutput.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallIdentity_6_inputShorterThanOutput.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_0.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_0.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_0.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_1.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_1.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_1.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_2.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_2.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_2.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_3.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_3.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_3.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_3_postfixed0.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_3_postfixed0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_3_postfixed0.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_3_postfixed0.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_3_prefixed0.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_3_prefixed0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_3_prefixed0.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_3_prefixed0.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_4.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_4.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_4.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_4.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_4_gas719.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_4_gas719.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_4_gas719.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_4_gas719.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_5.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_5.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_5.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallRipemd160_5.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_0.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_0.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_0.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_1.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_1.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_1.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_1_nonzeroValue.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_1_nonzeroValue.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_1_nonzeroValue.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_1_nonzeroValue.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_2.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_2.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_2.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_3.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_3.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_3.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_3_postfix0.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_3_postfix0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_3_postfix0.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_3_postfix0.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_3_prefix0.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_3_prefix0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_3_prefix0.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_3_prefix0.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_4.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_4.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_4.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_4.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_4_gas99.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_4_gas99.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_4_gas99.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_4_gas99.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_5.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_5.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_5.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/CallSha256_5.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/modexpRandomInput.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/modexpRandomInput.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/modexpRandomInput.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/modexpRandomInput.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/modexp_0_0_0_20500.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/modexp_0_0_0_20500.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/modexp_0_0_0_20500.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/modexp_0_0_0_20500.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/modexp_0_0_0_22000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/modexp_0_0_0_22000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/modexp_0_0_0_22000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/modexp_0_0_0_22000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/modexp_0_0_0_25000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/modexp_0_0_0_25000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/modexp_0_0_0_25000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/modexp_0_0_0_25000.json diff --git a/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/modexp_0_0_0_35000.json b/c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/modexp_0_0_0_35000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/modexp_0_0_0_35000.json rename to c/test/testdata/evm/GeneralStateTests/stPreCompiledContracts2/modexp_0_0_0_35000.json diff --git a/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call1MB1024Calldepth.json b/c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call1MB1024Calldepth.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call1MB1024Calldepth.json rename to c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call1MB1024Calldepth.json diff --git a/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000.json b/c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000.json rename to c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000.json diff --git a/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000_ecrec.json b/c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000_ecrec.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000_ecrec.json rename to c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000_ecrec.json diff --git a/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000_identity.json b/c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000_identity.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000_identity.json rename to c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000_identity.json diff --git a/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000_identity2.json b/c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000_identity2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000_identity2.json rename to c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000_identity2.json diff --git a/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000_rip160.json b/c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000_rip160.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000_rip160.json rename to c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000_rip160.json diff --git a/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000_sha256.json b/c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000_sha256.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000_sha256.json rename to c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000_sha256.json diff --git a/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000bytesContract50_1.json b/c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000bytesContract50_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000bytesContract50_1.json rename to c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000bytesContract50_1.json diff --git a/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000bytesContract50_2.json b/c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000bytesContract50_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000bytesContract50_2.json rename to c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000bytesContract50_2.json diff --git a/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000bytesContract50_3.json b/c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000bytesContract50_3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000bytesContract50_3.json rename to c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Call50000bytesContract50_3.json diff --git a/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Callcode50000.json b/c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Callcode50000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Callcode50000.json rename to c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Callcode50000.json diff --git a/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Create1000.json b/c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Create1000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Create1000.json rename to c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Create1000.json diff --git a/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Create1000Byzantium.json b/c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Create1000Byzantium.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Create1000Byzantium.json rename to c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Create1000Byzantium.json diff --git a/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/QuadraticComplexitySolidity_CallDataCopy.json b/c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/QuadraticComplexitySolidity_CallDataCopy.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/QuadraticComplexitySolidity_CallDataCopy.json rename to c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/QuadraticComplexitySolidity_CallDataCopy.json diff --git a/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Return50000.json b/c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Return50000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Return50000.json rename to c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Return50000.json diff --git a/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Return50000_2.json b/c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Return50000_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Return50000_2.json rename to c/test/testdata/evm/GeneralStateTests/stQuadraticComplexityTest/Return50000_2.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest0.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest0.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest0.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest1.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest1.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest1.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest10.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest10.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest10.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest10.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest100.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest100.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest100.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest100.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest101.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest101.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest101.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest101.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest102.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest102.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest102.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest102.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest103.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest103.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest103.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest103.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest104.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest104.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest104.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest104.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest105.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest105.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest105.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest105.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest106.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest106.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest106.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest106.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest107.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest107.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest107.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest107.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest108.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest108.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest108.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest108.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest11.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest11.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest11.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest11.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest110.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest110.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest110.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest110.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest111.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest111.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest111.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest111.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest112.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest112.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest112.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest112.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest114.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest114.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest114.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest114.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest115.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest115.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest115.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest115.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest116.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest116.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest116.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest116.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest117.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest117.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest117.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest117.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest118.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest118.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest118.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest118.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest119.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest119.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest119.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest119.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest12.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest12.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest12.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest12.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest120.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest120.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest120.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest120.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest121.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest121.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest121.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest121.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest122.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest122.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest122.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest122.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest123.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest123.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest123.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest123.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest124.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest124.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest124.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest124.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest125.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest125.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest125.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest125.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest126.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest126.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest126.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest126.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest129.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest129.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest129.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest129.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest13.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest13.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest13.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest13.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest130.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest130.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest130.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest130.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest131.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest131.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest131.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest131.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest133.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest133.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest133.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest133.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest134.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest134.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest134.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest134.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest135.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest135.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest135.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest135.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest136.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest136.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest136.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest136.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest137.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest137.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest137.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest137.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest138.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest138.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest138.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest138.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest139.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest139.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest139.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest139.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest14.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest14.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest14.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest14.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest142.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest142.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest142.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest142.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest143.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest143.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest143.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest143.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest144.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest144.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest144.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest144.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest145.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest145.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest145.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest145.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest146.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest146.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest146.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest146.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest147.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest147.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest147.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest147.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest148.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest148.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest148.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest148.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest149.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest149.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest149.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest149.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest15.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest15.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest15.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest15.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest150.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest150.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest150.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest150.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest151.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest151.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest151.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest151.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest153.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest153.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest153.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest153.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest154.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest154.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest154.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest154.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest155.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest155.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest155.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest155.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest156.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest156.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest156.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest156.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest157.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest157.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest157.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest157.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest158.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest158.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest158.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest158.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest159.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest159.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest159.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest159.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest16.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest16.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest16.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest16.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest160.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest160.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest160.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest160.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest161.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest161.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest161.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest161.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest162.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest162.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest162.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest162.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest163.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest163.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest163.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest163.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest164.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest164.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest164.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest164.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest166.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest166.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest166.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest166.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest167.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest167.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest167.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest167.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest169.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest169.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest169.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest169.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest17.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest17.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest17.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest17.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest170.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest170.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest170.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest170.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest171.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest171.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest171.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest171.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest172.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest172.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest172.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest172.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest173.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest173.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest173.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest173.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest174.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest174.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest174.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest174.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest175.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest175.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest175.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest175.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest176.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest176.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest176.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest176.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest177.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest177.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest177.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest177.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest178.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest178.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest178.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest178.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest179.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest179.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest179.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest179.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest18.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest18.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest18.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest18.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest180.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest180.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest180.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest180.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest183.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest183.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest183.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest183.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest184.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest184.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest184.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest184.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest185.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest185.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest185.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest185.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest187.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest187.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest187.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest187.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest188.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest188.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest188.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest188.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest189.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest189.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest189.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest189.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest19.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest19.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest19.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest19.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest190.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest190.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest190.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest190.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest191.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest191.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest191.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest191.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest192.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest192.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest192.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest192.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest194.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest194.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest194.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest194.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest195.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest195.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest195.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest195.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest196.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest196.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest196.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest196.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest197.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest197.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest197.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest197.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest198.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest198.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest198.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest198.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest199.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest199.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest199.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest199.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest2.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest2.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest2.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest20.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest20.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest20.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest20.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest200.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest200.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest200.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest200.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest201.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest201.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest201.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest201.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest202.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest202.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest202.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest202.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest204.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest204.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest204.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest204.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest205.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest205.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest205.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest205.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest206.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest206.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest206.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest206.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest207.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest207.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest207.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest207.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest208.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest208.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest208.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest208.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest209.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest209.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest209.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest209.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest210.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest210.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest210.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest210.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest211.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest211.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest211.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest211.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest212.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest212.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest212.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest212.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest214.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest214.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest214.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest214.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest215.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest215.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest215.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest215.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest216.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest216.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest216.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest216.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest217.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest217.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest217.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest217.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest219.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest219.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest219.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest219.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest22.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest22.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest22.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest22.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest220.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest220.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest220.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest220.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest221.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest221.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest221.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest221.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest222.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest222.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest222.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest222.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest223.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest223.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest223.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest223.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest225.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest225.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest225.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest225.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest226.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest226.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest226.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest226.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest227.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest227.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest227.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest227.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest228.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest228.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest228.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest228.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest229.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest229.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest229.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest229.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest23.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest23.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest23.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest23.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest230.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest230.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest230.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest230.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest231.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest231.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest231.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest231.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest232.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest232.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest232.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest232.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest233.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest233.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest233.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest233.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest236.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest236.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest236.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest236.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest237.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest237.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest237.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest237.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest238.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest238.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest238.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest238.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest24.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest24.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest24.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest24.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest241.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest241.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest241.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest241.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest242.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest242.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest242.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest242.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest243.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest243.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest243.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest243.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest244.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest244.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest244.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest244.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest245.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest245.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest245.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest245.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest246.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest246.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest246.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest246.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest247.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest247.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest247.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest247.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest248.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest248.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest248.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest248.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest249.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest249.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest249.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest249.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest25.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest25.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest25.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest25.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest250.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest250.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest250.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest250.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest251.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest251.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest251.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest251.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest252.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest252.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest252.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest252.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest254.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest254.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest254.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest254.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest257.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest257.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest257.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest257.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest259.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest259.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest259.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest259.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest26.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest26.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest26.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest26.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest260.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest260.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest260.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest260.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest261.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest261.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest261.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest261.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest263.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest263.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest263.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest263.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest264.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest264.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest264.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest264.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest265.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest265.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest265.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest265.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest266.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest266.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest266.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest266.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest267.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest267.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest267.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest267.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest268.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest268.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest268.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest268.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest269.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest269.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest269.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest269.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest27.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest27.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest27.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest27.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest270.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest270.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest270.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest270.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest271.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest271.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest271.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest271.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest273.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest273.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest273.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest273.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest274.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest274.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest274.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest274.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest275.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest275.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest275.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest275.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest276.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest276.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest276.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest276.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest278.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest278.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest278.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest278.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest279.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest279.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest279.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest279.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest28.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest28.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest28.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest28.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest280.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest280.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest280.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest280.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest281.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest281.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest281.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest281.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest282.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest282.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest282.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest282.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest283.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest283.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest283.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest283.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest285.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest285.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest285.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest285.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest286.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest286.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest286.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest286.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest287.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest287.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest287.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest287.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest288.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest288.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest288.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest288.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest29.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest29.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest29.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest29.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest290.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest290.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest290.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest290.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest291.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest291.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest291.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest291.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest292.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest292.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest292.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest292.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest293.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest293.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest293.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest293.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest294.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest294.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest294.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest294.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest295.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest295.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest295.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest295.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest296.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest296.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest296.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest296.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest297.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest297.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest297.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest297.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest298.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest298.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest298.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest298.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest299.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest299.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest299.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest299.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest3.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest3.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest3.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest30.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest30.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest30.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest30.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest300.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest300.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest300.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest300.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest301.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest301.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest301.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest301.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest302.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest302.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest302.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest302.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest303.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest303.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest303.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest303.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest304.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest304.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest304.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest304.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest305.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest305.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest305.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest305.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest306.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest306.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest306.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest306.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest307.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest307.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest307.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest307.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest308.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest308.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest308.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest308.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest309.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest309.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest309.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest309.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest31.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest31.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest31.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest31.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest310.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest310.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest310.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest310.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest311.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest311.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest311.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest311.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest312.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest312.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest312.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest312.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest313.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest313.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest313.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest313.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest315.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest315.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest315.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest315.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest316.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest316.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest316.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest316.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest318.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest318.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest318.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest318.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest32.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest32.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest32.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest32.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest320.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest320.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest320.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest320.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest321.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest321.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest321.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest321.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest322.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest322.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest322.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest322.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest323.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest323.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest323.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest323.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest324.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest324.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest324.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest324.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest325.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest325.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest325.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest325.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest326.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest326.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest326.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest326.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest327.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest327.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest327.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest327.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest328.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest328.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest328.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest328.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest329.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest329.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest329.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest329.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest33.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest33.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest33.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest33.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest332.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest332.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest332.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest332.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest333.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest333.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest333.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest333.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest334.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest334.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest334.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest334.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest335.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest335.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest335.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest335.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest336.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest336.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest336.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest336.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest337.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest337.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest337.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest337.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest338.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest338.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest338.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest338.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest339.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest339.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest339.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest339.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest340.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest340.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest340.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest340.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest341.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest341.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest341.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest341.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest342.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest342.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest342.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest342.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest343.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest343.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest343.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest343.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest345.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest345.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest345.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest345.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest346.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest346.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest346.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest346.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest347._broken_json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest347._broken_json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest347._broken_json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest347._broken_json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest348.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest348.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest348.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest348.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest349.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest349.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest349.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest349.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest350.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest350.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest350.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest350.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest351.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest351.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest351.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest351.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest352.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest352.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest352.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest352.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest353.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest353.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest353.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest353.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest354.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest354.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest354.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest354.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest355.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest355.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest355.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest355.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest356.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest356.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest356.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest356.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest357.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest357.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest357.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest357.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest358.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest358.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest358.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest358.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest359.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest359.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest359.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest359.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest36.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest36.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest36.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest36.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest360.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest360.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest360.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest360.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest361.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest361.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest361.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest361.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest362.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest362.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest362.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest362.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest363.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest363.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest363.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest363.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest364.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest364.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest364.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest364.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest365.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest365.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest365.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest365.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest366.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest366.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest366.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest366.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest367.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest367.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest367.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest367.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest368.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest368.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest368.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest368.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest369.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest369.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest369.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest369.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest37.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest37.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest37.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest37.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest370.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest370.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest370.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest370.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest371.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest371.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest371.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest371.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest372.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest372.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest372.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest372.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest375.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest375.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest375.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest375.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest376.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest376.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest376.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest376.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest377.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest377.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest377.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest377.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest378.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest378.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest378.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest378.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest379.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest379.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest379.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest379.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest38.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest38.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest38.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest38.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest380.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest380.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest380.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest380.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest381.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest381.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest381.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest381.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest382.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest382.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest382.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest382.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest383.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest383.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest383.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest383.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest39.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest39.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest39.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest39.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest4.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest4.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest4.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest4.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest41.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest41.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest41.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest41.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest42.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest42.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest42.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest42.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest43.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest43.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest43.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest43.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest45.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest45.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest45.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest45.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest46.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest46.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest46.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest46.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest47.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest47.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest47.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest47.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest48.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest48.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest48.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest48.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest49.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest49.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest49.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest49.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest5.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest5.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest5.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest5.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest50.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest50.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest50.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest50.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest51.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest51.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest51.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest51.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest52.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest52.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest52.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest52.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest53.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest53.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest53.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest53.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest54.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest54.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest54.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest54.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest55.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest55.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest55.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest55.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest57.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest57.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest57.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest57.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest58.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest58.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest58.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest58.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest59.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest59.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest59.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest59.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest6.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest6.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest6.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest6.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest60.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest60.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest60.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest60.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest62.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest62.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest62.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest62.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest63.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest63.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest63.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest63.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest64.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest64.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest64.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest64.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest66.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest66.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest66.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest66.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest67.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest67.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest67.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest67.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest69.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest69.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest69.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest69.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest7.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest7.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest7.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest7.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest72.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest72.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest72.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest72.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest73.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest73.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest73.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest73.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest74.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest74.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest74.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest74.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest75.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest75.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest75.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest75.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest77.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest77.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest77.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest77.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest78.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest78.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest78.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest78.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest80.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest80.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest80.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest81.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest81.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest81.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest81.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest82.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest82.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest82.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest82.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest83.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest83.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest83.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest83.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest84.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest84.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest84.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest84.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest85.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest85.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest85.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest85.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest87.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest87.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest87.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest87.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest88.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest88.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest88.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest88.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest89.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest89.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest89.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest89.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest9.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest9.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest9.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest9.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest90.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest90.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest90.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest90.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest92.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest92.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest92.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest92.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest94.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest94.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest94.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest94.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest95.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest95.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest95.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest95.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest96.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest96.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest96.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest97.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest97.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest97.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest97.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest98.json b/c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest98.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom/randomStatetest98.json rename to c/test/testdata/evm/GeneralStateTests/stRandom/randomStatetest98.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/201503110226PYTHON_DUP6.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/201503110226PYTHON_DUP6.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/201503110226PYTHON_DUP6.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/201503110226PYTHON_DUP6.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest384.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest384.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest384.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest384.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest385.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest385.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest385.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest385.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest386.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest386.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest386.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest386.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest387.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest387.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest387.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest387.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest388.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest388.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest388.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest388.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest389.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest389.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest389.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest389.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest391.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest391.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest391.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest391.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest393.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest393.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest393.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest393.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest395.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest395.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest395.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest395.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest396.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest396.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest396.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest396.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest397.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest397.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest397.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest397.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest398.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest398.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest398.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest398.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest399.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest399.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest399.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest399.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest401.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest401.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest401.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest401.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest402.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest402.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest402.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest402.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest404.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest404.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest404.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest404.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest405.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest405.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest405.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest405.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest406.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest406.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest406.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest406.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest407.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest407.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest407.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest407.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest408.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest408.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest408.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest408.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest409.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest409.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest409.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest409.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest410.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest410.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest410.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest410.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest411.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest411.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest411.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest411.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest412.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest412.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest412.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest412.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest413.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest413.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest413.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest413.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest414.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest414.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest414.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest414.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest415.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest415.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest415.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest415.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest416.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest416.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest416.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest416.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest417.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest417.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest417.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest417.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest418.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest418.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest418.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest418.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest419.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest419.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest419.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest419.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest420.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest420.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest420.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest420.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest421.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest421.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest421.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest421.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest422.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest422.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest422.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest422.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest423.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest423.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest423.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest423.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest424.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest424.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest424.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest424.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest425.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest425.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest425.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest425.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest426.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest426.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest426.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest426.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest428.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest428.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest428.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest428.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest429.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest429.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest429.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest429.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest430.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest430.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest430.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest430.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest433.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest433.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest433.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest433.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest435.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest435.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest435.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest435.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest436.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest436.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest436.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest436.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest437.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest437.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest437.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest437.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest438.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest438.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest438.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest438.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest439.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest439.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest439.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest439.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest440.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest440.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest440.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest440.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest441.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest441.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest441.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest441.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest442.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest442.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest442.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest442.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest443.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest443.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest443.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest443.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest444.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest444.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest444.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest444.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest445.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest445.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest445.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest445.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest446.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest446.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest446.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest446.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest447.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest447.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest447.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest447.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest448.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest448.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest448.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest448.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest449.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest449.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest449.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest449.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest450.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest450.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest450.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest450.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest451.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest451.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest451.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest451.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest452.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest452.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest452.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest452.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest454.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest454.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest454.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest454.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest455.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest455.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest455.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest455.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest456.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest456.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest456.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest456.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest457.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest457.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest457.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest457.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest458.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest458.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest458.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest458.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest460.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest460.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest460.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest460.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest461.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest461.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest461.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest461.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest462.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest462.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest462.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest462.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest464.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest464.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest464.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest464.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest465.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest465.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest465.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest465.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest466.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest466.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest466.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest466.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest467.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest467.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest467.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest467.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest468.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest468.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest468.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest468.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest469.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest469.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest469.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest469.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest470.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest470.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest470.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest470.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest471.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest471.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest471.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest471.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest472.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest472.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest472.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest472.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest473.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest473.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest473.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest473.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest474.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest474.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest474.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest474.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest475.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest475.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest475.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest475.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest476.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest476.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest476.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest476.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest477.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest477.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest477.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest477.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest478.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest478.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest478.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest478.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest480.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest480.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest480.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest480.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest481.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest481.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest481.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest481.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest482.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest482.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest482.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest482.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest483.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest483.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest483.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest483.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest484.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest484.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest484.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest484.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest485.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest485.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest485.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest485.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest487.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest487.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest487.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest487.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest488.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest488.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest488.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest488.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest489.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest489.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest489.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest489.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest491.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest491.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest491.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest491.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest493.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest493.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest493.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest493.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest494.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest494.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest494.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest494.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest495.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest495.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest495.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest495.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest496.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest496.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest496.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest496.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest497.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest497.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest497.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest497.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest498.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest498.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest498.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest498.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest499.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest499.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest499.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest499.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest500.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest500.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest500.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest500.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest501.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest501.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest501.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest501.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest502.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest502.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest502.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest502.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest503.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest503.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest503.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest503.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest504.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest504.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest504.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest504.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest505.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest505.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest505.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest505.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest506.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest506.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest506.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest506.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest507.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest507.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest507.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest507.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest508.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest508.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest508.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest508.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest509.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest509.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest509.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest509.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest510.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest510.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest510.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest510.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest511.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest511.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest511.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest511.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest512.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest512.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest512.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest512.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest513.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest513.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest513.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest513.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest514.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest514.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest514.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest514.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest516.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest516.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest516.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest516.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest517.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest517.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest517.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest517.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest518.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest518.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest518.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest518.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest519.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest519.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest519.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest519.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest520.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest520.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest520.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest520.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest521.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest521.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest521.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest521.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest523.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest523.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest523.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest523.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest524.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest524.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest524.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest524.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest525.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest525.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest525.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest525.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest526.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest526.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest526.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest526.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest527.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest527.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest527.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest527.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest528.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest528.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest528.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest528.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest531.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest531.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest531.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest531.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest532.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest532.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest532.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest532.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest533.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest533.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest533.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest533.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest534.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest534.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest534.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest534.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest535.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest535.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest535.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest535.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest536.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest536.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest536.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest536.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest537.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest537.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest537.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest537.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest538.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest538.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest538.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest538.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest539.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest539.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest539.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest539.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest541.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest541.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest541.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest541.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest542.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest542.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest542.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest542.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest543.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest543.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest543.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest543.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest544.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest544.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest544.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest544.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest545.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest545.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest545.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest545.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest546.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest546.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest546.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest546.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest547.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest547.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest547.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest547.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest548.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest548.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest548.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest548.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest549.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest549.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest549.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest549.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest550.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest550.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest550.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest550.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest552.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest552.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest552.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest552.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest553.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest553.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest553.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest553.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest554.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest554.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest554.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest554.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest555.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest555.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest555.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest555.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest556.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest556.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest556.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest556.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest558.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest558.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest558.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest558.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest559.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest559.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest559.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest559.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest560.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest560.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest560.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest560.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest562.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest562.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest562.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest562.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest563.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest563.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest563.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest563.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest564.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest564.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest564.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest564.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest565.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest565.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest565.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest565.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest566.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest566.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest566.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest566.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest567.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest567.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest567.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest567.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest569.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest569.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest569.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest569.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest571.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest571.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest571.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest571.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest572.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest572.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest572.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest572.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest573.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest573.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest573.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest573.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest574.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest574.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest574.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest574.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest575.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest575.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest575.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest575.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest576.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest576.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest576.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest576.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest577.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest577.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest577.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest577.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest578.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest578.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest578.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest578.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest579.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest579.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest579.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest579.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest580.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest580.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest580.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest580.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest581.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest581.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest581.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest581.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest582.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest582.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest582.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest582.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest583.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest583.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest583.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest583.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest584.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest584.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest584.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest584.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest585.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest585.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest585.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest585.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest586.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest586.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest586.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest586.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest587.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest587.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest587.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest587.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest588.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest588.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest588.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest588.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest589.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest589.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest589.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest589.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest592.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest592.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest592.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest592.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest594.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest594.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest594.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest594.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest596.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest596.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest596.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest596.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest597.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest597.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest597.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest597.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest599.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest599.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest599.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest599.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest600.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest600.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest600.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest600.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest601.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest601.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest601.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest601.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest602.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest602.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest602.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest602.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest603.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest603.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest603.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest603.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest604.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest604.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest604.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest604.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest605.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest605.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest605.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest605.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest607.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest607.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest607.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest607.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest608.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest608.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest608.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest608.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest609.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest609.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest609.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest609.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest610.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest610.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest610.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest610.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest611.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest611.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest611.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest611.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest612.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest612.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest612.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest612.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest615.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest615.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest615.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest615.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest616.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest616.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest616.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest616.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest618.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest618.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest618.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest618.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest619.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest619.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest619.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest619.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest620.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest620.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest620.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest620.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest621.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest621.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest621.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest621.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest624.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest624.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest624.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest624.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest625.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest625.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest625.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest625.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest626.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest626.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest626.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest626.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest627.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest627.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest627.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest627.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest628.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest628.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest628.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest628.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest629.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest629.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest629.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest629.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest630.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest630.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest630.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest630.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest632.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest632.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest632.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest632.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest633.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest633.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest633.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest633.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest635.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest635.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest635.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest635.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest636.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest636.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest636.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest636.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest637.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest637.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest637.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest637.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest638.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest638.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest638.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest638.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest639.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest639.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest639.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest639.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest640.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest640.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest640.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest640.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest641.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest641.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest641.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest641.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest642.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest642.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest642.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest642.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest643._create_json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest643._create_json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest643._create_json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest643._create_json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest644.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest644.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest644.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest644.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest645.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest645.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest645.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest645.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest646.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest646.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest646.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest646.json diff --git a/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest647.json b/c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest647.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest647.json rename to c/test/testdata/evm/GeneralStateTests/stRandom2/randomStatetest647.json diff --git a/test/testdata/evm/GeneralStateTests/stRecursiveCreate/recursiveCreate.json b/c/test/testdata/evm/GeneralStateTests/stRecursiveCreate/recursiveCreate.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRecursiveCreate/recursiveCreate.json rename to c/test/testdata/evm/GeneralStateTests/stRecursiveCreate/recursiveCreate.json diff --git a/test/testdata/evm/GeneralStateTests/stRecursiveCreate/recursiveCreateReturnValue.json b/c/test/testdata/evm/GeneralStateTests/stRecursiveCreate/recursiveCreateReturnValue.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRecursiveCreate/recursiveCreateReturnValue.json rename to c/test/testdata/evm/GeneralStateTests/stRecursiveCreate/recursiveCreateReturnValue.json diff --git a/test/testdata/evm/GeneralStateTests/stRefundTest/refund50_1.json b/c/test/testdata/evm/GeneralStateTests/stRefundTest/refund50_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRefundTest/refund50_1.json rename to c/test/testdata/evm/GeneralStateTests/stRefundTest/refund50_1.json diff --git a/test/testdata/evm/GeneralStateTests/stRefundTest/refund50_2.json b/c/test/testdata/evm/GeneralStateTests/stRefundTest/refund50_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRefundTest/refund50_2.json rename to c/test/testdata/evm/GeneralStateTests/stRefundTest/refund50_2.json diff --git a/test/testdata/evm/GeneralStateTests/stRefundTest/refund50percentCap.json b/c/test/testdata/evm/GeneralStateTests/stRefundTest/refund50percentCap.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRefundTest/refund50percentCap.json rename to c/test/testdata/evm/GeneralStateTests/stRefundTest/refund50percentCap.json diff --git a/test/testdata/evm/GeneralStateTests/stRefundTest/refund600.json b/c/test/testdata/evm/GeneralStateTests/stRefundTest/refund600.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRefundTest/refund600.json rename to c/test/testdata/evm/GeneralStateTests/stRefundTest/refund600.json diff --git a/test/testdata/evm/GeneralStateTests/stRefundTest/refundSuicide50procentCap.json b/c/test/testdata/evm/GeneralStateTests/stRefundTest/refundSuicide50procentCap.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRefundTest/refundSuicide50procentCap.json rename to c/test/testdata/evm/GeneralStateTests/stRefundTest/refundSuicide50procentCap.json diff --git a/test/testdata/evm/GeneralStateTests/stRefundTest/refund_CallA.json b/c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_CallA.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRefundTest/refund_CallA.json rename to c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_CallA.json diff --git a/test/testdata/evm/GeneralStateTests/stRefundTest/refund_CallA_OOG.json b/c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_CallA_OOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRefundTest/refund_CallA_OOG.json rename to c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_CallA_OOG.json diff --git a/test/testdata/evm/GeneralStateTests/stRefundTest/refund_CallA_notEnoughGasInCall.json b/c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_CallA_notEnoughGasInCall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRefundTest/refund_CallA_notEnoughGasInCall.json rename to c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_CallA_notEnoughGasInCall.json diff --git a/test/testdata/evm/GeneralStateTests/stRefundTest/refund_CallToSuicideNoStorage.json b/c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_CallToSuicideNoStorage.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRefundTest/refund_CallToSuicideNoStorage.json rename to c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_CallToSuicideNoStorage.json diff --git a/test/testdata/evm/GeneralStateTests/stRefundTest/refund_CallToSuicideStorage.json b/c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_CallToSuicideStorage.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRefundTest/refund_CallToSuicideStorage.json rename to c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_CallToSuicideStorage.json diff --git a/test/testdata/evm/GeneralStateTests/stRefundTest/refund_CallToSuicideTwice.json b/c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_CallToSuicideTwice.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRefundTest/refund_CallToSuicideTwice.json rename to c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_CallToSuicideTwice.json diff --git a/test/testdata/evm/GeneralStateTests/stRefundTest/refund_NoOOG_1.json b/c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_NoOOG_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRefundTest/refund_NoOOG_1.json rename to c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_NoOOG_1.json diff --git a/test/testdata/evm/GeneralStateTests/stRefundTest/refund_OOG.json b/c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_OOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRefundTest/refund_OOG.json rename to c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_OOG.json diff --git a/test/testdata/evm/GeneralStateTests/stRefundTest/refund_TxToSuicide.json b/c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_TxToSuicide.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRefundTest/refund_TxToSuicide.json rename to c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_TxToSuicide.json diff --git a/test/testdata/evm/GeneralStateTests/stRefundTest/refund_TxToSuicideOOG.json b/c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_TxToSuicideOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRefundTest/refund_TxToSuicideOOG.json rename to c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_TxToSuicideOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stRefundTest/refund_changeNonZeroStorage.json b/c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_changeNonZeroStorage.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRefundTest/refund_changeNonZeroStorage.json rename to c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_changeNonZeroStorage.json diff --git a/test/testdata/evm/GeneralStateTests/stRefundTest/refund_getEtherBack.json b/c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_getEtherBack.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRefundTest/refund_getEtherBack.json rename to c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_getEtherBack.json diff --git a/test/testdata/evm/GeneralStateTests/stRefundTest/refund_multimpleSuicide.json b/c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_multimpleSuicide.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRefundTest/refund_multimpleSuicide.json rename to c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_multimpleSuicide.json diff --git a/test/testdata/evm/GeneralStateTests/stRefundTest/refund_singleSuicide.json b/c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_singleSuicide.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRefundTest/refund_singleSuicide.json rename to c/test/testdata/evm/GeneralStateTests/stRefundTest/refund_singleSuicide.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/call_ecrec_success_empty_then_returndatasize.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/call_ecrec_success_empty_then_returndatasize.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/call_ecrec_success_empty_then_returndatasize.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/call_ecrec_success_empty_then_returndatasize.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/call_outsize_then_create_successful_then_returndatasize.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/call_outsize_then_create_successful_then_returndatasize.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/call_outsize_then_create_successful_then_returndatasize.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/call_outsize_then_create_successful_then_returndatasize.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/call_then_call_value_fail_then_returndatasize.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/call_then_call_value_fail_then_returndatasize.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/call_then_call_value_fail_then_returndatasize.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/call_then_call_value_fail_then_returndatasize.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/call_then_create_successful_then_returndatasize.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/call_then_create_successful_then_returndatasize.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/call_then_create_successful_then_returndatasize.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/call_then_create_successful_then_returndatasize.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/create_callprecompile_returndatasize.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/create_callprecompile_returndatasize.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/create_callprecompile_returndatasize.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/create_callprecompile_returndatasize.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/modexp_modsize0_returndatasize.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/modexp_modsize0_returndatasize.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/modexp_modsize0_returndatasize.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/modexp_modsize0_returndatasize.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_0_0_following_successful_create.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_0_0_following_successful_create.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_0_0_following_successful_create.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_0_0_following_successful_create.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_afterFailing_create.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_afterFailing_create.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_afterFailing_create.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_afterFailing_create.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_failing_callcode.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_failing_callcode.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_failing_callcode.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_failing_callcode.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_failing_delegatecall.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_failing_delegatecall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_failing_delegatecall.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_failing_delegatecall.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_failing_staticcall.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_failing_staticcall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_failing_staticcall.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_failing_staticcall.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_revert_in_staticcall.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_revert_in_staticcall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_revert_in_staticcall.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_revert_in_staticcall.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_successful_callcode.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_successful_callcode.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_successful_callcode.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_successful_callcode.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_successful_delegatecall.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_successful_delegatecall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_successful_delegatecall.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_successful_delegatecall.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_successful_staticcall.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_successful_staticcall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_successful_staticcall.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_after_successful_staticcall.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_call.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_call.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_call.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_call.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_create.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_create.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_create.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_create.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_failing_call.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_failing_call.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_failing_call.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_failing_call.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_revert.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_revert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_revert.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_revert.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_revert_in_create.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_revert_in_create.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_revert_in_create.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_revert_in_create.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_successful_create.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_successful_create.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_successful_create.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_successful_create.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_too_big_transfer.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_too_big_transfer.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_too_big_transfer.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_following_too_big_transfer.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_initial.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_initial.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_initial.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_initial.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_initial_256.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_initial_256.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_initial_256.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_initial_256.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_initial_big_sum.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_initial_big_sum.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_initial_big_sum.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_initial_big_sum.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_overrun.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_overrun.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_overrun.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatacopy_overrun.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_failing_callcode.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_failing_callcode.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_failing_callcode.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_failing_callcode.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_failing_delegatecall.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_failing_delegatecall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_failing_delegatecall.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_failing_delegatecall.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_failing_staticcall.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_failing_staticcall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_failing_staticcall.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_failing_staticcall.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_oog_after_deeper.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_oog_after_deeper.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_oog_after_deeper.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_oog_after_deeper.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_successful_callcode.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_successful_callcode.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_successful_callcode.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_successful_callcode.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_successful_delegatecall.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_successful_delegatecall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_successful_delegatecall.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_successful_delegatecall.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_successful_staticcall.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_successful_staticcall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_successful_staticcall.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_after_successful_staticcall.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_bug.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_bug.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_bug.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_bug.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_following_successful_create.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_following_successful_create.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_following_successful_create.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_following_successful_create.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_initial.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_initial.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_initial.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_initial.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_initial_zero_read.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_initial_zero_read.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_initial_zero_read.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/returndatasize_initial_zero_read.json diff --git a/test/testdata/evm/GeneralStateTests/stReturnDataTest/subcallReturnMoreThenExpected.json b/c/test/testdata/evm/GeneralStateTests/stReturnDataTest/subcallReturnMoreThenExpected.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stReturnDataTest/subcallReturnMoreThenExpected.json rename to c/test/testdata/evm/GeneralStateTests/stReturnDataTest/subcallReturnMoreThenExpected.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/LoopCallsDepthThenRevert.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/LoopCallsDepthThenRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/LoopCallsDepthThenRevert.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/LoopCallsDepthThenRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/LoopCallsDepthThenRevert2.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/LoopCallsDepthThenRevert2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/LoopCallsDepthThenRevert2.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/LoopCallsDepthThenRevert2.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/LoopCallsDepthThenRevert3.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/LoopCallsDepthThenRevert3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/LoopCallsDepthThenRevert3.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/LoopCallsDepthThenRevert3.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/LoopCallsThenRevert.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/LoopCallsThenRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/LoopCallsThenRevert.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/LoopCallsThenRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/LoopDelegateCallsDepthThenRevert.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/LoopDelegateCallsDepthThenRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/LoopDelegateCallsDepthThenRevert.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/LoopDelegateCallsDepthThenRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/NashatyrevSuicideRevert.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/NashatyrevSuicideRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/NashatyrevSuicideRevert.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/NashatyrevSuicideRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/PythonRevertTestTue201814-1430.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/PythonRevertTestTue201814-1430.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/PythonRevertTestTue201814-1430.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/PythonRevertTestTue201814-1430.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertDepth2.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertDepth2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertDepth2.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertDepth2.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertDepthCreateAddressCollision.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertDepthCreateAddressCollision.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertDepthCreateAddressCollision.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertDepthCreateAddressCollision.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertDepthCreateOOG.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertDepthCreateOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertDepthCreateOOG.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertDepthCreateOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertInCallCode.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertInCallCode.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertInCallCode.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertInCallCode.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertInCreateInInit.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertInCreateInInit.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertInCreateInInit.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertInCreateInInit.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertInDelegateCall.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertInDelegateCall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertInDelegateCall.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertInDelegateCall.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertInStaticCall.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertInStaticCall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertInStaticCall.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertInStaticCall.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOnEmptyStack.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOnEmptyStack.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertOnEmptyStack.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOnEmptyStack.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcode.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcode.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcode.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcode.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeCalls.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeCalls.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeCalls.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeCalls.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeCreate.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeCreate.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeCreate.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeCreate.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeDirectCall.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeDirectCall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeDirectCall.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeDirectCall.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeInCallsOnNonEmptyReturnData.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeInCallsOnNonEmptyReturnData.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeInCallsOnNonEmptyReturnData.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeInCallsOnNonEmptyReturnData.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeInCreateReturns.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeInCreateReturns.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeInCreateReturns.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeInCreateReturns.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeInInit.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeInInit.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeInInit.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeInInit.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeMultipleSubCalls.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeMultipleSubCalls.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeMultipleSubCalls.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeMultipleSubCalls.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeReturn.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeReturn.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeReturn.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeReturn.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeWithBigOutputInInit.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeWithBigOutputInInit.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeWithBigOutputInInit.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertOpcodeWithBigOutputInInit.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrecompiledTouch.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrecompiledTouch.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrecompiledTouch.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrecompiledTouch.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrecompiledTouch_nonce.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrecompiledTouch_nonce.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrecompiledTouch_nonce.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrecompiledTouch_nonce.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrecompiledTouch_noncestorage.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrecompiledTouch_noncestorage.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrecompiledTouch_noncestorage.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrecompiledTouch_noncestorage.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrecompiledTouch_storage.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrecompiledTouch_storage.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrecompiledTouch_storage.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrecompiledTouch_storage.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefound.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefound.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefound.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefound.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundCall.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundCall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundCall.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundCall.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundCallOOG.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundCallOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundCallOOG.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundCallOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundEmpty.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundEmpty.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundEmpty.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundEmpty.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundEmptyCall.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundEmptyCall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundEmptyCall.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundEmptyCall.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundEmptyCallOOG.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundEmptyCallOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundEmptyCallOOG.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundEmptyCallOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundEmptyOOG.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundEmptyOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundEmptyOOG.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundEmptyOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundOOG.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundOOG.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertPrefoundOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertRemoteSubCallStorageOOG.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertRemoteSubCallStorageOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertRemoteSubCallStorageOOG.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertRemoteSubCallStorageOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertRemoteSubCallStorageOOG2.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertRemoteSubCallStorageOOG2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertRemoteSubCallStorageOOG2.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertRemoteSubCallStorageOOG2.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertSubCallStorageOOG.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertSubCallStorageOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertSubCallStorageOOG.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertSubCallStorageOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/RevertSubCallStorageOOG2.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertSubCallStorageOOG2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/RevertSubCallStorageOOG2.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/RevertSubCallStorageOOG2.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/TouchToEmptyAccountRevert.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/TouchToEmptyAccountRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/TouchToEmptyAccountRevert.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/TouchToEmptyAccountRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/TouchToEmptyAccountRevert2.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/TouchToEmptyAccountRevert2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/TouchToEmptyAccountRevert2.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/TouchToEmptyAccountRevert2.json diff --git a/test/testdata/evm/GeneralStateTests/stRevertTest/TouchToEmptyAccountRevert3.json b/c/test/testdata/evm/GeneralStateTests/stRevertTest/TouchToEmptyAccountRevert3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stRevertTest/TouchToEmptyAccountRevert3.json rename to c/test/testdata/evm/GeneralStateTests/stRevertTest/TouchToEmptyAccountRevert3.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/InitCollision.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/InitCollision.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/InitCollision.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/InitCollision.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/InitCollisionNonZeroNonce.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/InitCollisionNonZeroNonce.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/InitCollisionNonZeroNonce.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/InitCollisionNonZeroNonce.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/SstoreCallToSelfSubRefundBelowZero.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/SstoreCallToSelfSubRefundBelowZero.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/SstoreCallToSelfSubRefundBelowZero.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/SstoreCallToSelfSubRefundBelowZero.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0to0.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0to0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0to0.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0to0.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0to0to0.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0to0to0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0to0to0.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0to0to0.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0to0toX.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0to0toX.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0to0toX.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0to0toX.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0toX.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0toX.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0toX.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0toX.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0toXto0.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0toXto0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0toXto0.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0toXto0.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0toXto0toX.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0toXto0toX.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0toXto0toX.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0toXto0toX.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0toXtoX.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0toXtoX.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0toXtoX.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0toXtoX.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0toXtoY.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0toXtoY.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0toXtoY.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_0toXtoY.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_Xto0.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_Xto0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_Xto0.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_Xto0.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_Xto0to0.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_Xto0to0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_Xto0to0.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_Xto0to0.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_Xto0toX.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_Xto0toX.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_Xto0toX.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_Xto0toX.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_Xto0toXto0.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_Xto0toXto0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_Xto0toXto0.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_Xto0toXto0.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_Xto0toY.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_Xto0toY.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_Xto0toY.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_Xto0toY.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoX.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoX.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoX.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoX.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoXto0.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoXto0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoXto0.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoXto0.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoXtoX.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoXtoX.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoXtoX.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoXtoX.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoXtoY.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoXtoY.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoXtoY.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoXtoY.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoY.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoY.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoY.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoY.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoYto0.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoYto0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoYto0.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoYto0.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoYtoX.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoYtoX.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoYtoX.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoYtoX.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoYtoY.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoYtoY.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoYtoY.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoYtoY.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoYtoZ.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoYtoZ.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoYtoZ.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_XtoYtoZ.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_changeFromExternalCallInInitCode.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_changeFromExternalCallInInitCode.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_changeFromExternalCallInInitCode.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_changeFromExternalCallInInitCode.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_combinations_initial0.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_combinations_initial0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_combinations_initial0.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_combinations_initial0.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_combinations_initial1.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_combinations_initial1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_combinations_initial1.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_combinations_initial1.json diff --git a/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_combinations_initial2.json b/c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_combinations_initial2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_combinations_initial2.json rename to c/test/testdata/evm/GeneralStateTests/stSStoreTest/sstore_combinations_initial2.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/.stub b/c/test/testdata/evm/GeneralStateTests/stShift/.stub similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/.stub rename to c/test/testdata/evm/GeneralStateTests/stShift/.stub diff --git a/test/testdata/evm/GeneralStateTests/stShift/sar00.json b/c/test/testdata/evm/GeneralStateTests/stShift/sar00.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/sar00.json rename to c/test/testdata/evm/GeneralStateTests/stShift/sar00.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/sar01.json b/c/test/testdata/evm/GeneralStateTests/stShift/sar01.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/sar01.json rename to c/test/testdata/evm/GeneralStateTests/stShift/sar01.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/sar10.json b/c/test/testdata/evm/GeneralStateTests/stShift/sar10.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/sar10.json rename to c/test/testdata/evm/GeneralStateTests/stShift/sar10.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/sar11.json b/c/test/testdata/evm/GeneralStateTests/stShift/sar11.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/sar11.json rename to c/test/testdata/evm/GeneralStateTests/stShift/sar11.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/sar_0_256-1.json b/c/test/testdata/evm/GeneralStateTests/stShift/sar_0_256-1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/sar_0_256-1.json rename to c/test/testdata/evm/GeneralStateTests/stShift/sar_0_256-1.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/sar_2^254_254.json b/c/test/testdata/evm/GeneralStateTests/stShift/sar_2^254_254.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/sar_2^254_254.json rename to c/test/testdata/evm/GeneralStateTests/stShift/sar_2^254_254.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/sar_2^255-1_248.json b/c/test/testdata/evm/GeneralStateTests/stShift/sar_2^255-1_248.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/sar_2^255-1_248.json rename to c/test/testdata/evm/GeneralStateTests/stShift/sar_2^255-1_248.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/sar_2^255-1_254.json b/c/test/testdata/evm/GeneralStateTests/stShift/sar_2^255-1_254.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/sar_2^255-1_254.json rename to c/test/testdata/evm/GeneralStateTests/stShift/sar_2^255-1_254.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/sar_2^255-1_255.json b/c/test/testdata/evm/GeneralStateTests/stShift/sar_2^255-1_255.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/sar_2^255-1_255.json rename to c/test/testdata/evm/GeneralStateTests/stShift/sar_2^255-1_255.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/sar_2^255-1_256.json b/c/test/testdata/evm/GeneralStateTests/stShift/sar_2^255-1_256.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/sar_2^255-1_256.json rename to c/test/testdata/evm/GeneralStateTests/stShift/sar_2^255-1_256.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/sar_2^255_1.json b/c/test/testdata/evm/GeneralStateTests/stShift/sar_2^255_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/sar_2^255_1.json rename to c/test/testdata/evm/GeneralStateTests/stShift/sar_2^255_1.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/sar_2^255_255.json b/c/test/testdata/evm/GeneralStateTests/stShift/sar_2^255_255.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/sar_2^255_255.json rename to c/test/testdata/evm/GeneralStateTests/stShift/sar_2^255_255.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/sar_2^255_256.json b/c/test/testdata/evm/GeneralStateTests/stShift/sar_2^255_256.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/sar_2^255_256.json rename to c/test/testdata/evm/GeneralStateTests/stShift/sar_2^255_256.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/sar_2^255_257.json b/c/test/testdata/evm/GeneralStateTests/stShift/sar_2^255_257.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/sar_2^255_257.json rename to c/test/testdata/evm/GeneralStateTests/stShift/sar_2^255_257.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/sar_2^256-1_0.json b/c/test/testdata/evm/GeneralStateTests/stShift/sar_2^256-1_0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/sar_2^256-1_0.json rename to c/test/testdata/evm/GeneralStateTests/stShift/sar_2^256-1_0.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/sar_2^256-1_1.json b/c/test/testdata/evm/GeneralStateTests/stShift/sar_2^256-1_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/sar_2^256-1_1.json rename to c/test/testdata/evm/GeneralStateTests/stShift/sar_2^256-1_1.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/sar_2^256-1_255.json b/c/test/testdata/evm/GeneralStateTests/stShift/sar_2^256-1_255.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/sar_2^256-1_255.json rename to c/test/testdata/evm/GeneralStateTests/stShift/sar_2^256-1_255.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/sar_2^256-1_256.json b/c/test/testdata/evm/GeneralStateTests/stShift/sar_2^256-1_256.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/sar_2^256-1_256.json rename to c/test/testdata/evm/GeneralStateTests/stShift/sar_2^256-1_256.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/shiftCombinations.json b/c/test/testdata/evm/GeneralStateTests/stShift/shiftCombinations.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/shiftCombinations.json rename to c/test/testdata/evm/GeneralStateTests/stShift/shiftCombinations.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/shl01-0100.json b/c/test/testdata/evm/GeneralStateTests/stShift/shl01-0100.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/shl01-0100.json rename to c/test/testdata/evm/GeneralStateTests/stShift/shl01-0100.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/shl01-0101.json b/c/test/testdata/evm/GeneralStateTests/stShift/shl01-0101.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/shl01-0101.json rename to c/test/testdata/evm/GeneralStateTests/stShift/shl01-0101.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/shl01-ff.json b/c/test/testdata/evm/GeneralStateTests/stShift/shl01-ff.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/shl01-ff.json rename to c/test/testdata/evm/GeneralStateTests/stShift/shl01-ff.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/shl01.json b/c/test/testdata/evm/GeneralStateTests/stShift/shl01.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/shl01.json rename to c/test/testdata/evm/GeneralStateTests/stShift/shl01.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/shl10.json b/c/test/testdata/evm/GeneralStateTests/stShift/shl10.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/shl10.json rename to c/test/testdata/evm/GeneralStateTests/stShift/shl10.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/shl11.json b/c/test/testdata/evm/GeneralStateTests/stShift/shl11.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/shl11.json rename to c/test/testdata/evm/GeneralStateTests/stShift/shl11.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/shl_-1_0.json b/c/test/testdata/evm/GeneralStateTests/stShift/shl_-1_0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/shl_-1_0.json rename to c/test/testdata/evm/GeneralStateTests/stShift/shl_-1_0.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/shl_-1_1.json b/c/test/testdata/evm/GeneralStateTests/stShift/shl_-1_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/shl_-1_1.json rename to c/test/testdata/evm/GeneralStateTests/stShift/shl_-1_1.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/shl_-1_255.json b/c/test/testdata/evm/GeneralStateTests/stShift/shl_-1_255.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/shl_-1_255.json rename to c/test/testdata/evm/GeneralStateTests/stShift/shl_-1_255.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/shl_-1_256.json b/c/test/testdata/evm/GeneralStateTests/stShift/shl_-1_256.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/shl_-1_256.json rename to c/test/testdata/evm/GeneralStateTests/stShift/shl_-1_256.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/shl_2^255-1_1.json b/c/test/testdata/evm/GeneralStateTests/stShift/shl_2^255-1_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/shl_2^255-1_1.json rename to c/test/testdata/evm/GeneralStateTests/stShift/shl_2^255-1_1.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/shr01.json b/c/test/testdata/evm/GeneralStateTests/stShift/shr01.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/shr01.json rename to c/test/testdata/evm/GeneralStateTests/stShift/shr01.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/shr10.json b/c/test/testdata/evm/GeneralStateTests/stShift/shr10.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/shr10.json rename to c/test/testdata/evm/GeneralStateTests/stShift/shr10.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/shr11.json b/c/test/testdata/evm/GeneralStateTests/stShift/shr11.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/shr11.json rename to c/test/testdata/evm/GeneralStateTests/stShift/shr11.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/shr_-1_0.json b/c/test/testdata/evm/GeneralStateTests/stShift/shr_-1_0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/shr_-1_0.json rename to c/test/testdata/evm/GeneralStateTests/stShift/shr_-1_0.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/shr_-1_1.json b/c/test/testdata/evm/GeneralStateTests/stShift/shr_-1_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/shr_-1_1.json rename to c/test/testdata/evm/GeneralStateTests/stShift/shr_-1_1.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/shr_-1_255.json b/c/test/testdata/evm/GeneralStateTests/stShift/shr_-1_255.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/shr_-1_255.json rename to c/test/testdata/evm/GeneralStateTests/stShift/shr_-1_255.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/shr_-1_256.json b/c/test/testdata/evm/GeneralStateTests/stShift/shr_-1_256.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/shr_-1_256.json rename to c/test/testdata/evm/GeneralStateTests/stShift/shr_-1_256.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/shr_2^255_1.json b/c/test/testdata/evm/GeneralStateTests/stShift/shr_2^255_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/shr_2^255_1.json rename to c/test/testdata/evm/GeneralStateTests/stShift/shr_2^255_1.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/shr_2^255_255.json b/c/test/testdata/evm/GeneralStateTests/stShift/shr_2^255_255.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/shr_2^255_255.json rename to c/test/testdata/evm/GeneralStateTests/stShift/shr_2^255_255.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/shr_2^255_256.json b/c/test/testdata/evm/GeneralStateTests/stShift/shr_2^255_256.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/shr_2^255_256.json rename to c/test/testdata/evm/GeneralStateTests/stShift/shr_2^255_256.json diff --git a/test/testdata/evm/GeneralStateTests/stShift/shr_2^255_257.json b/c/test/testdata/evm/GeneralStateTests/stShift/shr_2^255_257.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stShift/shr_2^255_257.json rename to c/test/testdata/evm/GeneralStateTests/stShift/shr_2^255_257.json diff --git a/test/testdata/evm/GeneralStateTests/stSolidityTest/AmbiguousMethod.json b/c/test/testdata/evm/GeneralStateTests/stSolidityTest/AmbiguousMethod.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSolidityTest/AmbiguousMethod.json rename to c/test/testdata/evm/GeneralStateTests/stSolidityTest/AmbiguousMethod.json diff --git a/test/testdata/evm/GeneralStateTests/stSolidityTest/CallInfiniteLoop.json b/c/test/testdata/evm/GeneralStateTests/stSolidityTest/CallInfiniteLoop.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSolidityTest/CallInfiniteLoop.json rename to c/test/testdata/evm/GeneralStateTests/stSolidityTest/CallInfiniteLoop.json diff --git a/test/testdata/evm/GeneralStateTests/stSolidityTest/CallLowLevelCreatesSolidity.json b/c/test/testdata/evm/GeneralStateTests/stSolidityTest/CallLowLevelCreatesSolidity.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSolidityTest/CallLowLevelCreatesSolidity.json rename to c/test/testdata/evm/GeneralStateTests/stSolidityTest/CallLowLevelCreatesSolidity.json diff --git a/test/testdata/evm/GeneralStateTests/stSolidityTest/CallRecursiveMethods.json b/c/test/testdata/evm/GeneralStateTests/stSolidityTest/CallRecursiveMethods.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSolidityTest/CallRecursiveMethods.json rename to c/test/testdata/evm/GeneralStateTests/stSolidityTest/CallRecursiveMethods.json diff --git a/test/testdata/evm/GeneralStateTests/stSolidityTest/ContractInheritance.json b/c/test/testdata/evm/GeneralStateTests/stSolidityTest/ContractInheritance.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSolidityTest/ContractInheritance.json rename to c/test/testdata/evm/GeneralStateTests/stSolidityTest/ContractInheritance.json diff --git a/test/testdata/evm/GeneralStateTests/stSolidityTest/CreateContractFromMethod.json b/c/test/testdata/evm/GeneralStateTests/stSolidityTest/CreateContractFromMethod.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSolidityTest/CreateContractFromMethod.json rename to c/test/testdata/evm/GeneralStateTests/stSolidityTest/CreateContractFromMethod.json diff --git a/test/testdata/evm/GeneralStateTests/stSolidityTest/RecursiveCreateContracts.json b/c/test/testdata/evm/GeneralStateTests/stSolidityTest/RecursiveCreateContracts.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSolidityTest/RecursiveCreateContracts.json rename to c/test/testdata/evm/GeneralStateTests/stSolidityTest/RecursiveCreateContracts.json diff --git a/test/testdata/evm/GeneralStateTests/stSolidityTest/RecursiveCreateContractsCreate4Contracts.json b/c/test/testdata/evm/GeneralStateTests/stSolidityTest/RecursiveCreateContractsCreate4Contracts.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSolidityTest/RecursiveCreateContractsCreate4Contracts.json rename to c/test/testdata/evm/GeneralStateTests/stSolidityTest/RecursiveCreateContractsCreate4Contracts.json diff --git a/test/testdata/evm/GeneralStateTests/stSolidityTest/TestBlockAndTransactionProperties.json b/c/test/testdata/evm/GeneralStateTests/stSolidityTest/TestBlockAndTransactionProperties.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSolidityTest/TestBlockAndTransactionProperties.json rename to c/test/testdata/evm/GeneralStateTests/stSolidityTest/TestBlockAndTransactionProperties.json diff --git a/test/testdata/evm/GeneralStateTests/stSolidityTest/TestContractInteraction.json b/c/test/testdata/evm/GeneralStateTests/stSolidityTest/TestContractInteraction.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSolidityTest/TestContractInteraction.json rename to c/test/testdata/evm/GeneralStateTests/stSolidityTest/TestContractInteraction.json diff --git a/test/testdata/evm/GeneralStateTests/stSolidityTest/TestContractSuicide.json b/c/test/testdata/evm/GeneralStateTests/stSolidityTest/TestContractSuicide.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSolidityTest/TestContractSuicide.json rename to c/test/testdata/evm/GeneralStateTests/stSolidityTest/TestContractSuicide.json diff --git a/test/testdata/evm/GeneralStateTests/stSolidityTest/TestCryptographicFunctions.json b/c/test/testdata/evm/GeneralStateTests/stSolidityTest/TestCryptographicFunctions.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSolidityTest/TestCryptographicFunctions.json rename to c/test/testdata/evm/GeneralStateTests/stSolidityTest/TestCryptographicFunctions.json diff --git a/test/testdata/evm/GeneralStateTests/stSolidityTest/TestKeywords.json b/c/test/testdata/evm/GeneralStateTests/stSolidityTest/TestKeywords.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSolidityTest/TestKeywords.json rename to c/test/testdata/evm/GeneralStateTests/stSolidityTest/TestKeywords.json diff --git a/test/testdata/evm/GeneralStateTests/stSolidityTest/TestOverflow.json b/c/test/testdata/evm/GeneralStateTests/stSolidityTest/TestOverflow.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSolidityTest/TestOverflow.json rename to c/test/testdata/evm/GeneralStateTests/stSolidityTest/TestOverflow.json diff --git a/test/testdata/evm/GeneralStateTests/stSolidityTest/TestStoreGasPrices.json b/c/test/testdata/evm/GeneralStateTests/stSolidityTest/TestStoreGasPrices.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSolidityTest/TestStoreGasPrices.json rename to c/test/testdata/evm/GeneralStateTests/stSolidityTest/TestStoreGasPrices.json diff --git a/test/testdata/evm/GeneralStateTests/stSolidityTest/TestStructuresAndVariabless.json b/c/test/testdata/evm/GeneralStateTests/stSolidityTest/TestStructuresAndVariabless.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSolidityTest/TestStructuresAndVariabless.json rename to c/test/testdata/evm/GeneralStateTests/stSolidityTest/TestStructuresAndVariabless.json diff --git a/test/testdata/evm/GeneralStateTests/stSpecialTest/FailedCreateRevertsDeletion.json b/c/test/testdata/evm/GeneralStateTests/stSpecialTest/FailedCreateRevertsDeletion.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSpecialTest/FailedCreateRevertsDeletion.json rename to c/test/testdata/evm/GeneralStateTests/stSpecialTest/FailedCreateRevertsDeletion.json diff --git a/test/testdata/evm/GeneralStateTests/stSpecialTest/JUMPDEST_Attack.json b/c/test/testdata/evm/GeneralStateTests/stSpecialTest/JUMPDEST_Attack.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSpecialTest/JUMPDEST_Attack.json rename to c/test/testdata/evm/GeneralStateTests/stSpecialTest/JUMPDEST_Attack.json diff --git a/test/testdata/evm/GeneralStateTests/stSpecialTest/JUMPDEST_AttackwithJump.json b/c/test/testdata/evm/GeneralStateTests/stSpecialTest/JUMPDEST_AttackwithJump.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSpecialTest/JUMPDEST_AttackwithJump.json rename to c/test/testdata/evm/GeneralStateTests/stSpecialTest/JUMPDEST_AttackwithJump.json diff --git a/test/testdata/evm/GeneralStateTests/stSpecialTest/OverflowGasMakeMoney.json b/c/test/testdata/evm/GeneralStateTests/stSpecialTest/OverflowGasMakeMoney.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSpecialTest/OverflowGasMakeMoney.json rename to c/test/testdata/evm/GeneralStateTests/stSpecialTest/OverflowGasMakeMoney.json diff --git a/test/testdata/evm/GeneralStateTests/stSpecialTest/StackDepthLimitSEC.json b/c/test/testdata/evm/GeneralStateTests/stSpecialTest/StackDepthLimitSEC.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSpecialTest/StackDepthLimitSEC.json rename to c/test/testdata/evm/GeneralStateTests/stSpecialTest/StackDepthLimitSEC.json diff --git a/test/testdata/evm/GeneralStateTests/stSpecialTest/block504980.json b/c/test/testdata/evm/GeneralStateTests/stSpecialTest/block504980.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSpecialTest/block504980.json rename to c/test/testdata/evm/GeneralStateTests/stSpecialTest/block504980.json diff --git a/test/testdata/evm/GeneralStateTests/stSpecialTest/deploymentError.json b/c/test/testdata/evm/GeneralStateTests/stSpecialTest/deploymentError.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSpecialTest/deploymentError.json rename to c/test/testdata/evm/GeneralStateTests/stSpecialTest/deploymentError.json diff --git a/test/testdata/evm/GeneralStateTests/stSpecialTest/failed_tx_xcf416c53.json b/c/test/testdata/evm/GeneralStateTests/stSpecialTest/failed_tx_xcf416c53.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSpecialTest/failed_tx_xcf416c53.json rename to c/test/testdata/evm/GeneralStateTests/stSpecialTest/failed_tx_xcf416c53.json diff --git a/test/testdata/evm/GeneralStateTests/stSpecialTest/gasPrice0.json b/c/test/testdata/evm/GeneralStateTests/stSpecialTest/gasPrice0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSpecialTest/gasPrice0.json rename to c/test/testdata/evm/GeneralStateTests/stSpecialTest/gasPrice0.json diff --git a/test/testdata/evm/GeneralStateTests/stSpecialTest/makeMoney.json b/c/test/testdata/evm/GeneralStateTests/stSpecialTest/makeMoney.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSpecialTest/makeMoney.json rename to c/test/testdata/evm/GeneralStateTests/stSpecialTest/makeMoney.json diff --git a/test/testdata/evm/GeneralStateTests/stSpecialTest/push32withoutByte.json b/c/test/testdata/evm/GeneralStateTests/stSpecialTest/push32withoutByte.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSpecialTest/push32withoutByte.json rename to c/test/testdata/evm/GeneralStateTests/stSpecialTest/push32withoutByte.json diff --git a/test/testdata/evm/GeneralStateTests/stSpecialTest/sha3_deja.json b/c/test/testdata/evm/GeneralStateTests/stSpecialTest/sha3_deja.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSpecialTest/sha3_deja.json rename to c/test/testdata/evm/GeneralStateTests/stSpecialTest/sha3_deja.json diff --git a/test/testdata/evm/GeneralStateTests/stSpecialTest/txCost-sec73.json b/c/test/testdata/evm/GeneralStateTests/stSpecialTest/txCost-sec73.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSpecialTest/txCost-sec73.json rename to c/test/testdata/evm/GeneralStateTests/stSpecialTest/txCost-sec73.json diff --git a/test/testdata/evm/GeneralStateTests/stSpecialTest/tx_e1c174e2.json b/c/test/testdata/evm/GeneralStateTests/stSpecialTest/tx_e1c174e2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSpecialTest/tx_e1c174e2.json rename to c/test/testdata/evm/GeneralStateTests/stSpecialTest/tx_e1c174e2.json diff --git a/test/testdata/evm/GeneralStateTests/stStackTests/shallowStack.json b/c/test/testdata/evm/GeneralStateTests/stStackTests/shallowStack.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStackTests/shallowStack.json rename to c/test/testdata/evm/GeneralStateTests/stStackTests/shallowStack.json diff --git a/test/testdata/evm/GeneralStateTests/stStackTests/stackOverflow.json b/c/test/testdata/evm/GeneralStateTests/stStackTests/stackOverflow.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStackTests/stackOverflow.json rename to c/test/testdata/evm/GeneralStateTests/stStackTests/stackOverflow.json diff --git a/test/testdata/evm/GeneralStateTests/stStackTests/stackOverflowDUP.json b/c/test/testdata/evm/GeneralStateTests/stStackTests/stackOverflowDUP.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStackTests/stackOverflowDUP.json rename to c/test/testdata/evm/GeneralStateTests/stStackTests/stackOverflowDUP.json diff --git a/test/testdata/evm/GeneralStateTests/stStackTests/stackOverflowM1.json b/c/test/testdata/evm/GeneralStateTests/stStackTests/stackOverflowM1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStackTests/stackOverflowM1.json rename to c/test/testdata/evm/GeneralStateTests/stStackTests/stackOverflowM1.json diff --git a/test/testdata/evm/GeneralStateTests/stStackTests/stackOverflowM1DUP.json b/c/test/testdata/evm/GeneralStateTests/stStackTests/stackOverflowM1DUP.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStackTests/stackOverflowM1DUP.json rename to c/test/testdata/evm/GeneralStateTests/stStackTests/stackOverflowM1DUP.json diff --git a/test/testdata/evm/GeneralStateTests/stStackTests/stackOverflowM1PUSH.json b/c/test/testdata/evm/GeneralStateTests/stStackTests/stackOverflowM1PUSH.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStackTests/stackOverflowM1PUSH.json rename to c/test/testdata/evm/GeneralStateTests/stStackTests/stackOverflowM1PUSH.json diff --git a/test/testdata/evm/GeneralStateTests/stStackTests/stackOverflowPUSH.json b/c/test/testdata/evm/GeneralStateTests/stStackTests/stackOverflowPUSH.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStackTests/stackOverflowPUSH.json rename to c/test/testdata/evm/GeneralStateTests/stStackTests/stackOverflowPUSH.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_ABAcalls0.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_ABAcalls0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_ABAcalls0.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_ABAcalls0.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_ABAcalls1.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_ABAcalls1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_ABAcalls1.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_ABAcalls1.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_ABAcalls2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_ABAcalls2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_ABAcalls2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_ABAcalls2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_ABAcalls3.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_ABAcalls3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_ABAcalls3.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_ABAcalls3.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_ABAcallsSuicide0.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_ABAcallsSuicide0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_ABAcallsSuicide0.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_ABAcallsSuicide0.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_ABAcallsSuicide1.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_ABAcallsSuicide1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_ABAcallsSuicide1.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_ABAcallsSuicide1.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CALL_OneVCallSuicide.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CALL_OneVCallSuicide.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CALL_OneVCallSuicide.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CALL_OneVCallSuicide.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CALL_ZeroVCallSuicide.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CALL_ZeroVCallSuicide.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CALL_ZeroVCallSuicide.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CALL_ZeroVCallSuicide.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CREATE_ContractSuicideDuringInit.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CREATE_ContractSuicideDuringInit.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CREATE_ContractSuicideDuringInit.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CREATE_ContractSuicideDuringInit.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CREATE_ContractSuicideDuringInit_ThenStoreThenReturn.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CREATE_ContractSuicideDuringInit_ThenStoreThenReturn.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CREATE_ContractSuicideDuringInit_ThenStoreThenReturn.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CREATE_ContractSuicideDuringInit_ThenStoreThenReturn.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CREATE_ContractSuicideDuringInit_WithValue.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CREATE_ContractSuicideDuringInit_WithValue.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CREATE_ContractSuicideDuringInit_WithValue.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CREATE_ContractSuicideDuringInit_WithValue.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CREATE_EmptyContractAndCallIt_0wei.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CREATE_EmptyContractAndCallIt_0wei.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CREATE_EmptyContractAndCallIt_0wei.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CREATE_EmptyContractAndCallIt_0wei.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CREATE_EmptyContractWithStorageAndCallIt_0wei.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CREATE_EmptyContractWithStorageAndCallIt_0wei.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CREATE_EmptyContractWithStorageAndCallIt_0wei.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CREATE_EmptyContractWithStorageAndCallIt_0wei.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call10.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call10.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_Call10.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call10.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1024BalanceTooLow.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1024BalanceTooLow.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1024BalanceTooLow.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1024BalanceTooLow.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1024BalanceTooLow2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1024BalanceTooLow2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1024BalanceTooLow2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1024BalanceTooLow2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1024OOG.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1024OOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1024OOG.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1024OOG.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1024PreCalls.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1024PreCalls.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1024PreCalls.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1024PreCalls.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1024PreCalls2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1024PreCalls2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1024PreCalls2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1024PreCalls2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1024PreCalls3.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1024PreCalls3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1024PreCalls3.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1024PreCalls3.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1MB1024Calldepth.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1MB1024Calldepth.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1MB1024Calldepth.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call1MB1024Calldepth.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000_ecrec.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000_ecrec.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000_ecrec.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000_ecrec.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000_identity.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000_identity.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000_identity.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000_identity.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000_identity2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000_identity2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000_identity2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000_identity2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000_rip160.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000_rip160.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000_rip160.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000_rip160.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000_sha256.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000_sha256.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000_sha256.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000_sha256.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000bytesContract50_1.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000bytesContract50_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000bytesContract50_1.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000bytesContract50_1.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000bytesContract50_2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000bytesContract50_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000bytesContract50_2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000bytesContract50_2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000bytesContract50_3.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000bytesContract50_3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000bytesContract50_3.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Call50000bytesContract50_3.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallAndCallcodeConsumeMoreGasThenTransactionHas.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallAndCallcodeConsumeMoreGasThenTransactionHas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallAndCallcodeConsumeMoreGasThenTransactionHas.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallAndCallcodeConsumeMoreGasThenTransactionHas.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallAskMoreGasOnDepth2ThenTransactionHas.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallAskMoreGasOnDepth2ThenTransactionHas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallAskMoreGasOnDepth2ThenTransactionHas.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallAskMoreGasOnDepth2ThenTransactionHas.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallContractToCreateContractAndCallItOOG.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallContractToCreateContractAndCallItOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallContractToCreateContractAndCallItOOG.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallContractToCreateContractAndCallItOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallContractToCreateContractOOG.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallContractToCreateContractOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallContractToCreateContractOOG.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallContractToCreateContractOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallContractToCreateContractOOGBonusGas.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallContractToCreateContractOOGBonusGas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallContractToCreateContractOOGBonusGas.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallContractToCreateContractOOGBonusGas.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallContractToCreateContractWhichWouldCreateContractIfCalled.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallContractToCreateContractWhichWouldCreateContractIfCalled.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallContractToCreateContractWhichWouldCreateContractIfCalled.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallContractToCreateContractWhichWouldCreateContractIfCalled.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0_0input.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0_0input.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0_0input.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0_0input.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0_Gas2999.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0_Gas2999.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0_Gas2999.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0_Gas2999.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0_NoGas.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0_NoGas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0_NoGas.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0_NoGas.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0_completeReturnValue.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0_completeReturnValue.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0_completeReturnValue.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0_completeReturnValue.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0_gas3000.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0_gas3000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0_gas3000.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0_gas3000.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0_overlappingInputOutput.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0_overlappingInputOutput.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0_overlappingInputOutput.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover0_overlappingInputOutput.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover1.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover1.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover1.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover3.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover3.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover3.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover80.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover80.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecover80.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecoverCheckLength.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecoverCheckLength.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecoverCheckLength.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecoverCheckLength.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecoverCheckLengthWrongV.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecoverCheckLengthWrongV.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecoverCheckLengthWrongV.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecoverCheckLengthWrongV.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecoverH_prefixed0.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecoverH_prefixed0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecoverH_prefixed0.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecoverH_prefixed0.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecoverR_prefixed0.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecoverR_prefixed0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecoverR_prefixed0.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecoverR_prefixed0.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecoverS_prefixed0.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecoverS_prefixed0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecoverS_prefixed0.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecoverS_prefixed0.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecoverV_prefixed0.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecoverV_prefixed0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecoverV_prefixed0.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallEcrecoverV_prefixed0.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallGoesOOGOnSecondLevel.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallGoesOOGOnSecondLevel.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallGoesOOGOnSecondLevel.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallGoesOOGOnSecondLevel.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallGoesOOGOnSecondLevel2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallGoesOOGOnSecondLevel2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallGoesOOGOnSecondLevel2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallGoesOOGOnSecondLevel2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentitiy_1.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentitiy_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentitiy_1.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentitiy_1.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_1_nonzeroValue.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_1_nonzeroValue.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_1_nonzeroValue.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_1_nonzeroValue.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_3.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_3.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_3.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_4.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_4.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_4.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_4.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_4_gas17.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_4_gas17.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_4_gas17.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_4_gas17.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_4_gas18.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_4_gas18.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_4_gas18.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_4_gas18.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_5.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_5.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_5.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallIdentity_5.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallLoseGasOOG.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallLoseGasOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallLoseGasOOG.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallLoseGasOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBomb0.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBomb0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBomb0.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBomb0.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBomb0_OOG_atMaxCallDepth.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBomb0_OOG_atMaxCallDepth.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBomb0_OOG_atMaxCallDepth.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBomb0_OOG_atMaxCallDepth.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBomb1.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBomb1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBomb1.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBomb1.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBomb2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBomb2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBomb2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBomb2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBomb3.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBomb3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBomb3.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBomb3.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBombLog.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBombLog.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBombLog.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBombLog.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBombLog2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBombLog2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBombLog2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBombLog2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBombPreCall.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBombPreCall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBombPreCall.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBombPreCall.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBombPreCall2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBombPreCall2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBombPreCall2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRecursiveBombPreCall2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_1.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_1.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_1.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_3.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_3.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_3.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_3_postfixed0.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_3_postfixed0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_3_postfixed0.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_3_postfixed0.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_3_prefixed0.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_3_prefixed0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_3_prefixed0.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_3_prefixed0.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_4.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_4.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_4.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_4.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_4_gas719.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_4_gas719.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_4_gas719.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_4_gas719.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_5.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_5.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_5.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallRipemd160_5.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_1.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_1.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_1.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_1_nonzeroValue.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_1_nonzeroValue.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_1_nonzeroValue.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_1_nonzeroValue.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_3.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_3.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_3.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_3_postfix0.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_3_postfix0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_3_postfix0.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_3_postfix0.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_3_prefix0.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_3_prefix0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_3_prefix0.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_3_prefix0.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_4.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_4.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_4.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_4.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_4_gas99.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_4_gas99.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_4_gas99.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_4_gas99.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_5.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_5.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_5.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallSha256_5.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallToNameRegistrator0.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallToNameRegistrator0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallToNameRegistrator0.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallToNameRegistrator0.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallToReturn1.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallToReturn1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CallToReturn1.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CallToReturn1.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CalltoReturn2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CalltoReturn2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CalltoReturn2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CalltoReturn2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CheckCallCostOOG.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CheckCallCostOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CheckCallCostOOG.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CheckCallCostOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CheckOpcodes.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CheckOpcodes.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CheckOpcodes.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CheckOpcodes.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CheckOpcodes2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CheckOpcodes2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CheckOpcodes2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CheckOpcodes2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CheckOpcodes3.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CheckOpcodes3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CheckOpcodes3.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CheckOpcodes3.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CheckOpcodes4.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CheckOpcodes4.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CheckOpcodes4.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CheckOpcodes4.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_CheckOpcodes5.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CheckOpcodes5.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_CheckOpcodes5.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_CheckOpcodes5.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_ExecuteCallThatAskForeGasThenTrabsactionHas.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_ExecuteCallThatAskForeGasThenTrabsactionHas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_ExecuteCallThatAskForeGasThenTrabsactionHas.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_ExecuteCallThatAskForeGasThenTrabsactionHas.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_InternalCallHittingGasLimit.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_InternalCallHittingGasLimit.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_InternalCallHittingGasLimit.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_InternalCallHittingGasLimit.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_InternalCallHittingGasLimit2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_InternalCallHittingGasLimit2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_InternalCallHittingGasLimit2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_InternalCallHittingGasLimit2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_InternlCallStoreClearsOOG.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_InternlCallStoreClearsOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_InternlCallStoreClearsOOG.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_InternlCallStoreClearsOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_LoopCallsDepthThenRevert.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_LoopCallsDepthThenRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_LoopCallsDepthThenRevert.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_LoopCallsDepthThenRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_LoopCallsDepthThenRevert2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_LoopCallsDepthThenRevert2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_LoopCallsDepthThenRevert2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_LoopCallsDepthThenRevert2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_LoopCallsDepthThenRevert3.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_LoopCallsDepthThenRevert3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_LoopCallsDepthThenRevert3.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_LoopCallsDepthThenRevert3.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_LoopCallsThenRevert.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_LoopCallsThenRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_LoopCallsThenRevert.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_LoopCallsThenRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_PostToReturn1.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_PostToReturn1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_PostToReturn1.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_PostToReturn1.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_RETURN_Bounds.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_RETURN_Bounds.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_RETURN_Bounds.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_RETURN_Bounds.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_RETURN_BoundsOOG.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_RETURN_BoundsOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_RETURN_BoundsOOG.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_RETURN_BoundsOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_RawCallGasAsk.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_RawCallGasAsk.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_RawCallGasAsk.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_RawCallGasAsk.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_Return50000_2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Return50000_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_Return50000_2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_Return50000_2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_ReturnTest.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_ReturnTest.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_ReturnTest.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_ReturnTest.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_ReturnTest2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_ReturnTest2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_ReturnTest2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_ReturnTest2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_RevertDepth2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_RevertDepth2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_RevertDepth2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_RevertDepth2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_RevertOpcodeCalls.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_RevertOpcodeCalls.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_RevertOpcodeCalls.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_RevertOpcodeCalls.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_ZeroValue_CALL_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_ZeroValue_CALL_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_ZeroValue_CALL_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_ZeroValue_CALL_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_ZeroValue_SUICIDE_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_ZeroValue_SUICIDE_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_ZeroValue_SUICIDE_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_ZeroValue_SUICIDE_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callBasic.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callBasic.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callBasic.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callBasic.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callChangeRevert.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callChangeRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callChangeRevert.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callChangeRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callCreate.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callCreate.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callCreate.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callCreate.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callCreate2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callCreate2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callCreate2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callCreate2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callCreate3.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callCreate3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callCreate3.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callCreate3.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callOutput1.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callOutput1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callOutput1.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callOutput1.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callOutput2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callOutput2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callOutput2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callOutput2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callOutput3.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callOutput3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callOutput3.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callOutput3.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callOutput3Fail.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callOutput3Fail.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callOutput3Fail.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callOutput3Fail.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callOutput3partial.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callOutput3partial.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callOutput3partial.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callOutput3partial.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callOutput3partialFail.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callOutput3partialFail.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callOutput3partialFail.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callOutput3partialFail.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callToCallCodeOpCodeCheck.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callToCallCodeOpCodeCheck.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callToCallCodeOpCodeCheck.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callToCallCodeOpCodeCheck.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callToCallOpCodeCheck.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callToCallOpCodeCheck.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callToCallOpCodeCheck.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callToCallOpCodeCheck.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callToDelCallOpCodeCheck.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callToDelCallOpCodeCheck.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callToDelCallOpCodeCheck.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callToDelCallOpCodeCheck.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callToStaticOpCodeCheck.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callToStaticOpCodeCheck.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callToStaticOpCodeCheck.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callToStaticOpCodeCheck.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callWithHighValue.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callWithHighValue.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callWithHighValue.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callWithHighValue.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callWithHighValueAndGasOOG.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callWithHighValueAndGasOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callWithHighValueAndGasOOG.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callWithHighValueAndGasOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callWithHighValueAndOOGatTxLevel.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callWithHighValueAndOOGatTxLevel.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callWithHighValueAndOOGatTxLevel.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callWithHighValueAndOOGatTxLevel.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callWithHighValueOOGinCall.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callWithHighValueOOGinCall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callWithHighValueOOGinCall.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callWithHighValueOOGinCall.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_call_OOG_additionalGasCosts1.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_call_OOG_additionalGasCosts1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_call_OOG_additionalGasCosts1.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_call_OOG_additionalGasCosts1.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_call_OOG_additionalGasCosts2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_call_OOG_additionalGasCosts2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_call_OOG_additionalGasCosts2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_call_OOG_additionalGasCosts2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_call_value_inherit.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_call_value_inherit.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_call_value_inherit.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_call_value_inherit.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_call_value_inherit_from_call.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_call_value_inherit_from_call.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_call_value_inherit_from_call.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_call_value_inherit_from_call.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcall_00.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcall_00.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcall_00.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcall_00.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcall_00_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcall_00_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcall_00_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcall_00_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcall_00_OOGE_1.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcall_00_OOGE_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcall_00_OOGE_1.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcall_00_OOGE_1.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcall_00_OOGE_2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcall_00_OOGE_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcall_00_OOGE_2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcall_00_OOGE_2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcall_00_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcall_00_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcall_00_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcall_00_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000_OOGMAfter2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000_OOGMAfter2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000_OOGMAfter2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000_OOGMAfter2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_000_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcall_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGE_2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGE_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGE_2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGE_2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGMAfter2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGMAfter2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGMAfter2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGMAfter2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGMAfter_2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGMAfter_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGMAfter_2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGMAfter_2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGMAfter_3.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGMAfter_3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGMAfter_3.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGMAfter_3.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGMBefore2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGMBefore2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGMBefore2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_OOGMBefore2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_SuicideEnd2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_SuicideEnd2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_SuicideEnd2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_SuicideEnd2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_SuicideMiddle2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_SuicideMiddle2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_SuicideMiddle2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_001_SuicideMiddle2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_ABCB_RECURSIVE2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_ABCB_RECURSIVE2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_ABCB_RECURSIVE2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcallcode_ABCB_RECURSIVE2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcode_01_2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcode_01_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcode_01_2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcode_01_2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcode_01_OOGE_2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcode_01_OOGE_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcode_01_OOGE_2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcode_01_OOGE_2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcode_01_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcode_01_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcode_01_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcode_01_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcode_01_SuicideEnd2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcode_01_SuicideEnd2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcode_01_SuicideEnd2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcode_01_SuicideEnd2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGE_2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGE_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGE_2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGE_2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGMAfter2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGMAfter2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGMAfter2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGMAfter2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGMAfter_2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGMAfter_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGMAfter_2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGMAfter_2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGMAfter_3.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGMAfter_3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGMAfter_3.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGMAfter_3.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGMBefore2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGMBefore2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGMBefore2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_OOGMBefore2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_SuicideEnd2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_SuicideEnd2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_SuicideEnd2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_SuicideEnd2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_SuicideMiddle2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_SuicideMiddle2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_SuicideMiddle2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_010_SuicideMiddle2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_ABCB_RECURSIVE2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_ABCB_RECURSIVE2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_ABCB_RECURSIVE2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecall_ABCB_RECURSIVE2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGE_2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGE_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGE_2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGE_2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGMAfter2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGMAfter2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGMAfter2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGMAfter2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGMAfter_1.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGMAfter_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGMAfter_1.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGMAfter_1.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGMAfter_2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGMAfter_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGMAfter_2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGMAfter_2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGMBefore2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGMBefore2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGMBefore2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_OOGMBefore2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_SuicideEnd2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_SuicideEnd2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_SuicideEnd2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_SuicideEnd2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_SuicideMiddle2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_SuicideMiddle2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_SuicideMiddle2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_011_SuicideMiddle2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_ABCB_RECURSIVE2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_ABCB_RECURSIVE2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_ABCB_RECURSIVE2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcallcodecallcode_ABCB_RECURSIVE2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcode_checkPC.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcode_checkPC.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcode_checkPC.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcode_checkPC.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecall_10.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecall_10.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecall_10.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecall_10.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecall_10_2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecall_10_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecall_10_2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecall_10_2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecall_10_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecall_10_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecall_10_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecall_10_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecall_10_OOGE_2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecall_10_OOGE_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecall_10_OOGE_2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecall_10_OOGE_2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecall_10_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecall_10_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecall_10_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecall_10_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecall_10_SuicideEnd2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecall_10_SuicideEnd2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecall_10_SuicideEnd2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecall_10_SuicideEnd2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGE2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGE2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGE2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGE2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGMAfter2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGMAfter2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGMAfter2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGMAfter2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGMAfter_2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGMAfter_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGMAfter_2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGMAfter_2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGMAfter_3.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGMAfter_3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGMAfter_3.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGMAfter_3.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGMBefore2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGMBefore2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGMBefore2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_OOGMBefore2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_SuicideEnd2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_SuicideEnd2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_SuicideEnd2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_SuicideEnd2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_SuicideMiddle2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_SuicideMiddle2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_SuicideMiddle2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_100_SuicideMiddle2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_ABCB_RECURSIVE2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_ABCB_RECURSIVE2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_ABCB_RECURSIVE2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcall_ABCB_RECURSIVE2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGE_2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGE_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGE_2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGE_2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGMAfter2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGMAfter2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGMAfter2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGMAfter2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGMAfter_1.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGMAfter_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGMAfter_1.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGMAfter_1.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGMAfter_3.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGMAfter_3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGMAfter_3.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGMAfter_3.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGMBefore2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGMBefore2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGMBefore2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_OOGMBefore2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_SuicideEnd2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_SuicideEnd2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_SuicideEnd2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_SuicideEnd2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_SuicideMiddle2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_SuicideMiddle2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_SuicideMiddle2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_101_SuicideMiddle2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_ABCB_RECURSIVE2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_ABCB_RECURSIVE2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_ABCB_RECURSIVE2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcallcode_ABCB_RECURSIVE2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_1102.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_1102.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_1102.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_1102.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGE2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGE2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGE2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGE2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGMAfter.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGMAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGMAfter.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGMAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGMAfter2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGMAfter2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGMAfter2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGMAfter2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGMAfter_2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGMAfter_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGMAfter_2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGMAfter_2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGMAfter_3.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGMAfter_3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGMAfter_3.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGMAfter_3.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGMBefore.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGMBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGMBefore.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGMBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGMBefore2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGMBefore2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGMBefore2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_OOGMBefore2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_SuicideEnd2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_SuicideEnd2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_SuicideEnd2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_SuicideEnd2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_SuicideMiddle.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_SuicideMiddle.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_SuicideMiddle.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_SuicideMiddle.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_SuicideMiddle2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_SuicideMiddle2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_SuicideMiddle2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_110_SuicideMiddle2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_ABCB_RECURSIVE.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_ABCB_RECURSIVE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_ABCB_RECURSIVE.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_ABCB_RECURSIVE.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_ABCB_RECURSIVE2.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_ABCB_RECURSIVE2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_ABCB_RECURSIVE2.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecall_ABCB_RECURSIVE2.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecallcode_111_SuicideEnd.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecallcode_111_SuicideEnd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecallcode_111_SuicideEnd.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_callcodecallcodecallcode_111_SuicideEnd.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_calldelcode_01.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_calldelcode_01.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_calldelcode_01.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_calldelcode_01.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_calldelcode_01_OOGE.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_calldelcode_01_OOGE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_calldelcode_01_OOGE.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_calldelcode_01_OOGE.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_contractCreationMakeCallThatAskMoreGasThenTransactionProvided.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_contractCreationMakeCallThatAskMoreGasThenTransactionProvided.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_contractCreationMakeCallThatAskMoreGasThenTransactionProvided.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_contractCreationMakeCallThatAskMoreGasThenTransactionProvided.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_contractCreationOOGdontLeaveEmptyContractViaTransaction.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_contractCreationOOGdontLeaveEmptyContractViaTransaction.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_contractCreationOOGdontLeaveEmptyContractViaTransaction.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_contractCreationOOGdontLeaveEmptyContractViaTransaction.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_emptyMem.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_emptyMem.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_emptyMem.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_emptyMem.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_logMemStartTooHigh.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_logMemStartTooHigh.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_logMemStartTooHigh.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_logMemStartTooHigh.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_logMemsizeTooHigh.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_logMemsizeTooHigh.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_logMemsizeTooHigh.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_logMemsizeTooHigh.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_logMemsizeZero.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_logMemsizeZero.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_logMemsizeZero.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_logMemsizeZero.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_nonEmptyMem.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_nonEmptyMem.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_nonEmptyMem.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_nonEmptyMem.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_nonEmptyMem_logMemSize1.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_nonEmptyMem_logMemSize1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_nonEmptyMem_logMemSize1.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_nonEmptyMem_logMemSize1.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_nonEmptyMem_logMemSize1_logMemStart31.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_nonEmptyMem_logMemSize1_logMemStart31.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_nonEmptyMem_logMemSize1_logMemStart31.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log0_nonEmptyMem_logMemSize1_logMemStart31.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_log1_MaxTopic.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log1_MaxTopic.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_log1_MaxTopic.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log1_MaxTopic.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_log1_emptyMem.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log1_emptyMem.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_log1_emptyMem.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log1_emptyMem.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_log1_logMemStartTooHigh.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log1_logMemStartTooHigh.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_log1_logMemStartTooHigh.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log1_logMemStartTooHigh.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_log1_logMemsizeTooHigh.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log1_logMemsizeTooHigh.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_log1_logMemsizeTooHigh.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log1_logMemsizeTooHigh.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_log1_logMemsizeZero.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log1_logMemsizeZero.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_log1_logMemsizeZero.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log1_logMemsizeZero.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_log_Caller.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log_Caller.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_log_Caller.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_log_Caller.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_makeMoney.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_makeMoney.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_makeMoney.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_makeMoney.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_refund_CallA.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_refund_CallA.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_refund_CallA.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_refund_CallA.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_refund_CallToSuicideNoStorage.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_refund_CallToSuicideNoStorage.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_refund_CallToSuicideNoStorage.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_refund_CallToSuicideNoStorage.json diff --git a/test/testdata/evm/GeneralStateTests/stStaticCall/static_refund_CallToSuicideTwice.json b/c/test/testdata/evm/GeneralStateTests/stStaticCall/static_refund_CallToSuicideTwice.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stStaticCall/static_refund_CallToSuicideTwice.json rename to c/test/testdata/evm/GeneralStateTests/stStaticCall/static_refund_CallToSuicideTwice.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/ABAcalls0.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/ABAcalls0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/ABAcalls0.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/ABAcalls0.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/ABAcalls1.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/ABAcalls1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/ABAcalls1.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/ABAcalls1.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/ABAcalls2.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/ABAcalls2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/ABAcalls2.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/ABAcalls2.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/ABAcalls3.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/ABAcalls3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/ABAcalls3.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/ABAcalls3.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/ABAcallsSuicide0.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/ABAcallsSuicide0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/ABAcallsSuicide0.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/ABAcallsSuicide0.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/ABAcallsSuicide1.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/ABAcallsSuicide1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/ABAcallsSuicide1.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/ABAcallsSuicide1.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/Call10.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/Call10.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/Call10.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/Call10.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBomb0.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBomb0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBomb0.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBomb0.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBomb0_OOG_atMaxCallDepth.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBomb0_OOG_atMaxCallDepth.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBomb0_OOG_atMaxCallDepth.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBomb0_OOG_atMaxCallDepth.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBomb1.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBomb1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBomb1.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBomb1.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBomb2.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBomb2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBomb2.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBomb2.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBomb3.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBomb3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBomb3.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBomb3.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBombLog.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBombLog.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBombLog.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBombLog.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBombLog2.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBombLog2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBombLog2.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallRecursiveBombLog2.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistrator0.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistrator0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistrator0.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistrator0.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorAddressTooBigLeft.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorAddressTooBigLeft.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorAddressTooBigLeft.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorAddressTooBigLeft.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorAddressTooBigRight.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorAddressTooBigRight.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorAddressTooBigRight.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorAddressTooBigRight.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorMemOOGAndInsufficientBalance.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorMemOOGAndInsufficientBalance.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorMemOOGAndInsufficientBalance.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorMemOOGAndInsufficientBalance.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorNotMuchMemory0.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorNotMuchMemory0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorNotMuchMemory0.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorNotMuchMemory0.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorNotMuchMemory1.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorNotMuchMemory1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorNotMuchMemory1.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorNotMuchMemory1.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorOutOfGas.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorOutOfGas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorOutOfGas.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorOutOfGas.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorTooMuchMemory0.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorTooMuchMemory0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorTooMuchMemory0.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorTooMuchMemory0.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorTooMuchMemory1.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorTooMuchMemory1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorTooMuchMemory1.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorTooMuchMemory1.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorTooMuchMemory2.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorTooMuchMemory2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorTooMuchMemory2.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorTooMuchMemory2.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorZeorSizeMemExpansion.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorZeorSizeMemExpansion.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorZeorSizeMemExpansion.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToNameRegistratorZeorSizeMemExpansion.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToReturn1.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToReturn1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToReturn1.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToReturn1.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToReturn1ForDynamicJump0.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToReturn1ForDynamicJump0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToReturn1ForDynamicJump0.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToReturn1ForDynamicJump0.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToReturn1ForDynamicJump1.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToReturn1ForDynamicJump1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToReturn1ForDynamicJump1.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CallToReturn1ForDynamicJump1.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CalltoReturn2.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CalltoReturn2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CalltoReturn2.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CalltoReturn2.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CreateHashCollision.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CreateHashCollision.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CreateHashCollision.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/CreateHashCollision.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/PostToReturn1.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/PostToReturn1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/PostToReturn1.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/PostToReturn1.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/TestNameRegistrator.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/TestNameRegistrator.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/TestNameRegistrator.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/TestNameRegistrator.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/balanceInputAddressTooBig.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/balanceInputAddressTooBig.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/balanceInputAddressTooBig.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/balanceInputAddressTooBig.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callValue.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callValue.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callValue.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callValue.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callcodeTo0.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callcodeTo0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callcodeTo0.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callcodeTo0.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callcodeToNameRegistrator0.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callcodeToNameRegistrator0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callcodeToNameRegistrator0.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callcodeToNameRegistrator0.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callcodeToNameRegistratorAddresTooBigLeft.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callcodeToNameRegistratorAddresTooBigLeft.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callcodeToNameRegistratorAddresTooBigLeft.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callcodeToNameRegistratorAddresTooBigLeft.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callcodeToNameRegistratorAddresTooBigRight.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callcodeToNameRegistratorAddresTooBigRight.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callcodeToNameRegistratorAddresTooBigRight.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callcodeToNameRegistratorAddresTooBigRight.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callcodeToNameRegistratorZeroMemExpanion.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callcodeToNameRegistratorZeroMemExpanion.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callcodeToNameRegistratorZeroMemExpanion.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callcodeToNameRegistratorZeroMemExpanion.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callcodeToReturn1.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callcodeToReturn1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callcodeToReturn1.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callcodeToReturn1.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callerAccountBalance.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callerAccountBalance.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callerAccountBalance.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/callerAccountBalance.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistrator.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistrator.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistrator.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistrator.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorOOG_MemExpansionOOV.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorOOG_MemExpansionOOV.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorOOG_MemExpansionOOV.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorOOG_MemExpansionOOV.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorOutOfMemoryBonds0.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorOutOfMemoryBonds0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorOutOfMemoryBonds0.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorOutOfMemoryBonds0.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorOutOfMemoryBonds1.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorOutOfMemoryBonds1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorOutOfMemoryBonds1.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorOutOfMemoryBonds1.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorValueTooHigh.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorValueTooHigh.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorValueTooHigh.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorValueTooHigh.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorZeroMem.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorZeroMem.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorZeroMem.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorZeroMem.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorZeroMem2.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorZeroMem2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorZeroMem2.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorZeroMem2.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorZeroMemExpansion.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorZeroMemExpansion.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorZeroMemExpansion.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createNameRegistratorZeroMemExpansion.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createWithInvalidOpcode.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createWithInvalidOpcode.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createWithInvalidOpcode.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/createWithInvalidOpcode.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/currentAccountBalance.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/currentAccountBalance.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/currentAccountBalance.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/currentAccountBalance.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/doubleSelfdestructTest.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/doubleSelfdestructTest.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/doubleSelfdestructTest.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/doubleSelfdestructTest.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/doubleSelfdestructTest2.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/doubleSelfdestructTest2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/doubleSelfdestructTest2.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/doubleSelfdestructTest2.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/extcodecopy.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/extcodecopy.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/extcodecopy.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/extcodecopy.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/return0.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/return0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/return0.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/return0.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/return1.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/return1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/return1.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/return1.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/return2.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/return2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/return2.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/return2.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideAddress.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideAddress.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideAddress.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideAddress.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideCaller.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideCaller.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideCaller.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideCaller.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideCallerAddresTooBigLeft.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideCallerAddresTooBigLeft.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideCallerAddresTooBigLeft.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideCallerAddresTooBigLeft.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideCallerAddresTooBigRight.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideCallerAddresTooBigRight.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideCallerAddresTooBigRight.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideCallerAddresTooBigRight.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideCoinbase.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideCoinbase.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideCoinbase.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideCoinbase.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideNotExistingAccount.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideNotExistingAccount.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideNotExistingAccount.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideNotExistingAccount.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideOrigin.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideOrigin.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideOrigin.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideOrigin.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideSendEtherPostDeath.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideSendEtherPostDeath.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideSendEtherPostDeath.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideSendEtherPostDeath.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideSendEtherToMe.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideSendEtherToMe.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideSendEtherToMe.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/suicideSendEtherToMe.json diff --git a/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/testRandomTest.json b/c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/testRandomTest.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stSystemOperationsTest/testRandomTest.json rename to c/test/testdata/evm/GeneralStateTests/stSystemOperationsTest/testRandomTest.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/ContractStoreClearsOOG.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/ContractStoreClearsOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/ContractStoreClearsOOG.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/ContractStoreClearsOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/ContractStoreClearsSuccess.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/ContractStoreClearsSuccess.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/ContractStoreClearsSuccess.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/ContractStoreClearsSuccess.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/CreateMessageReverted.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/CreateMessageReverted.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/CreateMessageReverted.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/CreateMessageReverted.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/CreateMessageSuccess.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/CreateMessageSuccess.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/CreateMessageSuccess.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/CreateMessageSuccess.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/CreateTransactionReverted.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/CreateTransactionReverted.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/CreateTransactionReverted.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/CreateTransactionReverted.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/CreateTransactionSuccess.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/CreateTransactionSuccess.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/CreateTransactionSuccess.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/CreateTransactionSuccess.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/EmptyTransaction.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/EmptyTransaction.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/EmptyTransaction.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/EmptyTransaction.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/EmptyTransaction2.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/EmptyTransaction2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/EmptyTransaction2.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/EmptyTransaction2.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/EmptyTransaction3.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/EmptyTransaction3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/EmptyTransaction3.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/EmptyTransaction3.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/HighGasLimit.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/HighGasLimit.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/HighGasLimit.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/HighGasLimit.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/InternalCallHittingGasLimit.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/InternalCallHittingGasLimit.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/InternalCallHittingGasLimit.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/InternalCallHittingGasLimit.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/InternalCallHittingGasLimit2.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/InternalCallHittingGasLimit2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/InternalCallHittingGasLimit2.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/InternalCallHittingGasLimit2.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/InternalCallHittingGasLimitSuccess.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/InternalCallHittingGasLimitSuccess.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/InternalCallHittingGasLimitSuccess.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/InternalCallHittingGasLimitSuccess.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/InternlCallStoreClearsOOG.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/InternlCallStoreClearsOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/InternlCallStoreClearsOOG.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/InternlCallStoreClearsOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/InternlCallStoreClearsSucces.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/InternlCallStoreClearsSucces.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/InternlCallStoreClearsSucces.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/InternlCallStoreClearsSucces.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/Opcodes_TransactionInit.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/Opcodes_TransactionInit.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/Opcodes_TransactionInit.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/Opcodes_TransactionInit.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/OverflowGasRequire.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/OverflowGasRequire.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/OverflowGasRequire.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/OverflowGasRequire.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/OverflowGasRequire2.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/OverflowGasRequire2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/OverflowGasRequire2.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/OverflowGasRequire2.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/RefundOverflow.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/RefundOverflow.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/RefundOverflow.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/RefundOverflow.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/RefundOverflow2.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/RefundOverflow2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/RefundOverflow2.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/RefundOverflow2.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/StoreClearsAndInternlCallStoreClearsOOG.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/StoreClearsAndInternlCallStoreClearsOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/StoreClearsAndInternlCallStoreClearsOOG.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/StoreClearsAndInternlCallStoreClearsOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/StoreClearsAndInternlCallStoreClearsSuccess.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/StoreClearsAndInternlCallStoreClearsSuccess.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/StoreClearsAndInternlCallStoreClearsSuccess.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/StoreClearsAndInternlCallStoreClearsSuccess.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/StoreGasOnCreate.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/StoreGasOnCreate.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/StoreGasOnCreate.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/StoreGasOnCreate.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesAndInternlCallSuicidesBonusGasAtCall.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesAndInternlCallSuicidesBonusGasAtCall.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesAndInternlCallSuicidesBonusGasAtCall.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesAndInternlCallSuicidesBonusGasAtCall.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesAndInternlCallSuicidesBonusGasAtCallFailed.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesAndInternlCallSuicidesBonusGasAtCallFailed.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesAndInternlCallSuicidesBonusGasAtCallFailed.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesAndInternlCallSuicidesBonusGasAtCallFailed.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesAndInternlCallSuicidesOOG.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesAndInternlCallSuicidesOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesAndInternlCallSuicidesOOG.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesAndInternlCallSuicidesOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesAndInternlCallSuicidesSuccess.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesAndInternlCallSuicidesSuccess.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesAndInternlCallSuicidesSuccess.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesAndInternlCallSuicidesSuccess.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesAndSendMoneyToItselfEtherDestroyed.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesAndSendMoneyToItselfEtherDestroyed.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesAndSendMoneyToItselfEtherDestroyed.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesAndSendMoneyToItselfEtherDestroyed.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesMixingCoinbase.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesMixingCoinbase.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesMixingCoinbase.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesMixingCoinbase.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesStopAfterSuicide.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesStopAfterSuicide.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesStopAfterSuicide.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/SuicidesStopAfterSuicide.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionDataCosts652.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionDataCosts652.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionDataCosts652.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionDataCosts652.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionFromCoinbaseHittingBlockGasLimit.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionFromCoinbaseHittingBlockGasLimit.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionFromCoinbaseHittingBlockGasLimit.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionFromCoinbaseHittingBlockGasLimit.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionFromCoinbaseHittingBlockGasLimit1.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionFromCoinbaseHittingBlockGasLimit1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionFromCoinbaseHittingBlockGasLimit1.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionFromCoinbaseHittingBlockGasLimit1.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionFromCoinbaseNotEnoughFounds.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionFromCoinbaseNotEnoughFounds.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionFromCoinbaseNotEnoughFounds.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionFromCoinbaseNotEnoughFounds.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionNonceCheck.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionNonceCheck.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionNonceCheck.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionNonceCheck.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionNonceCheck2.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionNonceCheck2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionNonceCheck2.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionNonceCheck2.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionSendingToEmpty.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionSendingToEmpty.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionSendingToEmpty.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionSendingToEmpty.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionSendingToZero.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionSendingToZero.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionSendingToZero.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionSendingToZero.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionToAddressh160minusOne.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionToAddressh160minusOne.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionToAddressh160minusOne.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionToAddressh160minusOne.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionToItself.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionToItself.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionToItself.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionToItself.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionToItselfNotEnoughFounds.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionToItselfNotEnoughFounds.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionToItselfNotEnoughFounds.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/TransactionToItselfNotEnoughFounds.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/UserTransactionGasLimitIsTooLowWhenZeroCost.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/UserTransactionGasLimitIsTooLowWhenZeroCost.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/UserTransactionGasLimitIsTooLowWhenZeroCost.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/UserTransactionGasLimitIsTooLowWhenZeroCost.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/UserTransactionZeroCost.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/UserTransactionZeroCost.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/UserTransactionZeroCost.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/UserTransactionZeroCost.json diff --git a/test/testdata/evm/GeneralStateTests/stTransactionTest/UserTransactionZeroCostWithData.json b/c/test/testdata/evm/GeneralStateTests/stTransactionTest/UserTransactionZeroCostWithData.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransactionTest/UserTransactionZeroCostWithData.json rename to c/test/testdata/evm/GeneralStateTests/stTransactionTest/UserTransactionZeroCostWithData.json diff --git a/test/testdata/evm/GeneralStateTests/stTransitionTest/createNameRegistratorPerTxsAfter.json b/c/test/testdata/evm/GeneralStateTests/stTransitionTest/createNameRegistratorPerTxsAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransitionTest/createNameRegistratorPerTxsAfter.json rename to c/test/testdata/evm/GeneralStateTests/stTransitionTest/createNameRegistratorPerTxsAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stTransitionTest/createNameRegistratorPerTxsAt.json b/c/test/testdata/evm/GeneralStateTests/stTransitionTest/createNameRegistratorPerTxsAt.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransitionTest/createNameRegistratorPerTxsAt.json rename to c/test/testdata/evm/GeneralStateTests/stTransitionTest/createNameRegistratorPerTxsAt.json diff --git a/test/testdata/evm/GeneralStateTests/stTransitionTest/createNameRegistratorPerTxsBefore.json b/c/test/testdata/evm/GeneralStateTests/stTransitionTest/createNameRegistratorPerTxsBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransitionTest/createNameRegistratorPerTxsBefore.json rename to c/test/testdata/evm/GeneralStateTests/stTransitionTest/createNameRegistratorPerTxsBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stTransitionTest/createNameRegistratorPerTxsNotEnoughGasAfter.json b/c/test/testdata/evm/GeneralStateTests/stTransitionTest/createNameRegistratorPerTxsNotEnoughGasAfter.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransitionTest/createNameRegistratorPerTxsNotEnoughGasAfter.json rename to c/test/testdata/evm/GeneralStateTests/stTransitionTest/createNameRegistratorPerTxsNotEnoughGasAfter.json diff --git a/test/testdata/evm/GeneralStateTests/stTransitionTest/createNameRegistratorPerTxsNotEnoughGasAt.json b/c/test/testdata/evm/GeneralStateTests/stTransitionTest/createNameRegistratorPerTxsNotEnoughGasAt.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransitionTest/createNameRegistratorPerTxsNotEnoughGasAt.json rename to c/test/testdata/evm/GeneralStateTests/stTransitionTest/createNameRegistratorPerTxsNotEnoughGasAt.json diff --git a/test/testdata/evm/GeneralStateTests/stTransitionTest/createNameRegistratorPerTxsNotEnoughGasBefore.json b/c/test/testdata/evm/GeneralStateTests/stTransitionTest/createNameRegistratorPerTxsNotEnoughGasBefore.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransitionTest/createNameRegistratorPerTxsNotEnoughGasBefore.json rename to c/test/testdata/evm/GeneralStateTests/stTransitionTest/createNameRegistratorPerTxsNotEnoughGasBefore.json diff --git a/test/testdata/evm/GeneralStateTests/stTransitionTest/delegatecallAfterTransition.json b/c/test/testdata/evm/GeneralStateTests/stTransitionTest/delegatecallAfterTransition.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransitionTest/delegatecallAfterTransition.json rename to c/test/testdata/evm/GeneralStateTests/stTransitionTest/delegatecallAfterTransition.json diff --git a/test/testdata/evm/GeneralStateTests/stTransitionTest/delegatecallAtTransition.json b/c/test/testdata/evm/GeneralStateTests/stTransitionTest/delegatecallAtTransition.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransitionTest/delegatecallAtTransition.json rename to c/test/testdata/evm/GeneralStateTests/stTransitionTest/delegatecallAtTransition.json diff --git a/test/testdata/evm/GeneralStateTests/stTransitionTest/delegatecallBeforeTransition.json b/c/test/testdata/evm/GeneralStateTests/stTransitionTest/delegatecallBeforeTransition.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stTransitionTest/delegatecallBeforeTransition.json rename to c/test/testdata/evm/GeneralStateTests/stTransitionTest/delegatecallBeforeTransition.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/dayLimitConstruction.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/dayLimitConstruction.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/dayLimitConstruction.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/dayLimitConstruction.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/dayLimitConstructionOOG.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/dayLimitConstructionOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/dayLimitConstructionOOG.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/dayLimitConstructionOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/dayLimitConstructionPartial.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/dayLimitConstructionPartial.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/dayLimitConstructionPartial.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/dayLimitConstructionPartial.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/dayLimitResetSpentToday.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/dayLimitResetSpentToday.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/dayLimitResetSpentToday.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/dayLimitResetSpentToday.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/dayLimitSetDailyLimit.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/dayLimitSetDailyLimit.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/dayLimitSetDailyLimit.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/dayLimitSetDailyLimit.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/dayLimitSetDailyLimitNoData.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/dayLimitSetDailyLimitNoData.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/dayLimitSetDailyLimitNoData.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/dayLimitSetDailyLimitNoData.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedAddOwner.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedAddOwner.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedAddOwner.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedAddOwner.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedAddOwnerAddMyself.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedAddOwnerAddMyself.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedAddOwnerAddMyself.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedAddOwnerAddMyself.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeOwner.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeOwner.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeOwner.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeOwner.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeOwnerNoArgument.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeOwnerNoArgument.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeOwnerNoArgument.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeOwnerNoArgument.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeOwner_fromNotOwner.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeOwner_fromNotOwner.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeOwner_fromNotOwner.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeOwner_fromNotOwner.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeOwner_toIsOwner.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeOwner_toIsOwner.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeOwner_toIsOwner.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeOwner_toIsOwner.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeRequirementTo0.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeRequirementTo0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeRequirementTo0.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeRequirementTo0.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeRequirementTo1.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeRequirementTo1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeRequirementTo1.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeRequirementTo1.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeRequirementTo2.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeRequirementTo2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeRequirementTo2.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedChangeRequirementTo2.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedConstructionCorrect.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedConstructionCorrect.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedConstructionCorrect.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedConstructionCorrect.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedConstructionNotEnoughGas.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedConstructionNotEnoughGas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedConstructionNotEnoughGas.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedConstructionNotEnoughGas.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedConstructionNotEnoughGasPartial.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedConstructionNotEnoughGasPartial.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedConstructionNotEnoughGasPartial.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedConstructionNotEnoughGasPartial.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedIsOwnerFalse.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedIsOwnerFalse.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedIsOwnerFalse.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedIsOwnerFalse.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedIsOwnerTrue.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedIsOwnerTrue.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedIsOwnerTrue.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedIsOwnerTrue.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedRemoveOwner.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedRemoveOwner.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedRemoveOwner.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedRemoveOwner.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedRemoveOwnerByNonOwner.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedRemoveOwnerByNonOwner.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedRemoveOwnerByNonOwner.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedRemoveOwnerByNonOwner.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedRemoveOwner_mySelf.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedRemoveOwner_mySelf.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedRemoveOwner_mySelf.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedRemoveOwner_mySelf.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedRemoveOwner_ownerIsNotOwner.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedRemoveOwner_ownerIsNotOwner.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedRemoveOwner_ownerIsNotOwner.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedRemoveOwner_ownerIsNotOwner.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedRevokeNothing.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedRevokeNothing.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedRevokeNothing.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/multiOwnedRevokeNothing.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/walletAddOwnerRemovePendingTransaction.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/walletAddOwnerRemovePendingTransaction.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/walletAddOwnerRemovePendingTransaction.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/walletAddOwnerRemovePendingTransaction.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/walletChangeOwnerRemovePendingTransaction.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/walletChangeOwnerRemovePendingTransaction.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/walletChangeOwnerRemovePendingTransaction.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/walletChangeOwnerRemovePendingTransaction.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/walletChangeRequirementRemovePendingTransaction.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/walletChangeRequirementRemovePendingTransaction.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/walletChangeRequirementRemovePendingTransaction.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/walletChangeRequirementRemovePendingTransaction.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/walletConfirm.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/walletConfirm.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/walletConfirm.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/walletConfirm.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/walletConstruction.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/walletConstruction.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/walletConstruction.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/walletConstruction.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/walletConstructionOOG.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/walletConstructionOOG.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/walletConstructionOOG.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/walletConstructionOOG.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/walletConstructionPartial.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/walletConstructionPartial.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/walletConstructionPartial.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/walletConstructionPartial.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/walletDefault.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/walletDefault.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/walletDefault.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/walletDefault.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/walletDefaultWithOutValue.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/walletDefaultWithOutValue.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/walletDefaultWithOutValue.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/walletDefaultWithOutValue.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/walletExecuteOverDailyLimitMultiOwner.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/walletExecuteOverDailyLimitMultiOwner.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/walletExecuteOverDailyLimitMultiOwner.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/walletExecuteOverDailyLimitMultiOwner.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/walletExecuteOverDailyLimitOnlyOneOwner.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/walletExecuteOverDailyLimitOnlyOneOwner.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/walletExecuteOverDailyLimitOnlyOneOwner.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/walletExecuteOverDailyLimitOnlyOneOwner.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/walletExecuteOverDailyLimitOnlyOneOwnerNew.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/walletExecuteOverDailyLimitOnlyOneOwnerNew.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/walletExecuteOverDailyLimitOnlyOneOwnerNew.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/walletExecuteOverDailyLimitOnlyOneOwnerNew.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/walletExecuteUnderDailyLimit.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/walletExecuteUnderDailyLimit.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/walletExecuteUnderDailyLimit.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/walletExecuteUnderDailyLimit.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/walletKill.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/walletKill.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/walletKill.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/walletKill.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/walletKillNotByOwner.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/walletKillNotByOwner.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/walletKillNotByOwner.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/walletKillNotByOwner.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/walletKillToWallet.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/walletKillToWallet.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/walletKillToWallet.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/walletKillToWallet.json diff --git a/test/testdata/evm/GeneralStateTests/stWalletTest/walletRemoveOwnerRemovePendingTransaction.json b/c/test/testdata/evm/GeneralStateTests/stWalletTest/walletRemoveOwnerRemovePendingTransaction.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stWalletTest/walletRemoveOwnerRemovePendingTransaction.json rename to c/test/testdata/evm/GeneralStateTests/stWalletTest/walletRemoveOwnerRemovePendingTransaction.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALLCODE_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALLCODE_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALLCODE_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALLCODE_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALLCODE_ToEmpty_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALLCODE_ToEmpty_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALLCODE_ToEmpty_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALLCODE_ToEmpty_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALLCODE_ToNonZeroBalance_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALLCODE_ToNonZeroBalance_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALLCODE_ToNonZeroBalance_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALLCODE_ToNonZeroBalance_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALLCODE_ToOneStorageKey_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALLCODE_ToOneStorageKey_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALLCODE_ToOneStorageKey_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALLCODE_ToOneStorageKey_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALL_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALL_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALL_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALL_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALL_ToEmpty_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALL_ToEmpty_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALL_ToEmpty_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALL_ToEmpty_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALL_ToNonZeroBalance_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALL_ToNonZeroBalance_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALL_ToNonZeroBalance_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALL_ToNonZeroBalance_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALL_ToOneStorageKey_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALL_ToOneStorageKey_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALL_ToOneStorageKey_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_CALL_ToOneStorageKey_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_DELEGATECALL_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_DELEGATECALL_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_DELEGATECALL_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_DELEGATECALL_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_DELEGATECALL_ToEmpty_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_DELEGATECALL_ToEmpty_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_DELEGATECALL_ToEmpty_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_DELEGATECALL_ToEmpty_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_DELEGATECALL_ToNonZeroBalance_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_DELEGATECALL_ToNonZeroBalance_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_DELEGATECALL_ToNonZeroBalance_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_DELEGATECALL_ToNonZeroBalance_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_DELEGATECALL_ToOneStorageKey_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_DELEGATECALL_ToOneStorageKey_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_DELEGATECALL_ToOneStorageKey_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_DELEGATECALL_ToOneStorageKey_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_SUICIDE_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_SUICIDE_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_SUICIDE_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_SUICIDE_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_SUICIDE_ToEmpty_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_SUICIDE_ToEmpty_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_SUICIDE_ToEmpty_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_SUICIDE_ToEmpty_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_SUICIDE_ToNonZeroBalance_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_SUICIDE_ToNonZeroBalance_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_SUICIDE_ToNonZeroBalance_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_SUICIDE_ToNonZeroBalance_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_SUICIDE_ToOneStorageKey_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_SUICIDE_ToOneStorageKey_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_SUICIDE_ToOneStorageKey_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_SUICIDE_ToOneStorageKey_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALL_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALL_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALL_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALL_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALL_ToEmpty_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALL_ToEmpty_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALL_ToEmpty_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALL_ToEmpty_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALL_ToNonZeroBalance_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALL_ToNonZeroBalance_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALL_ToNonZeroBalance_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALL_ToNonZeroBalance_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALL_ToOneStorageKey_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALL_ToOneStorageKey_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALL_ToOneStorageKey_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALL_ToOneStorageKey_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALLwithData_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALLwithData_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALLwithData_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALLwithData_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALLwithData_ToEmpty_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALLwithData_ToEmpty_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALLwithData_ToEmpty_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALLwithData_ToEmpty_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALLwithData_ToNonZeroBalance_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALLwithData_ToNonZeroBalance_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALLwithData_ToNonZeroBalance_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALLwithData_ToNonZeroBalance_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALLwithData_ToOneStorageKey_OOGRevert.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALLwithData_ToOneStorageKey_OOGRevert.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALLwithData_ToOneStorageKey_OOGRevert.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsRevert/ZeroValue_TransactionCALLwithData_ToOneStorageKey_OOGRevert.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALL.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALL.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALL.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALL.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALLCODE.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALLCODE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALLCODE.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALLCODE.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALLCODE_ToEmpty.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALLCODE_ToEmpty.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALLCODE_ToEmpty.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALLCODE_ToEmpty.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALLCODE_ToNonZeroBalance.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALLCODE_ToNonZeroBalance.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALLCODE_ToNonZeroBalance.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALLCODE_ToNonZeroBalance.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALLCODE_ToOneStorageKey.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALLCODE_ToOneStorageKey.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALLCODE_ToOneStorageKey.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALLCODE_ToOneStorageKey.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALL_ToEmpty.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALL_ToEmpty.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALL_ToEmpty.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALL_ToEmpty.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALL_ToNonZeroBalance.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALL_ToNonZeroBalance.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALL_ToNonZeroBalance.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALL_ToNonZeroBalance.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALL_ToOneStorageKey.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALL_ToOneStorageKey.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALL_ToOneStorageKey.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_CALL_ToOneStorageKey.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_DELEGATECALL.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_DELEGATECALL.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_DELEGATECALL.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_DELEGATECALL.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_DELEGATECALL_ToEmpty.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_DELEGATECALL_ToEmpty.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_DELEGATECALL_ToEmpty.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_DELEGATECALL_ToEmpty.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_DELEGATECALL_ToNonZeroBalance.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_DELEGATECALL_ToNonZeroBalance.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_DELEGATECALL_ToNonZeroBalance.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_DELEGATECALL_ToNonZeroBalance.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_DELEGATECALL_ToOneStorageKey.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_DELEGATECALL_ToOneStorageKey.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_DELEGATECALL_ToOneStorageKey.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_DELEGATECALL_ToOneStorageKey.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_SUICIDE.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_SUICIDE.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_SUICIDE.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_SUICIDE.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_SUICIDE_ToEmpty.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_SUICIDE_ToEmpty.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_SUICIDE_ToEmpty.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_SUICIDE_ToEmpty.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_SUICIDE_ToNonZeroBalance.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_SUICIDE_ToNonZeroBalance.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_SUICIDE_ToNonZeroBalance.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_SUICIDE_ToNonZeroBalance.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_SUICIDE_ToOneStorageKey.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_SUICIDE_ToOneStorageKey.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_SUICIDE_ToOneStorageKey.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_SUICIDE_ToOneStorageKey.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALL.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALL.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALL.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALL.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALL_ToEmpty.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALL_ToEmpty.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALL_ToEmpty.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALL_ToEmpty.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALL_ToNonZeroBalance.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALL_ToNonZeroBalance.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALL_ToNonZeroBalance.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALL_ToNonZeroBalance.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALL_ToOneStorageKey.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALL_ToOneStorageKey.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALL_ToOneStorageKey.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALL_ToOneStorageKey.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALLwithData.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALLwithData.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALLwithData.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALLwithData.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALLwithData_ToEmpty.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALLwithData_ToEmpty.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALLwithData_ToEmpty.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALLwithData_ToEmpty.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALLwithData_ToNonZeroBalance.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALLwithData_ToNonZeroBalance.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALLwithData_ToNonZeroBalance.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALLwithData_ToNonZeroBalance.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALLwithData_ToOneStorageKey.json b/c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALLwithData_ToOneStorageKey.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALLwithData_ToOneStorageKey.json rename to c/test/testdata/evm/GeneralStateTests/stZeroCallsTest/ZeroValue_TransactionCALLwithData_ToOneStorageKey.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_2_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_2_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_2_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_2_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_2_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_2_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_2_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_2_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_21000_80.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_21000_80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_21000_80.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_21000_80.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_28000_80.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_28000_80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_28000_80.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_28000_80.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_340282366920938463463374607431768211456_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5616_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5616_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5616_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5616_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5616_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5616_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5616_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5616_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5616_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5616_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5616_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5616_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5617_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5617_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5617_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5617_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5617_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5617_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5617_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5617_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5617_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5617_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5617_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5617_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5617_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5617_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5617_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_5617_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_616_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_616_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_616_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_616_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9935_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9935_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9935_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9935_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9935_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9935_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9935_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9935_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9935_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9935_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9935_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9935_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9935_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9935_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9935_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9935_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-2_9_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_21000_64.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_21000_64.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_21000_64.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_21000_64.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_21000_80.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_21000_80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_21000_80.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_21000_80.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_28000_64.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_28000_64.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_28000_64.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_28000_64.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_28000_80.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_28000_80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_28000_80.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_28000_80.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_0_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_1_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_1_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_1_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_1_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_1_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_1_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_1_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_1_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_1_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_1_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_1_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_1_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_1_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_1_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_1_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_1_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_2_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_2_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_2_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_2_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_2_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_2_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_2_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_2_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_2_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_2_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_2_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_2_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_2_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_2_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_2_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_2_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_21000_80.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_21000_80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_21000_80.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_21000_80.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_28000_80.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_28000_80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_28000_80.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_28000_80.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_340282366920938463463374607431768211456_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5616_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5616_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5616_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5616_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5616_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5616_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5616_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5616_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5616_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5616_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5616_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5616_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5616_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5616_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5616_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5616_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5617_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5617_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5617_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5617_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5617_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5617_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5617_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5617_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5617_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5617_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5617_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5617_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5617_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5617_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5617_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_5617_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9935_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9935_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9935_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9935_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9935_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9935_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9935_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9935_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9935_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9935_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9935_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9935_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9935_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9935_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9935_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9935_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_1-3_9_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_21000_64.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_21000_64.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_21000_64.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_21000_64.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_21000_80.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_21000_80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_21000_80.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_21000_80.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_28000_64.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_28000_64.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_28000_64.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_28000_64.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_28000_80.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_28000_80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_28000_80.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_28000_80.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_0_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1456_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1456_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1456_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1456_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1456_21000_80.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1456_21000_80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1456_21000_80.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1456_21000_80.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1456_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1456_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1456_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1456_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1456_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1456_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1456_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1456_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1456_28000_80.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1456_28000_80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1456_28000_80.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1456_28000_80.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1456_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1456_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1456_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1456_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_1_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_2_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_2_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_2_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_2_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_2_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_2_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_2_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_2_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_2_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_2_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_2_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_2_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_2_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_2_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_2_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_2_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5616_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5616_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5616_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5616_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5616_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5616_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5616_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5616_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5616_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5616_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5616_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5616_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5616_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5616_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5616_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5616_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5617_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5617_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5617_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5617_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5617_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5617_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5617_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5617_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5617_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5617_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5617_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5617_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5617_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5617_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5617_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_5617_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9935_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9935_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9935_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9935_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9935_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9935_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9935_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9935_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9935_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9935_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9935_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9935_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9935_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9935_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9935_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9935_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecmul_7827-6598_9_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_bad_length_191.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_bad_length_191.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_bad_length_191.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_bad_length_191.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_bad_length_193.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_bad_length_193.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_bad_length_193.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_bad_length_193.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_empty_data.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_empty_data.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_empty_data.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_empty_data.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_empty_data_insufficient_gas.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_empty_data_insufficient_gas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_empty_data_insufficient_gas.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_empty_data_insufficient_gas.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_one_point_fail.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_one_point_fail.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_one_point_fail.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_one_point_fail.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_one_point_insufficient_gas.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_one_point_insufficient_gas.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_one_point_insufficient_gas.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_one_point_insufficient_gas.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_one_point_not_in_subgroup.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_one_point_not_in_subgroup.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_one_point_not_in_subgroup.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_one_point_not_in_subgroup.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_one_point_with_g1_zero.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_one_point_with_g1_zero.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_one_point_with_g1_zero.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_one_point_with_g1_zero.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_one_point_with_g2_zero.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_one_point_with_g2_zero.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_one_point_with_g2_zero.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_one_point_with_g2_zero.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_one_point_with_g2_zero_and_g1_invalid.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_one_point_with_g2_zero_and_g1_invalid.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_one_point_with_g2_zero_and_g1_invalid.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_one_point_with_g2_zero_and_g1_invalid.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_g2_by_curve_order.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_g2_by_curve_order.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_g2_by_curve_order.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_g2_by_curve_order.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_g2_by_field_modulus.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_g2_by_field_modulus.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_g2_by_field_modulus.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_g2_by_field_modulus.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_g2_by_field_modulus_again.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_g2_by_field_modulus_again.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_g2_by_field_modulus_again.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_g2_by_field_modulus_again.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_g2_by_one.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_g2_by_one.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_g2_by_one.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_g2_by_one.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_zeropoint_by_curve_order.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_zeropoint_by_curve_order.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_zeropoint_by_curve_order.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_zeropoint_by_curve_order.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_zeropoint_by_field_modulus.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_zeropoint_by_field_modulus.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_zeropoint_by_field_modulus.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_zeropoint_by_field_modulus.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_zeropoint_by_one.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_zeropoint_by_one.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_zeropoint_by_one.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_perturb_zeropoint_by_one.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_three_point_fail_1.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_three_point_fail_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_three_point_fail_1.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_three_point_fail_1.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_three_point_match_1.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_three_point_match_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_three_point_match_1.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_three_point_match_1.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_fail_1.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_fail_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_fail_1.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_fail_1.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_fail_2.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_fail_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_fail_2.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_fail_2.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_match_1.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_match_1.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_match_1.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_match_1.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_match_2.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_match_2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_match_2.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_match_2.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_match_3.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_match_3.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_match_3.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_match_3.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_match_4.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_match_4.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_match_4.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_match_4.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_match_5.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_match_5.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_match_5.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_match_5.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_oog.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_oog.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_oog.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_point_oog.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_points_with_one_g2_zero.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_points_with_one_g2_zero.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_points_with_one_g2_zero.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/ecpairing_two_points_with_one_g2_zero.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/pairingTest.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/pairingTest.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/pairingTest.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/pairingTest.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/pointAdd.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/pointAdd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/pointAdd.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/pointAdd.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/pointAddTrunc.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/pointAddTrunc.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/pointAddTrunc.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/pointAddTrunc.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/pointMulAdd.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/pointMulAdd.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/pointMulAdd.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/pointMulAdd.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge/pointMulAdd2.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/pointMulAdd2.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge/pointMulAdd2.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge/pointMulAdd2.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_21000_0.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_21000_0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_21000_0.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_21000_0.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_21000_192.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_21000_192.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_21000_192.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_21000_192.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_21000_64.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_21000_64.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_21000_64.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_21000_64.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_21000_80.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_21000_80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_21000_80.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_21000_80.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_25000_0.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_25000_0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_25000_0.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_25000_0.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_25000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_25000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_25000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_25000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_25000_192.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_25000_192.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_25000_192.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_25000_192.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_25000_64.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_25000_64.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_25000_64.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_25000_64.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_25000_80.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_25000_80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_25000_80.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_0-0_25000_80.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_1-2_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_1-2_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_1-2_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_1-2_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_1-2_21000_192.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_1-2_21000_192.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_1-2_21000_192.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_1-2_21000_192.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_1-2_25000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_1-2_25000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_1-2_25000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_1-2_25000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_1-2_25000_192.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_1-2_25000_192.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_1-2_25000_192.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_1-2_25000_192.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_1-3_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_1-3_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_1-3_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_1-3_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_1-3_25000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_1-3_25000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_1-3_25000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-0_1-3_25000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-3_1-2_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-3_1-2_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-3_1-2_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-3_1-2_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-3_1-2_25000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-3_1-2_25000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-3_1-2_25000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_0-3_1-2_25000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_0-0_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_0-0_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_0-0_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_0-0_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_0-0_21000_192.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_0-0_21000_192.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_0-0_21000_192.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_0-0_21000_192.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_0-0_21000_64.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_0-0_21000_64.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_0-0_21000_64.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_0-0_21000_64.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_0-0_25000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_0-0_25000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_0-0_25000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_0-0_25000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_0-0_25000_192.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_0-0_25000_192.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_0-0_25000_192.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_0-0_25000_192.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_0-0_25000_64.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_0-0_25000_64.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_0-0_25000_64.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_0-0_25000_64.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_1-2_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_1-2_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_1-2_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_1-2_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_1-2_21000_192.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_1-2_21000_192.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_1-2_21000_192.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_1-2_21000_192.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_1-2_25000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_1-2_25000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_1-2_25000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_1-2_25000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_1-2_25000_192.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_1-2_25000_192.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_1-2_25000_192.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-2_1-2_25000_192.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-3_0-0_21000_80.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-3_0-0_21000_80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-3_0-0_21000_80.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-3_0-0_21000_80.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-3_0-0_25000_80.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-3_0-0_25000_80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-3_0-0_25000_80.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1-3_0-0_25000_80.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1145-3932_1145-4651_21000_192.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1145-3932_1145-4651_21000_192.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1145-3932_1145-4651_21000_192.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1145-3932_1145-4651_21000_192.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1145-3932_1145-4651_25000_192.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1145-3932_1145-4651_25000_192.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1145-3932_1145-4651_25000_192.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1145-3932_1145-4651_25000_192.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1145-3932_2969-1336_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1145-3932_2969-1336_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1145-3932_2969-1336_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1145-3932_2969-1336_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1145-3932_2969-1336_25000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1145-3932_2969-1336_25000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1145-3932_2969-1336_25000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_1145-3932_2969-1336_25000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_6-9_19274124-124124_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_6-9_19274124-124124_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_6-9_19274124-124124_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_6-9_19274124-124124_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_6-9_19274124-124124_25000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_6-9_19274124-124124_25000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_6-9_19274124-124124_25000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecadd_6-9_19274124-124124_25000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_21000_0.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_21000_0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_21000_0.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_21000_0.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_21000_40.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_21000_40.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_21000_40.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_21000_40.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_21000_64.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_21000_64.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_21000_64.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_21000_64.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_21000_80.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_21000_80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_21000_80.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_21000_80.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_28000_0.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_28000_0.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_28000_0.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_28000_0.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_28000_40.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_28000_40.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_28000_40.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_28000_40.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_28000_64.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_28000_64.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_28000_64.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_28000_64.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_28000_80.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_28000_80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_28000_80.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_28000_80.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_0_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_1_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_1_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_1_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_1_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_1_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_1_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_1_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_1_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_1_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_1_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_1_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_1_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_1_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_1_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_1_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_1_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_2_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_2_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_2_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_2_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_2_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_2_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_2_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_2_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_2_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_2_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_2_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_2_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_2_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_2_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_2_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_2_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_21000_80.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_21000_80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_21000_80.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_21000_80.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_28000_80.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_28000_80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_28000_80.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_28000_80.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_340282366920938463463374607431768211456_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5616_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5616_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5616_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5616_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5616_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5616_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5616_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5616_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5616_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5616_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5616_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5616_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5616_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5616_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5616_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5616_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5617_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5617_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5617_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5617_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5617_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5617_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5617_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5617_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5617_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5617_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5617_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5617_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5617_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5617_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5617_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_5617_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9935_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9935_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9935_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9935_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9935_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9935_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9935_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9935_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9935_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9935_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9935_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9935_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9935_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9935_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9935_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9935_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-0_9_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_21000_64.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_21000_64.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_21000_64.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_21000_64.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_21000_80.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_21000_80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_21000_80.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_21000_80.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_28000_64.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_28000_64.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_28000_64.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_28000_64.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_28000_80.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_28000_80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_28000_80.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_28000_80.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_0_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_1_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_1_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_1_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_1_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_1_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_1_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_1_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_1_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_1_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_1_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_1_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_1_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_1_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_1_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_1_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_1_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_2_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_2_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_2_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_2_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_2_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_2_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_2_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_2_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_2_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_2_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_2_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_2_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_2_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_2_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_2_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_2_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_21000_80.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_21000_80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_21000_80.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_21000_80.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_28000_80.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_28000_80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_28000_80.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_28000_80.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_340282366920938463463374607431768211456_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5616_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5616_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5616_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5616_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5616_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5616_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5616_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5616_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5616_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5616_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5616_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5616_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5616_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5616_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5616_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5616_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5617_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5617_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5617_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5617_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5617_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5617_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5617_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5617_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5617_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5617_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5617_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5617_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5617_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5617_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5617_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_5617_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9935_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9935_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9935_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9935_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9935_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9935_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9935_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9935_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9935_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9935_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9935_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9935_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9935_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9935_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9935_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9935_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_0-3_9_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_21000_64.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_21000_64.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_21000_64.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_21000_64.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_21000_80.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_21000_80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_21000_80.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_21000_80.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_28000_64.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_28000_64.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_28000_64.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_28000_64.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_28000_80.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_28000_80.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_28000_80.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_28000_80.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_0_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_1_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_1_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_1_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_1_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_1_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_1_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_1_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_1_21000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_1_28000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_1_28000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_1_28000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_1_28000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_1_28000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_1_28000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_1_28000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_1_28000_96.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_2_21000_128.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_2_21000_128.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_2_21000_128.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_2_21000_128.json diff --git a/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_2_21000_96.json b/c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_2_21000_96.json similarity index 100% rename from test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_2_21000_96.json rename to c/test/testdata/evm/GeneralStateTests/stZeroKnowledge2/ecmul_1-2_2_21000_96.json diff --git a/test/testdata/evm/RLPTests/rlptest.json b/c/test/testdata/evm/RLPTests/rlptest.json similarity index 100% rename from test/testdata/evm/RLPTests/rlptest.json rename to c/test/testdata/evm/RLPTests/rlptest.json diff --git a/test/testdata/evm/TrieTests/hex_encoded_securetrie_test.json b/c/test/testdata/evm/TrieTests/hex_encoded_securetrie_test.json similarity index 100% rename from test/testdata/evm/TrieTests/hex_encoded_securetrie_test.json rename to c/test/testdata/evm/TrieTests/hex_encoded_securetrie_test.json diff --git a/test/testdata/evm/TrieTests/trieanyorder.json b/c/test/testdata/evm/TrieTests/trieanyorder.json similarity index 100% rename from test/testdata/evm/TrieTests/trieanyorder.json rename to c/test/testdata/evm/TrieTests/trieanyorder.json diff --git a/test/testdata/evm/TrieTests/trieanyorder_secureTrie.json b/c/test/testdata/evm/TrieTests/trieanyorder_secureTrie.json similarity index 100% rename from test/testdata/evm/TrieTests/trieanyorder_secureTrie.json rename to c/test/testdata/evm/TrieTests/trieanyorder_secureTrie.json diff --git a/test/testdata/evm/TrieTests/trietest.json b/c/test/testdata/evm/TrieTests/trietest.json similarity index 100% rename from test/testdata/evm/TrieTests/trietest.json rename to c/test/testdata/evm/TrieTests/trietest.json diff --git a/test/testdata/evm/TrieTests/trietest_secureTrie.json b/c/test/testdata/evm/TrieTests/trietest_secureTrie.json similarity index 100% rename from test/testdata/evm/TrieTests/trietest_secureTrie.json rename to c/test/testdata/evm/TrieTests/trietest_secureTrie.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/add0.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/add0.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/add0.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/add0.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/add1.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/add1.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/add1.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/add1.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/add2.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/add2.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/add2.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/add2.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/add3.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/add3.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/add3.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/add3.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/add4.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/add4.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/add4.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/add4.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/addmod0.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/addmod0.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/addmod0.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/addmod0.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/addmod1.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/addmod1.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/addmod1.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/addmod1.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/addmod1_overflow2.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/addmod1_overflow2.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/addmod1_overflow2.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/addmod1_overflow2.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/addmod1_overflow3.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/addmod1_overflow3.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/addmod1_overflow3.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/addmod1_overflow3.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/addmod1_overflow4.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/addmod1_overflow4.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/addmod1_overflow4.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/addmod1_overflow4.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/addmod1_overflowDiff.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/addmod1_overflowDiff.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/addmod1_overflowDiff.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/addmod1_overflowDiff.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/addmod2.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/addmod2.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/addmod2.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/addmod2.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/addmod2_0.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/addmod2_0.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/addmod2_0.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/addmod2_0.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/addmod2_1.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/addmod2_1.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/addmod2_1.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/addmod2_1.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/addmod3.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/addmod3.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/addmod3.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/addmod3.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/addmod3_0.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/addmod3_0.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/addmod3_0.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/addmod3_0.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/addmodBigIntCast.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/addmodBigIntCast.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/addmodBigIntCast.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/addmodBigIntCast.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/addmodDivByZero.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/addmodDivByZero.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/addmodDivByZero.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/addmodDivByZero.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/addmodDivByZero1.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/addmodDivByZero1.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/addmodDivByZero1.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/addmodDivByZero1.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/addmodDivByZero2.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/addmodDivByZero2.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/addmodDivByZero2.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/addmodDivByZero2.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/addmodDivByZero3.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/addmodDivByZero3.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/addmodDivByZero3.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/addmodDivByZero3.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/arith1.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/arith1.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/arith1.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/arith1.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/div1.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/div1.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/div1.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/div1.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/divBoostBug.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/divBoostBug.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/divBoostBug.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/divBoostBug.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/divByNonZero0.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/divByNonZero0.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/divByNonZero0.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/divByNonZero0.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/divByNonZero1.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/divByNonZero1.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/divByNonZero1.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/divByNonZero1.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/divByNonZero2.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/divByNonZero2.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/divByNonZero2.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/divByNonZero2.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/divByNonZero3.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/divByNonZero3.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/divByNonZero3.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/divByNonZero3.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/divByZero.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/divByZero.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/divByZero.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/divByZero.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/divByZero_2.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/divByZero_2.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/divByZero_2.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/divByZero_2.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/exp0.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/exp0.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/exp0.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/exp0.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/exp1.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/exp1.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/exp1.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/exp1.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/exp2.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/exp2.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/exp2.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/exp2.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/exp3.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/exp3.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/exp3.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/exp3.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/exp4.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/exp4.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/exp4.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/exp4.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/exp5.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/exp5.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/exp5.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/exp5.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/exp6.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/exp6.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/exp6.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/exp6.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/exp7.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/exp7.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/exp7.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/exp7.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/exp8.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/exp8.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/exp8.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/exp8.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_0.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_0.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_0.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_0.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_1.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_1.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_1.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_1.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_10.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_10.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_10.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_10.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_11.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_11.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_11.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_11.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_12.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_12.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_12.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_12.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_13.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_13.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_13.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_13.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_14.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_14.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_14.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_14.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_15.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_15.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_15.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_15.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_16.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_16.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_16.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_16.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_17.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_17.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_17.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_17.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_18.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_18.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_18.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_18.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_19.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_19.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_19.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_19.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_2.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_2.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_2.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_2.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_20.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_20.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_20.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_20.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_21.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_21.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_21.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_21.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_22.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_22.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_22.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_22.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_23.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_23.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_23.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_23.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_24.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_24.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_24.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_24.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_25.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_25.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_25.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_25.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_26.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_26.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_26.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_26.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_27.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_27.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_27.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_27.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_28.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_28.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_28.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_28.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_29.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_29.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_29.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_29.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_3.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_3.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_3.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_3.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_30.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_30.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_30.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_30.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_31.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_31.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_31.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_31.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_32.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_32.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_32.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_32.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_33.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_33.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_33.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_33.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_4.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_4.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_4.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_4.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_5.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_5.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_5.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_5.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_6.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_6.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_6.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_6.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_7.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_7.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_7.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_7.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_8.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_8.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_8.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_8.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_9.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_9.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_9.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256Of256_9.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_1.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_1.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_1.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_1.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_10.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_10.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_10.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_10.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_11.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_11.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_11.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_11.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_12.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_12.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_12.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_12.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_13.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_13.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_13.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_13.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_14.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_14.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_14.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_14.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_15.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_15.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_15.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_15.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_16.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_16.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_16.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_16.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_17.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_17.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_17.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_17.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_18.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_18.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_18.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_18.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_19.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_19.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_19.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_19.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_2.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_2.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_2.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_2.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_20.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_20.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_20.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_20.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_21.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_21.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_21.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_21.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_22.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_22.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_22.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_22.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_23.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_23.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_23.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_23.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_24.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_24.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_24.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_24.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_25.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_25.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_25.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_25.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_26.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_26.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_26.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_26.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_27.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_27.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_27.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_27.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_28.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_28.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_28.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_28.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_29.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_29.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_29.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_29.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_3.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_3.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_3.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_3.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_30.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_30.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_30.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_30.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_31.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_31.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_31.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_31.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_32.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_32.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_32.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_32.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_33.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_33.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_33.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_33.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_4.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_4.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_4.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_4.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_5.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_5.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_5.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_5.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_6.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_6.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_6.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_6.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_7.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_7.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_7.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_7.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_8.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_8.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_8.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_8.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_9.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_9.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_9.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf256_9.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_128.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_128.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_128.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_128.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_16.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_16.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_16.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_16.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_2.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_2.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_2.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_2.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_256.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_256.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_256.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_256.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_32.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_32.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_32.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_32.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_4.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_4.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_4.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_4.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_64.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_64.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_64.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_64.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_8.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_8.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_8.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expPowerOf2_8.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expXY.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expXY.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expXY.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expXY.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/expXY_success.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/expXY_success.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/expXY_success.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/expXY_success.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/fibbonacci_unrolled.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/fibbonacci_unrolled.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/fibbonacci_unrolled.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/fibbonacci_unrolled.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mod0.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mod0.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mod0.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mod0.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mod1.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mod1.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mod1.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mod1.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mod2.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mod2.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mod2.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mod2.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mod3.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mod3.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mod3.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mod3.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mod4.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mod4.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mod4.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mod4.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/modByZero.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/modByZero.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/modByZero.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/modByZero.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mul0.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mul0.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mul0.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mul0.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mul1.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mul1.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mul1.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mul1.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mul2.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mul2.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mul2.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mul2.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mul3.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mul3.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mul3.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mul3.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mul4.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mul4.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mul4.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mul4.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mul5.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mul5.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mul5.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mul5.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mul6.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mul6.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mul6.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mul6.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mul7.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mul7.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mul7.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mul7.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mulUnderFlow.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mulUnderFlow.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mulUnderFlow.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mulUnderFlow.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mulmod0.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mulmod0.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mulmod0.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mulmod0.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mulmod1.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mulmod1.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mulmod1.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mulmod1.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mulmod1_overflow.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mulmod1_overflow.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mulmod1_overflow.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mulmod1_overflow.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mulmod1_overflow2.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mulmod1_overflow2.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mulmod1_overflow2.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mulmod1_overflow2.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mulmod1_overflow3.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mulmod1_overflow3.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mulmod1_overflow3.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mulmod1_overflow3.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mulmod1_overflow4.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mulmod1_overflow4.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mulmod1_overflow4.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mulmod1_overflow4.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mulmod2.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mulmod2.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mulmod2.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mulmod2.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mulmod2_0.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mulmod2_0.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mulmod2_0.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mulmod2_0.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mulmod2_1.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mulmod2_1.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mulmod2_1.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mulmod2_1.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mulmod3.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mulmod3.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mulmod3.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mulmod3.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mulmod3_0.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mulmod3_0.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mulmod3_0.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mulmod3_0.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mulmod4.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mulmod4.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mulmod4.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mulmod4.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mulmoddivByZero.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mulmoddivByZero.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mulmoddivByZero.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mulmoddivByZero.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mulmoddivByZero1.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mulmoddivByZero1.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mulmoddivByZero1.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mulmoddivByZero1.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mulmoddivByZero2.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mulmoddivByZero2.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mulmoddivByZero2.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mulmoddivByZero2.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/mulmoddivByZero3.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/mulmoddivByZero3.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/mulmoddivByZero3.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/mulmoddivByZero3.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/not1.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/not1.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/not1.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/not1.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/sdiv0.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv0.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/sdiv0.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv0.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/sdiv1.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv1.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/sdiv1.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv1.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/sdiv2.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv2.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/sdiv2.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv2.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/sdiv3.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv3.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/sdiv3.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv3.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/sdiv4.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv4.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/sdiv4.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv4.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/sdiv5.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv5.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/sdiv5.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv5.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/sdiv6.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv6.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/sdiv6.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv6.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/sdiv7.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv7.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/sdiv7.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv7.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/sdiv8.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv8.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/sdiv8.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv8.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/sdiv9.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv9.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/sdiv9.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv9.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/sdivByZero0.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/sdivByZero0.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/sdivByZero0.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/sdivByZero0.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/sdivByZero1.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/sdivByZero1.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/sdivByZero1.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/sdivByZero1.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/sdivByZero2.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/sdivByZero2.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/sdivByZero2.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/sdivByZero2.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/sdiv_dejavu.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv_dejavu.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/sdiv_dejavu.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv_dejavu.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/sdiv_i256min.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv_i256min.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/sdiv_i256min.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv_i256min.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/sdiv_i256min2.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv_i256min2.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/sdiv_i256min2.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv_i256min2.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/sdiv_i256min3.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv_i256min3.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/sdiv_i256min3.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/sdiv_i256min3.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/signextendInvalidByteNumber.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/signextendInvalidByteNumber.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/signextendInvalidByteNumber.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/signextendInvalidByteNumber.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/signextend_00.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/signextend_00.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/signextend_00.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/signextend_00.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/signextend_0_BigByte.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/signextend_0_BigByte.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/signextend_0_BigByte.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/signextend_0_BigByte.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/signextend_AlmostBiggestByte.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/signextend_AlmostBiggestByte.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/signextend_AlmostBiggestByte.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/signextend_AlmostBiggestByte.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/signextend_BigByteBigByte.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/signextend_BigByteBigByte.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/signextend_BigByteBigByte.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/signextend_BigByteBigByte.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/signextend_BigBytePlus1_2.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/signextend_BigBytePlus1_2.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/signextend_BigBytePlus1_2.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/signextend_BigBytePlus1_2.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/signextend_BigByte_0.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/signextend_BigByte_0.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/signextend_BigByte_0.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/signextend_BigByte_0.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/signextend_BitIsNotSet.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/signextend_BitIsNotSet.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/signextend_BitIsNotSet.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/signextend_BitIsNotSet.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/signextend_BitIsNotSetInHigherByte.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/signextend_BitIsNotSetInHigherByte.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/signextend_BitIsNotSetInHigherByte.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/signextend_BitIsNotSetInHigherByte.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/signextend_BitIsSetInHigherByte.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/signextend_BitIsSetInHigherByte.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/signextend_BitIsSetInHigherByte.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/signextend_BitIsSetInHigherByte.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/signextend_Overflow_dj42.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/signextend_Overflow_dj42.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/signextend_Overflow_dj42.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/signextend_Overflow_dj42.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/signextend_bigBytePlus1.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/signextend_bigBytePlus1.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/signextend_bigBytePlus1.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/signextend_bigBytePlus1.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/signextend_bitIsSet.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/signextend_bitIsSet.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/signextend_bitIsSet.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/signextend_bitIsSet.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/smod0.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/smod0.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/smod0.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/smod0.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/smod1.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/smod1.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/smod1.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/smod1.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/smod2.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/smod2.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/smod2.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/smod2.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/smod3.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/smod3.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/smod3.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/smod3.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/smod4.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/smod4.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/smod4.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/smod4.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/smod5.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/smod5.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/smod5.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/smod5.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/smod6.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/smod6.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/smod6.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/smod6.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/smod7.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/smod7.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/smod7.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/smod7.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/smod8_byZero.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/smod8_byZero.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/smod8_byZero.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/smod8_byZero.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/smod_i256min1.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/smod_i256min1.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/smod_i256min1.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/smod_i256min1.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/smod_i256min2.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/smod_i256min2.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/smod_i256min2.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/smod_i256min2.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/stop.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/stop.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/stop.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/stop.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/sub0.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/sub0.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/sub0.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/sub0.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/sub1.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/sub1.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/sub1.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/sub1.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/sub2.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/sub2.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/sub2.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/sub2.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/sub3.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/sub3.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/sub3.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/sub3.json diff --git a/test/testdata/evm/vmTests/vmArithmeticTest/sub4.json b/c/test/testdata/evm/vmTests/vmArithmeticTest/sub4.json similarity index 100% rename from test/testdata/evm/vmTests/vmArithmeticTest/sub4.json rename to c/test/testdata/evm/vmTests/vmArithmeticTest/sub4.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/and0.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/and0.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/and0.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/and0.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/and1.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/and1.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/and1.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/and1.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/and2.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/and2.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/and2.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/and2.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/and3.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/and3.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/and3.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/and3.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/and4.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/and4.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/and4.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/and4.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/and5.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/and5.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/and5.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/and5.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte0.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte0.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte0.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte0.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte1.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte1.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte1.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte1.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte10.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte10.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte10.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte10.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte11.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte11.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte11.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte11.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte2.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte2.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte2.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte2.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte3.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte3.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte3.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte3.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte4.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte4.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte4.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte4.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte5.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte5.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte5.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte5.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte6.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte6.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte6.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte6.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte7.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte7.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte7.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte7.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte8.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte8.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte8.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte8.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte9.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte9.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte9.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byte9.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byteBN.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byteBN.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/byteBN.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/byteBN.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/eq0.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/eq0.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/eq0.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/eq0.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/eq1.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/eq1.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/eq1.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/eq1.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/eq2.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/eq2.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/eq2.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/eq2.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/gt0.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/gt0.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/gt0.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/gt0.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/gt1.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/gt1.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/gt1.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/gt1.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/gt2.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/gt2.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/gt2.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/gt2.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/gt3.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/gt3.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/gt3.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/gt3.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/iszeo2.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/iszeo2.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/iszeo2.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/iszeo2.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/iszero0.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/iszero0.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/iszero0.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/iszero0.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/iszero1.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/iszero1.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/iszero1.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/iszero1.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/lt0.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/lt0.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/lt0.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/lt0.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/lt1.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/lt1.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/lt1.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/lt1.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/lt2.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/lt2.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/lt2.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/lt2.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/lt3.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/lt3.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/lt3.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/lt3.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/not0.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/not0.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/not0.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/not0.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/not1.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/not1.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/not1.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/not1.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/not2.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/not2.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/not2.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/not2.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/not3.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/not3.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/not3.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/not3.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/not4.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/not4.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/not4.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/not4.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/not5.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/not5.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/not5.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/not5.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/or0.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/or0.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/or0.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/or0.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/or1.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/or1.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/or1.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/or1.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/or2.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/or2.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/or2.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/or2.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/or3.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/or3.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/or3.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/or3.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/or4.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/or4.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/or4.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/or4.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/or5.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/or5.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/or5.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/or5.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/sgt0.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/sgt0.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/sgt0.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/sgt0.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/sgt1.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/sgt1.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/sgt1.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/sgt1.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/sgt2.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/sgt2.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/sgt2.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/sgt2.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/sgt3.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/sgt3.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/sgt3.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/sgt3.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/sgt4.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/sgt4.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/sgt4.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/sgt4.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/slt0.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/slt0.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/slt0.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/slt0.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/slt1.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/slt1.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/slt1.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/slt1.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/slt2.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/slt2.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/slt2.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/slt2.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/slt3.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/slt3.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/slt3.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/slt3.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/slt4.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/slt4.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/slt4.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/slt4.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/xor0.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/xor0.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/xor0.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/xor0.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/xor1.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/xor1.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/xor1.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/xor1.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/xor2.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/xor2.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/xor2.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/xor2.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/xor3.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/xor3.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/xor3.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/xor3.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/xor4.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/xor4.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/xor4.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/xor4.json diff --git a/test/testdata/evm/vmTests/vmBitwiseLogicOperation/xor5.json b/c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/xor5.json similarity index 100% rename from test/testdata/evm/vmTests/vmBitwiseLogicOperation/xor5.json rename to c/test/testdata/evm/vmTests/vmBitwiseLogicOperation/xor5.json diff --git a/test/testdata/evm/vmTests/vmBlockInfoTest/coinbase.json b/c/test/testdata/evm/vmTests/vmBlockInfoTest/coinbase.json similarity index 100% rename from test/testdata/evm/vmTests/vmBlockInfoTest/coinbase.json rename to c/test/testdata/evm/vmTests/vmBlockInfoTest/coinbase.json diff --git a/test/testdata/evm/vmTests/vmBlockInfoTest/difficulty.json b/c/test/testdata/evm/vmTests/vmBlockInfoTest/difficulty.json similarity index 100% rename from test/testdata/evm/vmTests/vmBlockInfoTest/difficulty.json rename to c/test/testdata/evm/vmTests/vmBlockInfoTest/difficulty.json diff --git a/test/testdata/evm/vmTests/vmBlockInfoTest/gaslimit.json b/c/test/testdata/evm/vmTests/vmBlockInfoTest/gaslimit.json similarity index 100% rename from test/testdata/evm/vmTests/vmBlockInfoTest/gaslimit.json rename to c/test/testdata/evm/vmTests/vmBlockInfoTest/gaslimit.json diff --git a/test/testdata/evm/vmTests/vmBlockInfoTest/number.json b/c/test/testdata/evm/vmTests/vmBlockInfoTest/number.json similarity index 100% rename from test/testdata/evm/vmTests/vmBlockInfoTest/number.json rename to c/test/testdata/evm/vmTests/vmBlockInfoTest/number.json diff --git a/test/testdata/evm/vmTests/vmBlockInfoTest/timestamp.json b/c/test/testdata/evm/vmTests/vmBlockInfoTest/timestamp.json similarity index 100% rename from test/testdata/evm/vmTests/vmBlockInfoTest/timestamp.json rename to c/test/testdata/evm/vmTests/vmBlockInfoTest/timestamp.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/address0.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/address0.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/address0.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/address0.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/address1.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/address1.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/address1.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/address1.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy0.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy0.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy0.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy0.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy0_return.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy0_return.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy0_return.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy0_return.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy1.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy1.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy1.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy1.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy1_return.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy1_return.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy1_return.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy1_return.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy2.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy2.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy2.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy2.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy2_return.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy2_return.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy2_return.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy2_return.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopyUnderFlow.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopyUnderFlow.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopyUnderFlow.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopyUnderFlow.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopyZeroMemExpansion.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopyZeroMemExpansion.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopyZeroMemExpansion.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopyZeroMemExpansion.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopyZeroMemExpansion_return.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopyZeroMemExpansion_return.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopyZeroMemExpansion_return.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopyZeroMemExpansion_return.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh2.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh2.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh2.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh2.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh2_return.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh2_return.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh2_return.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh2_return.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh_return.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh_return.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh_return.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy_DataIndexTooHigh_return.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy_sec.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy_sec.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy_sec.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatacopy_sec.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldataload0.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldataload0.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/calldataload0.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldataload0.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldataload1.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldataload1.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/calldataload1.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldataload1.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldataload2.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldataload2.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/calldataload2.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldataload2.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldataloadSizeTooHigh.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldataloadSizeTooHigh.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/calldataloadSizeTooHigh.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldataloadSizeTooHigh.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldataloadSizeTooHighPartial.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldataloadSizeTooHighPartial.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/calldataloadSizeTooHighPartial.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldataloadSizeTooHighPartial.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldataload_BigOffset.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldataload_BigOffset.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/calldataload_BigOffset.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldataload_BigOffset.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatasize0.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatasize0.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatasize0.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatasize0.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatasize1.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatasize1.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatasize1.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatasize1.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatasize2.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatasize2.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatasize2.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/calldatasize2.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/caller.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/caller.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/caller.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/caller.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/callvalue.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/callvalue.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/callvalue.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/callvalue.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/codecopy0.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/codecopy0.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/codecopy0.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/codecopy0.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/codecopyZeroMemExpansion.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/codecopyZeroMemExpansion.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/codecopyZeroMemExpansion.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/codecopyZeroMemExpansion.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/codecopy_DataIndexTooHigh.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/codecopy_DataIndexTooHigh.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/codecopy_DataIndexTooHigh.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/codecopy_DataIndexTooHigh.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/codesize.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/codesize.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/codesize.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/codesize.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/gasprice.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/gasprice.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/gasprice.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/gasprice.json diff --git a/test/testdata/evm/vmTests/vmEnvironmentalInfo/origin.json b/c/test/testdata/evm/vmTests/vmEnvironmentalInfo/origin.json similarity index 100% rename from test/testdata/evm/vmTests/vmEnvironmentalInfo/origin.json rename to c/test/testdata/evm/vmTests/vmEnvironmentalInfo/origin.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump0_AfterJumpdest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump0_AfterJumpdest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump0_AfterJumpdest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump0_AfterJumpdest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump0_AfterJumpdest3.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump0_AfterJumpdest3.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump0_AfterJumpdest3.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump0_AfterJumpdest3.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump0_foreverOutOfGas.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump0_foreverOutOfGas.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump0_foreverOutOfGas.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump0_foreverOutOfGas.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump0_jumpdest0.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump0_jumpdest0.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump0_jumpdest0.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump0_jumpdest0.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump0_jumpdest2.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump0_jumpdest2.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump0_jumpdest2.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump0_jumpdest2.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump0_withoutJumpdest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump0_withoutJumpdest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump0_withoutJumpdest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump0_withoutJumpdest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJump1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpInsidePushWithJumpDest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpInsidePushWithJumpDest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpInsidePushWithJumpDest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpInsidePushWithJumpDest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpInsidePushWithoutJumpDest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpInsidePushWithoutJumpDest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpInsidePushWithoutJumpDest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpInsidePushWithoutJumpDest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpi0.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpi0.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpi0.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpi0.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpi1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpi1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpi1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpi1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpi1_jumpdest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpi1_jumpdest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpi1_jumpdest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpi1_jumpdest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpiAfterStop.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpiAfterStop.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpiAfterStop.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpiAfterStop.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpiOutsideBoundary.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpiOutsideBoundary.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpiOutsideBoundary.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpiOutsideBoundary.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpifInsidePushWithJumpDest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpifInsidePushWithJumpDest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpifInsidePushWithJumpDest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpifInsidePushWithJumpDest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpifInsidePushWithoutJumpDest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpifInsidePushWithoutJumpDest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpifInsidePushWithoutJumpDest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/BlockNumberDynamicJumpifInsidePushWithoutJumpDest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DyanmicJump0_outOfBoundary.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DyanmicJump0_outOfBoundary.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DyanmicJump0_outOfBoundary.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DyanmicJump0_outOfBoundary.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump0_AfterJumpdest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump0_AfterJumpdest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump0_AfterJumpdest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump0_AfterJumpdest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump0_AfterJumpdest3.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump0_AfterJumpdest3.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump0_AfterJumpdest3.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump0_AfterJumpdest3.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump0_foreverOutOfGas.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump0_foreverOutOfGas.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump0_foreverOutOfGas.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump0_foreverOutOfGas.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump0_jumpdest0.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump0_jumpdest0.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump0_jumpdest0.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump0_jumpdest0.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump0_jumpdest2.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump0_jumpdest2.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump0_jumpdest2.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump0_jumpdest2.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump0_withoutJumpdest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump0_withoutJumpdest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump0_withoutJumpdest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump0_withoutJumpdest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpAfterStop.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpAfterStop.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpAfterStop.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpAfterStop.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpInsidePushWithJumpDest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpInsidePushWithJumpDest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpInsidePushWithJumpDest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpInsidePushWithJumpDest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpInsidePushWithoutJumpDest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpInsidePushWithoutJumpDest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpInsidePushWithoutJumpDest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpInsidePushWithoutJumpDest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpJD_DependsOnJumps0.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpJD_DependsOnJumps0.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpJD_DependsOnJumps0.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpJD_DependsOnJumps0.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpJD_DependsOnJumps1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpJD_DependsOnJumps1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpJD_DependsOnJumps1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpJD_DependsOnJumps1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpPathologicalTest0.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpPathologicalTest0.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpPathologicalTest0.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpPathologicalTest0.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpPathologicalTest1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpPathologicalTest1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpPathologicalTest1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpPathologicalTest1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpPathologicalTest2.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpPathologicalTest2.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpPathologicalTest2.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpPathologicalTest2.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpPathologicalTest3.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpPathologicalTest3.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpPathologicalTest3.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpPathologicalTest3.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpStartWithJumpDest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpStartWithJumpDest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpStartWithJumpDest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpStartWithJumpDest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump_value1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump_value1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump_value1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump_value1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump_value2.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump_value2.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump_value2.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump_value2.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump_value3.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump_value3.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump_value3.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump_value3.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump_valueUnderflow.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump_valueUnderflow.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump_valueUnderflow.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJump_valueUnderflow.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpi0.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpi0.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpi0.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpi0.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpi1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpi1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpi1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpi1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpi1_jumpdest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpi1_jumpdest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpi1_jumpdest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpi1_jumpdest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpiAfterStop.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpiAfterStop.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpiAfterStop.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpiAfterStop.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpiOutsideBoundary.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpiOutsideBoundary.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpiOutsideBoundary.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpiOutsideBoundary.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpifInsidePushWithJumpDest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpifInsidePushWithJumpDest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpifInsidePushWithJumpDest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpifInsidePushWithJumpDest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpifInsidePushWithoutJumpDest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpifInsidePushWithoutJumpDest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpifInsidePushWithoutJumpDest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/DynamicJumpifInsidePushWithoutJumpDest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_AfterJumpdest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_AfterJumpdest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_AfterJumpdest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_AfterJumpdest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_AfterJumpdest3.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_AfterJumpdest3.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_AfterJumpdest3.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_AfterJumpdest3.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_foreverOutOfGas.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_foreverOutOfGas.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_foreverOutOfGas.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_foreverOutOfGas.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_jumpdest0.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_jumpdest0.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_jumpdest0.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_jumpdest0.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_jumpdest2.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_jumpdest2.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_jumpdest2.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_jumpdest2.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_withoutJumpdest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_withoutJumpdest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_withoutJumpdest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump0_withoutJumpdest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJump1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpInsidePushWithJumpDest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpInsidePushWithJumpDest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpInsidePushWithJumpDest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpInsidePushWithJumpDest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpInsidePushWithoutJumpDest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpInsidePushWithoutJumpDest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpInsidePushWithoutJumpDest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpInsidePushWithoutJumpDest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpi0.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpi0.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpi0.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpi0.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpi1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpi1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpi1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpi1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpi1_jumpdest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpi1_jumpdest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpi1_jumpdest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpi1_jumpdest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpiAfterStop.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpiAfterStop.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpiAfterStop.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpiAfterStop.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpiOutsideBoundary.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpiOutsideBoundary.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpiOutsideBoundary.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpiOutsideBoundary.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpifInsidePushWithJumpDest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpifInsidePushWithJumpDest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpifInsidePushWithJumpDest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpifInsidePushWithJumpDest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpifInsidePushWithoutJumpDest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpifInsidePushWithoutJumpDest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpifInsidePushWithoutJumpDest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/JDfromStorageDynamicJumpifInsidePushWithoutJumpDest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/bad_indirect_jump1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/bad_indirect_jump1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/bad_indirect_jump1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/bad_indirect_jump1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/bad_indirect_jump2.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/bad_indirect_jump2.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/bad_indirect_jump2.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/bad_indirect_jump2.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/byte1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/byte1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/byte1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/byte1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/calldatacopyMemExp.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/calldatacopyMemExp.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/calldatacopyMemExp.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/calldatacopyMemExp.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/codecopyMemExp.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/codecopyMemExp.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/codecopyMemExp.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/codecopyMemExp.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/deadCode_1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/deadCode_1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/deadCode_1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/deadCode_1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/dupAt51becameMload.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/dupAt51becameMload.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/dupAt51becameMload.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/dupAt51becameMload.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/for_loop1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/for_loop1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/for_loop1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/for_loop1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/for_loop2.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/for_loop2.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/for_loop2.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/for_loop2.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/gas0.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/gas0.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/gas0.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/gas0.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/gas1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/gas1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/gas1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/gas1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/gasOverFlow.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/gasOverFlow.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/gasOverFlow.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/gasOverFlow.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/indirect_jump1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/indirect_jump1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/indirect_jump1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/indirect_jump1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/indirect_jump2.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/indirect_jump2.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/indirect_jump2.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/indirect_jump2.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/indirect_jump3.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/indirect_jump3.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/indirect_jump3.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/indirect_jump3.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/indirect_jump4.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/indirect_jump4.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/indirect_jump4.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/indirect_jump4.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_AfterJumpdest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_AfterJumpdest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_AfterJumpdest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_AfterJumpdest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_AfterJumpdest3.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_AfterJumpdest3.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_AfterJumpdest3.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_AfterJumpdest3.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_foreverOutOfGas.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_foreverOutOfGas.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_foreverOutOfGas.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_foreverOutOfGas.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_jumpdest0.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_jumpdest0.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_jumpdest0.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_jumpdest0.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_jumpdest2.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_jumpdest2.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_jumpdest2.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_jumpdest2.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_outOfBoundary.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_outOfBoundary.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_outOfBoundary.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_outOfBoundary.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_withoutJumpdest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_withoutJumpdest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_withoutJumpdest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jump0_withoutJumpdest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jump1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jump1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jump1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jump1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpAfterStop.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpAfterStop.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jumpAfterStop.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpAfterStop.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpDynamicJumpSameDest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpDynamicJumpSameDest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jumpDynamicJumpSameDest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpDynamicJumpSameDest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpHigh.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpHigh.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jumpHigh.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpHigh.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpInsidePushWithJumpDest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpInsidePushWithJumpDest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jumpInsidePushWithJumpDest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpInsidePushWithJumpDest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpInsidePushWithoutJumpDest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpInsidePushWithoutJumpDest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jumpInsidePushWithoutJumpDest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpInsidePushWithoutJumpDest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpOntoJump.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpOntoJump.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jumpOntoJump.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpOntoJump.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpTo1InstructionafterJump.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpTo1InstructionafterJump.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jumpTo1InstructionafterJump.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpTo1InstructionafterJump.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpTo1InstructionafterJump_jumpdestFirstInstruction.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpTo1InstructionafterJump_jumpdestFirstInstruction.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jumpTo1InstructionafterJump_jumpdestFirstInstruction.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpTo1InstructionafterJump_jumpdestFirstInstruction.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpTo1InstructionafterJump_noJumpDest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpTo1InstructionafterJump_noJumpDest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jumpTo1InstructionafterJump_noJumpDest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpTo1InstructionafterJump_noJumpDest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpToUint64maxPlus1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpToUint64maxPlus1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jumpToUint64maxPlus1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpToUint64maxPlus1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpToUintmaxPlus1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpToUintmaxPlus1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jumpToUintmaxPlus1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpToUintmaxPlus1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpdestBigList.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpdestBigList.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jumpdestBigList.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpdestBigList.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpi0.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpi0.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jumpi0.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpi0.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpi1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpi1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jumpi1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpi1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpi1_jumpdest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpi1_jumpdest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jumpi1_jumpdest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpi1_jumpdest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpiAfterStop.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpiAfterStop.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jumpiAfterStop.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpiAfterStop.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpiOutsideBoundary.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpiOutsideBoundary.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jumpiOutsideBoundary.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpiOutsideBoundary.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpiToUint64maxPlus1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpiToUint64maxPlus1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jumpiToUint64maxPlus1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpiToUint64maxPlus1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpiToUintmaxPlus1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpiToUintmaxPlus1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jumpiToUintmaxPlus1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpiToUintmaxPlus1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpi_at_the_end.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpi_at_the_end.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jumpi_at_the_end.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpi_at_the_end.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpifInsidePushWithJumpDest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpifInsidePushWithJumpDest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jumpifInsidePushWithJumpDest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpifInsidePushWithJumpDest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpifInsidePushWithoutJumpDest.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpifInsidePushWithoutJumpDest.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/jumpifInsidePushWithoutJumpDest.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/jumpifInsidePushWithoutJumpDest.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/kv1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/kv1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/kv1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/kv1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/log1MemExp.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/log1MemExp.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/log1MemExp.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/log1MemExp.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/loop_stacklimit_1020.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/loop_stacklimit_1020.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/loop_stacklimit_1020.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/loop_stacklimit_1020.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/loop_stacklimit_1021.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/loop_stacklimit_1021.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/loop_stacklimit_1021.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/loop_stacklimit_1021.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/memory1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/memory1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/memory1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/memory1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/mloadError0.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/mloadError0.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/mloadError0.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/mloadError0.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/mloadError1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/mloadError1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/mloadError1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/mloadError1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/mloadMemExp.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/mloadMemExp.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/mloadMemExp.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/mloadMemExp.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/mloadOutOfGasError2.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/mloadOutOfGasError2.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/mloadOutOfGasError2.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/mloadOutOfGasError2.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/msize0.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/msize0.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/msize0.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/msize0.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/msize1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/msize1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/msize1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/msize1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/msize2.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/msize2.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/msize2.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/msize2.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/msize3.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/msize3.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/msize3.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/msize3.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/mstore0.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/mstore0.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/mstore0.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/mstore0.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/mstore1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/mstore1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/mstore1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/mstore1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/mstore8MemExp.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/mstore8MemExp.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/mstore8MemExp.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/mstore8MemExp.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/mstore8WordToBigError.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/mstore8WordToBigError.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/mstore8WordToBigError.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/mstore8WordToBigError.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/mstore8_0.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/mstore8_0.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/mstore8_0.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/mstore8_0.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/mstore8_1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/mstore8_1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/mstore8_1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/mstore8_1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/mstoreMemExp.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/mstoreMemExp.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/mstoreMemExp.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/mstoreMemExp.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/mstoreWordToBigError.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/mstoreWordToBigError.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/mstoreWordToBigError.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/mstoreWordToBigError.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/mstore_mload0.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/mstore_mload0.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/mstore_mload0.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/mstore_mload0.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/pc0.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/pc0.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/pc0.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/pc0.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/pc1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/pc1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/pc1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/pc1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/pop0.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/pop0.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/pop0.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/pop0.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/pop1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/pop1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/pop1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/pop1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/return1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/return1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/return1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/return1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/return2.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/return2.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/return2.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/return2.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/sha3MemExp.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/sha3MemExp.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/sha3MemExp.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/sha3MemExp.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/sstore_load_0.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/sstore_load_0.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/sstore_load_0.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/sstore_load_0.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/sstore_load_1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/sstore_load_1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/sstore_load_1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/sstore_load_1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/sstore_load_2.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/sstore_load_2.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/sstore_load_2.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/sstore_load_2.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/sstore_underflow.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/sstore_underflow.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/sstore_underflow.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/sstore_underflow.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/stack_loop.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/stack_loop.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/stack_loop.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/stack_loop.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/stackjump1.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/stackjump1.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/stackjump1.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/stackjump1.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/swapAt52becameMstore.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/swapAt52becameMstore.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/swapAt52becameMstore.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/swapAt52becameMstore.json diff --git a/test/testdata/evm/vmTests/vmIOandFlowOperations/when.json b/c/test/testdata/evm/vmTests/vmIOandFlowOperations/when.json similarity index 100% rename from test/testdata/evm/vmTests/vmIOandFlowOperations/when.json rename to c/test/testdata/evm/vmTests/vmIOandFlowOperations/when.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log0_emptyMem.json b/c/test/testdata/evm/vmTests/vmLogTest/log0_emptyMem.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log0_emptyMem.json rename to c/test/testdata/evm/vmTests/vmLogTest/log0_emptyMem.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log0_logMemStartTooHigh.json b/c/test/testdata/evm/vmTests/vmLogTest/log0_logMemStartTooHigh.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log0_logMemStartTooHigh.json rename to c/test/testdata/evm/vmTests/vmLogTest/log0_logMemStartTooHigh.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log0_logMemsizeTooHigh.json b/c/test/testdata/evm/vmTests/vmLogTest/log0_logMemsizeTooHigh.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log0_logMemsizeTooHigh.json rename to c/test/testdata/evm/vmTests/vmLogTest/log0_logMemsizeTooHigh.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log0_logMemsizeZero.json b/c/test/testdata/evm/vmTests/vmLogTest/log0_logMemsizeZero.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log0_logMemsizeZero.json rename to c/test/testdata/evm/vmTests/vmLogTest/log0_logMemsizeZero.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log0_nonEmptyMem.json b/c/test/testdata/evm/vmTests/vmLogTest/log0_nonEmptyMem.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log0_nonEmptyMem.json rename to c/test/testdata/evm/vmTests/vmLogTest/log0_nonEmptyMem.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log0_nonEmptyMem_logMemSize1.json b/c/test/testdata/evm/vmTests/vmLogTest/log0_nonEmptyMem_logMemSize1.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log0_nonEmptyMem_logMemSize1.json rename to c/test/testdata/evm/vmTests/vmLogTest/log0_nonEmptyMem_logMemSize1.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log0_nonEmptyMem_logMemSize1_logMemStart31.json b/c/test/testdata/evm/vmTests/vmLogTest/log0_nonEmptyMem_logMemSize1_logMemStart31.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log0_nonEmptyMem_logMemSize1_logMemStart31.json rename to c/test/testdata/evm/vmTests/vmLogTest/log0_nonEmptyMem_logMemSize1_logMemStart31.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log1_Caller.json b/c/test/testdata/evm/vmTests/vmLogTest/log1_Caller.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log1_Caller.json rename to c/test/testdata/evm/vmTests/vmLogTest/log1_Caller.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log1_MaxTopic.json b/c/test/testdata/evm/vmTests/vmLogTest/log1_MaxTopic.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log1_MaxTopic.json rename to c/test/testdata/evm/vmTests/vmLogTest/log1_MaxTopic.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log1_emptyMem.json b/c/test/testdata/evm/vmTests/vmLogTest/log1_emptyMem.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log1_emptyMem.json rename to c/test/testdata/evm/vmTests/vmLogTest/log1_emptyMem.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log1_logMemStartTooHigh.json b/c/test/testdata/evm/vmTests/vmLogTest/log1_logMemStartTooHigh.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log1_logMemStartTooHigh.json rename to c/test/testdata/evm/vmTests/vmLogTest/log1_logMemStartTooHigh.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log1_logMemsizeTooHigh.json b/c/test/testdata/evm/vmTests/vmLogTest/log1_logMemsizeTooHigh.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log1_logMemsizeTooHigh.json rename to c/test/testdata/evm/vmTests/vmLogTest/log1_logMemsizeTooHigh.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log1_logMemsizeZero.json b/c/test/testdata/evm/vmTests/vmLogTest/log1_logMemsizeZero.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log1_logMemsizeZero.json rename to c/test/testdata/evm/vmTests/vmLogTest/log1_logMemsizeZero.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log1_nonEmptyMem.json b/c/test/testdata/evm/vmTests/vmLogTest/log1_nonEmptyMem.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log1_nonEmptyMem.json rename to c/test/testdata/evm/vmTests/vmLogTest/log1_nonEmptyMem.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log1_nonEmptyMem_logMemSize1.json b/c/test/testdata/evm/vmTests/vmLogTest/log1_nonEmptyMem_logMemSize1.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log1_nonEmptyMem_logMemSize1.json rename to c/test/testdata/evm/vmTests/vmLogTest/log1_nonEmptyMem_logMemSize1.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log1_nonEmptyMem_logMemSize1_logMemStart31.json b/c/test/testdata/evm/vmTests/vmLogTest/log1_nonEmptyMem_logMemSize1_logMemStart31.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log1_nonEmptyMem_logMemSize1_logMemStart31.json rename to c/test/testdata/evm/vmTests/vmLogTest/log1_nonEmptyMem_logMemSize1_logMemStart31.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log2_Caller.json b/c/test/testdata/evm/vmTests/vmLogTest/log2_Caller.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log2_Caller.json rename to c/test/testdata/evm/vmTests/vmLogTest/log2_Caller.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log2_MaxTopic.json b/c/test/testdata/evm/vmTests/vmLogTest/log2_MaxTopic.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log2_MaxTopic.json rename to c/test/testdata/evm/vmTests/vmLogTest/log2_MaxTopic.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log2_emptyMem.json b/c/test/testdata/evm/vmTests/vmLogTest/log2_emptyMem.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log2_emptyMem.json rename to c/test/testdata/evm/vmTests/vmLogTest/log2_emptyMem.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log2_logMemStartTooHigh.json b/c/test/testdata/evm/vmTests/vmLogTest/log2_logMemStartTooHigh.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log2_logMemStartTooHigh.json rename to c/test/testdata/evm/vmTests/vmLogTest/log2_logMemStartTooHigh.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log2_logMemsizeTooHigh.json b/c/test/testdata/evm/vmTests/vmLogTest/log2_logMemsizeTooHigh.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log2_logMemsizeTooHigh.json rename to c/test/testdata/evm/vmTests/vmLogTest/log2_logMemsizeTooHigh.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log2_logMemsizeZero.json b/c/test/testdata/evm/vmTests/vmLogTest/log2_logMemsizeZero.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log2_logMemsizeZero.json rename to c/test/testdata/evm/vmTests/vmLogTest/log2_logMemsizeZero.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log2_nonEmptyMem.json b/c/test/testdata/evm/vmTests/vmLogTest/log2_nonEmptyMem.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log2_nonEmptyMem.json rename to c/test/testdata/evm/vmTests/vmLogTest/log2_nonEmptyMem.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log2_nonEmptyMem_logMemSize1.json b/c/test/testdata/evm/vmTests/vmLogTest/log2_nonEmptyMem_logMemSize1.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log2_nonEmptyMem_logMemSize1.json rename to c/test/testdata/evm/vmTests/vmLogTest/log2_nonEmptyMem_logMemSize1.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log2_nonEmptyMem_logMemSize1_logMemStart31.json b/c/test/testdata/evm/vmTests/vmLogTest/log2_nonEmptyMem_logMemSize1_logMemStart31.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log2_nonEmptyMem_logMemSize1_logMemStart31.json rename to c/test/testdata/evm/vmTests/vmLogTest/log2_nonEmptyMem_logMemSize1_logMemStart31.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log3_Caller.json b/c/test/testdata/evm/vmTests/vmLogTest/log3_Caller.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log3_Caller.json rename to c/test/testdata/evm/vmTests/vmLogTest/log3_Caller.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log3_MaxTopic.json b/c/test/testdata/evm/vmTests/vmLogTest/log3_MaxTopic.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log3_MaxTopic.json rename to c/test/testdata/evm/vmTests/vmLogTest/log3_MaxTopic.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log3_PC.json b/c/test/testdata/evm/vmTests/vmLogTest/log3_PC.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log3_PC.json rename to c/test/testdata/evm/vmTests/vmLogTest/log3_PC.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log3_emptyMem.json b/c/test/testdata/evm/vmTests/vmLogTest/log3_emptyMem.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log3_emptyMem.json rename to c/test/testdata/evm/vmTests/vmLogTest/log3_emptyMem.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log3_logMemStartTooHigh.json b/c/test/testdata/evm/vmTests/vmLogTest/log3_logMemStartTooHigh.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log3_logMemStartTooHigh.json rename to c/test/testdata/evm/vmTests/vmLogTest/log3_logMemStartTooHigh.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log3_logMemsizeTooHigh.json b/c/test/testdata/evm/vmTests/vmLogTest/log3_logMemsizeTooHigh.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log3_logMemsizeTooHigh.json rename to c/test/testdata/evm/vmTests/vmLogTest/log3_logMemsizeTooHigh.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log3_logMemsizeZero.json b/c/test/testdata/evm/vmTests/vmLogTest/log3_logMemsizeZero.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log3_logMemsizeZero.json rename to c/test/testdata/evm/vmTests/vmLogTest/log3_logMemsizeZero.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log3_nonEmptyMem.json b/c/test/testdata/evm/vmTests/vmLogTest/log3_nonEmptyMem.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log3_nonEmptyMem.json rename to c/test/testdata/evm/vmTests/vmLogTest/log3_nonEmptyMem.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log3_nonEmptyMem_logMemSize1.json b/c/test/testdata/evm/vmTests/vmLogTest/log3_nonEmptyMem_logMemSize1.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log3_nonEmptyMem_logMemSize1.json rename to c/test/testdata/evm/vmTests/vmLogTest/log3_nonEmptyMem_logMemSize1.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log3_nonEmptyMem_logMemSize1_logMemStart31.json b/c/test/testdata/evm/vmTests/vmLogTest/log3_nonEmptyMem_logMemSize1_logMemStart31.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log3_nonEmptyMem_logMemSize1_logMemStart31.json rename to c/test/testdata/evm/vmTests/vmLogTest/log3_nonEmptyMem_logMemSize1_logMemStart31.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log4_Caller.json b/c/test/testdata/evm/vmTests/vmLogTest/log4_Caller.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log4_Caller.json rename to c/test/testdata/evm/vmTests/vmLogTest/log4_Caller.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log4_MaxTopic.json b/c/test/testdata/evm/vmTests/vmLogTest/log4_MaxTopic.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log4_MaxTopic.json rename to c/test/testdata/evm/vmTests/vmLogTest/log4_MaxTopic.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log4_PC.json b/c/test/testdata/evm/vmTests/vmLogTest/log4_PC.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log4_PC.json rename to c/test/testdata/evm/vmTests/vmLogTest/log4_PC.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log4_emptyMem.json b/c/test/testdata/evm/vmTests/vmLogTest/log4_emptyMem.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log4_emptyMem.json rename to c/test/testdata/evm/vmTests/vmLogTest/log4_emptyMem.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log4_logMemStartTooHigh.json b/c/test/testdata/evm/vmTests/vmLogTest/log4_logMemStartTooHigh.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log4_logMemStartTooHigh.json rename to c/test/testdata/evm/vmTests/vmLogTest/log4_logMemStartTooHigh.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log4_logMemsizeTooHigh.json b/c/test/testdata/evm/vmTests/vmLogTest/log4_logMemsizeTooHigh.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log4_logMemsizeTooHigh.json rename to c/test/testdata/evm/vmTests/vmLogTest/log4_logMemsizeTooHigh.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log4_logMemsizeZero.json b/c/test/testdata/evm/vmTests/vmLogTest/log4_logMemsizeZero.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log4_logMemsizeZero.json rename to c/test/testdata/evm/vmTests/vmLogTest/log4_logMemsizeZero.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log4_nonEmptyMem.json b/c/test/testdata/evm/vmTests/vmLogTest/log4_nonEmptyMem.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log4_nonEmptyMem.json rename to c/test/testdata/evm/vmTests/vmLogTest/log4_nonEmptyMem.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log4_nonEmptyMem_logMemSize1.json b/c/test/testdata/evm/vmTests/vmLogTest/log4_nonEmptyMem_logMemSize1.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log4_nonEmptyMem_logMemSize1.json rename to c/test/testdata/evm/vmTests/vmLogTest/log4_nonEmptyMem_logMemSize1.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log4_nonEmptyMem_logMemSize1_logMemStart31.json b/c/test/testdata/evm/vmTests/vmLogTest/log4_nonEmptyMem_logMemSize1_logMemStart31.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log4_nonEmptyMem_logMemSize1_logMemStart31.json rename to c/test/testdata/evm/vmTests/vmLogTest/log4_nonEmptyMem_logMemSize1_logMemStart31.json diff --git a/test/testdata/evm/vmTests/vmLogTest/log_2logs.json b/c/test/testdata/evm/vmTests/vmLogTest/log_2logs.json similarity index 100% rename from test/testdata/evm/vmTests/vmLogTest/log_2logs.json rename to c/test/testdata/evm/vmTests/vmLogTest/log_2logs.json diff --git a/test/testdata/evm/vmTests/vmPerformance/ackermann31.json b/c/test/testdata/evm/vmTests/vmPerformance/ackermann31.json similarity index 100% rename from test/testdata/evm/vmTests/vmPerformance/ackermann31.json rename to c/test/testdata/evm/vmTests/vmPerformance/ackermann31.json diff --git a/test/testdata/evm/vmTests/vmPerformance/ackermann32.json b/c/test/testdata/evm/vmTests/vmPerformance/ackermann32.json similarity index 100% rename from test/testdata/evm/vmTests/vmPerformance/ackermann32.json rename to c/test/testdata/evm/vmTests/vmPerformance/ackermann32.json diff --git a/test/testdata/evm/vmTests/vmPerformance/ackermann33.json b/c/test/testdata/evm/vmTests/vmPerformance/ackermann33.json similarity index 100% rename from test/testdata/evm/vmTests/vmPerformance/ackermann33.json rename to c/test/testdata/evm/vmTests/vmPerformance/ackermann33.json diff --git a/test/testdata/evm/vmTests/vmPerformance/fibonacci10.json b/c/test/testdata/evm/vmTests/vmPerformance/fibonacci10.json similarity index 100% rename from test/testdata/evm/vmTests/vmPerformance/fibonacci10.json rename to c/test/testdata/evm/vmTests/vmPerformance/fibonacci10.json diff --git a/test/testdata/evm/vmTests/vmPerformance/fibonacci16.json b/c/test/testdata/evm/vmTests/vmPerformance/fibonacci16.json similarity index 100% rename from test/testdata/evm/vmTests/vmPerformance/fibonacci16.json rename to c/test/testdata/evm/vmTests/vmPerformance/fibonacci16.json diff --git a/test/testdata/evm/vmTests/vmPerformance/loop-add-10M.json b/c/test/testdata/evm/vmTests/vmPerformance/loop-add-10M.json similarity index 100% rename from test/testdata/evm/vmTests/vmPerformance/loop-add-10M.json rename to c/test/testdata/evm/vmTests/vmPerformance/loop-add-10M.json diff --git a/test/testdata/evm/vmTests/vmPerformance/loop-divadd-10M.json b/c/test/testdata/evm/vmTests/vmPerformance/loop-divadd-10M.json similarity index 100% rename from test/testdata/evm/vmTests/vmPerformance/loop-divadd-10M.json rename to c/test/testdata/evm/vmTests/vmPerformance/loop-divadd-10M.json diff --git a/test/testdata/evm/vmTests/vmPerformance/loop-divadd-unr100-10M.json b/c/test/testdata/evm/vmTests/vmPerformance/loop-divadd-unr100-10M.json similarity index 100% rename from test/testdata/evm/vmTests/vmPerformance/loop-divadd-unr100-10M.json rename to c/test/testdata/evm/vmTests/vmPerformance/loop-divadd-unr100-10M.json diff --git a/test/testdata/evm/vmTests/vmPerformance/loop-exp-16b-100k.json b/c/test/testdata/evm/vmTests/vmPerformance/loop-exp-16b-100k.json similarity index 100% rename from test/testdata/evm/vmTests/vmPerformance/loop-exp-16b-100k.json rename to c/test/testdata/evm/vmTests/vmPerformance/loop-exp-16b-100k.json diff --git a/test/testdata/evm/vmTests/vmPerformance/loop-exp-1b-1M.json b/c/test/testdata/evm/vmTests/vmPerformance/loop-exp-1b-1M.json similarity index 100% rename from test/testdata/evm/vmTests/vmPerformance/loop-exp-1b-1M.json rename to c/test/testdata/evm/vmTests/vmPerformance/loop-exp-1b-1M.json diff --git a/test/testdata/evm/vmTests/vmPerformance/loop-exp-2b-100k.json b/c/test/testdata/evm/vmTests/vmPerformance/loop-exp-2b-100k.json similarity index 100% rename from test/testdata/evm/vmTests/vmPerformance/loop-exp-2b-100k.json rename to c/test/testdata/evm/vmTests/vmPerformance/loop-exp-2b-100k.json diff --git a/test/testdata/evm/vmTests/vmPerformance/loop-exp-32b-100k.json b/c/test/testdata/evm/vmTests/vmPerformance/loop-exp-32b-100k.json similarity index 100% rename from test/testdata/evm/vmTests/vmPerformance/loop-exp-32b-100k.json rename to c/test/testdata/evm/vmTests/vmPerformance/loop-exp-32b-100k.json diff --git a/test/testdata/evm/vmTests/vmPerformance/loop-exp-4b-100k.json b/c/test/testdata/evm/vmTests/vmPerformance/loop-exp-4b-100k.json similarity index 100% rename from test/testdata/evm/vmTests/vmPerformance/loop-exp-4b-100k.json rename to c/test/testdata/evm/vmTests/vmPerformance/loop-exp-4b-100k.json diff --git a/test/testdata/evm/vmTests/vmPerformance/loop-exp-8b-100k.json b/c/test/testdata/evm/vmTests/vmPerformance/loop-exp-8b-100k.json similarity index 100% rename from test/testdata/evm/vmTests/vmPerformance/loop-exp-8b-100k.json rename to c/test/testdata/evm/vmTests/vmPerformance/loop-exp-8b-100k.json diff --git a/test/testdata/evm/vmTests/vmPerformance/loop-exp-nop-1M.json b/c/test/testdata/evm/vmTests/vmPerformance/loop-exp-nop-1M.json similarity index 100% rename from test/testdata/evm/vmTests/vmPerformance/loop-exp-nop-1M.json rename to c/test/testdata/evm/vmTests/vmPerformance/loop-exp-nop-1M.json diff --git a/test/testdata/evm/vmTests/vmPerformance/loop-mul.json b/c/test/testdata/evm/vmTests/vmPerformance/loop-mul.json similarity index 100% rename from test/testdata/evm/vmTests/vmPerformance/loop-mul.json rename to c/test/testdata/evm/vmTests/vmPerformance/loop-mul.json diff --git a/test/testdata/evm/vmTests/vmPerformance/loop-mulmod-2M.json b/c/test/testdata/evm/vmTests/vmPerformance/loop-mulmod-2M.json similarity index 100% rename from test/testdata/evm/vmTests/vmPerformance/loop-mulmod-2M.json rename to c/test/testdata/evm/vmTests/vmPerformance/loop-mulmod-2M.json diff --git a/test/testdata/evm/vmTests/vmPerformance/manyFunctions100.json b/c/test/testdata/evm/vmTests/vmPerformance/manyFunctions100.json similarity index 100% rename from test/testdata/evm/vmTests/vmPerformance/manyFunctions100.json rename to c/test/testdata/evm/vmTests/vmPerformance/manyFunctions100.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/dup1.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup1.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/dup1.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup1.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/dup10.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup10.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/dup10.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup10.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/dup11.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup11.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/dup11.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup11.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/dup12.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup12.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/dup12.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup12.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/dup13.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup13.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/dup13.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup13.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/dup14.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup14.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/dup14.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup14.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/dup15.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup15.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/dup15.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup15.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/dup16.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup16.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/dup16.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup16.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/dup2.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup2.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/dup2.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup2.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/dup2error.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup2error.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/dup2error.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup2error.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/dup3.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup3.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/dup3.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup3.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/dup4.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup4.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/dup4.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup4.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/dup5.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup5.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/dup5.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup5.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/dup6.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup6.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/dup6.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup6.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/dup7.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup7.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/dup7.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup7.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/dup8.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup8.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/dup8.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup8.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/dup9.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup9.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/dup9.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/dup9.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push1.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push1.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push1.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push1.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push10.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push10.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push10.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push10.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push11.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push11.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push11.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push11.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push12.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push12.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push12.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push12.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push13.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push13.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push13.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push13.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push14.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push14.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push14.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push14.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push15.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push15.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push15.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push15.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push16.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push16.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push16.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push16.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push17.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push17.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push17.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push17.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push18.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push18.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push18.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push18.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push19.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push19.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push19.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push19.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push1_missingStack.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push1_missingStack.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push1_missingStack.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push1_missingStack.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push2.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push2.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push2.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push2.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push20.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push20.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push20.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push20.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push21.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push21.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push21.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push21.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push22.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push22.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push22.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push22.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push23.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push23.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push23.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push23.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push24.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push24.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push24.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push24.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push25.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push25.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push25.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push25.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push26.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push26.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push26.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push26.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push27.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push27.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push27.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push27.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push28.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push28.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push28.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push28.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push29.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push29.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push29.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push29.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push3.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push3.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push3.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push3.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push30.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push30.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push30.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push30.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push31.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push31.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push31.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push31.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push32.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push32.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push32.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push32.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push32AndSuicide.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push32AndSuicide.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push32AndSuicide.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push32AndSuicide.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push32FillUpInputWithZerosAtTheEnd.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push32FillUpInputWithZerosAtTheEnd.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push32FillUpInputWithZerosAtTheEnd.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push32FillUpInputWithZerosAtTheEnd.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push32Undefined.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push32Undefined.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push32Undefined.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push32Undefined.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push32Undefined2.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push32Undefined2.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push32Undefined2.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push32Undefined2.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push32Undefined3.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push32Undefined3.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push32Undefined3.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push32Undefined3.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push33.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push33.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push33.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push33.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push4.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push4.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push4.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push4.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push5.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push5.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push5.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push5.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push6.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push6.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push6.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push6.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push7.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push7.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push7.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push7.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push8.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push8.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push8.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push8.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/push9.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/push9.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/push9.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/push9.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/swap1.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap1.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/swap1.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap1.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/swap10.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap10.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/swap10.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap10.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/swap11.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap11.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/swap11.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap11.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/swap12.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap12.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/swap12.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap12.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/swap13.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap13.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/swap13.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap13.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/swap14.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap14.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/swap14.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap14.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/swap15.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap15.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/swap15.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap15.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/swap16.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap16.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/swap16.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap16.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/swap2.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap2.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/swap2.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap2.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/swap2error.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap2error.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/swap2error.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap2error.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/swap3.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap3.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/swap3.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap3.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/swap4.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap4.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/swap4.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap4.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/swap5.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap5.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/swap5.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap5.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/swap6.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap6.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/swap6.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap6.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/swap7.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap7.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/swap7.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap7.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/swap8.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap8.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/swap8.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap8.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/swap9.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap9.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/swap9.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/swap9.json diff --git a/test/testdata/evm/vmTests/vmPushDupSwapTest/swapjump1.json b/c/test/testdata/evm/vmTests/vmPushDupSwapTest/swapjump1.json similarity index 100% rename from test/testdata/evm/vmTests/vmPushDupSwapTest/swapjump1.json rename to c/test/testdata/evm/vmTests/vmPushDupSwapTest/swapjump1.json diff --git a/test/testdata/evm/vmTests/vmRandomTest/201503102320PYTHON.json b/c/test/testdata/evm/vmTests/vmRandomTest/201503102320PYTHON.json similarity index 100% rename from test/testdata/evm/vmTests/vmRandomTest/201503102320PYTHON.json rename to c/test/testdata/evm/vmTests/vmRandomTest/201503102320PYTHON.json diff --git a/test/testdata/evm/vmTests/vmRandomTest/201503110206PYTHON.json b/c/test/testdata/evm/vmTests/vmRandomTest/201503110206PYTHON.json similarity index 100% rename from test/testdata/evm/vmTests/vmRandomTest/201503110206PYTHON.json rename to c/test/testdata/evm/vmTests/vmRandomTest/201503110206PYTHON.json diff --git a/test/testdata/evm/vmTests/vmRandomTest/201503110219PYTHON.json b/c/test/testdata/evm/vmTests/vmRandomTest/201503110219PYTHON.json similarity index 100% rename from test/testdata/evm/vmTests/vmRandomTest/201503110219PYTHON.json rename to c/test/testdata/evm/vmTests/vmRandomTest/201503110219PYTHON.json diff --git a/test/testdata/evm/vmTests/vmRandomTest/201503110346PYTHON_PUSH24.json b/c/test/testdata/evm/vmTests/vmRandomTest/201503110346PYTHON_PUSH24.json similarity index 100% rename from test/testdata/evm/vmTests/vmRandomTest/201503110346PYTHON_PUSH24.json rename to c/test/testdata/evm/vmTests/vmRandomTest/201503110346PYTHON_PUSH24.json diff --git a/test/testdata/evm/vmTests/vmRandomTest/201503111844PYTHON.json b/c/test/testdata/evm/vmTests/vmRandomTest/201503111844PYTHON.json similarity index 100% rename from test/testdata/evm/vmTests/vmRandomTest/201503111844PYTHON.json rename to c/test/testdata/evm/vmTests/vmRandomTest/201503111844PYTHON.json diff --git a/test/testdata/evm/vmTests/vmRandomTest/201503112218PYTHON.json b/c/test/testdata/evm/vmTests/vmRandomTest/201503112218PYTHON.json similarity index 100% rename from test/testdata/evm/vmTests/vmRandomTest/201503112218PYTHON.json rename to c/test/testdata/evm/vmTests/vmRandomTest/201503112218PYTHON.json diff --git a/test/testdata/evm/vmTests/vmSha3Test/sha3_0.json b/c/test/testdata/evm/vmTests/vmSha3Test/sha3_0.json similarity index 100% rename from test/testdata/evm/vmTests/vmSha3Test/sha3_0.json rename to c/test/testdata/evm/vmTests/vmSha3Test/sha3_0.json diff --git a/test/testdata/evm/vmTests/vmSha3Test/sha3_1.json b/c/test/testdata/evm/vmTests/vmSha3Test/sha3_1.json similarity index 100% rename from test/testdata/evm/vmTests/vmSha3Test/sha3_1.json rename to c/test/testdata/evm/vmTests/vmSha3Test/sha3_1.json diff --git a/test/testdata/evm/vmTests/vmSha3Test/sha3_2.json b/c/test/testdata/evm/vmTests/vmSha3Test/sha3_2.json similarity index 100% rename from test/testdata/evm/vmTests/vmSha3Test/sha3_2.json rename to c/test/testdata/evm/vmTests/vmSha3Test/sha3_2.json diff --git a/test/testdata/evm/vmTests/vmSha3Test/sha3_3.json b/c/test/testdata/evm/vmTests/vmSha3Test/sha3_3.json similarity index 100% rename from test/testdata/evm/vmTests/vmSha3Test/sha3_3.json rename to c/test/testdata/evm/vmTests/vmSha3Test/sha3_3.json diff --git a/test/testdata/evm/vmTests/vmSha3Test/sha3_4.json b/c/test/testdata/evm/vmTests/vmSha3Test/sha3_4.json similarity index 100% rename from test/testdata/evm/vmTests/vmSha3Test/sha3_4.json rename to c/test/testdata/evm/vmTests/vmSha3Test/sha3_4.json diff --git a/test/testdata/evm/vmTests/vmSha3Test/sha3_5.json b/c/test/testdata/evm/vmTests/vmSha3Test/sha3_5.json similarity index 100% rename from test/testdata/evm/vmTests/vmSha3Test/sha3_5.json rename to c/test/testdata/evm/vmTests/vmSha3Test/sha3_5.json diff --git a/test/testdata/evm/vmTests/vmSha3Test/sha3_6.json b/c/test/testdata/evm/vmTests/vmSha3Test/sha3_6.json similarity index 100% rename from test/testdata/evm/vmTests/vmSha3Test/sha3_6.json rename to c/test/testdata/evm/vmTests/vmSha3Test/sha3_6.json diff --git a/test/testdata/evm/vmTests/vmSha3Test/sha3_bigOffset.json b/c/test/testdata/evm/vmTests/vmSha3Test/sha3_bigOffset.json similarity index 100% rename from test/testdata/evm/vmTests/vmSha3Test/sha3_bigOffset.json rename to c/test/testdata/evm/vmTests/vmSha3Test/sha3_bigOffset.json diff --git a/test/testdata/evm/vmTests/vmSha3Test/sha3_bigOffset2.json b/c/test/testdata/evm/vmTests/vmSha3Test/sha3_bigOffset2.json similarity index 100% rename from test/testdata/evm/vmTests/vmSha3Test/sha3_bigOffset2.json rename to c/test/testdata/evm/vmTests/vmSha3Test/sha3_bigOffset2.json diff --git a/test/testdata/evm/vmTests/vmSha3Test/sha3_bigSize.json b/c/test/testdata/evm/vmTests/vmSha3Test/sha3_bigSize.json similarity index 100% rename from test/testdata/evm/vmTests/vmSha3Test/sha3_bigSize.json rename to c/test/testdata/evm/vmTests/vmSha3Test/sha3_bigSize.json diff --git a/test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeNoQuadraticCost31.json b/c/test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeNoQuadraticCost31.json similarity index 100% rename from test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeNoQuadraticCost31.json rename to c/test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeNoQuadraticCost31.json diff --git a/test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost32.json b/c/test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost32.json similarity index 100% rename from test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost32.json rename to c/test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost32.json diff --git a/test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost32_zeroSize.json b/c/test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost32_zeroSize.json similarity index 100% rename from test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost32_zeroSize.json rename to c/test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost32_zeroSize.json diff --git a/test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost33.json b/c/test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost33.json similarity index 100% rename from test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost33.json rename to c/test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost33.json diff --git a/test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost63.json b/c/test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost63.json similarity index 100% rename from test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost63.json rename to c/test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost63.json diff --git a/test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost64.json b/c/test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost64.json similarity index 100% rename from test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost64.json rename to c/test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost64.json diff --git a/test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost64_2.json b/c/test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost64_2.json similarity index 100% rename from test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost64_2.json rename to c/test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost64_2.json diff --git a/test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost65.json b/c/test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost65.json similarity index 100% rename from test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost65.json rename to c/test/testdata/evm/vmTests/vmSha3Test/sha3_memSizeQuadraticCost65.json diff --git a/test/testdata/evm/vmTests/vmSystemOperations/TestNameRegistrator.json b/c/test/testdata/evm/vmTests/vmSystemOperations/TestNameRegistrator.json similarity index 100% rename from test/testdata/evm/vmTests/vmSystemOperations/TestNameRegistrator.json rename to c/test/testdata/evm/vmTests/vmSystemOperations/TestNameRegistrator.json diff --git a/test/testdata/evm/vmTests/vmSystemOperations/return0.json b/c/test/testdata/evm/vmTests/vmSystemOperations/return0.json similarity index 100% rename from test/testdata/evm/vmTests/vmSystemOperations/return0.json rename to c/test/testdata/evm/vmTests/vmSystemOperations/return0.json diff --git a/test/testdata/evm/vmTests/vmSystemOperations/return1.json b/c/test/testdata/evm/vmTests/vmSystemOperations/return1.json similarity index 100% rename from test/testdata/evm/vmTests/vmSystemOperations/return1.json rename to c/test/testdata/evm/vmTests/vmSystemOperations/return1.json diff --git a/test/testdata/evm/vmTests/vmSystemOperations/return2.json b/c/test/testdata/evm/vmTests/vmSystemOperations/return2.json similarity index 100% rename from test/testdata/evm/vmTests/vmSystemOperations/return2.json rename to c/test/testdata/evm/vmTests/vmSystemOperations/return2.json diff --git a/test/testdata/evm/vmTests/vmSystemOperations/suicide0.json b/c/test/testdata/evm/vmTests/vmSystemOperations/suicide0.json similarity index 100% rename from test/testdata/evm/vmTests/vmSystemOperations/suicide0.json rename to c/test/testdata/evm/vmTests/vmSystemOperations/suicide0.json diff --git a/test/testdata/evm/vmTests/vmSystemOperations/suicideNotExistingAccount.json b/c/test/testdata/evm/vmTests/vmSystemOperations/suicideNotExistingAccount.json similarity index 100% rename from test/testdata/evm/vmTests/vmSystemOperations/suicideNotExistingAccount.json rename to c/test/testdata/evm/vmTests/vmSystemOperations/suicideNotExistingAccount.json diff --git a/test/testdata/evm/vmTests/vmSystemOperations/suicideSendEtherToMe.json b/c/test/testdata/evm/vmTests/vmSystemOperations/suicideSendEtherToMe.json similarity index 100% rename from test/testdata/evm/vmTests/vmSystemOperations/suicideSendEtherToMe.json rename to c/test/testdata/evm/vmTests/vmSystemOperations/suicideSendEtherToMe.json diff --git a/test/testdata/evm/vmTests/vmTests/suicide.json b/c/test/testdata/evm/vmTests/vmTests/suicide.json similarity index 100% rename from test/testdata/evm/vmTests/vmTests/suicide.json rename to c/test/testdata/evm/vmTests/vmTests/suicide.json diff --git a/test/testdata/mock/eth_blockNumber.json b/c/test/testdata/mock/eth_blockNumber.json similarity index 100% rename from test/testdata/mock/eth_blockNumber.json rename to c/test/testdata/mock/eth_blockNumber.json diff --git a/test/testdata/mock/eth_call.json b/c/test/testdata/mock/eth_call.json similarity index 100% rename from test/testdata/mock/eth_call.json rename to c/test/testdata/mock/eth_call.json diff --git a/c/test/testdata/mock/eth_call_response_binary.h b/c/test/testdata/mock/eth_call_response_binary.h new file mode 100644 index 000000000..7909527a0 --- /dev/null +++ b/c/test/testdata/mock/eth_call_response_binary.h @@ -0,0 +1,143 @@ +// Imported from file 'eth_call.bin' +const unsigned char mock_eth_call_response[] = { + 0xdc,0x24,0x64,0xb6,0xf9,0x23,0x32,0x2e,0x30,0x00,0xb6,0x89,0x1c,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, + 0x34,0x8d,0xa1,0x77,0x34,0x68,0x4e,0xe4,0x64,0x42,0x18,0x29,0x63,0x61,0x6c,0x6c,0x50,0x72,0x6f,0x6f,0x66,0x00,0xc7, + 0xe9,0x1d,0x02,0x5c,0xf9,0x02,0x59,0xa0,0xd5,0xab,0xb4,0xae,0xd2,0x7b,0x77,0x9f,0xbe,0x49,0xd2,0x27,0x54,0x82,0x8d, + 0x0a,0x4e,0x6a,0xf9,0xce,0xa2,0x58,0x33,0xaf,0xd8,0xe6,0x50,0x49,0xe2,0xe9,0x15,0x79,0xa0,0x1d,0xcc,0x4d,0xe8,0xde, + 0xc7,0x5d,0x7a,0xab,0x85,0xb5,0x67,0xb6,0xcc,0xd4,0x1a,0xd3,0x12,0x45,0x1b,0x94,0x8a,0x74,0x13,0xf0,0xa1,0x42,0xfd, + 0x40,0xd4,0x93,0x47,0x94,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xa0,0x93,0xf7,0xc2,0x3f,0x0e,0x94,0x1e,0x76,0xb5,0xfa,0x63,0xa5,0xb2,0x7d,0xfb,0xc9,0x56,0xbd,0xd7,0x2a, + 0xa0,0xad,0x07,0xe2,0x20,0x40,0x51,0xef,0x45,0x00,0x33,0x19,0xa0,0x56,0xe8,0x1f,0x17,0x1b,0xcc,0x55,0xa6,0xff,0x83, + 0x45,0xe6,0x92,0xc0,0xf8,0x6e,0x5b,0x48,0xe0,0x1b,0x99,0x6c,0xad,0xc0,0x01,0x62,0x2f,0xb5,0xe3,0x63,0xb4,0x21,0xa0, + 0x56,0xe8,0x1f,0x17,0x1b,0xcc,0x55,0xa6,0xff,0x83,0x45,0xe6,0x92,0xc0,0xf8,0x6e,0x5b,0x48,0xe0,0x1b,0x99,0x6c,0xad, + 0xc0,0x01,0x62,0x2f,0xb5,0xe3,0x63,0xb4,0x21,0xb9,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x83,0x1f,0x1f,0x1c,0x83,0x7a,0x12, + 0x00,0x80,0x84,0x5e,0x27,0x24,0x3c,0xb8,0x61,0x4e,0x65,0x74,0x68,0x65,0x72,0x6d,0x69,0x6e,0x64,0x20,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc5,0x1f,0xd9,0x66,0x9d, + 0x3b,0xad,0x78,0x4e,0x28,0xa3,0x1f,0xe5,0x60,0xf4,0x43,0xbf,0x4e,0x35,0x35,0xa4,0x84,0x4d,0xa4,0x3d,0xcc,0xaa,0x5b, + 0xeb,0x1e,0xd9,0xd9,0x2e,0x6c,0xf4,0xbb,0x0f,0xcc,0x15,0xae,0x0c,0x33,0x95,0xf6,0x5c,0x16,0x55,0xec,0x98,0x63,0x1e, + 0x14,0xc4,0x64,0x45,0x4d,0x1b,0x99,0x50,0x3f,0x9d,0x03,0xa2,0x0c,0x00,0xa0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xb2,0x97,0x40,0x41,0x92,0x61,0xdf,0x43,0x67,0x0f,0x25,0x46,0x1d, + 0x02,0x14,0xf9,0x02,0x11,0xa0,0x7a,0x5f,0x1f,0x32,0xb8,0xc5,0xfd,0x40,0x0a,0xe9,0xc0,0x5f,0x4c,0x9c,0xad,0x07,0x8d, + 0x24,0x41,0xbb,0x28,0x05,0x21,0x3f,0x68,0xe3,0xee,0xde,0xe2,0xab,0x54,0x28,0xa0,0xb9,0xfe,0x2f,0xa9,0x42,0xd6,0x2c, + 0x90,0x3c,0xc4,0x00,0xaf,0x87,0x16,0x38,0xbf,0x72,0xc8,0xd8,0xc7,0xed,0xb9,0xd7,0xcf,0x05,0xa6,0x35,0x73,0x97,0x57, + 0x1d,0x6f,0xa0,0x47,0x2a,0x3b,0x5d,0x3d,0x5f,0xa2,0xef,0xda,0x7d,0x18,0x81,0xe9,0xfc,0x20,0x55,0x11,0x4d,0x0e,0xa4, + 0x4f,0xc9,0xb8,0xf3,0x21,0x63,0x4e,0x95,0x50,0xe8,0x48,0x1d,0xa0,0x64,0x23,0x16,0x9b,0xc8,0x00,0xc1,0x9a,0xfe,0x68, + 0xb3,0xcf,0x1d,0x35,0xc4,0xfe,0xa2,0x76,0x73,0xb9,0xbf,0x9b,0x86,0xb5,0x43,0x38,0x9e,0x1e,0x17,0xfa,0xef,0x17,0xa0, + 0xba,0xe5,0x22,0x48,0x83,0xa0,0xee,0xb6,0x4c,0xf9,0x38,0x83,0x66,0xf3,0x99,0x9e,0x05,0x63,0x19,0x61,0x5e,0x39,0x10, + 0x31,0xae,0xf3,0x21,0x6d,0x04,0x84,0xd3,0x69,0xa0,0xb9,0xc4,0xbc,0x79,0x95,0x89,0xe4,0x9d,0x31,0x53,0x1a,0xfc,0xca, + 0xe0,0x7d,0x03,0x45,0x25,0xec,0x6a,0xdf,0x11,0x91,0x7b,0x2a,0x1d,0x5b,0xe1,0x7c,0xb8,0x16,0x42,0xa0,0x04,0x83,0x01, + 0x79,0x15,0x81,0x77,0xc0,0x17,0x1b,0x5f,0xc4,0x97,0x5f,0xba,0xac,0xb7,0x01,0x7d,0x04,0xf7,0x11,0xa9,0x1f,0xe9,0xbd, + 0xe2,0x7c,0xce,0xbc,0x84,0xe7,0xa0,0xfd,0x80,0x00,0x7f,0xbc,0x36,0xc9,0x66,0x8a,0x24,0x27,0x40,0xf8,0x71,0x03,0xf3, + 0x03,0xa2,0xa5,0xd5,0xd4,0x1f,0xf9,0x6a,0x11,0x96,0xf4,0x81,0x8d,0x19,0xb6,0x01,0xa0,0x8e,0x2c,0x47,0x6e,0x4f,0x0a, + 0x33,0x8a,0x48,0x63,0xe8,0x82,0xa6,0xf0,0x0b,0xa1,0x7b,0xe3,0x77,0x4c,0x82,0xde,0x8d,0xb8,0x5b,0x2e,0xcb,0x65,0x51, + 0x50,0x4a,0xb9,0xa0,0x3f,0x8e,0x19,0xcd,0x9c,0xca,0xf0,0xc7,0xb0,0x53,0x26,0xb5,0xaa,0xb0,0x09,0x28,0x44,0xb8,0x74, + 0x9a,0xf9,0x17,0x41,0xfc,0x0b,0x80,0x70,0x69,0xd1,0x24,0x03,0x56,0xa0,0x23,0x0b,0x27,0x28,0xd9,0x40,0xb6,0x28,0xf1, + 0xa8,0xd1,0x4c,0x26,0xb4,0x9f,0x07,0x74,0xb4,0x92,0xa9,0x01,0x81,0x44,0x56,0x0e,0x35,0x15,0xa0,0x11,0x47,0x36,0x95, + 0xa0,0x3b,0x23,0xa7,0x2d,0x7a,0xdb,0xff,0x9a,0x30,0xfa,0x65,0xbe,0x41,0x97,0x63,0x1a,0x80,0xe2,0x40,0x30,0xf9,0x73, + 0xb5,0xe6,0x03,0x89,0x09,0x7f,0x79,0xbb,0xc4,0x02,0xa0,0xf1,0x3d,0x82,0xff,0xb3,0x7d,0x27,0x23,0xc6,0xdc,0x22,0xe8, + 0x67,0x7f,0x98,0x67,0x85,0xe3,0x84,0x5a,0x34,0xd9,0x11,0x0e,0xbe,0x4e,0x94,0x48,0x07,0xdd,0x29,0xce,0xa0,0x42,0x90, + 0x1a,0x4d,0xa7,0x5d,0x52,0x37,0x8a,0xdc,0xb1,0x5e,0x69,0x40,0x3e,0xe6,0xf8,0x59,0x03,0x53,0xb4,0xbf,0xed,0xdd,0xe4, + 0x88,0x0f,0x31,0xfd,0xce,0xd8,0x92,0xa0,0xbd,0x58,0x7f,0x5d,0x7c,0xaf,0x35,0x5e,0xd6,0x1f,0x0f,0x77,0xe5,0x68,0x91, + 0x06,0x4e,0x1f,0x89,0xc7,0xdc,0xf3,0x70,0xcf,0xe9,0x6b,0xe3,0x27,0x8e,0xc3,0x4f,0x4a,0xa0,0x8e,0x3b,0x1e,0x2d,0x6a, + 0x85,0x02,0x0e,0x9c,0x3b,0x10,0x1a,0x08,0x0f,0x35,0x69,0xbb,0x3f,0x66,0xb4,0x08,0x1e,0x35,0x4f,0x00,0x4f,0xa8,0x0a, + 0x35,0xe6,0x0c,0xf8,0x80,0x1d,0x02,0x14,0xf9,0x02,0x11,0xa0,0xf3,0x22,0xdf,0x9d,0x41,0x18,0x9d,0x1c,0x3d,0xe8,0x9c, + 0xe4,0xcc,0xca,0x4b,0x46,0xf2,0xa6,0x7d,0x56,0x40,0x35,0xd7,0x60,0x36,0x01,0x9d,0x32,0x8a,0x42,0x3e,0x2f,0xa0,0x6e, + 0x0e,0xd9,0x26,0x8c,0x8a,0x68,0x4f,0x09,0x04,0x1b,0x7c,0xa4,0x75,0xc8,0x87,0x04,0x2d,0xab,0x7b,0x05,0x32,0xf5,0xe9, + 0xde,0x1f,0x9f,0xc7,0x12,0xb8,0x70,0x98,0xa0,0x17,0x4c,0x76,0x1e,0xe1,0x66,0x22,0x90,0x1d,0xf2,0x08,0x3c,0x4c,0x21, + 0xa0,0xc9,0x53,0x0b,0x69,0x24,0xa4,0xb8,0xc9,0xe2,0x29,0xf4,0xef,0x65,0x0e,0x07,0xb1,0x68,0xa0,0x29,0xda,0xec,0x36, + 0xa3,0xb3,0x6d,0x75,0xfc,0xf1,0xb0,0x8e,0xb0,0xb6,0xf9,0x16,0x93,0x49,0xd4,0x9b,0x05,0x25,0xf3,0x66,0xa1,0xda,0xa2, + 0x77,0xce,0x6f,0x0f,0x5f,0xa0,0x63,0xb5,0xcf,0x37,0x72,0xf4,0x7a,0x2f,0x28,0xa1,0xf8,0x74,0xf2,0x3d,0x9f,0x35,0x3d, + 0x2c,0xf7,0xe6,0x70,0xa5,0x2a,0xe1,0xe2,0xd6,0x2c,0xf2,0x5b,0x96,0x25,0x44,0xa0,0xcd,0x2b,0xf9,0xfa,0x4a,0x0c,0x70, + 0xda,0xfc,0x22,0x4e,0xa2,0xdc,0x11,0xb2,0x8a,0x83,0x80,0x1a,0x14,0x0f,0x96,0xc9,0xed,0x10,0x8d,0x6d,0x83,0x1a,0x14, + 0xb3,0xf4,0xa0,0xe8,0xb7,0xfa,0xdf,0x49,0x23,0x31,0xcd,0x48,0xe4,0xf5,0x98,0xb4,0xd3,0x41,0x5f,0x49,0xa5,0x82,0x69, + 0xa2,0x9f,0x54,0xf2,0x63,0x45,0x85,0xf7,0xc0,0x0d,0xfc,0xec,0xa0,0x11,0xaf,0xf1,0x32,0x13,0x7d,0x5e,0x16,0xdb,0x6d, + 0xee,0x56,0x8b,0xb8,0x48,0x4e,0x2e,0x8d,0x7a,0x99,0xc9,0x85,0xef,0xd9,0xa8,0xdb,0x45,0xcf,0xe8,0x44,0x72,0x01,0xa0, + 0x1d,0x7a,0x47,0x42,0xb9,0x5b,0x4a,0xff,0x8f,0xd1,0x9f,0x34,0xea,0x85,0x21,0x2c,0x87,0x46,0xa5,0x1d,0x27,0xb1,0x9d, + 0xb5,0xee,0x18,0x06,0x4a,0x4a,0xe0,0xe7,0x5c,0xa0,0xe8,0xe8,0x1d,0x3c,0x5d,0x40,0xd7,0xb5,0xf1,0x4c,0xd7,0x28,0x7d, + 0xc2,0x6b,0x55,0x26,0x69,0x45,0x11,0xc6,0x5a,0x54,0x09,0xde,0xed,0x18,0x09,0xe4,0x40,0x3b,0xf4,0xa0,0x59,0x04,0xf8, + 0x49,0x94,0x1f,0xbf,0x96,0xe3,0x57,0x5f,0xd6,0x68,0xc9,0xd3,0x84,0xd6,0x70,0x86,0xfa,0xd0,0x5b,0x67,0x5e,0xfb,0x7c, + 0xbc,0xea,0x92,0x39,0xfb,0x7e,0xa0,0x3c,0x9b,0xef,0x4b,0x03,0xea,0x6a,0xa1,0xe7,0xe5,0xe2,0x4a,0x19,0xbd,0x92,0xfd, + 0x0a,0xe5,0x36,0x85,0x99,0x92,0x2e,0x55,0xef,0x09,0x96,0x99,0x8a,0x51,0xb9,0x33,0xa0,0x9c,0x9d,0x86,0xe0,0x2a,0xe3, + 0x3f,0x73,0x31,0x54,0xcb,0x10,0x50,0x7e,0x8f,0x32,0xef,0xa9,0xf2,0xc3,0xd4,0xb3,0x17,0x84,0xdf,0xd6,0x27,0xff,0x33, + 0x0a,0x68,0xd6,0xa0,0x17,0x1a,0xfb,0xb1,0x3a,0x82,0x8d,0xab,0x8c,0xd4,0x2f,0x6d,0x82,0x57,0xbd,0x2c,0x52,0x04,0x0d, + 0x09,0xab,0x79,0xe9,0xcd,0x12,0xe2,0xb2,0x9a,0xab,0xf0,0x73,0x6d,0xa0,0x6e,0xf4,0x0f,0x70,0x42,0x35,0xc4,0x55,0xe0, + 0x6f,0x06,0x58,0xe9,0x94,0xed,0xba,0x6d,0x3f,0xa9,0x8d,0x39,0x97,0xc3,0x7d,0x66,0xcd,0x92,0xcd,0x58,0xe7,0xba,0x80, + 0xa0,0x96,0x36,0x1d,0x0c,0xfc,0xc4,0xcd,0xa8,0xd9,0x04,0x71,0xf3,0xc3,0xc4,0xad,0x32,0xa0,0x48,0x90,0x15,0x86,0x60, + 0xdd,0xcc,0x9f,0x8e,0xbc,0x5a,0xf3,0x97,0xc5,0x39,0x80,0x1d,0x02,0x14,0xf9,0x02,0x11,0xa0,0xe8,0x57,0xfc,0x28,0x93, + 0x8c,0xca,0xac,0xe8,0xc4,0x03,0x12,0x8b,0xf9,0x84,0x8f,0xef,0x72,0x2f,0x25,0xf8,0xd5,0x5c,0x9d,0xfc,0xdd,0xd9,0x80, + 0xb0,0xb8,0x5c,0x7e,0xa0,0x32,0x9d,0x29,0xfc,0xe8,0xca,0x4e,0x48,0x07,0x20,0x57,0x51,0xe9,0xf4,0x37,0x69,0x26,0xe3, + 0xd5,0x6d,0xc3,0xbb,0x63,0x93,0x45,0xe4,0x10,0xdc,0x20,0xbc,0x2c,0x7b,0xa0,0x07,0x5e,0xdf,0xc7,0x24,0x6e,0x47,0x19, + 0xa2,0xc0,0x9c,0x39,0x7c,0x4c,0xea,0x41,0xd4,0x48,0x25,0x48,0x20,0xf1,0x97,0x4a,0x70,0x84,0x1b,0x9d,0x58,0xe3,0xbc, + 0xdd,0xa0,0x8f,0x48,0xb3,0x5a,0x91,0x7b,0x09,0x5e,0xd7,0x39,0x71,0xfa,0xf0,0x13,0x87,0x9b,0x77,0xa2,0x83,0x8d,0xe7, + 0x36,0x65,0x1b,0x48,0xa6,0xaa,0xa1,0x0a,0xb1,0x5e,0x8f,0xa0,0xc5,0x98,0x3f,0xe9,0x44,0x1f,0x72,0xcc,0x6c,0xb8,0xb5, + 0x79,0xf7,0x07,0x12,0x24,0x28,0x06,0x61,0xa4,0x5a,0x14,0x40,0x84,0x01,0xbb,0x1f,0x75,0x9d,0xbf,0x01,0x28,0xa0,0x3b, + 0x8c,0xbc,0x5e,0xd5,0x67,0x81,0x19,0x9f,0xb4,0xfb,0x97,0x68,0xc2,0xdd,0xcc,0x2b,0xdf,0x00,0x81,0x60,0x97,0xec,0x10, + 0x29,0x1b,0x30,0xac,0x89,0x64,0xbd,0x76,0xa0,0xd3,0xa8,0xe1,0x94,0x61,0x71,0x0a,0xee,0x36,0xc3,0x20,0x68,0x72,0x22, + 0x61,0x86,0x3b,0x86,0xc7,0xea,0xcb,0x50,0x18,0x8e,0x8f,0x30,0xde,0xaf,0xfa,0xe0,0x24,0xd2,0xa0,0xf1,0xb3,0x77,0xbc, + 0xc8,0xde,0x17,0x63,0x6d,0x7f,0x51,0xdb,0xb5,0x37,0x7f,0xdc,0x8b,0x9b,0x98,0xda,0x3e,0xa3,0x2e,0xdb,0xaf,0xd1,0x0f, + 0xf5,0x57,0xe6,0x5f,0x67,0xa0,0x17,0x56,0xae,0xbd,0x26,0xa3,0x7a,0x6d,0xfa,0x2e,0xba,0xb5,0x42,0x06,0xec,0x14,0xa4, + 0xed,0x1c,0x07,0x71,0x31,0x6a,0x93,0xb2,0x30,0x2d,0x02,0x9d,0xc9,0xfb,0x77,0xa0,0x16,0xcc,0x5d,0xb2,0x86,0xc0,0xa3, + 0x69,0x4d,0xd0,0xa5,0xdf,0xbf,0x17,0xae,0x7e,0x6e,0x71,0xee,0x86,0x34,0x5f,0x5b,0x44,0x7c,0x47,0x70,0x3d,0x21,0x6e, + 0x8a,0x49,0xa0,0x98,0x5d,0xe3,0xd8,0x14,0xa4,0xa4,0x20,0xfb,0x4a,0xa2,0x9c,0xea,0x55,0x04,0x47,0xff,0x26,0x70,0x0e, + 0x6f,0x82,0x01,0x97,0x98,0x53,0xe2,0xab,0x58,0xff,0xb8,0x81,0xa0,0x5c,0x37,0x52,0x0f,0x1f,0x9b,0x35,0x1e,0xfb,0x77, + 0x54,0x6b,0x89,0xba,0x56,0x2c,0xab,0x7e,0x3f,0xf8,0x46,0xf6,0x60,0xd2,0x92,0x4a,0x32,0x71,0x49,0xfd,0xa5,0x4a,0xa0, + 0x07,0xb0,0xf7,0x83,0xee,0xec,0xba,0x8d,0x2e,0x1b,0x19,0xcd,0x27,0xbc,0x32,0x96,0x2d,0x21,0xc7,0x85,0x89,0xfb,0x24, + 0x69,0x91,0x8c,0x27,0xfa,0x1f,0xb9,0xf3,0xf5,0xa0,0x7a,0xad,0xde,0x6f,0x5a,0x16,0xf1,0xbc,0x14,0xde,0xae,0x2c,0xfd, + 0xc5,0x9a,0x3b,0x12,0xfa,0x43,0x34,0xc8,0xab,0x3c,0xa9,0x38,0xa0,0xad,0x1f,0x16,0x51,0x71,0xd7,0xa0,0x85,0x53,0x71, + 0x2a,0x5b,0x41,0x9a,0xd8,0x74,0x2e,0x02,0xc1,0xb2,0x82,0x6f,0x9d,0x6f,0x22,0x6e,0xc2,0x92,0x05,0xf3,0x17,0x46,0x0e, + 0x35,0x43,0xc4,0x43,0x2c,0xfa,0xa0,0x98,0x9c,0xbf,0x17,0x57,0x8d,0xc3,0x1a,0x70,0x48,0xbb,0x6f,0x79,0x51,0xbb,0xcb, + 0x43,0x90,0xa4,0xdc,0x34,0x54,0x87,0x49,0xdd,0xec,0x58,0x08,0xff,0x70,0x17,0x90,0x80,0x1d,0x01,0xd4,0xf9,0x01,0xd1, + 0xa0,0xe5,0x87,0x84,0x36,0x7f,0xe3,0x98,0x67,0x9d,0x1e,0x6b,0xf7,0x8a,0x3d,0xde,0x3f,0xa1,0x0c,0x25,0x8a,0x65,0xee, + 0xa4,0x17,0x84,0x8e,0xaa,0x9c,0x13,0x65,0xc5,0x28,0x80,0xa0,0x2c,0x56,0x37,0x64,0xc4,0x50,0x27,0x4d,0xb1,0xcb,0x7e, + 0xd8,0x8c,0xb6,0x82,0xe3,0x57,0x59,0x32,0x63,0xc8,0x7f,0x03,0x70,0x2e,0x61,0xf2,0x70,0x38,0xe6,0xe9,0x22,0xa0,0x79, + 0x22,0xb0,0xa6,0x21,0xb8,0x76,0x90,0xb1,0xd9,0xc3,0xac,0x5d,0x65,0x45,0x3e,0x89,0x86,0xf7,0x11,0x93,0x10,0xaa,0xa2, + 0x38,0x2c,0xe9,0x77,0x90,0xc9,0x70,0xf6,0xa0,0x3b,0x79,0x1f,0x9b,0x5e,0xa7,0xb5,0x3c,0xcc,0x84,0xba,0xb0,0x5c,0x1a, + 0xb7,0xfc,0x18,0x2e,0x5b,0xd5,0x09,0x48,0x94,0x43,0xe2,0x43,0xa5,0x28,0x34,0xf1,0x2c,0x4d,0xa0,0x2f,0x36,0x49,0xd1, + 0xba,0xce,0xfd,0x45,0xf4,0xb8,0x6a,0x92,0x51,0x9e,0x11,0xfe,0xfd,0xe5,0x2b,0xf9,0xc0,0x33,0xde,0x30,0x5a,0xb0,0x1e, + 0x52,0xda,0x1e,0x48,0xe1,0xa0,0xa5,0xb9,0xe0,0xf7,0x51,0x6d,0xa5,0xfc,0x73,0x63,0xda,0x01,0x73,0x75,0x8c,0xf0,0x9a, + 0x9d,0x5e,0x69,0x08,0x71,0xde,0x79,0xcb,0x67,0x9c,0x4f,0xc5,0x84,0x61,0xa3,0xa0,0x1b,0x36,0x4c,0x94,0x43,0x63,0x70, + 0x5f,0x8e,0xce,0x38,0x0c,0xff,0x7c,0x2e,0x97,0xf0,0x2e,0xc6,0x0b,0xf1,0xdf,0xab,0x7f,0xb0,0x54,0x16,0x65,0x0e,0x52, + 0x1e,0x07,0xa0,0xd4,0xfc,0x2d,0xbc,0x2c,0x9c,0xda,0x95,0x84,0x4b,0xd3,0x54,0xe7,0xb1,0x5d,0x59,0x71,0x29,0x98,0x6c, + 0x08,0xd6,0x47,0x93,0x65,0x66,0xcd,0xc6,0xe6,0x70,0x67,0x03,0xa0,0xc0,0xe7,0x49,0xab,0x6f,0x93,0xf5,0xe2,0xd8,0xc3, + 0xdd,0xce,0x40,0x69,0xb1,0x42,0x09,0xbc,0x1a,0xf5,0x7a,0xe9,0x24,0x95,0xa2,0xaa,0xb3,0x29,0xc0,0x5c,0xec,0x46,0x80, + 0xa0,0x2c,0xe6,0x84,0x2b,0xaa,0x2c,0xf1,0xf1,0xae,0x3c,0xa8,0x3d,0x14,0x67,0x1d,0x05,0x42,0xa6,0x8d,0x56,0xee,0x6e, + 0x59,0x88,0xfc,0xf3,0xbe,0xbe,0x35,0x08,0x71,0xfb,0xa0,0x8b,0x65,0x3c,0x5e,0xec,0x87,0x17,0x51,0x95,0xfb,0xc9,0xf2, + 0xd4,0xea,0x48,0x12,0xf2,0x47,0xe8,0x75,0x0c,0x82,0xa8,0x98,0xda,0x21,0x37,0x54,0xdd,0x43,0x27,0x40,0xa0,0x67,0xfd, + 0x77,0x44,0x07,0x56,0x1e,0x7a,0x0a,0x58,0xda,0xb5,0x1f,0x06,0x0e,0x6a,0xae,0x9f,0x32,0x8b,0x5b,0x0d,0xa6,0x1e,0xab, + 0xb9,0xc3,0xfb,0xdc,0x7d,0x08,0x85,0xa0,0xfd,0x68,0x47,0x11,0x82,0x6b,0x61,0xca,0x2d,0xb1,0xc7,0x59,0xaa,0x1f,0xa7, + 0x35,0x80,0x76,0x07,0x7d,0x6b,0x39,0xee,0xbb,0x63,0x43,0x72,0xac,0xaf,0x24,0xd5,0x13,0xa0,0xf6,0xa4,0x20,0x56,0x04, + 0x67,0xe2,0xf0,0x37,0x3f,0x04,0x8d,0x29,0x56,0x36,0x53,0x02,0x1b,0x07,0xd9,0xe6,0xbe,0xc6,0x9b,0x0b,0x44,0x1a,0x2a, + 0xba,0x5c,0x18,0x46,0x80,0x1c,0x73,0xf8,0x71,0x80,0x80,0xa0,0x59,0x62,0xe5,0xc1,0x6b,0x55,0x95,0x5a,0x1b,0x3e,0x61, + 0x77,0x2a,0x6e,0x72,0x4d,0x3a,0x17,0x81,0xd0,0x15,0x60,0xa4,0x51,0xaf,0x48,0x63,0xfd,0x8e,0x9f,0xa9,0x3a,0x80,0x80, + 0x80,0xa0,0x1f,0x98,0xd4,0x5e,0x39,0x35,0xf9,0x5a,0xb0,0x0d,0x87,0x19,0xa0,0xfc,0x66,0x22,0xc7,0xb9,0x4f,0x22,0x2a, + 0xc5,0xa8,0x64,0x6c,0xdd,0xda,0x41,0xc9,0xd2,0xa0,0x5f,0x80,0x80,0x80,0x80,0xa0,0xfa,0x04,0xc9,0xc9,0x55,0xcb,0x58, + 0x79,0x6e,0x3c,0x31,0x16,0x3d,0xfc,0x2a,0x7e,0xab,0xe8,0x44,0xaf,0xa8,0x9b,0x2f,0xa5,0x6e,0x41,0xe3,0x74,0x49,0x8b, + 0x3d,0x78,0x80,0x80,0x80,0x80,0x80,0x1c,0x69,0xf8,0x67,0x9e,0x3f,0x79,0xd0,0x3b,0xcc,0xd3,0xd5,0x51,0x5f,0x1e,0x14, + 0xb1,0xab,0xc5,0xee,0xfe,0x02,0x7e,0x5a,0x72,0x52,0xbc,0xfd,0x9f,0x42,0x88,0x23,0xd3,0x59,0x3d,0xb8,0x46,0xf8,0x44, + 0x01,0x80,0xa0,0x82,0x1e,0x25,0x56,0xa2,0x90,0xc8,0x64,0x05,0xf8,0x16,0x0a,0x2d,0x66,0x20,0x42,0xa4,0x31,0xba,0x45, + 0x6b,0x9d,0xb2,0x65,0xc7,0x9b,0xb8,0x37,0xc0,0x4b,0xe5,0xf0,0xa0,0x8b,0xfc,0x1c,0x7c,0x74,0x64,0x66,0x0a,0x68,0xba, + 0x24,0x1e,0xa7,0x8b,0x6a,0x1d,0x36,0xcd,0x85,0xb5,0xcb,0x4f,0xba,0x52,0x1d,0x42,0x70,0xbd,0x0c,0x7d,0x7b,0xb7,0xb2, + 0xf6,0x14,0x36,0x64,0x3f,0x8d,0x17,0xfe,0x74,0x5a,0x69,0xa2,0xfd,0x22,0x18,0x89,0x21,0xfa,0xde,0x60,0xa9,0x8b,0x71, + 0xe6,0xa0,0x5e,0x3f,0x1c,0x20,0x8b,0xfc,0x1c,0x7c,0x74,0x64,0x66,0x0a,0x68,0xba,0x24,0x1e,0xa7,0x8b,0x6a,0x1d,0x36, + 0xcd,0x85,0xb5,0xcb,0x4f,0xba,0x52,0x1d,0x42,0x70,0xbd,0x0c,0x7d,0x7b,0xb7,0x46,0x69,0xa1,0x6d,0x4b,0x1c,0x20,0x82, + 0x1e,0x25,0x56,0xa2,0x90,0xc8,0x64,0x05,0xf8,0x16,0x0a,0x2d,0x66,0x20,0x42,0xa4,0x31,0xba,0x45,0x6b,0x9d,0xb2,0x65, + 0xc7,0x9b,0xb8,0x37,0xc0,0x4b,0xe5,0xf0,0x02,0xbd,0x41,0x63,0xf2,0xf7,0xa0,0x4e,0xe4,0x41,0x1c,0x24,0xe3,0xa1,0x20, + 0x29,0x0d,0xec,0xd9,0x54,0x8b,0x62,0xa8,0xd6,0x03,0x45,0xa9,0x88,0x38,0x6f,0xc8,0x4b,0xa6,0xbc,0x95,0x48,0x40,0x08, + 0xf6,0x36,0x2f,0x93,0x16,0x0e,0xf3,0xe5,0x63,0x01,0x4a,0x6b,0xa1,0x3c,0xfa,0x25,0x32,0x2e,0x31,0x2e,0x30,0x00,0x87, + 0xa0,0xbe,0x1f,0x1f,0x1c,0x6b,0x72,0xa0,0x45,0x08,0xbe,0x1e,0x97,0x26,0x1c,0xae,0xbc,0x91,0xe4,0xd4,0xbc,0x90,0x08, + 0x22,0xa2 +}; +const unsigned int mock_eth_call_response_len = 3176; diff --git a/test/testdata/mock/eth_chainId.json b/c/test/testdata/mock/eth_chainId.json similarity index 100% rename from test/testdata/mock/eth_chainId.json rename to c/test/testdata/mock/eth_chainId.json diff --git a/test/testdata/mock/eth_estimateGas.json b/c/test/testdata/mock/eth_estimateGas.json similarity index 100% rename from test/testdata/mock/eth_estimateGas.json rename to c/test/testdata/mock/eth_estimateGas.json diff --git a/test/testdata/mock/eth_gasPrice.json b/c/test/testdata/mock/eth_gasPrice.json similarity index 100% rename from test/testdata/mock/eth_gasPrice.json rename to c/test/testdata/mock/eth_gasPrice.json diff --git a/test/testdata/mock/eth_getBalance.json b/c/test/testdata/mock/eth_getBalance.json similarity index 100% rename from test/testdata/mock/eth_getBalance.json rename to c/test/testdata/mock/eth_getBalance.json diff --git a/test/testdata/mock/eth_getBlockByHash.json b/c/test/testdata/mock/eth_getBlockByHash.json similarity index 100% rename from test/testdata/mock/eth_getBlockByHash.json rename to c/test/testdata/mock/eth_getBlockByHash.json diff --git a/test/testdata/mock/eth_getBlockByNumber.json b/c/test/testdata/mock/eth_getBlockByNumber.json similarity index 100% rename from test/testdata/mock/eth_getBlockByNumber.json rename to c/test/testdata/mock/eth_getBlockByNumber.json diff --git a/test/testdata/mock/eth_getBlockTransactionCountByHash.json b/c/test/testdata/mock/eth_getBlockTransactionCountByHash.json similarity index 100% rename from test/testdata/mock/eth_getBlockTransactionCountByHash.json rename to c/test/testdata/mock/eth_getBlockTransactionCountByHash.json diff --git a/test/testdata/mock/eth_getBlockTransactionCountByNumber.json b/c/test/testdata/mock/eth_getBlockTransactionCountByNumber.json similarity index 100% rename from test/testdata/mock/eth_getBlockTransactionCountByNumber.json rename to c/test/testdata/mock/eth_getBlockTransactionCountByNumber.json diff --git a/test/testdata/mock/eth_getCode.json b/c/test/testdata/mock/eth_getCode.json similarity index 100% rename from test/testdata/mock/eth_getCode.json rename to c/test/testdata/mock/eth_getCode.json diff --git a/test/testdata/mock/eth_getLogs.json b/c/test/testdata/mock/eth_getLogs.json similarity index 100% rename from test/testdata/mock/eth_getLogs.json rename to c/test/testdata/mock/eth_getLogs.json diff --git a/test/testdata/mock/eth_getStorageAt.json b/c/test/testdata/mock/eth_getStorageAt.json similarity index 100% rename from test/testdata/mock/eth_getStorageAt.json rename to c/test/testdata/mock/eth_getStorageAt.json diff --git a/test/testdata/mock/eth_getTransactionByBlockHashAndIndex.json b/c/test/testdata/mock/eth_getTransactionByBlockHashAndIndex.json similarity index 100% rename from test/testdata/mock/eth_getTransactionByBlockHashAndIndex.json rename to c/test/testdata/mock/eth_getTransactionByBlockHashAndIndex.json diff --git a/test/testdata/mock/eth_getTransactionByBlockNumberAndIndex.json b/c/test/testdata/mock/eth_getTransactionByBlockNumberAndIndex.json similarity index 100% rename from test/testdata/mock/eth_getTransactionByBlockNumberAndIndex.json rename to c/test/testdata/mock/eth_getTransactionByBlockNumberAndIndex.json diff --git a/test/testdata/mock/eth_getTransactionByHash.json b/c/test/testdata/mock/eth_getTransactionByHash.json similarity index 100% rename from test/testdata/mock/eth_getTransactionByHash.json rename to c/test/testdata/mock/eth_getTransactionByHash.json diff --git a/test/testdata/mock/eth_getTransactionCount.json b/c/test/testdata/mock/eth_getTransactionCount.json similarity index 100% rename from test/testdata/mock/eth_getTransactionCount.json rename to c/test/testdata/mock/eth_getTransactionCount.json diff --git a/test/testdata/mock/eth_getTransactionReceipt.json b/c/test/testdata/mock/eth_getTransactionReceipt.json similarity index 100% rename from test/testdata/mock/eth_getTransactionReceipt.json rename to c/test/testdata/mock/eth_getTransactionReceipt.json diff --git a/test/testdata/mock/eth_getUncleByBlockNumberAndIndex.json b/c/test/testdata/mock/eth_getUncleByBlockNumberAndIndex.json similarity index 100% rename from test/testdata/mock/eth_getUncleByBlockNumberAndIndex.json rename to c/test/testdata/mock/eth_getUncleByBlockNumberAndIndex.json diff --git a/test/testdata/mock/eth_getUncleCountByBlockHash.json b/c/test/testdata/mock/eth_getUncleCountByBlockHash.json similarity index 100% rename from test/testdata/mock/eth_getUncleCountByBlockHash.json rename to c/test/testdata/mock/eth_getUncleCountByBlockHash.json diff --git a/test/testdata/mock/eth_getUncleCountByBlockNumber.json b/c/test/testdata/mock/eth_getUncleCountByBlockNumber.json similarity index 100% rename from test/testdata/mock/eth_getUncleCountByBlockNumber.json rename to c/test/testdata/mock/eth_getUncleCountByBlockNumber.json diff --git a/test/testdata/mock/eth_sendRawTransaction.json b/c/test/testdata/mock/eth_sendRawTransaction.json similarity index 100% rename from test/testdata/mock/eth_sendRawTransaction.json rename to c/test/testdata/mock/eth_sendRawTransaction.json diff --git a/test/testdata/mock/in3_nodeList.json b/c/test/testdata/mock/in3_nodeList.json similarity index 100% rename from test/testdata/mock/in3_nodeList.json rename to c/test/testdata/mock/in3_nodeList.json diff --git a/test/testdata/requests/eth_blockNumber.json b/c/test/testdata/requests/eth_blockNumber.json similarity index 100% rename from test/testdata/requests/eth_blockNumber.json rename to c/test/testdata/requests/eth_blockNumber.json diff --git a/test/testdata/requests/eth_call.json b/c/test/testdata/requests/eth_call.json similarity index 100% rename from test/testdata/requests/eth_call.json rename to c/test/testdata/requests/eth_call.json diff --git a/test/testdata/requests/eth_call_shift.json b/c/test/testdata/requests/eth_call_shift.json similarity index 100% rename from test/testdata/requests/eth_call_shift.json rename to c/test/testdata/requests/eth_call_shift.json diff --git a/test/testdata/requests/eth_getBalance.json b/c/test/testdata/requests/eth_getBalance.json similarity index 100% rename from test/testdata/requests/eth_getBalance.json rename to c/test/testdata/requests/eth_getBalance.json diff --git a/test/testdata/requests/eth_getBalance_not_existent.json b/c/test/testdata/requests/eth_getBalance_not_existent.json similarity index 100% rename from test/testdata/requests/eth_getBalance_not_existent.json rename to c/test/testdata/requests/eth_getBalance_not_existent.json diff --git a/test/testdata/requests/eth_getBlockByHash.json b/c/test/testdata/requests/eth_getBlockByHash.json similarity index 100% rename from test/testdata/requests/eth_getBlockByHash.json rename to c/test/testdata/requests/eth_getBlockByHash.json diff --git a/test/testdata/requests/eth_getBlockByNumber.json b/c/test/testdata/requests/eth_getBlockByNumber.json similarity index 100% rename from test/testdata/requests/eth_getBlockByNumber.json rename to c/test/testdata/requests/eth_getBlockByNumber.json diff --git a/test/testdata/requests/eth_getCode.json b/c/test/testdata/requests/eth_getCode.json similarity index 100% rename from test/testdata/requests/eth_getCode.json rename to c/test/testdata/requests/eth_getCode.json diff --git a/test/testdata/requests/eth_getLogs.json b/c/test/testdata/requests/eth_getLogs.json similarity index 100% rename from test/testdata/requests/eth_getLogs.json rename to c/test/testdata/requests/eth_getLogs.json diff --git a/test/testdata/requests/eth_getLogs2.json b/c/test/testdata/requests/eth_getLogs2.json similarity index 100% rename from test/testdata/requests/eth_getLogs2.json rename to c/test/testdata/requests/eth_getLogs2.json diff --git a/test/testdata/requests/eth_getLogs_blockHash.json b/c/test/testdata/requests/eth_getLogs_blockHash.json similarity index 100% rename from test/testdata/requests/eth_getLogs_blockHash.json rename to c/test/testdata/requests/eth_getLogs_blockHash.json diff --git a/test/testdata/requests/eth_getStorageAt.json b/c/test/testdata/requests/eth_getStorageAt.json similarity index 100% rename from test/testdata/requests/eth_getStorageAt.json rename to c/test/testdata/requests/eth_getStorageAt.json diff --git a/test/testdata/requests/eth_getStorageAt2.json b/c/test/testdata/requests/eth_getStorageAt2.json similarity index 100% rename from test/testdata/requests/eth_getStorageAt2.json rename to c/test/testdata/requests/eth_getStorageAt2.json diff --git a/c/test/testdata/requests/eth_getTransactionByBlockHashAndIndex.json b/c/test/testdata/requests/eth_getTransactionByBlockHashAndIndex.json new file mode 100644 index 000000000..7e4c3e200 --- /dev/null +++ b/c/test/testdata/requests/eth_getTransactionByBlockHashAndIndex.json @@ -0,0 +1,56 @@ +[ + { + "descr": "correct transaction", + "success": true, + "fuzzer": true, + "request": { + "method": "eth_getTransactionByBlockHashAndIndex", + "params": [ + "0x389eef428d248d31ad0f9cfcb6dec01417ea4779a9241bd55e14bfc7cb83a4e9", + "0xab" + ] + }, + "response": [ + { + "result": { + "blockHash": "0x389eef428d248d31ad0f9cfcb6dec01417ea4779a9241bd55e14bfc7cb83a4e9", + "blockNumber": "0x6920ca", + "chainId": "0x1", + "condition": null, + "creates": null, + "from": "0xc33ffac8030c7c50d8994015c88d502a3240dec7", + "gas": "0x30d40", + "gasPrice": "0xee6b2800", + "hash": "0x3ddc5012709aa350f4d27aad023410605087aa3dea92a7308c164584a92a5199", + "input": "0x1019635d000000000000000000000000778f68923f1f2a40117b3db98083851c5d2e37ef000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000821ab0d4414980000", + "nonce": "0x40d1", + "publicKey": "0x3dbf0a3e43e65ecc8a7627b354654ce280788332f0d8b382b0578df3ba41b4b9992b0cf38a5670782c6623de8ec96fd27cfdceda9e661670c5b37ae5d0ef7f78", + "r": "0x22d47e325a8755f444e73db8d24f58269148b3e0ecf7868651490e75a4f96c64", + "raw": "0xf8cb8240d184ee6b280083030d4094752ff65b884b9c260d212c804e0b7aceea01247380b8641019635d000000000000000000000000778f68923f1f2a40117b3db98083851c5d2e37ef000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000821ab0d441498000025a022d47e325a8755f444e73db8d24f58269148b3e0ecf7868651490e75a4f96c64a0166e6eb1cea44f4b68345e026de87f0959807ddad59fb5dde94e35580732c426", + "s": "0x166e6eb1cea44f4b68345e026de87f0959807ddad59fb5dde94e35580732c426", + "standardV": "0x0", + "to": "0x752ff65b884b9c260d212c804e0b7aceea012473", + "transactionIndex": "0xab", + "v": "0x25", + "value": "0x0" + }, + "id": 77, + "in3": { + "proof": { + "type": "transactionProof", + "block": "0xf90214a041866d5c9892e11272ef4566268c66cea269841dded94126048c9d9decbe409da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347945a0b54d5dc17e0aadc383d2db43b0a0d3e029c4ca01ec938e4d64afff0ce8d1549a1c85629b83afaafc27ebd3d30fa1193a9e98913a0b5a0213d8326ba5c7f8db1848bb0e47c56a6ea53f083b642ee1479ab4385dc15a0959f9a01ebc25c9a9fe768a08ebf5932fd58fae6212dcefc2c0cd26984840f13b901000b08a021a0626134880110710014c01061058f270b04b20d408704b05104346006c3220402042b539a0a025053d9037b020647200c021579cce1f1982028002105082a91a2900203045a425d450160a1e6003a15a8591009961eca38401b401105122050363a5117d646022404401c045613345e38589602045808194a900b00124128b0ca80a108240c1542c234398904410d80448044154827e31627111a700244c8010004241a098c7a03c900cc182d027070101b8a008044484cb0904d0358a0078a6c004000208a3085048242405018c634c3c9486202052a2e846ae24a219534be80020a101410001281009b310e4020e09a5a965d00980100ca9801568707d7aee045b35c836920ca837a121d8379cf6b845c14a29693737061726b706f6f6c2d6574682d636e2d687aa0705e05a808b3449d0d56c89e5037d341a31e4b8ba61d99f860bdf9c00632c771881105346000654ee4", + "merkleProof": [ + "0xf90131a00b5b68a13ba7a0908a0e6ec35cea8909c7db9c38ec528f294bacc3e9a921e385a012c0e9215e6c8d70b6bb208bf0f045b07f1e1cf1281c2ed76bfa066bdd57356da0f259bcff22c9214bc892c278b7ddb06c542566baef3589ea201869b98dac40b1a031a3004b28320b5b34942c7fa6b4597ff5493312c9d6cb0eaf958ea9681bea17a0505ebb316da2276173a9cc0867fe8e8519df054ddf76a9a3e28ea6ef4e3fb4eea0e580081265fadc4f0ee996114b84597622ba2c6d50fa760dbf6c261e46f080b2a0563477696629da0eecec37aa4f236504091d329ceb9f1b28423906f2988f1d09a07bba91c783998dabe533dd7b362ea6498553b006ce3de4ac617021bb073e024aa070e79a6d783756d400b712d5667882c6df9188635d4204608d5cfecdbfc42e678080808080808080", + "0xf851a0703c0db3ea8287db7df5a27605c2d59956f3145523d3a15a78a95e128a8c7b7ba079c73b74fc965bd02631d68b94a56fd72572073687f1bb1e6de22f7380e34807808080808080808080808080808080", + "0xf8918080808080808080a04f5304e8278706585d11aee5d3ab51d482d07926b02449bfb9e97022f81a2939a0176904a2357ee15f0adfde00901bde8d03ea82a2251f925fecffe4d9812b3586a0d6e33550d00187f99dfeb8ba2a43fd21e1c2e90fc50407c9d4ffd8673ad18d53a0b7c9193589b232a43905549a082a19a49c1723f9b86abfa0154030140ae6eba68080808080", + "0xf90211a057fc7c876033aab3442e0acca396c9944e44fe0755225a9b5cab0fd7a77d70eda0b337383244c54f931fa568e074f7cfc7411a43440f0b6a7a7757b0d7e10faec2a0fe6771a834c8b101ff9ce13a6612ebbc5d0ecf99e9f8e29a6943abdf0dc90a62a0e7c1421881721538266c674b867a6de65885bed9294909340470a1380d6aa342a0f7f9420188a1bae035a7dc7ac48cb24328b8d7dbb40b767203a62c8b70080a26a04914509a44df4d2e309d2bea5e8a8c55a181d9b83641da10a017278f8a6b20eda01e89da6f55bc4476d63d7c06bad3683b1fd9f1fa1171503e923fb3cee528cffca04193f8fe37b71e95a26166eec32dbdc7e4a4e2eff36075f399b45e85d2e59dbda084a5d304743c2df00ad0b2abc0ac5db5799ae975ce77f8218edc3cccd3ba8f81a07d2b2f5445abbdc75995131f1c7d6145e793d444fda0a0c32c07eedcdf76723ea01f5b9402d08502641db2dc178944851ec5c210d8d29fc788a71271e85474f601a05139439b110cb8c6d793d72a6baf585dbba369fa17ef20d353bf842ce3fd25bca0dd5fb26ff4164a7f269a13d15e53202100244adf9fbe85ed0663190ed423639ea0dbbaa1fb7c0aac03fa7dd2665e6fa72b44e2b773c399a5430ef92a81c8d6b0d8a0db6a88971b04a7087ee3fa978e447c558792b09ddb7506891c9ffde5b4f34c18a0f2ea1647dfd4072db93cac0c61cbb0feea07f3f30d8a5d54ae25d1c66021781180", + "0xf8d020b8cdf8cb8240d184ee6b280083030d4094752ff65b884b9c260d212c804e0b7aceea01247380b8641019635d000000000000000000000000778f68923f1f2a40117b3db98083851c5d2e37ef000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000821ab0d441498000025a022d47e325a8755f444e73db8d24f58269148b3e0ecf7868651490e75a4f96c64a0166e6eb1cea44f4b68345e026de87f0959807ddad59fb5dde94e35580732c426" + ], + "txIndex": 171, + "signatures": [] + } + } + } + ] + } +] diff --git a/test/testdata/requests/eth_getTransactionByBlockNumberAndIndex.json b/c/test/testdata/requests/eth_getTransactionByBlockNumberAndIndex.json similarity index 100% rename from test/testdata/requests/eth_getTransactionByBlockNumberAndIndex.json rename to c/test/testdata/requests/eth_getTransactionByBlockNumberAndIndex.json diff --git a/test/testdata/requests/eth_getTransactionByHash.json b/c/test/testdata/requests/eth_getTransactionByHash.json similarity index 100% rename from test/testdata/requests/eth_getTransactionByHash.json rename to c/test/testdata/requests/eth_getTransactionByHash.json diff --git a/test/testdata/requests/eth_getTransactionReceipt.json b/c/test/testdata/requests/eth_getTransactionReceipt.json similarity index 100% rename from test/testdata/requests/eth_getTransactionReceipt.json rename to c/test/testdata/requests/eth_getTransactionReceipt.json diff --git a/test/testdata/requests/eth_logs_invalid.json b/c/test/testdata/requests/eth_logs_invalid.json similarity index 100% rename from test/testdata/requests/eth_logs_invalid.json rename to c/test/testdata/requests/eth_logs_invalid.json diff --git a/test/testdata/requests/eth_logs_invalid2.json b/c/test/testdata/requests/eth_logs_invalid2.json similarity index 100% rename from test/testdata/requests/eth_logs_invalid2.json rename to c/test/testdata/requests/eth_logs_invalid2.json diff --git a/test/testdata/requests/in3_abi.json b/c/test/testdata/requests/in3_abi.json similarity index 100% rename from test/testdata/requests/in3_abi.json rename to c/test/testdata/requests/in3_abi.json diff --git a/test/testdata/requests/in3_checksumAddress.json b/c/test/testdata/requests/in3_checksumAddress.json similarity index 100% rename from test/testdata/requests/in3_checksumAddress.json rename to c/test/testdata/requests/in3_checksumAddress.json diff --git a/c/test/testdata/requests/in3_ens.json b/c/test/testdata/requests/in3_ens.json new file mode 100644 index 000000000..362566da0 --- /dev/null +++ b/c/test/testdata/requests/in3_ens.json @@ -0,0 +1,289 @@ +[ + { + "descr": "in3_ens address", + "chainId": "0x1", + "intern": true, + "request": { + "method": "in3_ens", + "params": [ + "incubed.eth" + ] + }, + "response": [ + { + "id": 1, + "result": "0x6c095a05764a23156efd9d603eada144a9b1af33", + "jsonrpc": "2.0" + }, + { + "jsonrpc": "2.0", + "id": 1, + "result": "0x0000000000000000000000004976fb03c32e5b8cfe2b6ccb31c09ba78ebaba41", + "in3": { + "proof": { + "type": "callProof", + "block": "0xf9020da0c978079abcc890f4e2a9b83f84ab7ff79587d33f4ea1d3b6a277b4bf7151ff87a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493479404668ec2f57cc15c381b461b9fedab5d451c8f7fa0f7a47e4352685e57efc887b5b62136526e54af5911b3c2a7fcf243d16de4b8e9a0ccbdddc3ada746d90ad680d89435c3a8b79f3d3d6dab412efbaf1937436265c8a017fc75e3d8ed363165b4cbedada7677568cb9e04df016dc6ea12af115829416fb90100000102898012c0081001460061000c0000800000c08400500002004200020018400a02410008001200000006104043090388240208000009004c82100028280100800100800110098006080c000000220042000402080008000202040042000050000110060080000300100c00000800084011200080000000220132242402800440000500000002120102008000c0001010014008005040004001e2003480c4420268020002200021000382400090288004000008404820000000201a001441c01000420040110100001200242016041c000222010802000010008004406001e210200130f02002004040104020800c482000302812009000080c08000004218707ed1325f0e0fd839101f383988167831c88d3845e4b0d6a8c7370696465723038082e3c77a0883766492ee3171dafc7ed323f8f19208ebdb4cfb56b8abbd180f68190d2d8f0889d3927c02c437f25", + "signatures": [], + "accounts": { + "0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e": { + "accountProof": [ + "0xf90211a053caa1d45ad73d7704b6a401ca71688168002ec33873b72872a7fee87b65af83a0e7f3eef855e367c09d97130fadc2e60d786f6d33c257d2ee74b0916f986e30c5a01f7f6f82a4a149f2522d6baa9b74caf2bf3b898c1aaab6c51f5fcaae650dfd05a08be7ea0cc80855f5b3d52167eded6930f62c98a9604059574f96affb86cab8eca042fdb6f540e0df19d8fc1ff35c8bc717d339bc19172e7e0273cbffc536429516a0c294e273a61b6a1769df49d72de8316fe8ac9c7283cbb3a9a8d63db4ec881e13a0bb712ff158f418aa37532e50860027b2e6727ee164dd0be93e388b41fa9c0346a0142a3003144f28eb402161d1d5f4f6f105244919bd24496c530300691911025ba044692c0a7256bf32a822dbb2ad2fbd095b8f6583341f36d230f6f1850f54e56da0d95032b8733b1b8bba80aee6df8afc94db200aa347bf2a33fddc1b8266143eaea0a6ce2d31311853940b0705044a81a23b4f1f9142089896504852ae6ecac1cdd6a0c6244027a54f7103200f1d67df3a27492b2e174b00b167d75cc3043fda7f3118a05dd8191629298beba65df82441ee600cae7ba423e86e9a4947cb741a23b385c3a079d93aa78d6bfa4f7b21fd63e45e2f286abf6b8913b8a4da9855bf1e25300d38a0a3056dbd59699e1089c3ac194995919c714e2501614e5f39f78f2c46cf1797eaa0bbfcb2b44874fa4f77819ce5a7a9384946f043411f10d48b691ea9d738dd78c680", + "0xf90211a008af0a81d428fd9e513108ddf7077428a5b2ec09551add31cc9ffd182690b320a00552f0f5362bba36ab683402a5e7b5648acf582490d05006d593fdd810a2e396a0c4195e15265574675b25ee30c323e78044622c643ce01040fcf1a116b3116f73a0f8844e5c45471d110c66bb9e9dcde6e79ebb05eb57140af00bc92e7233d78082a04595b0ddb0fe41eb43ac25a9e8a968ed169068665c249e8f959f6790e12a7aada008fef9aca00473c676fdc68ba32daec3e2708fee2e36be392b9d1a1ac9f15e76a0a301d305e4f789f70d9ac2e0f9381b61105e4dd5ccc9d20911b7fcc5f9f73d2ca099996c39c8ba01b2d192676e2a1a05bf603e035cd2d7bbd1370791a98321db12a0bbf4f46c755225e6304e9855a647b80711e63389edd3d8e88de7b83695622f7aa004932f9626872d530e2242e9ce6a1d6d3bde957d71c90fafb5f2e48b47685e76a046e9d5c6be68ad0f827d24ac3be52dad29a96a8196e37ecde980ddeaa7bb8deaa0b66548926a0dd5c291784d1398d2d098c93a994006d98fc7f58b9f277a2ac204a0c51e736030cb231f2d2066e42ba3070b6b1209c2999de46daa78c9d039454a43a0c2429d897617b7c2c1b0ee76c7fdd48d88bbaeece984b39bc4e7ed10121b3d18a07bea410647e8aaf3c3a4fba2fd761324c87cf42c4185279026bc2406adbdee92a08043326b413645af92a5337f95636c70eada28ff4bbe7a6f4eee8e06f665cb2080", + "0xf90211a07015f57e64ac2efd624f64c2b01da52be92a20aa99fa5a0a0eb2981001a2db26a014747d3eb477fa368d55d16a00c29d2727f2901fffb150618c4bde8ba5b3ecdca0cf200d7b0bbc7b5ff75e5413e62c4f944fdc942a3b21f8529c11fb0ceed8b3c1a00438c242ce2ed9f7ab8256fe0c7733f9f417eef4788e41651e0867acd930d5f4a0ad6e8548ac49af03a00791230aabf9dd52d6cfce8e1e30bc1fb8b842d3e76264a06ff9006a91292d80a73059896b5e05c378f376eb9eff501e42bd17bffb2624c7a084bb6db0cb7adcdb8f188659e8e7dc81ccb694925f26b6311742e7059f5b6586a03121743c1905ef05bc1c9025f148729b7edf0e50c8d5c1d864690d7533f3aae2a08b07c857bb10d959a5131b1fb1d4ba3322085259a390f9a4af5834bad5115f43a0b5dcb63035fa92dea5aa51e07dbed0714010eb9610f83643ba085c4ccaa9eeb4a0455a1508baf78a6915922def0271c33bb83db287244b759991470c4cc3b2314ca07bc577cd6bfa43b2e3c671c821b750551a36420b25df6ade614c6c1d1b40a37ca0f9e35a38e3600b70f9d24a7c80f3f5dad5c83cb889520a08ae5420f765c1fdbba0772c26aa8ba425af85e8a21ca95d9ea58440994b7c7dfc55c2ba4e6c1908828fa0950607bf37d2d927672cb5a274c56f5f6e9c4ca8376eed3636fe7c2896ad97cfa0b467d023f78639790c8429a8609ba6b0732fbdad903d6a6322a456a27e02006b80", + "0xf90211a0b9072d4adf8540860bd9fed512ac87e6c36d7e1ca715bcf0afce14160a54c96ba02a389a358b8f3860c7104a58676eba8c0d1a64b5cc5e536106b3f15e2da2903da0fcb52d7b955d99ecf30e6788acaa308d5d35f4e6030c54bfe626ce22e0656168a00e129269a43da82fed3409cc19b287d6d12cc6874dc5a38ab4612ee82601a53aa0b9069634bfe06536c1217a1eec3a087c2ef00e458927b3e15cbd86b61d253c18a06c1cd146b766c21962e64c2c037bb15a002d72a3a456545fcb16393e1419703aa0eaa5298a88885191f3d78f1cc853cd4164beff574c983d2a590a7decc2d1e090a094fb89f9d67358546a4ee15a41ecd1b73949ba7d1c6732fc982260b1dd307867a089bcf2cb04995dd38fdc13d9e2034b9648e4ce2a5d663634f69f97479e2fca65a0727f664a51a973373bd0e48f27894b6ac30b3b6ac230623d25d3f46a8e3d67a4a0ac2c7fb222d3c23e256580969006569535b6f298b8f3fa7075256696b6c7a7a1a061bce5e58bfcdb7848ef3e05bcd5ee3a69e2e880f757c5e6b72ef823edec4e07a04baeb811cf9bbac8180b040cce69ff9ebf36d68aa613cb26e38fc257110deee0a01060a24c3041cb071735ee50d34a35ca06f46cf28e8b9cc1e67e7a8e0d3bc224a0b2ab8fa553521592d27665d51cb257504370b4fd2e084ffd4bc4405c0d03a7b2a0ce21648d4dc1ae978a8172ffdb71b3c3c7f5e8c99e751616ba98ab86a4e57a3980", + "0xf90211a0ca420c7a4688b1a788a299564f8e53e63db0ff06baf1d5d6ac9bd60b7ae6ef03a0d9a47bd09a9af0485b5e16f1fdead1b38bd0033e47b68c50b9145d04b2e3ca45a015cc37a9efac0a28a5a472f9ec34f62c450cfb00809bcd0f661835b98b77c908a0e82c7c23b36e078efdbb6e1777ef041311107d2e8bf046792f5efe8785913a25a071c97fa0da567c46472c018659acca753d5fc9f18e7c88ea225158aa0718372ea05b38d432699a0904da576a390d7471a27fd46aed8a21dc997a9420cdbe26bad1a08c37240060236766e7b48a8667280be0b5ec8bb9617676196d92e1adb8df5feaa03e2c81e804d01ed7e5d7017945965cd64170ac72d950b9ad0df6d5b821b1e220a0a6ab63ac39f8349fbf12a5fed07dc851b578c9b0c4ebd2bc596f85a93e09467ea0dba377dbe3b9e3b94536913afccdde26a005468ef064f49f1f4fbc24e88aa231a0887915f22f76a4836cf516cb64e2171b8c58a96dd53304f7d89bc4d25d0008e3a09d74708389b99bbdda1bd375a98013b59a0f79e0993d038fc3e0e25a3f57fe13a0ec1ba1a95e90d8efa1443235c6f794c67cc600116c43d9dfd9d5bc51f1c7c93ba09983b656efc003add047e25e09a09fa19494c25eba79945800cb18a0c3cf2696a0b5c754e7732d657de869af8d2144e7dec48359e1ce414d8360d824bc180455caa0bbb65bf83056164fd955bc4a46993b98e6b9b42fbea28af3fb0eb3e64400820180", + "0xf90211a0df6443ec0fcca615a0f4ba5b48baca3fdf5a5ca18db86714c78c8f99f60a6734a081bea4c6bd2e2026b5c6fdfa418b75662c7122d675f9a5b6415aaec3e2eb2a8ca034e08bd4dca1b347ba47b94a818baa4670cea02bbf91e125855f1c2d08d57e96a056f06073d19e0c690ea88bd87f9afadbebd91270024a2e5cf40c5859287920d0a0ecd1b8c32c78b513ce804e44f51e175640d3a55804ac4b261e6ba4aa8079e640a0adf96f10cbd0242f4af39f240a5b52abf08311ce3014898e5359be8673fd0edea0e007ef6555b7f835f08cddbe8177c2b53266f3fe2e8685e4c3a1e5d43901b217a055f9a7109a241a65727ab5a4a1668a0bdc5278626de5d084dcd6dfb553e71b41a0888f2f97a389cb37cea2833c9c82b35fdcdf03cc0c2bf0c72a4e764d5ddea32ca04a85a0e52bc9da1ecd09e70cbb7baa759de8c7fc341f0b2ed68c1be5bc2821b1a09da47448f16af02d92ab775f1133124f16c0b7d047514a4ff75814e511d95a16a08cbc5fa58cad32e4ba1a07fb307438f3911b4122865ff736ab2f2af84ed38ceba09deeb4d161ba8dc2ff9d7098bd76ecfd548c52df13a1dafe39f7666c5e277cf1a077b1c65e5a290d7e4deaeebd0932f42f25e6aa71a67b5c659a3beefb901d02fea0db06b78412fe9e128d7d44ae7a22a48d14a0c952dbe3651d6805fb8f93ada74da0f2ea87d62a695bc3c4936b9f503f9684334c044246acd1459105c3cf7d3b6bc080", + "0xf8718080808080808080a04a88e4063326e9f1c0149653f8da9056a293687e939d79212d94e4bc2b87260d80a0a1d414f4a142d67ce3b24a51bad7b0a5d80390f53ccd144379133f13de6997bc80a0108741d4c890fe745fa0a7bc0cbfa40fbf888ac78ea0d1f6eeef84d84c2d38dd80808080", + "0xf8669d3a53e8a0e441d4dc5101efa6a123b85a3a2a219f1a5fd625a5d6614490b846f8440180a0ff8f6c67f285aa87326d9c51f36e8ce207ad50db4f3e3b9f39c87c41dfbfd1b3a0d6bfd5d6f1384a1f6ea57b8a8412de5552f138d42021cf7c4941e33206f529e4" + ], + "address": "0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e", + "code": "0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c80635b0fc9c31161008c578063b83f866311610066578063b83f86631461042c578063cf40882314610476578063e985e9c5146104f8578063f79fe53814610574576100cf565b80635b0fc9c3146103025780635ef2c7f014610350578063a22cb465146103dc576100cf565b80630178b8bf146100d457806302571be31461014257806306ab5923146101b057806314ab90381461021c57806316a25cbd1461025e5780631896f70a146102b4575b600080fd5b610100600480360360208110156100ea57600080fd5b81019080803590602001909291905050506105ba565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61016e6004803603602081101561015857600080fd5b810190808035906020019092919050505061068f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610206600480360360608110156101c657600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610764565b6040518082815260200191505060405180910390f35b61025c6004803603604081101561023257600080fd5b8101908080359060200190929190803567ffffffffffffffff169060200190929190505050610919565b005b61028a6004803603602081101561027457600080fd5b8101908080359060200190929190505050610aab565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b610300600480360360408110156102ca57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b80565b005b61034e6004803603604081101561031857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d42565b005b6103da600480360360a081101561036657600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803567ffffffffffffffff169060200190929190505050610eba565b005b61042a600480360360408110156103f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050610edc565b005b610434610fdd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104f66004803603608081101561048c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803567ffffffffffffffff169060200190929190505050611003565b005b61055a6004803603604081101561050e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061101e565b604051808215151515815260200191505060405180910390f35b6105a06004803603602081101561058a57600080fd5b81019080803590602001909291905050506110b2565b604051808215151515815260200191505060405180910390f35b60006105c5826110b2565b61067e57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630178b8bf836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561063c57600080fd5b505afa158015610650573d6000803e3d6000fd5b505050506040513d602081101561066657600080fd5b8101908080519060200190929190505050905061068a565b61068782611120565b90505b919050565b600061069a826110b2565b61075357600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561071157600080fd5b505afa158015610725573d6000803e3d6000fd5b505050506040513d602081101561073b57600080fd5b8101908080519060200190929190505050905061075f565b61075c8261115f565b90505b919050565b600083600080600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806108615750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61086a57600080fd5b6000868660405160200180838152602001828152602001925050506040516020818303038152906040528051906020012090506108a781866111e2565b85877fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e8287604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a38093505050509392505050565b81600080600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610a145750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610a1d57600080fd5b837f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa6884604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390a28260008086815260200190815260200160002060010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050505050565b6000610ab6826110b2565b610b6f57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316a25cbd836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b2d57600080fd5b505afa158015610b41573d6000803e3d6000fd5b505050506040513d6020811015610b5757600080fd5b81019080805190602001909291905050509050610b7b565b610b788261122f565b90505b919050565b81600080600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610c7b5750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610c8457600080fd5b837f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a084604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a28260008086815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b81600080600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610e3d5750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610e4657600080fd5b610e5084846111e2565b837fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d26684604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a250505050565b6000610ec7868686610764565b9050610ed4818484611262565b505050505050565b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61100d8484610d42565b611018848383611262565b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff1660008084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600080600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060008084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111d85760009150506111dd565b809150505b919050565b6000819050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611220573090505b61122a8382611455565b505050565b600080600083815260200190815260200160002060010160149054906101000a900467ffffffffffffffff169050919050565b60008084815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611383578160008085815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550827f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a083604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a25b60008084815260200190815260200160002060010160149054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff1614611450578060008085815260200190815260200160002060010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550827f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa6882604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390a25b505050565b8060008084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505056fea265627a7a72315820e307c1741e952c90d504ae303fa3fa1e5f6265200c65304d90abaa909d2dee4b64736f6c63430005100032", + "balance": "0x0", + "codeHash": "0xd6bfd5d6f1384a1f6ea57b8a8412de5552f138d42021cf7c4941e33206f529e4", + "nonce": "0x1", + "storageHash": "0xff8f6c67f285aa87326d9c51f36e8ce207ad50db4f3e3b9f39c87c41dfbfd1b3", + "storageProof": [ + { + "key": "0x3762ee9295b1a64160deefa90f70087ea87fba8b61026707707658b0ae37397a", + "proof": [ + "0xf90211a0b406b044add7586fc18fd21477a0fdb85d9b58718614af49d241ffc52327fb83a0ca4e21f24a7b066e9db4feb100e9670c1c3d7895115c0758f8f6892a9fbc47a1a0f0f17de7a4275c614a79e8a337d6dc985f2a34deadc9a5972ccf57da811c9221a013c38aea730895accead8e5cc864155ebf181bfa5d971156d51eafccbf16ed9ea0b3456bac5df415fdffcca894d402e3156781d74d52436cdeb6c846aaa1c0fe0da0f4e6b2e78171cb2e5427e51a17afbc8ae9415781baccec6203fa040bffb63ca0a01f45bef1e3b6dc820e47f85a4b060727e99369438b7191b85929def033d8ad89a0429be312c0c58b4632f55d0a096b8b1d33e337e7e2b4f9238a18cec91423d95da0a132b1303c4f3f0870b768722ada426ebf9c0fd1a804d52b7dcebc6642529ff1a0ffb4af263c6ad710f4a038664719c67aaa99ec161e0ac280939e441646b6a5afa0a7121ba7dc5614c9206e6f770ccb6f6ee33459edab95682f73a0a003c6d96f03a02592e668e734d6a1e02c64e644832f408428ee68d02414db6f41f66dbebb1b51a0bb3dfd0f5b98599bc6d567f6deb0842d3fc35a8685e3550a988a44222c9e9aaba09171b02bddae399315e8ea4a537db445834d68721557b198f21a2a90aeab73baa0a336266ae407ade1f8504cc79df806b020cac9050e17bac02a8f9c94f94580caa0d3f5660eb9743e9abdb0281baf290ed5984572ef92aa569c5dcb51be66437f8d80", + "0xf90211a03215eda1dbd43e863b1748b5c4b433f59b9af7ea9fb3a2d95a83b4bb660bcb49a0938b11ea98cf7f06a9b6aaa8848fab2ed3539bbbe8c97ec16b6916fc642fc4e4a049b359ae522f2c5c1fb03eac70e9b7768d8ec04a36fa4df5f712f0cde58c0bb7a07c95604cb2462b6d50534db3465c6ffdda574d136c5a5597ad604c61b49ed7e6a092cd1ad829e29319887426d23bf2a75c8b5a009197bcb9386f6f05a8d3733a25a025edfb3c5e6741d0ddecdf52272f31ff2801f94528027aa931023df8664f54e9a0c99143b0c20f6d2bf47bc7a8eca64ab50bba5f4a1e40099982efdfb1eef90b1fa0aef8b618aebbaee0a9f03b91cbfeb7a0090d393e0929548faefd06a3888a149ba047c1813b5979a0e08e8c8f80feead37381422f4a50a0bf925699903c6ac04aa0a002df54e8f91f37c1c79bf53f82b0b80419c20d721b8decae6d66a839eca24a19a08287754383298ee196e8e8529678de4c8b5c1237e5e3eb6bd380fbc92922e22ea04a2f1934585aa4a7bebf661c56beb46be7936b3b3e20453e9312a1d7d17c85a6a00933a9b2a36d2f415bc6b95729c5af2cbaa22bc89b33c93c42faf961c77dc9b1a0f321dc88ea76629c1a27c15fa8efe99d5f1cd49455a3defeee5cdf573dc54b9ea0980b876e392b8ec26c943bf7ff285e2794286904e4de389337be87c50a359181a024395eed9160534da8a43f184496b9656fa970010eea90c1f6aca370a29572bd80", + "0xf90211a02b0ad5cb694c8537975339c6b83c6959ca08f3ab5d0f509e1db86872d362a438a09a6772bfc26d3601cd883b0a6d3dab844af2eaaeaf46eda90bf8554a835e3884a0ac34dbd36c34598ab448230a2029a1a5513ed8f2aca47dcd6c7b89b1080c851ba094ddc0d5e6db0707e28674dc24aad5e6e2b5cf56b901ac4e48ddea8b8d15658ca0097e907f88e0f3ebfa07c27aa3f660f6dfeb83e0fd0a73de8cd3d830b065ca3aa04433a642a4540157aa2163a88ca2692b0350493ee9326798924fbf80076d4ad5a0feb00f1d052bdd0c24540928c139211081823560a3afad7e6643bebbff315305a029797db89e1852d55137d4c91a0f2121bad22e6011106ee3b0984c3d6be29c08a0f457ced2dd3a6eb3aa65f2258dcbb6b9da6dba03f9e3af5823100800dc3a4724a0cc988cbc9e3984647cb8a10ea48dded7ec3b4d7988cfcec49eb0d5ee492950e9a0b88c61a7e01745ccb74cd1be311605ed682346eba828bbf835e1a5649ce12a96a0bb42a61739fd8d4ade0450b678ec1e9485fe49653fb398823722c589d58a6398a019e95afeb3b0fc1c61874ca95495fd18cc341e406fdfb351e1a8ca8c023d48ada0322b977fb15988794db59312fbd93271da362c89349cac9097f748fe4cf895eea03e75c192069e85d5a5a3cdf86d6828aa94a2e58ee30b298568f9a5a027334e14a02dd55159a56c3e9ba522a7a275879f963590454b15afc92530ec6911f286c7bc80", + "0xf90211a0934a14b18ef07e8ee44be99f6b3502affbd145e8b144449020534953e5994e79a034c816e85b87e945b496b35bbfc3ad1b96e8eb20008cc1ed2d6eb03c666e83dea07f6c8ec6a4e53cafafb545761f340922043b7ab31bfbce8105bbd74df3b740eaa0eda1f4799002f5d5e10d089493b8b0471c2f5d53f2a39d8051f90620a0a10bcea0748095ebb6337a75ac09723d5fadec4207f61a918f9bc571070c7ac17fc529d4a017757dafee7b23c91ed25f02d6db1b9aba7ba752d090e43f180ef89e8f3a2c0fa0b09eee84df77e6e445dcbf71edb0810dd934e121d04464b156e15a9ff6743eeca09367b51e924d010967083f1c475870e1b858362c402b35615455ef5eb6a1a7a0a036e9dadc7e5178f2fd06e26c93a90759b0a3b99ea852641f8ef133688b3756eea02d34fe49c39a8c0b0187f59400e357c45033ac6e2bf05dfb3f5623c7af55d7e6a0176a43bc186b08c90a6add70fb40e74202a153d729bf7f266e358e4160473d7da0caab9ead86c53d9759c9c10e4d5523075ade26cbe9ebbc01c70eb192b8a6dc5ea03e8c4f31504aa9f1b4cb4b389e7ca5ef352a28fb89d1de7f04276d87e4264dcaa03397f9700eeb8f9fd7625b11cc6beacdfde9e12d3411a5d234f69966b90cd167a0280f87404f4e3b3c18eba15fe2579295004dad520633eb1048092119ec968c06a034df30e140d58ac49642eb20acc84fdb7d6e9b252b3b75102fd0ab36c60a35d380", + "0xf8d1a025d03c757c3b9f67a973b3a2a6dd5f19132cbbff33936260f18dff615e3a43028080a0aa7b6fba0c35cf1f769f3823cde327341f67b9420660231155c1ed4472a35f168080a029968ea8e3efa114667e059d29f1039333b7f04642b8d05945b2c2ada9432d8e8080a02bf9deab573a13d45107c4766c4e53a67cb00c1fa6bdd601c3de53e1f49b324480a0a2cd93906ec1623e0c9f09dc1065a96f3beca61608465b8782ae10b9a8168fb8a0d7eab29c910d45fa2884a15ab1847bf326354b2ed269484adf24db820a2e094f80808080", + "0xf59e38748ac48fc328419086cfeef2175f66e369e45f1e2df97f506a769e9cbd95946ebff3325023c7834b84f3d01cb54f4992eb4bd6" + ], + "value": "0x6ebff3325023c7834b84f3d01cb54f4992eb4bd6" + }, + { + "key": "0x3762ee9295b1a64160deefa90f70087ea87fba8b61026707707658b0ae37397b", + "proof": [ + "0xf90211a0b406b044add7586fc18fd21477a0fdb85d9b58718614af49d241ffc52327fb83a0ca4e21f24a7b066e9db4feb100e9670c1c3d7895115c0758f8f6892a9fbc47a1a0f0f17de7a4275c614a79e8a337d6dc985f2a34deadc9a5972ccf57da811c9221a013c38aea730895accead8e5cc864155ebf181bfa5d971156d51eafccbf16ed9ea0b3456bac5df415fdffcca894d402e3156781d74d52436cdeb6c846aaa1c0fe0da0f4e6b2e78171cb2e5427e51a17afbc8ae9415781baccec6203fa040bffb63ca0a01f45bef1e3b6dc820e47f85a4b060727e99369438b7191b85929def033d8ad89a0429be312c0c58b4632f55d0a096b8b1d33e337e7e2b4f9238a18cec91423d95da0a132b1303c4f3f0870b768722ada426ebf9c0fd1a804d52b7dcebc6642529ff1a0ffb4af263c6ad710f4a038664719c67aaa99ec161e0ac280939e441646b6a5afa0a7121ba7dc5614c9206e6f770ccb6f6ee33459edab95682f73a0a003c6d96f03a02592e668e734d6a1e02c64e644832f408428ee68d02414db6f41f66dbebb1b51a0bb3dfd0f5b98599bc6d567f6deb0842d3fc35a8685e3550a988a44222c9e9aaba09171b02bddae399315e8ea4a537db445834d68721557b198f21a2a90aeab73baa0a336266ae407ade1f8504cc79df806b020cac9050e17bac02a8f9c94f94580caa0d3f5660eb9743e9abdb0281baf290ed5984572ef92aa569c5dcb51be66437f8d80", + "0xf90211a0545b6a42dd0d2868b36c5aa2494512bbe5715b6d7f894425ffc11a68ed4280fda07a46ac5e465b0b525bd893f4bacf08d53193e2015ef333cff91fc7d339434041a057850f72843d0bbd103c49bbf8c5c5428e6189e7c21131b634d0707ada551afea0de27ef5274e493f5d20cf87089681b7eb4b2e22551d56caeb733e5e9f058e10aa08caba747f0c118162bc296bd9583392ad6bc57ffcaa6f128cb654d87e797b5d5a01833399278999132d2e34b10d92375967ece035ef6eb5ac0f97491eca74bdfaea0cb9810c1fafb7a83711017dfcc7147f238cb84a4f87a49062cb4ba799a9b6579a0554c671a5ce7bbfe98be85a8bce0e7b1bec5a537c5ed021da3761757e7952231a0a142328af1de5ac7eaaf0376f3c261030b28c157ad1829aec84a8e63b85fc965a07e2019c13414b43ba8c6e4c968c93143ca8a7b619ab8cc0e3c00ee61e60e617ba07b9f24a61169003dd61812f0348e163e4dbd2bc801956a357927710009eae980a0c828f4b317e0e1527208223a6fab2a6c88bbb439f4046bc35dde2e9de51918a2a0c93d22614b0b398a4853aa412ef92d2c80bcf33e592d798dd4a89d1892079e17a094fedd33cf0f64e649011c6cf25b7371076423150c4a33ec6bc39001d5cc5bdda045e0650079b90106039bbe3be01b37b9b14d5facae0b879fa60470ba87cf580ea069a74da67236a891677086e1cfc6e8261a90450f90aefbd359f94da9effb11f080", + "0xf90211a0f6b9235221127f108084f88e04647cb99ab5019f533e7056e32bb497dfbea297a0191fac31cea00b1ca5c2c4ee2b4a5bec06df5a0e4f6e00ca2d9187fe4a4e2870a01083c120a5986424478551a39200ed3ebe923c13ff4d407fafce4bcbe6c61fb4a0a48ca4a540206324b2a758bddac76360e073f21e5e6bfd59d5c1c22d3b56b3d9a0c59a6fb1cffb51c465cf9f4f95c40e489b6828730639d710b2f1b81ca328949ba0441efa790f8eba17669652bda5ddf548beab3c8c9adeacf738fb80d4c562155ba0c199e101fb0619fddd5d3ddce9843f76671b3f4103b8e33cf6a245e652faa61ca0141db4b6bb6a1eaf3043d3a462d8e06035a19fec7fce9bb005549ecffdd7b260a0899a862b360670e35975d8696e3da73f1b1be3f397498c2b5c377490164cb0daa032fc767e921b37674150d43fae2d2241f7486ee9213a2a7b4d69c00e9b04dca0a0333e103c5e1a9dbf25d5e6d016b74bcbf01ec91ba63324f8250cd56c68185576a0bd0eec11122df14447bddae5481200f2a9ff891e3fd0d0af948bdc140023269da0283ee4d4bc51d350707f71dd5bbd73340af8658c500740557d937ee955f791d8a03656b0b8bb532bf03f2ab7989c5d712cf1b02603e67ac26a8b7f3912ae336bb5a019688da24ed3cb612e4082f5350e5a9cbf2a46a1cb17e5d8703e21b953b1732da0f3218d5583beba0f4d187a0c301b86dca01a35774e90df2f28c88488f23c99ae80", + "0xf90211a02ec822d29ee509ba5e33797fb1f587f3537291ee1b0c1c58420eada4f499d1caa019bf44bb0fc220bfc642bedf8913e9696ad99d0e07d33b7f2090e8fbead71362a065cfd9af4ba7975072bde760d85e426b38740354b63705794715998b6001bb2fa09750e124f7f3ae101356a47282c13577ac3029f09f9e6e133b63bf451bc089b8a061d9d0988ae0eb493fad09a9e55032f92dbdf7bd7512fcccd32860e42779267fa0a939d8cc7eb051b629c29f11421b058e0a3adf5f7926428ff73967311223eacca06b12c98612f73b12aeed2892eba35355bc294d052e8480fc53834a01b3db346fa0640c948488f6f559f92a6f6a0e2f71e79fa9f7c7e4b43203c81238986f667607a096899cc6357a898e95459a524ec27f459a97bdbebd20a72210e884ab229a432fa0223354e0873372dc75fd594f9e71288d74354ae3c2de567566a3205e5d54bd69a0661b88262d7695ab5a3cf5aae51ed26f508cb09cadda5930b357fcb626b3ab12a03f3823ab4fef5affd001615ad55ba428c3401d76bdd120d2502d7608790ef8bda0c5d7f18557f384e43861c9bde7011b40875acf9ebe2596e9574a8f3e55f9fd00a0e23ee46d8b999598d6fd68024b59fac2212cb267def8085f6dcd510f00c332e1a0557e623f9cdccb388ab1788ff3f094c04e56d1490d285de3f017c8745dc0f86ba0e67311d55654fb04b3f2728725726bb8a9f124109022af5d797628f0cd56847980", + "0xf871a0214bf15799eeac2f36c85d1212f5c3c40f714341fb682e619ee58e688126a23da0a3b6e49bfe9693e34d7183eaf5247742f1f74d15c9ecbd459cf2a055190adfc5808080808080808080808080a0dc4dc64d20e13dc5842a200690f318dfcc8ac78ee02c0969b50520e8cdd0216d8080", + "0xf59e31d7410845a36f586c94fc1521ee1544b41339422b92aae71894610251de95944976fb03c32e5b8cfe2b6ccb31c09ba78ebaba41" + ], + "value": "0x4976fb03c32e5b8cfe2b6ccb31c09ba78ebaba41" + } + ] + } + } + }, + "version": "2.1.0" + } + }, + { + "jsonrpc": "2.0", + "id": 1, + "result": "0x0000000000000000000000006c095a05764a23156efd9d603eada144a9b1af33", + "in3": { + "proof": { + "type": "callProof", + "block": "0xf9020da0c978079abcc890f4e2a9b83f84ab7ff79587d33f4ea1d3b6a277b4bf7151ff87a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493479404668ec2f57cc15c381b461b9fedab5d451c8f7fa0f7a47e4352685e57efc887b5b62136526e54af5911b3c2a7fcf243d16de4b8e9a0ccbdddc3ada746d90ad680d89435c3a8b79f3d3d6dab412efbaf1937436265c8a017fc75e3d8ed363165b4cbedada7677568cb9e04df016dc6ea12af115829416fb90100000102898012c0081001460061000c0000800000c08400500002004200020018400a02410008001200000006104043090388240208000009004c82100028280100800100800110098006080c000000220042000402080008000202040042000050000110060080000300100c00000800084011200080000000220132242402800440000500000002120102008000c0001010014008005040004001e2003480c4420268020002200021000382400090288004000008404820000000201a001441c01000420040110100001200242016041c000222010802000010008004406001e210200130f02002004040104020800c482000302812009000080c08000004218707ed1325f0e0fd839101f383988167831c88d3845e4b0d6a8c7370696465723038082e3c77a0883766492ee3171dafc7ed323f8f19208ebdb4cfb56b8abbd180f68190d2d8f0889d3927c02c437f25", + "signatures": [], + "accounts": { + "0x4976fb03c32e5b8cfe2b6ccb31c09ba78ebaba41": { + "accountProof": [ + "0xf90211a053caa1d45ad73d7704b6a401ca71688168002ec33873b72872a7fee87b65af83a0e7f3eef855e367c09d97130fadc2e60d786f6d33c257d2ee74b0916f986e30c5a01f7f6f82a4a149f2522d6baa9b74caf2bf3b898c1aaab6c51f5fcaae650dfd05a08be7ea0cc80855f5b3d52167eded6930f62c98a9604059574f96affb86cab8eca042fdb6f540e0df19d8fc1ff35c8bc717d339bc19172e7e0273cbffc536429516a0c294e273a61b6a1769df49d72de8316fe8ac9c7283cbb3a9a8d63db4ec881e13a0bb712ff158f418aa37532e50860027b2e6727ee164dd0be93e388b41fa9c0346a0142a3003144f28eb402161d1d5f4f6f105244919bd24496c530300691911025ba044692c0a7256bf32a822dbb2ad2fbd095b8f6583341f36d230f6f1850f54e56da0d95032b8733b1b8bba80aee6df8afc94db200aa347bf2a33fddc1b8266143eaea0a6ce2d31311853940b0705044a81a23b4f1f9142089896504852ae6ecac1cdd6a0c6244027a54f7103200f1d67df3a27492b2e174b00b167d75cc3043fda7f3118a05dd8191629298beba65df82441ee600cae7ba423e86e9a4947cb741a23b385c3a079d93aa78d6bfa4f7b21fd63e45e2f286abf6b8913b8a4da9855bf1e25300d38a0a3056dbd59699e1089c3ac194995919c714e2501614e5f39f78f2c46cf1797eaa0bbfcb2b44874fa4f77819ce5a7a9384946f043411f10d48b691ea9d738dd78c680", + "0xf90211a001b68a22a2ffa30c6716e05cd0329d5114c85ea0c1ddc6b4dfec0fd2a2924cdda0c08a445a1e2525b130b0d580b34f845c943ec92ad91445b21dacc77dcba003b5a0d27504582a53854b79b722d7eebb3e187dd9f6b75e461799ca5e5161b40d4c32a0bb46049b6cca46926418403105553f9e6e14486fd8a9120c84ea13fbc87c7583a0fb50bc9a33e87509a6dee37258a692bf57854326d961a33e63eee00e304ec120a069fd695b6936dd49d2edca07378024756b3eb67e5660483a6d178876310724dea09ec65b58097ec959e33899967520b5b645b6722a1cd80c9925e3bfd74325a80ca0563d4b721906bdea33e51fbfe9ae87a2078c750ce6fd4ce676d2fc5b6c1136fba09d25482215e24e4ecb3e7572eb445cdd227679b1fd08d1a75d2677b2c89579d4a010b743fe2b97b0b39a723af01b06474048cc851a59b189449368c2fd74856dd7a047029b1a2b18c3b50fd6edc4eb6e64d5f10bbed888ab1063a1420457cf371927a04070301b6086595aedad484de1fe8cb5124d744bda07211f8801fcabb884a75da088f19a9192a17e5f8aa4503845f9a9bc6de486cb4b1663890db4f2e56295c07ea0284e32af74193463ef011eb4398c042f21abf02d161ddfb0f1f81f692dbb0006a09c8d57a1bd6d4a630ec3bd89cf6fc066970f404aa9c6de1b9b19cf7df8d223b5a03d4c528b5625fb85bcd065340048c7bf53bd96064e6ea303bc4277e7818b51e980", + "0xf90211a0c891e6e4556eccb01d5b0bb88960888e2161bcb798f14813db92ae9683b02f79a03943b5fc5e6892f7eee076faa358df74f17c44597c0cde0755e6d0a153a5a5eaa0d4cf17ec8f94ba88247d123753b76a73e3ad2edd77d589e451b58714b2aa2714a07202637bce79844fe6dc21941986d05d82927695450107d2adb99aa6bd4507d6a0594149fe8a5d68158c3215083057d9d03c0e225e1a7083b1527cb3c34538a93fa0ef7d12f98e4eb802e3b416f27610a5b4aea9dee734dd4d4093e7a53054165d9ea0cb55d22bd5815bd132043037d03680ac9c203f6534689fad776184979014b950a0a450a69466236b816c1a444c1b8b9f5d634dba88a7275410cbd184d72d8138baa084372ce543f5d1107022a34edd7c5a2fe034cf3ff8804b34c82c4721dc5d8660a0826557443cb731b5eec43171d0d2c1f17c8b123b7885baba57118ee26c9614f8a0d6d605cbe721fe0bacaf72832ca1c3f777a32cd571d182f2419bf990a0f31618a06e38b32d983e9a9626edb5837caa074f97cf1c7527e050f9db74bf90c060fbf1a077a2adaa77f675513e4dadbb6d7b747a3a495bd59ddad419136f725a876b37bea03bb6b50ed9f9606180aad7f84bc02d3d85a80187d17c14b81d77c23f0c770abba02e678f230952c9f0b501058b31d6d21b6540c19f7c727697a43737b4252247f8a095d8bed4bb8d26687f0e5ed893cfac6be4a29a31b735cc64a98a425a17f349ed80", + "0xf90211a0ad77f6aad3bd6ecd390c841e41a5a8e6ab3ec89904057f2c4fd80b63fb9f2322a0351ebb8a278d7c87424d4624b1559ce617d8839eff2294771ae20964848f72b2a06cb0d17f21b4ba847bbd78f36f3a733f760c4bf71ce665eb50c1f8c231195d0fa0d6580fd22fcc12345d3b3c4cdf4bd582851a9136d336a9c10d1ae1a9a11429c1a013601276dd40f189f7a55c0377a1948455267bfd3c355dce595a0289fb5f1f55a0c78b27a0ecdb212607f67c5145a6faf19368fea921979293b5ecd51a34ab4240a0425429a5eabab36b97f110d3368a87f0cf92cfbb37104c22ca5fd75cf5053031a0eea31f207d2de0c03609579b064a2f00773038df8d6e2de7f24993d39eae952fa0f26e2471c18e7ccad909e2c033a208efd8870607f46547bd0979ccd3c1b92c7ba0be48d0487db98817c9f1de04845fd7abeb60e2cd454d1186b8cb61d011796423a0f49944e478a1d91a1bd1f121a8cc9f091c7db53e8532b6384bc4f22dfed90d43a06868669bc6e9d1dee1e17a96c27e26f45572aeef7c74a4a4bcbd04f5e23e470da07d14440638157ad9af529fdd93e65c437af2b0754892013ad9df1a5f75723be1a0b7e6707e5fb281a4162e0f6e0091bdaa0265bdf27cbb3409aeb3d7f0c421841ea0eaf92673693b84967bff6d2d69d4ec5d862c3b568910192197ccfd2a762073eda046a490751b2589e5d60ccc5e277bf322f2ccf99f1fefa884c7ae510ef8b3889b80", + "0xf90211a02cb6deececc2b3338a8fe9243b3e546a82e91864b42f03074146a278c107239ca0e0427ba1bdb22e20f74db4bf824a297bd2ad7a699b4a9ccfb9d8e7a70d5e1ed6a068057651d1dcaea2706d2e8b02f86104a8222d3eb0277544f6d5097b9fb2502ea07a0cffa416b74ecadab11879552cdd55cabed5771d66a6c223fa55237aae095fa0c840d30da4a9a5c7c685e458863adf2b47aba7eada79cd83c62441691fe62e81a0e9bf71c71a008690f4b815c2765bac437ec91142f5059a888d6bcd40faf1dc04a093db7643ae2c9b13d0c854935c05b42fb6cc96291cbf9f18acb09debf9d13844a0b06d7ae0c1b4074ced6e2e7bbd05ca31c71722d7aaa770758662252acdb66a62a067741be068af0b4acb4434525b2b819a2aaa2797702f51d7a3fb8f81c92bf872a017d2806fabd0b0cccd3ef7533034a2bcb473b20168babd01c49544dafd72459ea0a684c97cc3d750c1bddc285ea9248e8a79bd0726b75b21c5145ea7fdf67daaa8a0f7af1c831cf5b0ea991fead8c48a0def2c661ee2deed34b78810ad0686927e92a0e4e4721db4daae7e87aa213043965b3bd5bac9d2cb6a2787a0e1df122f253a35a03653553078c9a810306d5a1e80e4947e10e780f99b4336ac412bbc3811f2adfba0658ee1d1fdcdf3ce62c5c334a46849be47b74d3e7fcfedd20271b0fd7c6c197da0c87e3973214db2ea33dcd731b1d47ed0a8a78b9d5e5c565c5e0865b632384d5980", + "0xf90211a03fc3acacda69889d2d7cbcacb5b946b33bacc614b7a2e1673f7777c642dce44ca09cfeddf9e49e281897150958afb640c9d8e8ca8c765c24544881bd57d4df5888a05679c97ae8bbbfef20972c35658c00a8d40b112a0217ed0e9c28527fd3eb337ea0b428b072dd7148f85b47540a4e4c6a41c52ef3b5fe2f405ffd7b69e446d89b5ba03571695d7d1e357b4e4f53ee2caa88f65b654e12c6fd45ca981e0d69edfcaba5a07ff958776c92667fb2a5241eff51675de3728ea1a5c69b768234b1422e262919a01523717ec18cd2e31b9e840bd6a4a895061fe8ab870509268175b763200538e3a0386c3f728ca6ed705bff3067b63f2bdf78ff53acdeaa6eea485a8e88dda470fea0fcffc76c61f0cabe3f93e8183f966bafba90ff59bcc15e12b02eeb7348d494d7a01ac4de10e2fe2579e199929d32fb7e2d25ca90ceaff08a547ec4c1fe53eeaf0ca065416136ae101de6d54801dcae0565147e919ccff1d334a7ff43c7154cfd41eda008f5624425ae8261af89eec23b50834ab1bfdb7e8a8dda26b8425b0ab0e04680a07aca48a232da708228acdcac7aca90a987c9d57344b97bba494cbfc44e24d75ca01ee96188de535988e3e201f30e09a75bcaffea6326b02a550cd50c9e0cd48a3aa00e3cfef3eec2eb3151bf0371ced2d52092f38c84a4796e70cde01e0aa6b37b55a01fc7ea0f52b73db1db7cffa784106ab81bff5039afaa5bc2eae5aac69d6f676580", + "0xf891808080a0164712bb3a6a9d5bb500af8b68a204caacf6c864a8e7e585f1bc1baafc7e7e2a8080808080a02d9b363734e715c3d6216f8933ff9dbb916444bba80dafb8314749552f92263c80a0051f2940986c24ecbf78732940f4a7a0d11b702be3f2866f22a5bfc52da8b81c808080a09af21b8b1a3dd46aaec6a465e8639c0e95648058c492e8e3d035d33c0218bf8480", + "0xf8669d355d77cec1e3c2c5b4f73793eea7da60c578d311b3e0a0185f68540773b846f8440180a00eb28c05922e0ded35eea098dcaa587a32234848ff8bdcee48978fd03f98cf7ca00370d116c18db61a2f90643faa12e3ae22a0b7d518ce868fe3f85e2f0d299fe5" + ], + "address": "0x4976fb03c32e5b8cfe2b6ccb31c09ba78ebaba41", + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106101585760003560e01c8063691f3431116100c3578063bc1c58d11161007c578063bc1c58d11461040a578063c86902331461043a578063d5fa2b001461046b578063e59d895d14610487578063f1cb7e06146104a3578063f86bc879146104d357610158565b8063691f34311461032657806377372213146103565780638b95dd7114610372578063a8fa56821461038e578063ac9650d8146103be578063ad5780af146103ee57610158565b8063304e6ade11610115578063304e6ade146102425780633b3b57de1461025e5780633e9ce7941461028e5780634cbf6ba4146102aa57806359d1d43c146102da578063623195b01461030a57610158565b806301ffc9a71461015d5780630af179d71461018d57806310f13a8c146101a9578063124a319c146101c55780632203ab56146101f557806329cd62ea14610226575b600080fd5b61017760048036036101729190810190612ecd565b610503565b60405161018491906132ae565b60405180910390f35b6101a760048036036101a29190810190612c85565b610564565b005b6101c360048036036101be9190810190612d35565b610792565b005b6101df60048036036101da9190810190612bfa565b610840565b6040516101ec919061323b565b60405180910390f35b61020f600480360361020a9190810190612dbe565b610c2b565b60405161021d929190613429565b60405180910390f35b610240600480360361023b9190810190612b5c565b610d7a565b005b61025c60048036036102579190810190612c85565b610e0c565b005b61027860048036036102739190810190612a1d565b610e82565b6040516102859190613271565b60405180910390f35b6102a860048036036102a39190810190612ad1565b610eb9565b005b6102c460048036036102bf9190810190612b20565b610fc9565b6040516102d191906132ae565b60405180910390f35b6102f460048036036102ef9190810190612cdd565b611031565b6040516103019190613407565b60405180910390f35b610324600480360361031f9190810190612dfa565b611106565b005b610340600480360361033b9190810190612a1d565b611193565b60405161034d9190613407565b60405180910390f35b610370600480360361036b9190810190612cdd565b611248565b005b61038c60048036036103879190810190612e66565b6112be565b005b6103a860048036036103a39190810190612bab565b611394565b6040516103b5919061334c565b60405180910390f35b6103d860048036036103d391908101906129d8565b611499565b6040516103e5919061328c565b60405180910390f35b61040860048036036104039190810190612a1d565b6115ef565b005b610424600480360361041f9190810190612a1d565b611656565b604051610431919061334c565b60405180910390f35b610454600480360361044f9190810190612a1d565b61170b565b6040516104629291906132e4565b60405180910390f35b61048560048036036104809190810190612a46565b611745565b005b6104a1600480360361049c9190810190612c36565b611771565b005b6104bd60048036036104b89190810190612dbe565b611883565b6040516104ca919061334c565b60405180910390f35b6104ed60048036036104e89190810190612a82565b61194a565b6040516104fa91906132ae565b60405180910390f35b60006359d1d43c60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061055d575061055c82611986565b5b9050919050565b8261056e816119e7565b61057757600080fd5b60008090506000809050606080600061058e6125b2565b6105e660008a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611b7090919063ffffffff16565b90505b6105f281611b9a565b61071f5760008661ffff16141561064e578060400151955061061381611bb0565b93508360405160200161062691906131f6565b60405160208183030381529060405280519060200120915061064781611be7565b9250610711565b606061065982611bb0565b9050816040015161ffff168761ffff1614158061068657506106848186611c1790919063ffffffff16565b155b1561070f576106e88b86898d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8b88602001510360008b5114611c3e565b81604001519650816020015195508094508480519060200120925061070c82611be7565b93505b505b61071a81611f6e565b6105e9565b50600083511115610787576107868984878b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505088898e8e9050036000895114611c3e565b5b505050505050505050565b8461079c816119e7565b6107a557600080fd5b82826009600089815260200190815260200160002087876040516107ca92919061320d565b908152602001604051809103902091906107e59291906125fd565b5084846040516107f692919061320d565b6040518091039020867fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a755087876040516108309291906133e3565b60405180910390a3505050505050565b600080600660008581526020019081526020016000206000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146109055780915050610c25565b600061091085610e82565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561095257600092505050610c25565b600060608273ffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b604051602401610985919061330d565b6040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610a0f91906131f6565b600060405180830381855afa9150503d8060008114610a4a576040519150601f19603f3d011682016040523d82523d6000602084013e610a4f565b606091505b5091509150811580610a62575060208151105b80610aa95750600060f81b81601f81518110610a7a57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b15610abb576000945050505050610c25565b8273ffffffffffffffffffffffffffffffffffffffff1686604051602401610ae3919061330d565b6040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610b6d91906131f6565b600060405180830381855afa9150503d8060008114610ba8576040519150601f19603f3d011682016040523d82523d6000602084013e610bad565b606091505b508092508193505050811580610bc4575060208151105b80610c0b5750600060f81b81601f81518110610bdc57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b15610c1d576000945050505050610c25565b829450505050505b92915050565b60006060600080600086815260200190815260200160002090506000600190505b848111610d5757600085821614158015610c8c57506000826000838152602001908152602001600020805460018160011615610100020316600290049050115b15610d4b5780826000838152602001908152602001600020808054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d395780601f10610d0e57610100808354040283529160200191610d39565b820191906000526020600020905b815481529060010190602001808311610d1c57829003601f168201915b50505050509050935093505050610d73565b600181901b9050610c4c565b5060006040518060200160405280600081525081915092509250505b9250929050565b82610d84816119e7565b610d8d57600080fd5b604051806040016040528084815260200183815250600860008681526020019081526020016000206000820151816000015560208201518160010155905050837f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e468484604051610dfe9291906132e4565b60405180910390a250505050565b82610e16816119e7565b610e1f57600080fd5b8282600260008781526020019081526020016000209190610e4192919061267d565b50837fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d75788484604051610e74929190613328565b60405180910390a250505050565b60006060610e9183603c611883565b9050600081511415610ea7576000915050610eb4565b610eb081612082565b9150505b919050565b80600b600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16847fe1c5610a6e0cbe10764ecd182adcef1ec338dc4e199c99c32ce98f38e12791df84604051610fbc91906132ae565b60405180910390a4505050565b60008060056000858152602001908152602001600020600060036000878152602001908152602001600020548152602001908152602001600020600084815260200190815260200160002060009054906101000a900461ffff1661ffff161415905092915050565b606060096000858152602001908152602001600020838360405161105692919061320d565b90815260200160405180910390208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110f85780601f106110cd576101008083540402835291602001916110f8565b820191906000526020600020905b8154815290600101906020018083116110db57829003601f168201915b505050505090509392505050565b83611110816119e7565b61111957600080fd5b60008460018603161461112b57600080fd5b82826000808881526020019081526020016000206000878152602001908152602001600020919061115d92919061267d565b5083857faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe360405160405180910390a35050505050565b6060600760008381526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561123c5780601f106112115761010080835404028352916020019161123c565b820191906000526020600020905b81548152906001019060200180831161121f57829003601f168201915b50505050509050919050565b82611252816119e7565b61125b57600080fd5b828260076000878152602001908152602001600020919061127d9291906125fd565b50837fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f784846040516112b09291906133e3565b60405180910390a250505050565b826112c8816119e7565b6112d157600080fd5b837f65412581168e88a1e60c6459d7f44ae83ad0832e670826c05a4e2476b57af7528484604051611303929190613429565b60405180910390a2603c83141561135557837f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd261133f84612082565b60405161134c9190613256565b60405180910390a25b81600160008681526020019081526020016000206000858152602001908152602001600020908051906020019061138d9291906126fd565b5050505050565b606060046000858152602001908152602001600020600060036000878152602001908152602001600020548152602001908152602001600020600084815260200190815260200160002060008361ffff1661ffff1681526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561148b5780601f106114605761010080835404028352916020019161148b565b820191906000526020600020905b81548152906001019060200180831161146e57829003601f168201915b505050505090509392505050565b6060828290506040519080825280602002602001820160405280156114d257816020015b60608152602001906001900390816114bd5790505b50905060008090505b838390508110156115e557600060603073ffffffffffffffffffffffffffffffffffffffff1686868581811061150d57fe5b905060200281018035600160200383360303811261152a57600080fd5b8083019250508135905060208201915067ffffffffffffffff81111561154f57600080fd5b60018102360382131561156157600080fd5b60405161156f9291906131dd565b600060405180830381855af49150503d80600081146115aa576040519150601f19603f3d011682016040523d82523d6000602084013e6115af565b606091505b5091509150816115be57600080fd5b808484815181106115cb57fe5b6020026020010181905250505080806001019150506114db565b5080905092915050565b806115f9816119e7565b61160257600080fd5b6003600083815260200190815260200160002060008154809291906001019190505550817fb757169b8492ca2f1c6619d9d76ce22803035c3b1d5f6930dffe7b127c1a198360405160405180910390a25050565b6060600260008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116ff5780601f106116d4576101008083540402835291602001916116ff565b820191906000526020600020905b8154815290600101906020018083116116e257829003601f168201915b50505050509050919050565b6000806008600084815260200190815260200160002060000154600860008581526020019081526020016000206001015491509150915091565b8161174f816119e7565b61175857600080fd5b61176c83603c611767856120a5565b6112be565b505050565b8261177b816119e7565b61178457600080fd5b81600660008681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916847f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa84604051611875919061323b565b60405180910390a350505050565b60606001600084815260200190815260200160002060008381526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561193d5780601f106119125761010080835404028352916020019161193d565b820191906000526020600020905b81548152906001019060200180831161192057829003601f168201915b5050505050905092915050565b600b602052826000526040600020602052816000526040600020602052806000526040600020600092509250509054906101000a900460ff1681565b600063c869023360e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806119e057506119df826120f0565b5b9050919050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3846040518263ffffffff1660e01b8152600401611a4591906132c9565b60206040518083038186803b158015611a5d57600080fd5b505afa158015611a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a9591908101906129af565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480611b685750600b600084815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b915050919050565b611b786125b2565b828160000181905250818160c0018181525050611b9481611f6e565b92915050565b6000816000015151826020015110159050919050565b6060611be08260200151611bcc84600001518560200151612151565b84600001516121ac9092919063ffffffff16565b9050919050565b6060611c108260a001518360a001518460c001510384600001516121ac9092919063ffffffff16565b9050919050565b600081518351148015611c365750611c35836000846000875161221f565b5b905092915050565b6000600360008981526020019081526020016000205490506000878051906020012090506060611c798686896121ac9092919063ffffffff16565b90508315611dee576000600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff16815260200190815260200160002080546001816001161561010002031660029004905014611d5557600560008b815260200190815260200160002060008481526020019081526020016000206000838152602001908152602001600020600081819054906101000a900461ffff16809291906001900391906101000a81548161ffff021916908361ffff160217905550505b600460008b81526020019081526020016000206000848152602001908152602001600020600083815260200190815260200160002060008961ffff1661ffff1681526020019081526020016000206000611daf919061277d565b897f03528ed0c2a3ebc993b12ce3c16bb382f9c7d88ef7d8a1bf290eaf35955a12078a8a604051611de192919061336e565b60405180910390a2611f62565b6000600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff1681526020019081526020016000208054600181600116156101000203166002900490501415611ec257600560008b815260200190815260200160002060008481526020019081526020016000206000838152602001908152602001600020600081819054906101000a900461ffff168092919060010191906101000a81548161ffff021916908361ffff160217905550505b80600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff1681526020019081526020016000209080519060200190611f249291906126fd565b50897f52a608b3303a48862d07a73d82fa221318c0027fbbcfb1b2329bface3f19ff2b8a8a84604051611f599392919061339e565b60405180910390a25b50505050505050505050565b8060c00151816020018181525050806000015151816020015110611f915761207f565b6000611fa582600001518360200151612151565b8260200151019050611fc481836000015161224390919063ffffffff16565b826040019061ffff16908161ffff1681525050600281019050611ff481836000015161224390919063ffffffff16565b826060019061ffff16908161ffff168152505060028101905061202481836000015161226990919063ffffffff16565b826080019063ffffffff16908163ffffffff1681525050600481019050600061205a82846000015161224390919063ffffffff16565b61ffff169050600282019150818360a00181815250508082018360c001818152505050505b50565b6000601482511461209257600080fd5b600c6101000a6020830151049050919050565b606060146040519080825280601f01601f1916602001820160405280156120db5781602001600182028038833980820191505090505b509050600c6101000a82026020820152919050565b600063691f343160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061214a575061214982612291565b5b9050919050565b6000808290505b6001156121a0578351811061216957fe5b600061217e82866122fe90919063ffffffff16565b60ff1690506001810182019150600081141561219a57506121a0565b50612158565b82810391505092915050565b6060835182840111156121be57600080fd5b6060826040519080825280601f01601f1916602001820160405280156121f35781602001600182028038833980820191505090505b5090506000806020830191508560208801019050612212828287612322565b8293505050509392505050565b600061222c84848461236b565b61223787878561236b565b14905095945050505050565b6000825160028301111561225657600080fd5b61ffff8260028501015116905092915050565b6000825160048301111561227c57600080fd5b63ffffffff8260048501015116905092915050565b600060405161229f90613226565b60405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122f757506122f68261238e565b5b9050919050565b600082828151811061230c57fe5b602001015160f81c60f81b60f81c905092915050565b5b602081106123465781518352602083019250602082019150602081039050612323565b60006001826020036101000a0390508019835116818551168181178652505050505050565b60008351828401111561237d57600080fd5b818360208601012090509392505050565b600063a8fa568260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806123e857506123e7826123ef565b5b9050919050565b600063bc1c58d160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612449575061244882612450565b5b9050919050565b6000633b3b57de60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124e9575063f1cb7e0660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806124f957506124f882612500565b5b9050919050565b6000632203ab5660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061255a575061255982612561565b5b9050919050565b60006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061263e57803560ff191683800117855561266c565b8280016001018555821561266c579182015b8281111561266b578235825591602001919060010190612650565b5b50905061267991906127c5565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106126be57803560ff19168380011785556126ec565b828001600101855582156126ec579182015b828111156126eb5782358255916020019190600101906126d0565b5b5090506126f991906127c5565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061273e57805160ff191683800117855561276c565b8280016001018555821561276c579182015b8281111561276b578251825591602001919060010190612750565b5b50905061277991906127c5565b5090565b50805460018160011615610100020316600290046000825580601f106127a357506127c2565b601f0160209004906000526020600020908101906127c191906127c5565b5b50565b6127e791905b808211156127e35760008160009055506001016127cb565b5090565b90565b6000813590506127f98161367c565b92915050565b60008151905061280e8161367c565b92915050565b60008083601f84011261282657600080fd5b8235905067ffffffffffffffff81111561283f57600080fd5b60208301915083602082028301111561285757600080fd5b9250929050565b60008135905061286d81613693565b92915050565b600081359050612882816136aa565b92915050565b600081359050612897816136c1565b92915050565b60008083601f8401126128af57600080fd5b8235905067ffffffffffffffff8111156128c857600080fd5b6020830191508360018202830111156128e057600080fd5b9250929050565b600082601f8301126128f857600080fd5b813561290b61290682613486565b613459565b9150808252602083016020830185838301111561292757600080fd5b612932838284613629565b50505092915050565b60008083601f84011261294d57600080fd5b8235905067ffffffffffffffff81111561296657600080fd5b60208301915083600182028301111561297e57600080fd5b9250929050565b600081359050612994816136d8565b92915050565b6000813590506129a9816136ef565b92915050565b6000602082840312156129c157600080fd5b60006129cf848285016127ff565b91505092915050565b600080602083850312156129eb57600080fd5b600083013567ffffffffffffffff811115612a0557600080fd5b612a1185828601612814565b92509250509250929050565b600060208284031215612a2f57600080fd5b6000612a3d84828501612873565b91505092915050565b60008060408385031215612a5957600080fd5b6000612a6785828601612873565b9250506020612a78858286016127ea565b9150509250929050565b600080600060608486031215612a9757600080fd5b6000612aa586828701612873565b9350506020612ab6868287016127ea565b9250506040612ac7868287016127ea565b9150509250925092565b600080600060608486031215612ae657600080fd5b6000612af486828701612873565b9350506020612b05868287016127ea565b9250506040612b168682870161285e565b9150509250925092565b60008060408385031215612b3357600080fd5b6000612b4185828601612873565b9250506020612b5285828601612873565b9150509250929050565b600080600060608486031215612b7157600080fd5b6000612b7f86828701612873565b9350506020612b9086828701612873565b9250506040612ba186828701612873565b9150509250925092565b600080600060608486031215612bc057600080fd5b6000612bce86828701612873565b9350506020612bdf86828701612873565b9250506040612bf086828701612985565b9150509250925092565b60008060408385031215612c0d57600080fd5b6000612c1b85828601612873565b9250506020612c2c85828601612888565b9150509250929050565b600080600060608486031215612c4b57600080fd5b6000612c5986828701612873565b9350506020612c6a86828701612888565b9250506040612c7b868287016127ea565b9150509250925092565b600080600060408486031215612c9a57600080fd5b6000612ca886828701612873565b935050602084013567ffffffffffffffff811115612cc557600080fd5b612cd18682870161289d565b92509250509250925092565b600080600060408486031215612cf257600080fd5b6000612d0086828701612873565b935050602084013567ffffffffffffffff811115612d1d57600080fd5b612d298682870161293b565b92509250509250925092565b600080600080600060608688031215612d4d57600080fd5b6000612d5b88828901612873565b955050602086013567ffffffffffffffff811115612d7857600080fd5b612d848882890161293b565b9450945050604086013567ffffffffffffffff811115612da357600080fd5b612daf8882890161293b565b92509250509295509295909350565b60008060408385031215612dd157600080fd5b6000612ddf85828601612873565b9250506020612df08582860161299a565b9150509250929050565b60008060008060608587031215612e1057600080fd5b6000612e1e87828801612873565b9450506020612e2f8782880161299a565b935050604085013567ffffffffffffffff811115612e4c57600080fd5b612e588782880161289d565b925092505092959194509250565b600080600060608486031215612e7b57600080fd5b6000612e8986828701612873565b9350506020612e9a8682870161299a565b925050604084013567ffffffffffffffff811115612eb757600080fd5b612ec3868287016128e7565b9150509250925092565b600060208284031215612edf57600080fd5b6000612eed84828501612888565b91505092915050565b6000612f028383613095565b905092915050565b612f13816135f3565b82525050565b612f2281613567565b82525050565b612f3181613555565b82525050565b6000612f42826134c2565b612f4c81856134fb565b935083602082028501612f5e856134b2565b8060005b85811015612f9a5784840389528151612f7b8582612ef6565b9450612f86836134ee565b925060208a01995050600181019050612f62565b50829750879550505050505092915050565b612fb581613579565b82525050565b612fc481613585565b82525050565b612fd38161358f565b82525050565b6000612fe5838561351d565b9350612ff2838584613629565b612ffb8361366b565b840190509392505050565b6000613012838561352e565b935061301f838584613629565b82840190509392505050565b6000613036826134d8565b613040818561351d565b9350613050818560208601613638565b6130598161366b565b840191505092915050565b600061306f826134d8565b613079818561352e565b9350613089818560208601613638565b80840191505092915050565b60006130a0826134cd565b6130aa818561350c565b93506130ba818560208601613638565b6130c38161366b565b840191505092915050565b60006130da8385613539565b93506130e7838584613629565b6130f08361366b565b840190509392505050565b6000613107838561354a565b9350613114838584613629565b82840190509392505050565b600061312b826134e3565b6131358185613539565b9350613145818560208601613638565b61314e8161366b565b840191505092915050565b600061316660248361354a565b91507f696e74657266616365496d706c656d656e74657228627974657333322c62797460008301527f65733429000000000000000000000000000000000000000000000000000000006020830152602482019050919050565b6131c8816135bb565b82525050565b6131d7816135e9565b82525050565b60006131ea828486613006565b91508190509392505050565b60006132028284613064565b915081905092915050565b600061321a8284866130fb565b91508190509392505050565b600061323182613159565b9150819050919050565b60006020820190506132506000830184612f28565b92915050565b600060208201905061326b6000830184612f0a565b92915050565b60006020820190506132866000830184612f19565b92915050565b600060208201905081810360008301526132a68184612f37565b905092915050565b60006020820190506132c36000830184612fac565b92915050565b60006020820190506132de6000830184612fbb565b92915050565b60006040820190506132f96000830185612fbb565b6133066020830184612fbb565b9392505050565b60006020820190506133226000830184612fca565b92915050565b60006020820190508181036000830152613343818486612fd9565b90509392505050565b60006020820190508181036000830152613366818461302b565b905092915050565b60006040820190508181036000830152613388818561302b565b905061339760208301846131bf565b9392505050565b600060608201905081810360008301526133b8818661302b565b90506133c760208301856131bf565b81810360408301526133d9818461302b565b9050949350505050565b600060208201905081810360008301526133fe8184866130ce565b90509392505050565b600060208201905081810360008301526134218184613120565b905092915050565b600060408201905061343e60008301856131ce565b8181036020830152613450818461302b565b90509392505050565b6000604051905081810181811067ffffffffffffffff8211171561347c57600080fd5b8060405250919050565b600067ffffffffffffffff82111561349d57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613560826135c9565b9050919050565b6000613572826135c9565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006135fe82613605565b9050919050565b600061361082613617565b9050919050565b6000613622826135c9565b9050919050565b82818337600083830152505050565b60005b8381101561365657808201518184015260208101905061363b565b83811115613665576000848401525b50505050565b6000601f19601f8301169050919050565b61368581613555565b811461369057600080fd5b50565b61369c81613579565b81146136a757600080fd5b50565b6136b381613585565b81146136be57600080fd5b50565b6136ca8161358f565b81146136d557600080fd5b50565b6136e1816135bb565b81146136ec57600080fd5b50565b6136f8816135e9565b811461370357600080fd5b5056fea365627a7a7231582087f3e3c017932ceb01fcdc5a3900c19b41d676b9e0813504bedb22dfb4995a2e6c6578706572696d656e74616cf564736f6c63430005100040", + "codeHash": "0x0370d116c18db61a2f90643faa12e3ae22a0b7d518ce868fe3f85e2f0d299fe5", + "nonce": "0x1", + "storageHash": "0x0eb28c05922e0ded35eea098dcaa587a32234848ff8bdcee48978fd03f98cf7c", + "storageProof": [ + { + "key": "0x36b9541c14fe028ab69cae73548d0fbe16a1d5ed53e7cb1810239c241bea130e", + "proof": [ + "0xf90211a0a2e14afb79bca65ed6406bb917d699022f1ea4bcc29a31e1756bb053b1fd5bc2a04a3b6ff424940e0e643522d50e71e290dd7893477cb2e0f57127933062454275a00b0211e7c7e7681102a614a08e85b8805e7d90ff8e2ab9f2211dba13a2b1a09ba0d40f0252a4ab33231ce9f17f28a8baa64ff2bd81e231764d5106b1c930b1d62aa0a7035137a30412cae6924eab4d130cd262785a6073dc0b03215156545c28689da0cbfaf8c37c2869cd3ac9ab29b1bc80e782ed1f6af81938fb23f33e7ad97098c4a0a7685b3f8d3cf2e015cdefe24ae5946b05869196cd5c478b87eaa6030875f453a0ebeba0b8d65f91f360465af6a316d328d3b5399ed10ff9517ee59b757559d03ca0b3b03fc046644deddd148da6083922a41c3e5830869452dc984fe9d70828289fa029cd7a92cc17ab2fcee9e1d57bd423293767ec2df6100111488addf4414c2019a05b58098c2c2d774525a24121d60e6a97b7d385c4ac2881bfaa7561d903b395baa06f13e273a50265e90ec15a3d27b6638e1566f2176b11d782016a859ed3a23f5ca0f61ca788d34e8d70e55a8f2cddf7c90ca307da3b8c681d491791ae32162c4cdfa03aeb0e69ea5321e20a065f62614106865554f74e9108ef17c0f1b4ece4cd5c2aa0c8d0a3b25afc874e8c924eeeea1d06654e61eff850e1fe4c8b405d705d7af697a0fa4176fa894fb78bfed36b55bef056c70b5276dbb7937cd3f439b1ad9dda585380", + "0xf90211a0c1f65276de990039d4b98c1e6e7c6c9afdcaf803927af41a4f4b6808f6a73261a0d3e574d8841dbefd30de4035e67e751272f3b48b86abf149e4eed7fdaa013181a0f089e9766447dc329129494697b715680d304a34bb917699225ff05649656592a0cf695bd426cb5730caf0927321e6273555c6d93ab0dab3e7c354a3170e86c1e3a0b76d3aeb6583a51f4e80dc4ff672dbb819a988a94216fc1e895d37eb60b65f8ea0e922b8cbbdb6c912b6c25928cd24cc9388b83c139e79b39f182063a7c1da3e86a04cb234ac06c925778073fc6354a2dd96af79217604678408f27bbb46689eb4e4a0734f02d11dd7041660c609435cff2dd0428f33002f8f02c6cdca3be1edb77c8aa012e6cb5bed10d8c2f1b2d95a7017092118114d632d09bdcdf809d80b45be418aa084493e0ea4aba7f0e64b85e53bb6c4898c917dab2fc5675e70b19dc78ac13e00a028cb95a3ed271bd2158291594f272548001a460efe208a0af03eaac0460add8aa0b9e93b962fbfff3fbaef523183d674e079b812d3528563850aec3a4ae0677d04a06d614091c2b991bfc255e911090b310abf25660c4004a6ce2abad257cf4e79bda0afb23da5ea1128b16b3a1f9b3f858a27827b044f2431ca5928136e94bbe44fd3a0b572475f10132f99ebe2508b6aae77dfab8a2e6626e1ec3f2383b16c005807eca084fd54945b86fc23a839870f8e5f3018f10cfb8039743b70af9125c45a3e5a9c80", + "0xf9011180a0118808680cf1b44ff0ebad072f84a7b68b3bc66f2b969790eda763999d56eadaa089f3a4454ef8ef740dc26e0551cee70062e09c360c94f6290563577c07920afa80808080a0a18dab46e7015056618a47aace4bec12277d08a6143157b031fc6a3d8c9e407180a09d90509fb5fa5290362d2a9acc72e8fa00758d6ac2834a7de14d0f608a39334480a06f86ec0e72f704a2272b2166c6f67db27deeca6dc69abb3274f4910d98d7b3caa0ed940cdc90476720f161dd0ec455da484c776c9b4a051ae5cb8119301ddb6d2e80a02a0955347064b100caa21c30c2ef082c54ea694241200b977dcba2ee212d9edda0217e13e60888f1d426fd891f2e91c065740d7f785faa3af1b60fc7b18a9f9f1180", + "0xf87180a025389bb26102bc190f6247235d7b73aa71d5bfb087df3d9e317e2b43f814968b8080808080808080808080a0a4ba6db2f538634766139e4864766efa6049d9ebb5b0408d28330d3e5de8768da0fafe838773e021c09b3523dbcd78a74e54992b29f4f47d6900bd071a3469b9a78080", + "0xf8429f2076eb6a6a7e7093b6570168c82cab56bc775616067bb4136bb8c1b33dd56ba1a06c095a05764a23156efd9d603eada144a9b1af33000000000000000000000028" + ], + "value": "0x6c095a05764a23156efd9d603eada144a9b1af33000000000000000000000028" + } + ] + } + } + }, + "version": "2.1.0" + } + } + ] + }, + { + "descr": "in3_ens hash", + "chainId": "0x1", + "intern": true, + "request": { + "method": "in3_ens", + "params": [ + "incubed.eth", + "hash" + ] + }, + "response": [ + { + "id": 1, + "result": "0xd4056eb2295c72bd4b268b9c1d27399fe7f0b2c7c3ca58a33114f68deb60a8d0", + "jsonrpc": "2.0" + } + ] + }, + { + "descr": "in3_ens owner", + "chainId": "0x1", + "intern": true, + "request": { + "method": "in3_ens", + "params": [ + "incubed.eth", + "owner", + "0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e" + ] + }, + "response": [ + { + "id": 1, + "result": "0x6ebff3325023c7834b84f3d01cb54f4992eb4bd6", + "jsonrpc": "2.0" + }, + { + "jsonrpc": "2.0", + "id": 1, + "result": "0x0000000000000000000000006ebff3325023c7834b84f3d01cb54f4992eb4bd6", + "in3": { + "proof": { + "type": "callProof", + "block": "0xf90215a0e68bdc71449811c489b9e876e9e08fd6c42ebe00fa9afb07994810a0fdfe1666a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794ea674fdde714fd979de3edf0f56aa9716b898ec8a0971ab5a32e037fd154f6146422374ccf1c310b00dcc8be7adab4d7a375340bf8a00226234ab48106aaeaa3eb03ee82807b5517010360499989e3c12f3bdba03af6a0c90b1c0a8e9fcdf111ba9b9c518510deb06c88644059db580d60b8e2bd040e9eb90100c6d5c3d406433a019c583710033135a600e34d5b84bc22290500a5e003ea2f788647101570d309ae8581b54702a22599c6890054d9518e0d2b90f5af74e7ba524b00296bc4839110ee66986ca291e08136e2282e4fa301ceb3c3c91d164e935c58ea2dad9349c4260b084f113ecd782af648a32648cd986b77a126131120143c4924e0a37969b82392090063e0abcc110a456d3949b212534dc83046a01c16a247732d0088d9f61adae245c7f01091fdb908258ab1eb8162040c408042e20d0544db185b0d72263e3c32d0848829cd0408095a47c14c3852497b147c34b96008e4d0b83a36a8d568a02804910418a0c6d9834031c288a6780814b8361a8457588707d50f9faefdf783910d2d83988acd83983b63845e4ba47c94505059452d65746865726d696e652d6575312d31a0baaa1e9c6ac36e37fb2fe965ca71667068205986f6f5d06115f0561e59be966f8886adf5d00330b0b0", + "signatures": [], + "accounts": { + "0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e": { + "accountProof": [ + "0xf90211a00294399526aed1576d0a452402d03b02e980edd16a0b85723f9b7c7d1716628da0baa6f35d7b412987b30f97b302b6d3b58522eb95b7b731d0ba441179a2e5c81ea03235f30ccdad70dc12ca5c638b8d70559a792b927d8ef0e2061ef0628daf2fbea0f9e394870964b7c7a15a79708b2f213870637938274383f50e21d2444e9af168a0bc133b89760e5ce0e285cee2c57f819ea74915898af67a3e4b2dd5c73c7ecafaa0236b5d8e8947f63fd8072fb6209a86329ba8542b1309d7588731c30597795464a0518ea01b3dd9307e53b1932cad39784c1dcf221cc0bf7c1f86a9c7ec22546f67a0bf93f300f38e75aea6a51ea780a11048c58f86821fc1556e1a9071a97dde9a9da016aa9119fb9dc81297d28ec851d03763e6b7a2b5ebd0b33714058de98327287da0e678249ead20c90d1fa803cd3d65c4d4a86b41a56ecc14fc0fa382d8488cb90aa0ed4e4c7a5d3bfaa238633fabc26cb4904d99560be845653a052ad2f868f86f9ea07b332ceffe2202f2c298bb57e4caf864e29404049dd05fdfb5d9c7ca5e9d68e5a0e05ccea773d413dfd8a27799bb4292d7944afa06aac528c18dc99172254e3a57a0010f2d41947aecec38373dc1f9577c330b30beca32bbb183fc47bb89f2d2f928a05b7c05d29d8010d45b3e7b9276cbb1a49ad34bafed7389c378ba345d5f3b33bca0d84c860f2f872cf13fcaea7920a31c76a70b954b22a3479b8c0bb03e71f3fb9580", + "0xf90211a06cca5879265f3cc116f4a7396f1e1b58d6b374ab94850e10625ed7aab0a50e96a051f0ef6314116ff701729a3135968aa8ac0da36af27ca4f83439ef3f92bc7b07a00e923d48621ea58f539ea8da8bbac0b8c0f85cd13158bbb097389d4be0605165a0e5990e4244612b24599b34eb1ceb4e629776a78ece2a5ff4b7fd70ed99d02d59a06c3df50e008b393411d6d2ec2e2c8f349ba96fdfe53f21bab453cde70798b7eca0866684874c316a247b80d75b6098622c69f3bfb94c945d441f55afafbc30cbbfa06ae4284ee0a0b4d6734822e0e2d5bfa08abf9fe559dfaa08f010feda11390cdca049a21cf72f782025a35b273ed83d5b945a06aad450caf56139debc7fc9ffd157a004611958a87211364dd5143cf5c5a4682aa41a5f2b2fa27a27eb2424c4d52af4a058fbf17e50a1ac4a02ef2def2f4c311ccfb1420114086a582a9de2cce0b17f96a035d90a2dd3b697aeb4005dd8ca8b6cd4447b49bd6a3b6e7187f10676cdb55ac0a0fba466ff349437749f23cac23e6f1593dc14ef0edf8b146032806f28b81f993ba0cb32f73fcc9e8bc11b80becfe3f1156582cab675e1696732360120a8241494b7a07b423f3b907783d71eef588f1c06ea74f8c3f7203344b4e48b5062c7dab99ac3a07705f8eceb594c04b0d055eec3d18b0009cefc0cdca84bb0ec7ab07ac0a414c5a069e5ac343c9d46e071b341ed373c0cf3a73f0677d8004d76df27ed0d565cac2780", + "0xf90211a05a78e857342f4bec1d5d886a7c9a4894850190a1ff9ed0ecc54d12bf8152c447a0d33a6f8c5e8eaaa8748ed3d58cf287c8700c27d83caca1819522884c8f5929e1a06b3737b8da04ebcb8a70898e211c358f90570a0777bda2db6e56d64ecaaf6046a033dcdfc28e2e1f044f6d4c514b44e20b0b29ca397a054d413749acffd78b9b8ea03041eae893596e40c347c068469ce9ee61844ebbdd319e19937fd7fd22498614a0c92933665fb7778ac410b0573e51e873bd60e07d8a7483c51987325abf78c949a0081cb8250a87344e9d6f4a1417f279e919c4bd4d39773cb65920890740ecd510a06c77c05f255e19065905a9eef1dd4c2080ba68271a95495e60dc959ab1479324a084c9043cd326dce364de120adc75ca0691cc6b35c6f575a7f3c8bc2184d3b308a086fb01247a33f4a7a5ec91c4338967c9c0ac4236326d965c5449809ed3dfdd3fa072f97c7188b640ebc1978a440efc778bbb5e7488149c2f6505778f3e2bcc4dd6a078f0fbccf2f578c142f51814bffba10651332b0502d3e031eb40bbefff08a64ca03e983dab47cdb13ca96a610fa8e3d8696d24229a2d1baa8d0b8f1b9770a878d7a077a91670848da27bad92939e50afd2adfc0f6c586fce9437dc39b807ba31db56a06133fd16e312094206fb8302b4b143dec152fc86c7cf85de347d18e4275034e9a0d329b0cd14a217df66e8ab0e9af8fc25d251ff763680c592d9531690ab610e8780", + "0xf90211a092c9bc4f36cbb80cf2debc0b65d74656dbf2ba7ea647932ea4de96695688e218a0629543828aeb06157af3eda0ac2bd93dee1e21e56bbf0a7163821c5a5c1143f9a0bef5186c13b01d236ea0d567de23638e58722babdb7f5880baa4929c53940706a0d8d6c0b2092402d1ecbe614ea5fe5d5f08c5548848b51a57e8cba1530842b124a0a3f1b4708ca10ae9a3f97c81a266ebd72ec9d32079a88473463a42cfd1676af3a09c0ede02686a520b6127cf64a7b29a26d9a0dcd1ddfb574e37acf7aa27b16771a002a1957ca02ea9836e0d7d050b756ea2a666291d5479acc417c9cf27a45a6770a0f6927a9b7e1735b08a27dc8bdd0182180be8f68d94e9adc2d849ba29180fe345a0d20a5773713a554880eb602d015ae8d63e76881fe916d11a86c18efe145ab762a0e2b4725607391be1e3a0f9411f36178faaac292ddae9f0570fa4dc8f700931b3a06e376f034772d2967cf94903840102806da28ea7a363e4e13a8e6ff59f3e09d8a061bce5e58bfcdb7848ef3e05bcd5ee3a69e2e880f757c5e6b72ef823edec4e07a043220089f4bc71aafc3985ad0f5682433f11e467d1364995413acb1238f2be22a0833ab81c59e918d2207080251e105d923d5bcc25b6a6f2fc65f1a896978de97ca09cc94d554f7362631033914cdf7d38f1512a367e324d6f8f83e23d05515d9ecfa050392ec8b97491eb04674cce05f93b97353e9620191252b292c30702b83136b880", + "0xf90211a0ca420c7a4688b1a788a299564f8e53e63db0ff06baf1d5d6ac9bd60b7ae6ef03a0d9a47bd09a9af0485b5e16f1fdead1b38bd0033e47b68c50b9145d04b2e3ca45a015cc37a9efac0a28a5a472f9ec34f62c450cfb00809bcd0f661835b98b77c908a053a58eb75b0306bb62ba8844e932d41022bf5eb78b21a9da5abcddcb116c100ea071c97fa0da567c46472c018659acca753d5fc9f18e7c88ea225158aa0718372ea05b38d432699a0904da576a390d7471a27fd46aed8a21dc997a9420cdbe26bad1a08c37240060236766e7b48a8667280be0b5ec8bb9617676196d92e1adb8df5feaa0252cbab96c0507c3ec61b012725209a4f5ef84fcc4eed13affd9fa3fe47b27b9a0a6ab63ac39f8349fbf12a5fed07dc851b578c9b0c4ebd2bc596f85a93e09467ea0dba377dbe3b9e3b94536913afccdde26a005468ef064f49f1f4fbc24e88aa231a0887915f22f76a4836cf516cb64e2171b8c58a96dd53304f7d89bc4d25d0008e3a09d74708389b99bbdda1bd375a98013b59a0f79e0993d038fc3e0e25a3f57fe13a0ec1ba1a95e90d8efa1443235c6f794c67cc600116c43d9dfd9d5bc51f1c7c93ba09983b656efc003add047e25e09a09fa19494c25eba79945800cb18a0c3cf2696a06285d320e139e26e5e64ed986267369944208587e9448e163c524d3032103178a0d56d7fb2b19d679d7dff850086c1bf156df283e07650cb5ac0707e9a1cb4ebaf80", + "0xf90211a0df6443ec0fcca615a0f4ba5b48baca3fdf5a5ca18db86714c78c8f99f60a6734a081bea4c6bd2e2026b5c6fdfa418b75662c7122d675f9a5b6415aaec3e2eb2a8ca059751f6a056e7a2314ff12a0b4408b35984e4cb64ff6da4543c19b5a6ba98f36a056f06073d19e0c690ea88bd87f9afadbebd91270024a2e5cf40c5859287920d0a0ecd1b8c32c78b513ce804e44f51e175640d3a55804ac4b261e6ba4aa8079e640a0adf96f10cbd0242f4af39f240a5b52abf08311ce3014898e5359be8673fd0edea0e007ef6555b7f835f08cddbe8177c2b53266f3fe2e8685e4c3a1e5d43901b217a055f9a7109a241a65727ab5a4a1668a0bdc5278626de5d084dcd6dfb553e71b41a0888f2f97a389cb37cea2833c9c82b35fdcdf03cc0c2bf0c72a4e764d5ddea32ca04a85a0e52bc9da1ecd09e70cbb7baa759de8c7fc341f0b2ed68c1be5bc2821b1a09da47448f16af02d92ab775f1133124f16c0b7d047514a4ff75814e511d95a16a0a196adab721d52fb7c5b938e87692d1feed67ff9be6fd050f7a780a5ff08d96da09deeb4d161ba8dc2ff9d7098bd76ecfd548c52df13a1dafe39f7666c5e277cf1a077b1c65e5a290d7e4deaeebd0932f42f25e6aa71a67b5c659a3beefb901d02fea0db06b78412fe9e128d7d44ae7a22a48d14a0c952dbe3651d6805fb8f93ada74da0f2ea87d62a695bc3c4936b9f503f9684334c044246acd1459105c3cf7d3b6bc080", + "0xf8718080808080808080a04a88e4063326e9f1c0149653f8da9056a293687e939d79212d94e4bc2b87260d80a0a1d414f4a142d67ce3b24a51bad7b0a5d80390f53ccd144379133f13de6997bc80a0add01db5f5cd6c80262ef3866596f92bfab51b6b93536e2bb0bab523b6aaa25d80808080", + "0xf8669d3a53e8a0e441d4dc5101efa6a123b85a3a2a219f1a5fd625a5d6614490b846f8440180a003c798fefcca109a495dffc993b6aa2cd4bf6ecb28545945354a91ccb0558676a0d6bfd5d6f1384a1f6ea57b8a8412de5552f138d42021cf7c4941e33206f529e4" + ], + "address": "0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e", + "balance": "0x0", + "codeHash": "0xd6bfd5d6f1384a1f6ea57b8a8412de5552f138d42021cf7c4941e33206f529e4", + "code": "0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c80635b0fc9c31161008c578063b83f866311610066578063b83f86631461042c578063cf40882314610476578063e985e9c5146104f8578063f79fe53814610574576100cf565b80635b0fc9c3146103025780635ef2c7f014610350578063a22cb465146103dc576100cf565b80630178b8bf146100d457806302571be31461014257806306ab5923146101b057806314ab90381461021c57806316a25cbd1461025e5780631896f70a146102b4575b600080fd5b610100600480360360208110156100ea57600080fd5b81019080803590602001909291905050506105ba565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61016e6004803603602081101561015857600080fd5b810190808035906020019092919050505061068f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610206600480360360608110156101c657600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610764565b6040518082815260200191505060405180910390f35b61025c6004803603604081101561023257600080fd5b8101908080359060200190929190803567ffffffffffffffff169060200190929190505050610919565b005b61028a6004803603602081101561027457600080fd5b8101908080359060200190929190505050610aab565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b610300600480360360408110156102ca57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b80565b005b61034e6004803603604081101561031857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d42565b005b6103da600480360360a081101561036657600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803567ffffffffffffffff169060200190929190505050610eba565b005b61042a600480360360408110156103f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050610edc565b005b610434610fdd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104f66004803603608081101561048c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803567ffffffffffffffff169060200190929190505050611003565b005b61055a6004803603604081101561050e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061101e565b604051808215151515815260200191505060405180910390f35b6105a06004803603602081101561058a57600080fd5b81019080803590602001909291905050506110b2565b604051808215151515815260200191505060405180910390f35b60006105c5826110b2565b61067e57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630178b8bf836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561063c57600080fd5b505afa158015610650573d6000803e3d6000fd5b505050506040513d602081101561066657600080fd5b8101908080519060200190929190505050905061068a565b61068782611120565b90505b919050565b600061069a826110b2565b61075357600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561071157600080fd5b505afa158015610725573d6000803e3d6000fd5b505050506040513d602081101561073b57600080fd5b8101908080519060200190929190505050905061075f565b61075c8261115f565b90505b919050565b600083600080600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806108615750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61086a57600080fd5b6000868660405160200180838152602001828152602001925050506040516020818303038152906040528051906020012090506108a781866111e2565b85877fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e8287604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a38093505050509392505050565b81600080600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610a145750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610a1d57600080fd5b837f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa6884604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390a28260008086815260200190815260200160002060010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050505050565b6000610ab6826110b2565b610b6f57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316a25cbd836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b2d57600080fd5b505afa158015610b41573d6000803e3d6000fd5b505050506040513d6020811015610b5757600080fd5b81019080805190602001909291905050509050610b7b565b610b788261122f565b90505b919050565b81600080600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610c7b5750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610c8457600080fd5b837f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a084604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a28260008086815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b81600080600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610e3d5750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610e4657600080fd5b610e5084846111e2565b837fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d26684604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a250505050565b6000610ec7868686610764565b9050610ed4818484611262565b505050505050565b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61100d8484610d42565b611018848383611262565b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff1660008084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600080600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060008084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111d85760009150506111dd565b809150505b919050565b6000819050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611220573090505b61122a8382611455565b505050565b600080600083815260200190815260200160002060010160149054906101000a900467ffffffffffffffff169050919050565b60008084815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611383578160008085815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550827f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a083604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a25b60008084815260200190815260200160002060010160149054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff1614611450578060008085815260200190815260200160002060010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550827f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa6882604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390a25b505050565b8060008084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505056fea265627a7a72315820e307c1741e952c90d504ae303fa3fa1e5f6265200c65304d90abaa909d2dee4b64736f6c63430005100032", + "nonce": "0x1", + "storageHash": "0x03c798fefcca109a495dffc993b6aa2cd4bf6ecb28545945354a91ccb0558676", + "storageProof": [ + { + "key": "0x3762ee9295b1a64160deefa90f70087ea87fba8b61026707707658b0ae37397a", + "proof": [ + "0xf90211a0c3bf8f0624151de77e035fc7ed14dac4b546847788815bc33463930b5057d05ca0e4a5f232c7833186f87ae3a34d6b665a5e1551476b7d57866715b49b23afc965a0ecbca17d14eeb5921b8b0e40ae746434c094786f84862440e6ca225eaf3d69f2a019c22bc6583096fedb5ed36bf4ffa88de36c4af820cd613273a3338e45ac78dda0e46f032ed16aa66fd9191db61d9e368a1b52091143939d772947faa518b40f34a0f8e624ec965a4942f79364101a09ed4f98add5915b00e3068368da0a7e044f38a032e49a9bc01225912a9a58cc9eadee78570c7375a10ae504225ff4575846844da02b7b9f91be95f378d8ef4d051882404347aba503818f3ab69a936bea1192ce01a04ef304d5e027909fbfcdcd2008924738b6d62284de3893268baab83b4598dfe4a0230b6b9ec145618fa5780da8342dd0b4a27c896034ba1e53ce666569b4efdc2fa035561b1b13c05d5577fe3f572291378a1538327f985177d01672f111c35772c2a00b78f0ec8297d9c918d413cadaca1d0c101068d71c6c78f22b9454429a7f9a66a01e24877890768d3039f0616735d962c63880759282afbe30b559f4941b815dcda0c8690872c86f9a3dd2144d3071c1f5f855e677221e97be95fc28eb10e1bc6142a078ce6a9f899756c19e4b9b9ce3af1b976b9abd99a5962a337510bff292fae390a0ff42570dc2277b597a1273336d69d78786b411a718447751cc93442402a7d95f80", + "0xf90211a08674db348aa2433d38fa04b32eee614e70bad2498112d1c8c92ed781f7393432a00a3284a6ab7fa717276e3910cdac3a9a49cdb1c5d67b9249d80012653cb159e3a002a2ec0a85e787f1c6217d893669b449989e00ac95476c0a441041ec0c9dc5c6a0a64af22c804382431281f72185fc6372e42ab2d649c763859ef4a9a685986091a064b8575cf6a761d01188b1653ec84027c95e163f046b7549227bf9dd20bf68b6a0f217be07ac60e971c0f0f2c572ab712be561d6965bddeaadf2b5022777dbd67ba0894655a89343128eedf254ff31d6e8c733d8576b421f228a7951edddebb42e23a0ace3f06a0e31a7cd7f8f68963650ffa784b3ba34531b442bcf30c78e8632c67ea0306defdf700b034691e5e02bf7a57ab2563dbae650ff3247a6f9533e65780bfea026e8b773a7ece14e14d91d78bb55fc4a461450bfe1016a2f7d64b0023de60e7da0a1c440cddbd4b8b951a3c5a77f8d44ed7a43496ccb86c427a7a60ce4454992cca04730d1b80fff8287c41e9152534aaca3bf4e83f6aa270937462582dfe8f7ee5da01b48002821729e819a86cd9c6f1354de5547d16b270e9ca7e58b0eb77443d270a037cafe48e5ef38d86cb233f1660e8793a396daa2462b68baba350207ffd2ac02a0b57717268e68c147ed76718e37f2c17ee34993e0513bc65f073e79583f54791ea01452db316b25095de4c13797eb73e43c0c50925afdbbf842b53c7342edf07d5780", + "0xf90211a02b0ad5cb694c8537975339c6b83c6959ca08f3ab5d0f509e1db86872d362a438a09a6772bfc26d3601cd883b0a6d3dab844af2eaaeaf46eda90bf8554a835e3884a0ac34dbd36c34598ab448230a2029a1a5513ed8f2aca47dcd6c7b89b1080c851ba094ddc0d5e6db0707e28674dc24aad5e6e2b5cf56b901ac4e48ddea8b8d15658ca0097e907f88e0f3ebfa07c27aa3f660f6dfeb83e0fd0a73de8cd3d830b065ca3aa04c7507e240c9532c9450d53ca814e5d2c92608c68ef4a07355158c7bb3c69567a0feb00f1d052bdd0c24540928c139211081823560a3afad7e6643bebbff315305a029797db89e1852d55137d4c91a0f2121bad22e6011106ee3b0984c3d6be29c08a0f457ced2dd3a6eb3aa65f2258dcbb6b9da6dba03f9e3af5823100800dc3a4724a0cc988cbc9e3984647cb8a10ea48dded7ec3b4d7988cfcec49eb0d5ee492950e9a0251a57e40ee650cbb7cf169ee37439ef6a28d14539ae9be7cdc269bb98fc0381a0bb42a61739fd8d4ade0450b678ec1e9485fe49653fb398823722c589d58a6398a019e95afeb3b0fc1c61874ca95495fd18cc341e406fdfb351e1a8ca8c023d48ada0322b977fb15988794db59312fbd93271da362c89349cac9097f748fe4cf895eea03e75c192069e85d5a5a3cdf86d6828aa94a2e58ee30b298568f9a5a027334e14a02dd55159a56c3e9ba522a7a275879f963590454b15afc92530ec6911f286c7bc80", + "0xf90211a0934a14b18ef07e8ee44be99f6b3502affbd145e8b144449020534953e5994e79a034c816e85b87e945b496b35bbfc3ad1b96e8eb20008cc1ed2d6eb03c666e83dea07f6c8ec6a4e53cafafb545761f340922043b7ab31bfbce8105bbd74df3b740eaa0eda1f4799002f5d5e10d089493b8b0471c2f5d53f2a39d8051f90620a0a10bcea0748095ebb6337a75ac09723d5fadec4207f61a918f9bc571070c7ac17fc529d4a017757dafee7b23c91ed25f02d6db1b9aba7ba752d090e43f180ef89e8f3a2c0fa0b09eee84df77e6e445dcbf71edb0810dd934e121d04464b156e15a9ff6743eeca09367b51e924d010967083f1c475870e1b858362c402b35615455ef5eb6a1a7a0a036e9dadc7e5178f2fd06e26c93a90759b0a3b99ea852641f8ef133688b3756eea02d34fe49c39a8c0b0187f59400e357c45033ac6e2bf05dfb3f5623c7af55d7e6a0176a43bc186b08c90a6add70fb40e74202a153d729bf7f266e358e4160473d7da0caab9ead86c53d9759c9c10e4d5523075ade26cbe9ebbc01c70eb192b8a6dc5ea05dc8423700e436ec56554225dde0d315418bc647a1d1510bdc057e57b7d9d5bba03397f9700eeb8f9fd7625b11cc6beacdfde9e12d3411a5d234f69966b90cd167a0280f87404f4e3b3c18eba15fe2579295004dad520633eb1048092119ec968c06a034df30e140d58ac49642eb20acc84fdb7d6e9b252b3b75102fd0ab36c60a35d380", + "0xf8f1a025d03c757c3b9f67a973b3a2a6dd5f19132cbbff33936260f18dff615e3a43028080a0aa7b6fba0c35cf1f769f3823cde327341f67b9420660231155c1ed4472a35f168080a029968ea8e3efa114667e059d29f1039333b7f04642b8d05945b2c2ada9432d8e8080a02bf9deab573a13d45107c4766c4e53a67cb00c1fa6bdd601c3de53e1f49b3244a02ac3e5cbacc587c1e97e43b6ae2846900c2e89a3387a3a1cfb4319ec965ba724a0a2cd93906ec1623e0c9f09dc1065a96f3beca61608465b8782ae10b9a8168fb8a0d7eab29c910d45fa2884a15ab1847bf326354b2ed269484adf24db820a2e094f80808080", + "0xf59e38748ac48fc328419086cfeef2175f66e369e45f1e2df97f506a769e9cbd95946ebff3325023c7834b84f3d01cb54f4992eb4bd6" + ], + "value": "0x6ebff3325023c7834b84f3d01cb54f4992eb4bd6" + } + ] + } + } + }, + "version": "2.1.0" + } + } + ] + }, + { + "descr": "in3_ens resolver", + "chainId": "0x1", + "intern": true, + "request": { + "method": "in3_ens", + "params": [ + "incubed.eth", + "resolver" + ] + }, + "response": [ + { + "id": 1, + "result": "0x4976fb03c32e5b8cfe2b6ccb31c09ba78ebaba41", + "jsonrpc": "2.0" + }, + { + "jsonrpc": "2.0", + "result": "0x0000000000000000000000004976fb03c32e5b8cfe2b6ccb31c09ba78ebaba41", + "id": 1, + "in3": { + "proof": { + "type": "callProof", + "block": "0xf9021aa01e2f396c758a898d0df9dadcda006967ffc3a587447328ab2e3d23a01c85d309a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347945a0b54d5dc17e0aadc383d2db43b0a0d3e029c4ca030c3b114eedba8c787145e14cbc7edcd1fcf7f2033246c0b0382a17e126db96ca08697e94660af2ad99703bc556188ec7ecab46f791ada324d5475745bbb026b33a0a343c815df12497e72a80d84dac33d6815b3814366a69156ceb982f88c83c875b90100269107529c4046a18202b486000399937188d848c808421e008000404b1a18e8031a09442400080c40000004900809860b8190002d041d60b060890025ae50874b9428c241108013480884080280e4244512004e1845a0ca0200c28506402824003002a802418003830301d08088880184702042110d04200b23209050040a9445004c8578908001810d48212304c4688048a059010010682502a058089c926302546d16084404462480018040418aa04000044c0010800ca102600820244901119419438b4004140824181b82a0220008420510061a101c01e81b42253cf6002212209804d23561600040800007f01c002dc0820880454e612e0444255a021a8707d8fa273079af83910d4183981ac28397e968845e4ba56b995050594520737061726b706f6f6c2d6574682d636e2d687a32a0496d6918dd118d970796508d1718bb4fe9f94ea14008ab346f4343b50db5ad89882a74a398162c2f2f", + "signatures": [], + "accounts": { + "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e": { + "accountProof": [ + "0xf90211a00c723590cc5f78d03486e052af482624b052181bb17da04fc2bae3d24ace4c25a08afdec8735487f85b557f53d2aab139d2d8acca73a5fd4fa4fe21d293e5ca94ba0fb239fd062cd19be835103342ef2f3157b468f787281cbc5cb359fa7d3647b8aa084d8d8f63bc30d12a25a2955260dc3df860390db87492894c2c58312d4de6791a0a04b14a9eb633f45a97dd24d5ee446b4c64fe2b3ecfad0dead0c0cde44ced01ea0dbf4b492c90cf5d4c090e8b0ffd7cb8fad2a5437fad8a0fe22efe71ee0696f17a054ce35c8b94982fb03fdd0e55306eb96883b6d89a02996d39203d47b4468a703a0ce6cca8fb16149f6ec82c42cf9909767c9d331da162b05c4fee62a798ce378f8a07792324c7dd6a4699dae71602c3dc51eafccc006580b3cf7256701d9405d8491a0e7ab81301d655737da5ce582dbc72cca88a1a8839c6a59c5ef3bf48d8df71408a0bb7841f7909c061d761ca396cd8cf861c8ad4f3f4ef654dc45f667fb1c13e994a076b941ea5487fb8095429ccbb955fb65a9937afe6abac32c894254a0bf713ddfa0ce6c9723bc226ca7180510874627d35fdd36379783d2134b8cb450c9fa34a593a0efcd4ac4d6b9cb14dcb9f0bec9bc642f12769cd2286b9970b875e8c2c70a7b41a0b145a96ab140154e03f348ce3e98c4ad2fde697196d9a42cfddb78d7c06bdbaba06630fbedb88c580b6feef98fc2c03485715e008b1a3f8cfac365b55ba3b6685580", + "0xf90211a02dad6c17d66ad7f21ae8b18c0522a23ea420c9fc5d83c270f674a91f989d8e7aa06d99b2141d41867509969b0bcc2c4b594dc651d43600aa70a9ed150f3c4d0d0aa0cc8eb45d0977e7b9da1477abbe325ee47cb7eef1097551abc50af24a84957941a0a62f85db90f847e228680eab9c95eb9d75e132988166daf4fa10e30c543ee237a0929fbd35ffb35f79992786a8739cf702a1ba710c413c7df287cf8a86a8bd47e6a0e627c08206bd02e1dc742c05ad7dd3c90ff5023f4714753414cf92659e28ae87a0b645cb3f2d74c6db9fb5ea35a33dde72e1785b863de4eabddf924a6cae5988a6a0be7b5a1d6015295171021bb6f8fe45518d2b9786d41aa5300d4962086105dd00a016875210d207d9dbeea80685712282fb3bc35e29c10a70a4398cee59f4ef85f0a002375b66ab8ad17c80efcd4487fd9e36fa2a08e31368eccedca241b69d1d51c3a0262b3088a84a50152e4e629717d38a65df470b945ca813ee21869bc01d468efba09ee65f8772a42c20a256cf1a882d64755090ee30c968e0946b027ba6c62f8698a04208a2f99dea0535fc81b84c06da97656c35d557a64adba35268edefbbab464ea0452f4ef9889c3b7e96367af3abf9b1e0969a0a2151e874ed21bdb18b299e806aa04f4e1fdf517abe68a80d3f6eef7751b38942f01888dab709e1b524213b82b149a0248ee43561f152837787a06869d2b7f9908bda8eb91875d4c3da0285bbbd9e5880", + "0xf90211a05a78e857342f4bec1d5d886a7c9a4894850190a1ff9ed0ecc54d12bf8152c447a0c07c58f52889374ca0ef9bec34099085bd594ca52dea75d0a43df6afefefa3fea06b3737b8da04ebcb8a70898e211c358f90570a0777bda2db6e56d64ecaaf6046a033dcdfc28e2e1f044f6d4c514b44e20b0b29ca397a054d413749acffd78b9b8ea03041eae893596e40c347c068469ce9ee61844ebbdd319e19937fd7fd22498614a076f5061a3f4ec4764f7df975b274f54ab9ff86260a1b4255a9a53d8c0ee669f4a045b67f45b22f48806f29423fb841d8da1f27ea3b2d7d3321f43c164e229599f1a06c77c05f255e19065905a9eef1dd4c2080ba68271a95495e60dc959ab1479324a084c9043cd326dce364de120adc75ca0691cc6b35c6f575a7f3c8bc2184d3b308a0ed3f8fc1d74796c8b1c81dcb2339c7bb7164b64b8d5b52d71d7dc80092a1333da0fa615c4d4454b55863790d83806e59f55b321c4c352c423ce8e6e5655a43778fa078f0fbccf2f578c142f51814bffba10651332b0502d3e031eb40bbefff08a64ca03e983dab47cdb13ca96a610fa8e3d8696d24229a2d1baa8d0b8f1b9770a878d7a0a6257c8620b5848618e41e027ba96188db35ce13792ec98f063f6ee573dce74ca06133fd16e312094206fb8302b4b143dec152fc86c7cf85de347d18e4275034e9a0d329b0cd14a217df66e8ab0e9af8fc25d251ff763680c592d9531690ab610e8780", + "0xf90211a092c9bc4f36cbb80cf2debc0b65d74656dbf2ba7ea647932ea4de96695688e218a0629543828aeb06157af3eda0ac2bd93dee1e21e56bbf0a7163821c5a5c1143f9a0bef5186c13b01d236ea0d567de23638e58722babdb7f5880baa4929c53940706a0d8d6c0b2092402d1ecbe614ea5fe5d5f08c5548848b51a57e8cba1530842b124a0a3f1b4708ca10ae9a3f97c81a266ebd72ec9d32079a88473463a42cfd1676af3a09c0ede02686a520b6127cf64a7b29a26d9a0dcd1ddfb574e37acf7aa27b16771a002a1957ca02ea9836e0d7d050b756ea2a666291d5479acc417c9cf27a45a6770a0f6927a9b7e1735b08a27dc8bdd0182180be8f68d94e9adc2d849ba29180fe345a056edb268670dc24ecaf21eb80d847af15b58afb9e160a9abba23055a22f6fb60a0e2b4725607391be1e3a0f9411f36178faaac292ddae9f0570fa4dc8f700931b3a06e376f034772d2967cf94903840102806da28ea7a363e4e13a8e6ff59f3e09d8a061bce5e58bfcdb7848ef3e05bcd5ee3a69e2e880f757c5e6b72ef823edec4e07a043220089f4bc71aafc3985ad0f5682433f11e467d1364995413acb1238f2be22a0833ab81c59e918d2207080251e105d923d5bcc25b6a6f2fc65f1a896978de97ca09cc94d554f7362631033914cdf7d38f1512a367e324d6f8f83e23d05515d9ecfa050392ec8b97491eb04674cce05f93b97353e9620191252b292c30702b83136b880", + "0xf90211a0ca420c7a4688b1a788a299564f8e53e63db0ff06baf1d5d6ac9bd60b7ae6ef03a0d9a47bd09a9af0485b5e16f1fdead1b38bd0033e47b68c50b9145d04b2e3ca45a015cc37a9efac0a28a5a472f9ec34f62c450cfb00809bcd0f661835b98b77c908a0cd6e51378b850c2cc4918a58e4298836d03e0d767c03ad42729f1dfe2c5dbd93a071c97fa0da567c46472c018659acca753d5fc9f18e7c88ea225158aa0718372ea05b38d432699a0904da576a390d7471a27fd46aed8a21dc997a9420cdbe26bad1a08c37240060236766e7b48a8667280be0b5ec8bb9617676196d92e1adb8df5feaa0252cbab96c0507c3ec61b012725209a4f5ef84fcc4eed13affd9fa3fe47b27b9a0a6ab63ac39f8349fbf12a5fed07dc851b578c9b0c4ebd2bc596f85a93e09467ea0dba377dbe3b9e3b94536913afccdde26a005468ef064f49f1f4fbc24e88aa231a0887915f22f76a4836cf516cb64e2171b8c58a96dd53304f7d89bc4d25d0008e3a09d74708389b99bbdda1bd375a98013b59a0f79e0993d038fc3e0e25a3f57fe13a0ec1ba1a95e90d8efa1443235c6f794c67cc600116c43d9dfd9d5bc51f1c7c93ba09983b656efc003add047e25e09a09fa19494c25eba79945800cb18a0c3cf2696a06285d320e139e26e5e64ed986267369944208587e9448e163c524d3032103178a0bb710852534614f52b8894b7bc72a81445de02f0ef38be44076991c6334e163f80", + "0xf90211a0df6443ec0fcca615a0f4ba5b48baca3fdf5a5ca18db86714c78c8f99f60a6734a081bea4c6bd2e2026b5c6fdfa418b75662c7122d675f9a5b6415aaec3e2eb2a8ca02e2d1fa961bbfc3c16aa1c4f19649c5b3ba7f5430d985777f2b19105dd47dfbaa056f06073d19e0c690ea88bd87f9afadbebd91270024a2e5cf40c5859287920d0a0ecd1b8c32c78b513ce804e44f51e175640d3a55804ac4b261e6ba4aa8079e640a0adf96f10cbd0242f4af39f240a5b52abf08311ce3014898e5359be8673fd0edea0e007ef6555b7f835f08cddbe8177c2b53266f3fe2e8685e4c3a1e5d43901b217a055f9a7109a241a65727ab5a4a1668a0bdc5278626de5d084dcd6dfb553e71b41a0888f2f97a389cb37cea2833c9c82b35fdcdf03cc0c2bf0c72a4e764d5ddea32ca04a85a0e52bc9da1ecd09e70cbb7baa759de8c7fc341f0b2ed68c1be5bc2821b1a09da47448f16af02d92ab775f1133124f16c0b7d047514a4ff75814e511d95a16a0a196adab721d52fb7c5b938e87692d1feed67ff9be6fd050f7a780a5ff08d96da09deeb4d161ba8dc2ff9d7098bd76ecfd548c52df13a1dafe39f7666c5e277cf1a077b1c65e5a290d7e4deaeebd0932f42f25e6aa71a67b5c659a3beefb901d02fea0db06b78412fe9e128d7d44ae7a22a48d14a0c952dbe3651d6805fb8f93ada74da0f2ea87d62a695bc3c4936b9f503f9684334c044246acd1459105c3cf7d3b6bc080", + "0xf8718080808080808080a04a88e4063326e9f1c0149653f8da9056a293687e939d79212d94e4bc2b87260d80a0a1d414f4a142d67ce3b24a51bad7b0a5d80390f53ccd144379133f13de6997bc80a09925ef6b23f8f89b748412ef6ea141ffba9742be7746d0b4ae3618cbd12f901c80808080", + "0xf8669d3a53e8a0e441d4dc5101efa6a123b85a3a2a219f1a5fd625a5d6614490b846f8440180a0fb68a7aa433407da09856fdc811a803a78b833b1c23ca903717352b3c99eb78da0d6bfd5d6f1384a1f6ea57b8a8412de5552f138d42021cf7c4941e33206f529e4" + ], + "address": "0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e", + "balance": "0x0", + "codeHash": "0xd6bfd5d6f1384a1f6ea57b8a8412de5552f138d42021cf7c4941e33206f529e4", + "code": "0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c80635b0fc9c31161008c578063b83f866311610066578063b83f86631461042c578063cf40882314610476578063e985e9c5146104f8578063f79fe53814610574576100cf565b80635b0fc9c3146103025780635ef2c7f014610350578063a22cb465146103dc576100cf565b80630178b8bf146100d457806302571be31461014257806306ab5923146101b057806314ab90381461021c57806316a25cbd1461025e5780631896f70a146102b4575b600080fd5b610100600480360360208110156100ea57600080fd5b81019080803590602001909291905050506105ba565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61016e6004803603602081101561015857600080fd5b810190808035906020019092919050505061068f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610206600480360360608110156101c657600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610764565b6040518082815260200191505060405180910390f35b61025c6004803603604081101561023257600080fd5b8101908080359060200190929190803567ffffffffffffffff169060200190929190505050610919565b005b61028a6004803603602081101561027457600080fd5b8101908080359060200190929190505050610aab565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b610300600480360360408110156102ca57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b80565b005b61034e6004803603604081101561031857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d42565b005b6103da600480360360a081101561036657600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803567ffffffffffffffff169060200190929190505050610eba565b005b61042a600480360360408110156103f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050610edc565b005b610434610fdd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104f66004803603608081101561048c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803567ffffffffffffffff169060200190929190505050611003565b005b61055a6004803603604081101561050e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061101e565b604051808215151515815260200191505060405180910390f35b6105a06004803603602081101561058a57600080fd5b81019080803590602001909291905050506110b2565b604051808215151515815260200191505060405180910390f35b60006105c5826110b2565b61067e57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630178b8bf836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561063c57600080fd5b505afa158015610650573d6000803e3d6000fd5b505050506040513d602081101561066657600080fd5b8101908080519060200190929190505050905061068a565b61068782611120565b90505b919050565b600061069a826110b2565b61075357600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561071157600080fd5b505afa158015610725573d6000803e3d6000fd5b505050506040513d602081101561073b57600080fd5b8101908080519060200190929190505050905061075f565b61075c8261115f565b90505b919050565b600083600080600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806108615750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61086a57600080fd5b6000868660405160200180838152602001828152602001925050506040516020818303038152906040528051906020012090506108a781866111e2565b85877fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e8287604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a38093505050509392505050565b81600080600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610a145750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610a1d57600080fd5b837f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa6884604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390a28260008086815260200190815260200160002060010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050505050565b6000610ab6826110b2565b610b6f57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316a25cbd836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b2d57600080fd5b505afa158015610b41573d6000803e3d6000fd5b505050506040513d6020811015610b5757600080fd5b81019080805190602001909291905050509050610b7b565b610b788261122f565b90505b919050565b81600080600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610c7b5750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610c8457600080fd5b837f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a084604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a28260008086815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b81600080600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610e3d5750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610e4657600080fd5b610e5084846111e2565b837fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d26684604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a250505050565b6000610ec7868686610764565b9050610ed4818484611262565b505050505050565b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61100d8484610d42565b611018848383611262565b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff1660008084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600080600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060008084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111d85760009150506111dd565b809150505b919050565b6000819050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611220573090505b61122a8382611455565b505050565b600080600083815260200190815260200160002060010160149054906101000a900467ffffffffffffffff169050919050565b60008084815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611383578160008085815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550827f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a083604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a25b60008084815260200190815260200160002060010160149054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff1614611450578060008085815260200190815260200160002060010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550827f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa6882604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390a25b505050565b8060008084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505056fea265627a7a72315820e307c1741e952c90d504ae303fa3fa1e5f6265200c65304d90abaa909d2dee4b64736f6c63430005100032", + "nonce": "0x1", + "storageHash": "0xfb68a7aa433407da09856fdc811a803a78b833b1c23ca903717352b3c99eb78d", + "storageProof": [ + { + "key": "0x3762ee9295b1a64160deefa90f70087ea87fba8b61026707707658b0ae37397a", + "proof": [ + "0xf90211a0c3bf8f0624151de77e035fc7ed14dac4b546847788815bc33463930b5057d05ca0e4a5f232c7833186f87ae3a34d6b665a5e1551476b7d57866715b49b23afc965a0ecbca17d14eeb5921b8b0e40ae746434c094786f84862440e6ca225eaf3d69f2a019c22bc6583096fedb5ed36bf4ffa88de36c4af820cd613273a3338e45ac78dda0e46f032ed16aa66fd9191db61d9e368a1b52091143939d772947faa518b40f34a0f8e624ec965a4942f79364101a09ed4f98add5915b00e3068368da0a7e044f38a0bed595b28baac51ae041c2a8a990d8cdf061bd83f31c9bbdb3310a0320817e14a0d373656f4565e53e8251504c22e8eff77e8284507106a610348cc602eb0f3142a04ef304d5e027909fbfcdcd2008924738b6d62284de3893268baab83b4598dfe4a0230b6b9ec145618fa5780da8342dd0b4a27c896034ba1e53ce666569b4efdc2fa035561b1b13c05d5577fe3f572291378a1538327f985177d01672f111c35772c2a00b78f0ec8297d9c918d413cadaca1d0c101068d71c6c78f22b9454429a7f9a66a01e24877890768d3039f0616735d962c63880759282afbe30b559f4941b815dcda0ad12adddc9787d68f3037f5d67d17445e6f12adfd13f996a34721f3e99f01a78a078ce6a9f899756c19e4b9b9ce3af1b976b9abd99a5962a337510bff292fae390a0ff42570dc2277b597a1273336d69d78786b411a718447751cc93442402a7d95f80", + "0xf90211a08674db348aa2433d38fa04b32eee614e70bad2498112d1c8c92ed781f7393432a00a3284a6ab7fa717276e3910cdac3a9a49cdb1c5d67b9249d80012653cb159e3a002a2ec0a85e787f1c6217d893669b449989e00ac95476c0a441041ec0c9dc5c6a0a64af22c804382431281f72185fc6372e42ab2d649c763859ef4a9a685986091a064b8575cf6a761d01188b1653ec84027c95e163f046b7549227bf9dd20bf68b6a0f217be07ac60e971c0f0f2c572ab712be561d6965bddeaadf2b5022777dbd67ba0894655a89343128eedf254ff31d6e8c733d8576b421f228a7951edddebb42e23a0ace3f06a0e31a7cd7f8f68963650ffa784b3ba34531b442bcf30c78e8632c67ea0306defdf700b034691e5e02bf7a57ab2563dbae650ff3247a6f9533e65780bfea026e8b773a7ece14e14d91d78bb55fc4a461450bfe1016a2f7d64b0023de60e7da0a1c440cddbd4b8b951a3c5a77f8d44ed7a43496ccb86c427a7a60ce4454992cca04730d1b80fff8287c41e9152534aaca3bf4e83f6aa270937462582dfe8f7ee5da01b48002821729e819a86cd9c6f1354de5547d16b270e9ca7e58b0eb77443d270a037cafe48e5ef38d86cb233f1660e8793a396daa2462b68baba350207ffd2ac02a0b57717268e68c147ed76718e37f2c17ee34993e0513bc65f073e79583f54791ea01452db316b25095de4c13797eb73e43c0c50925afdbbf842b53c7342edf07d5780", + "0xf90211a02b0ad5cb694c8537975339c6b83c6959ca08f3ab5d0f509e1db86872d362a438a09a6772bfc26d3601cd883b0a6d3dab844af2eaaeaf46eda90bf8554a835e3884a0ac34dbd36c34598ab448230a2029a1a5513ed8f2aca47dcd6c7b89b1080c851ba094ddc0d5e6db0707e28674dc24aad5e6e2b5cf56b901ac4e48ddea8b8d15658ca0097e907f88e0f3ebfa07c27aa3f660f6dfeb83e0fd0a73de8cd3d830b065ca3aa04c7507e240c9532c9450d53ca814e5d2c92608c68ef4a07355158c7bb3c69567a0feb00f1d052bdd0c24540928c139211081823560a3afad7e6643bebbff315305a029797db89e1852d55137d4c91a0f2121bad22e6011106ee3b0984c3d6be29c08a0f457ced2dd3a6eb3aa65f2258dcbb6b9da6dba03f9e3af5823100800dc3a4724a0cc988cbc9e3984647cb8a10ea48dded7ec3b4d7988cfcec49eb0d5ee492950e9a0251a57e40ee650cbb7cf169ee37439ef6a28d14539ae9be7cdc269bb98fc0381a0bb42a61739fd8d4ade0450b678ec1e9485fe49653fb398823722c589d58a6398a019e95afeb3b0fc1c61874ca95495fd18cc341e406fdfb351e1a8ca8c023d48ada0322b977fb15988794db59312fbd93271da362c89349cac9097f748fe4cf895eea03e75c192069e85d5a5a3cdf86d6828aa94a2e58ee30b298568f9a5a027334e14a02dd55159a56c3e9ba522a7a275879f963590454b15afc92530ec6911f286c7bc80", + "0xf90211a0934a14b18ef07e8ee44be99f6b3502affbd145e8b144449020534953e5994e79a034c816e85b87e945b496b35bbfc3ad1b96e8eb20008cc1ed2d6eb03c666e83dea07f6c8ec6a4e53cafafb545761f340922043b7ab31bfbce8105bbd74df3b740eaa0eda1f4799002f5d5e10d089493b8b0471c2f5d53f2a39d8051f90620a0a10bcea0748095ebb6337a75ac09723d5fadec4207f61a918f9bc571070c7ac17fc529d4a017757dafee7b23c91ed25f02d6db1b9aba7ba752d090e43f180ef89e8f3a2c0fa0b09eee84df77e6e445dcbf71edb0810dd934e121d04464b156e15a9ff6743eeca09367b51e924d010967083f1c475870e1b858362c402b35615455ef5eb6a1a7a0a036e9dadc7e5178f2fd06e26c93a90759b0a3b99ea852641f8ef133688b3756eea02d34fe49c39a8c0b0187f59400e357c45033ac6e2bf05dfb3f5623c7af55d7e6a0176a43bc186b08c90a6add70fb40e74202a153d729bf7f266e358e4160473d7da0caab9ead86c53d9759c9c10e4d5523075ade26cbe9ebbc01c70eb192b8a6dc5ea05dc8423700e436ec56554225dde0d315418bc647a1d1510bdc057e57b7d9d5bba03397f9700eeb8f9fd7625b11cc6beacdfde9e12d3411a5d234f69966b90cd167a0280f87404f4e3b3c18eba15fe2579295004dad520633eb1048092119ec968c06a034df30e140d58ac49642eb20acc84fdb7d6e9b252b3b75102fd0ab36c60a35d380", + "0xf8f1a025d03c757c3b9f67a973b3a2a6dd5f19132cbbff33936260f18dff615e3a43028080a0aa7b6fba0c35cf1f769f3823cde327341f67b9420660231155c1ed4472a35f168080a029968ea8e3efa114667e059d29f1039333b7f04642b8d05945b2c2ada9432d8e8080a02bf9deab573a13d45107c4766c4e53a67cb00c1fa6bdd601c3de53e1f49b3244a02ac3e5cbacc587c1e97e43b6ae2846900c2e89a3387a3a1cfb4319ec965ba724a0a2cd93906ec1623e0c9f09dc1065a96f3beca61608465b8782ae10b9a8168fb8a0d7eab29c910d45fa2884a15ab1847bf326354b2ed269484adf24db820a2e094f80808080", + "0xf59e38748ac48fc328419086cfeef2175f66e369e45f1e2df97f506a769e9cbd95946ebff3325023c7834b84f3d01cb54f4992eb4bd6" + ], + "value": "0x6ebff3325023c7834b84f3d01cb54f4992eb4bd6" + }, + { + "key": "0x3762ee9295b1a64160deefa90f70087ea87fba8b61026707707658b0ae37397b", + "proof": [ + "0xf90211a0c3bf8f0624151de77e035fc7ed14dac4b546847788815bc33463930b5057d05ca0e4a5f232c7833186f87ae3a34d6b665a5e1551476b7d57866715b49b23afc965a0ecbca17d14eeb5921b8b0e40ae746434c094786f84862440e6ca225eaf3d69f2a019c22bc6583096fedb5ed36bf4ffa88de36c4af820cd613273a3338e45ac78dda0e46f032ed16aa66fd9191db61d9e368a1b52091143939d772947faa518b40f34a0f8e624ec965a4942f79364101a09ed4f98add5915b00e3068368da0a7e044f38a0bed595b28baac51ae041c2a8a990d8cdf061bd83f31c9bbdb3310a0320817e14a0d373656f4565e53e8251504c22e8eff77e8284507106a610348cc602eb0f3142a04ef304d5e027909fbfcdcd2008924738b6d62284de3893268baab83b4598dfe4a0230b6b9ec145618fa5780da8342dd0b4a27c896034ba1e53ce666569b4efdc2fa035561b1b13c05d5577fe3f572291378a1538327f985177d01672f111c35772c2a00b78f0ec8297d9c918d413cadaca1d0c101068d71c6c78f22b9454429a7f9a66a01e24877890768d3039f0616735d962c63880759282afbe30b559f4941b815dcda0ad12adddc9787d68f3037f5d67d17445e6f12adfd13f996a34721f3e99f01a78a078ce6a9f899756c19e4b9b9ce3af1b976b9abd99a5962a337510bff292fae390a0ff42570dc2277b597a1273336d69d78786b411a718447751cc93442402a7d95f80", + "0xf90211a0c12f6c4a784a112377c3e977691884d962d5fcc12b1541c1a82b1d2f421106d3a0085015768e501a5a52ae265d5fb0b4daa2a9e272805870c1582c9d985fbffb11a01d4f7c243e4c82ebc98bcec578a61ed65b6fbbea7ffbde96c6278aeda6634510a08cc77e9baefd6fdccd4998bd5754d5396ace81f192a52ca99f3d3556374d3d37a0f0eead2909f52051926b839ff0964b7e6f81ab50fcfed131754e2b2da5a105eaa065c4d00004e8c8e51b6303ec97b1d98768764a50f350ca896a3d053ab40a86ada0be9edd8f4d3ecc0c27b0df9318c1b0f3f5d867e4b58ec3307da28942f51c6f96a000100ff8caac782885cd2ce260476514cf1fe1af829b0c527325b5ed6433ec61a0aedecacb34c4d031e1b9294b192136387b787b78322bc4476f6e2d4f7d945f79a07e2019c13414b43ba8c6e4c968c93143ca8a7b619ab8cc0e3c00ee61e60e617ba09cfb5d8a174b513e756c83a92ac2ab384fefa0d984a1ac195cd43937cabe348ca01ad323dcac8eac34f8db74c4d1536573e57e067bf3edd44c89458236de8d0016a03b4d39bdffb5b38b2d44d00c3b50fc95f380e3dce7a57203a41fc232831c1e8ba0012d555176981ad4bf56578abca334f0ac47eeeec702249866f19137e3f937eda045e0650079b90106039bbe3be01b37b9b14d5facae0b879fa60470ba87cf580ea0bf35796ad8bc916d95301606a596d866b9a831997738c63de22f8b116430a14780", + "0xf90211a0f6b9235221127f108084f88e04647cb99ab5019f533e7056e32bb497dfbea297a0191fac31cea00b1ca5c2c4ee2b4a5bec06df5a0e4f6e00ca2d9187fe4a4e2870a01083c120a5986424478551a39200ed3ebe923c13ff4d407fafce4bcbe6c61fb4a0a8bdae82f9ab257233e531c7fb00bcc15f9b4ab70fe402804cb5c34c7c611981a0c59a6fb1cffb51c465cf9f4f95c40e489b6828730639d710b2f1b81ca328949ba0441efa790f8eba17669652bda5ddf548beab3c8c9adeacf738fb80d4c562155ba0c199e101fb0619fddd5d3ddce9843f76671b3f4103b8e33cf6a245e652faa61ca0141db4b6bb6a1eaf3043d3a462d8e06035a19fec7fce9bb005549ecffdd7b260a0899a862b360670e35975d8696e3da73f1b1be3f397498c2b5c377490164cb0daa032fc767e921b37674150d43fae2d2241f7486ee9213a2a7b4d69c00e9b04dca0a0333e103c5e1a9dbf25d5e6d016b74bcbf01ec91ba63324f8250cd56c68185576a097bc0974fe7d2c21dc32692d64dc667e5c0ea28eef5c3837cac03589b4070457a0283ee4d4bc51d350707f71dd5bbd73340af8658c500740557d937ee955f791d8a03ff9e64e00955f6528b32995c90a57581ae6eb9bdabdc7e5ac96fec476f9811fa019688da24ed3cb612e4082f5350e5a9cbf2a46a1cb17e5d8703e21b953b1732da0f3218d5583beba0f4d187a0c301b86dca01a35774e90df2f28c88488f23c99ae80", + "0xf90211a02ec822d29ee509ba5e33797fb1f587f3537291ee1b0c1c58420eada4f499d1caa019bf44bb0fc220bfc642bedf8913e9696ad99d0e07d33b7f2090e8fbead71362a065cfd9af4ba7975072bde760d85e426b38740354b63705794715998b6001bb2fa09750e124f7f3ae101356a47282c13577ac3029f09f9e6e133b63bf451bc089b8a061d9d0988ae0eb493fad09a9e55032f92dbdf7bd7512fcccd32860e42779267fa0a939d8cc7eb051b629c29f11421b058e0a3adf5f7926428ff73967311223eacca06b12c98612f73b12aeed2892eba35355bc294d052e8480fc53834a01b3db346fa0640c948488f6f559f92a6f6a0e2f71e79fa9f7c7e4b43203c81238986f667607a096899cc6357a898e95459a524ec27f459a97bdbebd20a72210e884ab229a432fa0223354e0873372dc75fd594f9e71288d74354ae3c2de567566a3205e5d54bd69a0661b88262d7695ab5a3cf5aae51ed26f508cb09cadda5930b357fcb626b3ab12a03f3823ab4fef5affd001615ad55ba428c3401d76bdd120d2502d7608790ef8bda0c5d7f18557f384e43861c9bde7011b40875acf9ebe2596e9574a8f3e55f9fd00a0e23ee46d8b999598d6fd68024b59fac2212cb267def8085f6dcd510f00c332e1a0557e623f9cdccb388ab1788ff3f094c04e56d1490d285de3f017c8745dc0f86ba0e67311d55654fb04b3f2728725726bb8a9f124109022af5d797628f0cd56847980", + "0xf871a0214bf15799eeac2f36c85d1212f5c3c40f714341fb682e619ee58e688126a23da0a3b6e49bfe9693e34d7183eaf5247742f1f74d15c9ecbd459cf2a055190adfc5808080808080808080808080a0dc4dc64d20e13dc5842a200690f318dfcc8ac78ee02c0969b50520e8cdd0216d8080", + "0xf59e31d7410845a36f586c94fc1521ee1544b41339422b92aae71894610251de95944976fb03c32e5b8cfe2b6ccb31c09ba78ebaba41" + ], + "value": "0x4976fb03c32e5b8cfe2b6ccb31c09ba78ebaba41" + } + ] + } + } + }, + "version": "2.1.0" + } + } + ] + } +] \ No newline at end of file diff --git a/c/test/testdata/requests/in3_keys.json b/c/test/testdata/requests/in3_keys.json new file mode 100644 index 000000000..eb8c762ad --- /dev/null +++ b/c/test/testdata/requests/in3_keys.json @@ -0,0 +1,149 @@ +[ + { + "descr": "in3_pk2address", + "chainId": "0x1", + "intern": true, + "request": { + "method": "in3_pk2address", + "params": [ + "0x0fd65f7da55d811634495754f27ab318a3309e8b4b8a978a50c20a661117435a" + ] + }, + "response": [ + { + "id": 1, + "result": "0xdc5c4280d8a286f0f9c8f7f55a5a0c67125efcfd", + "jsonrpc": "2.0" + } + ] + }, + { + "descr": "in3_pk2public", + "chainId": "0x1", + "intern": true, + "request": { + "method": "in3_pk2public", + "params": [ + "0x0fd65f7da55d811634495754f27ab318a3309e8b4b8a978a50c20a661117435a" + ] + }, + "response": [ + { + "id": 1, + "result": "0x0903329708d9380aca47b02f3955800179e18bffbb29be3a644593c5f87e4c7fa960983f78186577eccc909cec71cb5763acd92ef4c74e5fa3c43f3a172c6de1", + "jsonrpc": "2.0" + } + ] + }, + { + "descr": "in3_ecrecover hash", + "chainId": "0x1", + "intern": true, + "request": { + "method": "in3_ecrecover", + "params": [ + "0x487b2cbb7997e45b4e9771d14c336b47c87dc2424b11590e32b3a8b9ab327999", + "0x0f804ff891e97e8a1c35a2ebafc5e7f129a630a70787fb86ad5aec0758d98c7b454dee5564310d497ddfe814839c8babd3a727692be40330b5b41e7693a445b71c", + "hash" + ] + }, + "response": [ + { + "id": 1, + "result": { + "publicKey": "0x94b26bafa6406d7b636fbb4de4edd62a2654eeecda9505e9a478a66c4f42e504c4481bad171e5ba6f15a5f11c26acfc620f802c6768b603dbcbe5151355bbffb", + "address": "0xf68a4703314e9a9cf65be688bd6d9b3b34594ab4" + }, + "jsonrpc": "2.0" + } + ] + }, + { + "descr": "in3_ecrecover raw", + "chainId": "0x1", + "intern": true, + "request": { + "method": "in3_ecrecover", + "params": [ + "0x0102030405060708090a0b0c0d0e0f", + "0xa5dea9537d27e4e20b6dfc89fa4b3bc4babe9a2375d64fb32a2eab04559e95792264ad1fb83be70c145aec69045da7986b95ee957fb9c5b6d315daa5c0c3e1521b", + "raw" + ] + }, + "response": [ + { + "id": 1, + "result": { + "publicKey": "0xdcc9f37b8dc8ed078b31b2fd7ba9743d1676410db783c606c950df1724675b48f54c738b5f34bc05d90aa556e333a49ea79a56f4bce3ea5a39f828c1c9abd7db", + "address": "0x892708c38ffaa4ffe7255fd51c8a5c345085a906" + }, + "jsonrpc": "2.0" + } + ] + }, + { + "descr": "in3_signData", + "chainId": "0x1", + "intern": true, + "request": { + "method": "in3_signData", + "params": [ + "0x0102030405060708090a0b0c0d0e0f", + "0xa8b8759ec8b59d7c13ef3630e8530f47ddb47eba12f00f9024d3d48247b62852", + "raw" + ] + }, + "response": [ + { + "id": 1, + "result": { + "message": "0x0102030405060708090a0b0c0d0e0f", + "messageHash": "0x1d4f6fccf1e27711667605e29b6f15adfda262e5aedfc5db904feea2baa75e67", + "signature": "0xa5dea9537d27e4e20b6dfc89fa4b3bc4babe9a2375d64fb32a2eab04559e95792264ad1fb83be70c145aec69045da7986b95ee957fb9c5b6d315daa5c0c3e1521b", + "r": "0xa5dea9537d27e4e20b6dfc89fa4b3bc4babe9a2375d64fb32a2eab04559e9579", + "s": "0x2264ad1fb83be70c145aec69045da7986b95ee957fb9c5b6d315daa5c0c3e152", + "v": 27 + }, + "jsonrpc": "2.0" + } + ] + }, + { + "descr": "in3_decryptKey pbkdf2", + "chainId": "0x1", + "intern": true, + "request": { + "method": "in3_decryptKey", + "params": [ + { + "version": 3, + "id": "f6b5c0b1-ba7a-4b67-9086-a01ea54ec638", + "address": "08aa30739030f362a8dd597fd3fcde283e36f4a1", + "crypto": { + "ciphertext": "d5c5aafdee81d25bb5ac4048c8c6954dd50c595ee918f120f5a2066951ef992d", + "cipherparams": { + "iv": "415440d2b1d6811d5c8a3f4c92c73f49" + }, + "cipher": "aes-128-ctr", + "kdf": "pbkdf2", + "kdfparams": { + "dklen": 32, + "salt": "691e9ad0da2b44404f65e0a60cf6aabe3e92d2c23b7410fd187eeeb2c1de4a0d", + "c": 16384, + "prf": "hmac-sha256" + }, + "mac": "de651c04fc67fd552002b4235fa23ab2178d3a500caa7070b554168e73359610" + } + }, + "test" + ] + }, + "response": [ + { + "id": 1, + "result": "0x1ff25594a5e12c1e31ebd8112bdf107d217c1393da8dc7fc9d57696263457546", + "jsonrpc": "2.0" + } + ] + } +] \ No newline at end of file diff --git a/test/testdata/requests/in3_nodeList.json b/c/test/testdata/requests/in3_nodeList.json similarity index 100% rename from test/testdata/requests/in3_nodeList.json rename to c/test/testdata/requests/in3_nodeList.json diff --git a/test/testdata/requests/in3_nodeList_partial.json b/c/test/testdata/requests/in3_nodeList_partial.json similarity index 100% rename from test/testdata/requests/in3_nodeList_partial.json rename to c/test/testdata/requests/in3_nodeList_partial.json diff --git a/test/testdata/requests/in3_whiteList.json b/c/test/testdata/requests/in3_whiteList.json similarity index 100% rename from test/testdata/requests/in3_whiteList.json rename to c/test/testdata/requests/in3_whiteList.json diff --git a/test/testdata/requests/invalid.json b/c/test/testdata/requests/invalid.json similarity index 100% rename from test/testdata/requests/invalid.json rename to c/test/testdata/requests/invalid.json diff --git a/c/test/testdata/requests/ipfs_get.json b/c/test/testdata/requests/ipfs_get.json new file mode 100644 index 000000000..22e7cc4fb --- /dev/null +++ b/c/test/testdata/requests/ipfs_get.json @@ -0,0 +1,102 @@ +[ + { + "descr": "utf8", + "chainId": "0x7d0", + "request": { + "id": 1, + "jsonrpc": "2.0", + "method": "ipfs_get", + "params": [ + "QmWYddCPs7uR9EvHNCZzpguVFVNfHc6aM3hPVzPdAEESMc", + "utf8" + ] + }, + "response": [ + { + "id": 1, + "result": "1", + "jsonrpc": "2.0" + } + ] + }, + { + "descr": "utf8", + "chainId": "0x7d0", + "request": { + "id": 1, + "jsonrpc": "2.0", + "method": "ipfs_get", + "params": [ + "QmRNW9kJMUuP7dY7YPSxTCLMS9wMYRTADZ5fYf9EHWCabc", + "utf8" + ] + }, + "response": [ + { + "id": 1, + "result": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", + "jsonrpc": "2.0" + } + ] + }, + { + "descr": "hex", + "chainId": "0x7d0", + "request": { + "id": 1, + "jsonrpc": "2.0", + "method": "ipfs_get", + "params": [ + "QmPLrtpXZLUBF24Vu5NXqJg4w4sFYSCFLpWVqqSvmUkL1V", + "hex" + ] + }, + "response": [ + { + "id": 1, + "result": "01020304FF", + "jsonrpc": "2.0" + } + ] + }, + { + "descr": "hex long", + "chainId": "0x7d0", + "request": { + "id": 1, + "jsonrpc": "2.0", + "method": "ipfs_get", + "params": [ + "QmaprwXVzwoBR2qVi3wxGAZsYTHqWjExXjPCFJsiND14Fb", + "hex" + ] + }, + "response": [ + { + "id": 1, + "result": "f870830d01cd85057344cdae83015f9094f21051abfe6ac49da790394f2f96fb2ea873efef880df38151b24fcc808026a01d139a50af6cdccf1b76a689a74a00050ae3429454b455473cd048d831ee4ab7a079e558cb7ee74b444ff4ba96035987a04ad6dfaf6addb460208f7a74873bc804", + "jsonrpc": "2.0" + } + ] + }, + { + "descr": "base64", + "chainId": "0x7d0", + "request": { + "id": 1, + "jsonrpc": "2.0", + "method": "ipfs_get", + "params": [ + "QmUXTtySmd7LD4p6RG6rZW6RuUuPZXTtNMmRQ6DSQo3aMw", + "base64" + ] + }, + "response": [ + { + "id": 1, + "result": "SGVsbG8gV29ybGQ=", + "jsonrpc": "2.0" + } + ] + } +] diff --git a/c/test/testdata/requests/ipfs_put.json b/c/test/testdata/requests/ipfs_put.json new file mode 100644 index 000000000..60dd86eae --- /dev/null +++ b/c/test/testdata/requests/ipfs_put.json @@ -0,0 +1,102 @@ +[ + { + "descr": "utf8", + "chainId": "0x7d0", + "request": { + "id": 1, + "jsonrpc": "2.0", + "method": "ipfs_put", + "params": [ + "1", + "utf8" + ] + }, + "response": [ + { + "id": 1, + "result": "QmWYddCPs7uR9EvHNCZzpguVFVNfHc6aM3hPVzPdAEESMc", + "jsonrpc": "2.0" + } + ] + }, + { + "descr": "utf8", + "chainId": "0x7d0", + "request": { + "id": 1, + "jsonrpc": "2.0", + "method": "ipfs_put", + "params": [ + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", + "utf8" + ] + }, + "response": [ + { + "id": 1, + "result": "QmRNW9kJMUuP7dY7YPSxTCLMS9wMYRTADZ5fYf9EHWCabc", + "jsonrpc": "2.0" + } + ] + }, + { + "descr": "hex", + "chainId": "0x7d0", + "request": { + "id": 1, + "jsonrpc": "2.0", + "method": "ipfs_put", + "params": [ + "01020304FF", + "hex" + ] + }, + "response": [ + { + "id": 1, + "result": "QmPLrtpXZLUBF24Vu5NXqJg4w4sFYSCFLpWVqqSvmUkL1V", + "jsonrpc": "2.0" + } + ] + }, + { + "descr": "hex long", + "chainId": "0x7d0", + "request": { + "id": 1, + "jsonrpc": "2.0", + "method": "ipfs_put", + "params": [ + "f870830d01cd85057344cdae83015f9094f21051abfe6ac49da790394f2f96fb2ea873efef880df38151b24fcc808026a01d139a50af6cdccf1b76a689a74a00050ae3429454b455473cd048d831ee4ab7a079e558cb7ee74b444ff4ba96035987a04ad6dfaf6addb460208f7a74873bc804", + "hex" + ] + }, + "response": [ + { + "id": 1, + "result": "QmaprwXVzwoBR2qVi3wxGAZsYTHqWjExXjPCFJsiND14Fb", + "jsonrpc": "2.0" + } + ] + }, + { + "descr": "base64", + "chainId": "0x7d0", + "request": { + "id": 1, + "jsonrpc": "2.0", + "method": "ipfs_put", + "params": [ + "SGVsbG8gV29ybGQ=", + "base64" + ] + }, + "response": [ + { + "id": 1, + "result": "QmUXTtySmd7LD4p6RG6rZW6RuUuPZXTtNMmRQ6DSQo3aMw", + "jsonrpc": "2.0" + } + ] + } +] diff --git a/test/testdata/requests/transitions_test.json b/c/test/testdata/requests/transitions_test.json similarity index 100% rename from test/testdata/requests/transitions_test.json rename to c/test/testdata/requests/transitions_test.json diff --git a/test/testdata/requests/uncles.json b/c/test/testdata/requests/uncles.json similarity index 100% rename from test/testdata/requests/uncles.json rename to c/test/testdata/requests/uncles.json diff --git a/test/testdata/requests/web3_sha3.json b/c/test/testdata/requests/web3_sha3.json similarity index 100% rename from test/testdata/requests/web3_sha3.json rename to c/test/testdata/requests/web3_sha3.json diff --git a/test/testdata/validatorlist_kovan.json b/c/test/testdata/validatorlist_kovan.json similarity index 100% rename from test/testdata/validatorlist_kovan.json rename to c/test/testdata/validatorlist_kovan.json diff --git a/test/testdata/validatorlist_tobalaba.json b/c/test/testdata/validatorlist_tobalaba.json similarity index 100% rename from test/testdata/validatorlist_tobalaba.json rename to c/test/testdata/validatorlist_tobalaba.json diff --git a/test/unit_tests/test_abi.c b/c/test/unit_tests/test_abi.c similarity index 97% rename from test/unit_tests/test_abi.c rename to c/test/unit_tests/test_abi.c index bef9b1b5a..25f86e98b 100644 --- a/test/unit_tests/test_abi.c +++ b/c/test/unit_tests/test_abi.c @@ -202,6 +202,8 @@ static void test_abi_decode_edge_cases() { } static void test_abi_tuples() { + TEST_ABI("(bytes4,string)", "[\"0x0259ba8c\",\"https://search-test-usn.slock.it\"]", + "0259ba8c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002068747470733a2f2f7365617263682d746573742d75736e2e736c6f636b2e6974") TEST_ABI("(address,string)", "[\"0x1234567890123456789012345678901234567890\",\"xyz\"]", "00000000000000000000000012345678901234567890123456789012345678900000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000378797a0000000000000000000000000000000000000000000000000000000000") TEST_ABI("address,string,(uint8,string)", "[\"0x1234567890123456789012345678901234567890\",\"xyz\",\"0xff\",\"abc\"]", diff --git a/test/unit_tests/test_binary_encoding.c b/c/test/unit_tests/test_binary_encoding.c similarity index 100% rename from test/unit_tests/test_binary_encoding.c rename to c/test/unit_tests/test_binary_encoding.c diff --git a/test/unit_tests/test_bitset.c b/c/test/unit_tests/test_bitset.c similarity index 100% rename from test/unit_tests/test_bitset.c rename to c/test/unit_tests/test_bitset.c diff --git a/test/unit_tests/test_cache.c b/c/test/unit_tests/test_cache.c similarity index 95% rename from test/unit_tests/test_cache.c rename to c/test/unit_tests/test_cache.c index 3ab9cf172..3cae0d945 100644 --- a/test/unit_tests/test_cache.c +++ b/c/test/unit_tests/test_cache.c @@ -57,7 +57,7 @@ static in3_ret_t test_transport(in3_request_t* req) { char* buffer = NULL; long length; - FILE* f = fopen("../test/testdata/requests/in3_nodeList.json", "r"); + FILE* f = fopen("../c/test/testdata/requests/in3_nodeList.json", "r"); if (f) { fseek(f, 0, SEEK_END); length = ftell(f); @@ -76,7 +76,7 @@ static in3_ret_t test_transport(in3_request_t* req) { perror("getcwd() error"); return 1; } - printf("Error coudl not find the testdata 'test/testdata/requests/in3_nodeList.json'\n"); + printf("Error coudl not find the testdata 'c/test/testdata/requests/in3_nodeList.json'\n"); exit(1); } @@ -104,7 +104,14 @@ static bytes_t* cache_get_item(void* cptr, char* key) { static void cache_set_item(void* cptr, char* key, bytes_t* value) { cache_t* cache = (cache_t*) cptr; int i = 0; - while (i < MAX_ENTRIES && cache->keys[i]) i++; + while (i < MAX_ENTRIES && cache->keys[i]) { + if (strcmp(cache->keys[i], key) == 0) { + _free(cache->keys[i]); + _free(cache->values[i].data); + break; + } + i++; + } cache->keys[i] = strdup(key); cache->values[i] = bytes(malloc(value->len), value->len); memcpy(cache->values[i].data, value->data, value->len); @@ -126,10 +133,7 @@ static void test_cache() { c->transport = test_transport; setup_test_cache(c); - in3_chain_t* chain = NULL; - for (int i = 0; i < c->chains_length; i++) { - if (c->chains[i].chain_id == 0x1) chain = &c->chains[i]; - } + in3_chain_t* chain = in3_find_chain(c, 0x1); TEST_ASSERT_TRUE(chain != NULL); TEST_ASSERT_EQUAL_INT32(2, chain->nodelist_length); @@ -152,10 +156,7 @@ static void test_cache() { c2->transport = test_transport; c2->chain_id = c->chain_id; in3_configure(c2, "{\"chainId\":\"0x1\"}"); - in3_chain_t* chain2 = NULL; - for (int i = 0; i < c2->chains_length; i++) { - if (c2->chains[i].chain_id == 0x1) chain2 = &c2->chains[i]; - } + in3_chain_t* chain2 = in3_find_chain(c2, 0x1); // the nodeList should have 2 nodes still TEST_ASSERT_EQUAL_INT32(2, chain2->nodelist_length); diff --git a/test/unit_tests/test_core.c b/c/test/unit_tests/test_core.c similarity index 100% rename from test/unit_tests/test_core.c rename to c/test/unit_tests/test_core.c diff --git a/test/unit_tests/test_ethapi.c b/c/test/unit_tests/test_ethapi.c similarity index 97% rename from test/unit_tests/test_ethapi.c rename to c/test/unit_tests/test_ethapi.c index 79ab5d406..f17d88bb2 100644 --- a/test/unit_tests/test_ethapi.c +++ b/c/test/unit_tests/test_ethapi.c @@ -62,12 +62,11 @@ in3_t* init_in3(in3_transport_send custom_transport, chain_id_t chain) { in3 = in3_for_chain(0); if (custom_transport) in3->transport = custom_transport; // use curl to handle the requests - in3->request_count = 1; // number of requests to sendp - in3->include_code = 1; - in3->max_attempts = 1; - in3->request_count = 1; // number of requests to sendp - in3->chain_id = chain; - in3->auto_update_list = false; + in3->request_count = 1; // number of requests to sendp + in3->max_attempts = 1; + in3->request_count = 1; // number of requests to sendp + in3->chain_id = chain; + in3->flags = FLAGS_STATS | FLAGS_INCLUDE_CODE; // no autoupdate nodelist for (int i = 0; i < in3->chains_length; i++) in3->chains[i].nodelist_upd8_params = NULL; return in3; } @@ -220,7 +219,7 @@ static void test_get_logs() { while (logs) { l = logs; logs = logs->next; - log_free(l); + eth_log_free(l); } eth_uninstallFilter(in3, fid); json_free(jopt); @@ -265,12 +264,21 @@ static void test_get_tx_hash(void) { // get the tx by hash eth_tx_t* tx = eth_getTransactionByHash(in3, tx_hash); TEST_ASSERT_NOT_NULL(tx); + TEST_ASSERT_EQUAL(36, tx->data.len); + TEST_ASSERT_EQUAL(1, tx->data.data[35]); // based on the mockdata the + TEST_ASSERT_EQUAL(0x17a7a4, tx->block_number); + TEST_ASSERT_EQUAL(0x31, tx->nonce); + TEST_ASSERT_EQUAL(0xa3d7, tx->gas); + TEST_ASSERT_EQUAL(0, tx->transaction_index); + + free(tx); // get non-existent txn in3->transport = test_transport; add_response("eth_getTransactionByHash", "[\"0x9241334b0b568ef6cd44d80e37a0ce14de05557a3cfa98b5fd1d006204caf164\"]", "null", NULL, NULL); tx = eth_getTransactionByHash(in3, tx_hash); TEST_ASSERT_NULL(tx); + free(tx); in3_free(in3); } @@ -328,10 +336,9 @@ static void test_eth_gas_price(void) { static void test_eth_getblock_number(void) { in3_t* in3 = init_in3(mock_transport, 0x5); eth_block_t* block = eth_getBlockByNumber(in3, BLKNUM(1692767), true); - // if the result is null there was an error an we can get the latest error message from eth_lat_error() - free(block); TEST_ASSERT_EQUAL_INT64(block->number, 1692767); + free(block); in3_free(in3); } @@ -487,13 +494,13 @@ static void test_get_uncle_blknum_index(void) { static void test_utilities(void) { uint256_t u256 = {0}; - // hex_to_bytes("0xac1b824795e1eb1f", -1, u256.data, 32); bytes32_t var; + memset(var, 0, 32); hex_to_bytes("0xac1b824795e1eb1f", -1, var, 32); uint256_set(var, 32, u256.data); long double d = as_double(u256); TEST_ASSERT_TRUE(d > 0.0); - uint64_t u64 = as_long(u256); + uint64_t l = as_long(u256); } static void test_eth_call_multiple(void) { diff --git a/test/unit_tests/test_filter.c b/c/test/unit_tests/test_filter.c similarity index 95% rename from test/unit_tests/test_filter.c rename to c/test/unit_tests/test_filter.c index dabff5c1c..e2ee5f32f 100644 --- a/test/unit_tests/test_filter.c +++ b/c/test/unit_tests/test_filter.c @@ -62,11 +62,11 @@ static void test_filter() { in3_register_eth_basic(); - in3_t* c = in3_for_chain(ETH_CHAIN_ID_MAINNET); - c->transport = test_transport; - c->auto_update_list = false; - c->proof = PROOF_NONE; - c->signature_count = 0; + in3_t* c = in3_for_chain(ETH_CHAIN_ID_MAINNET); + c->transport = test_transport; + c->flags = FLAGS_STATS; + c->proof = PROOF_NONE; + c->signature_count = 0; for (int i = 0; i < c->chains_length; i++) c->chains[i].nodelist_upd8_params = NULL; @@ -184,11 +184,11 @@ static void test_filter_from_block_manip() { static void test_filter_creation() { in3_register_eth_basic(); - in3_t* c = in3_for_chain(ETH_CHAIN_ID_MAINNET); - c->transport = test_transport; - c->auto_update_list = false; - c->proof = PROOF_NONE; - c->signature_count = 0; + in3_t* c = in3_for_chain(ETH_CHAIN_ID_MAINNET); + c->transport = test_transport; + c->flags = FLAGS_STATS; + c->proof = PROOF_NONE; + c->signature_count = 0; for (int i = 0; i < c->chains_length; i++) c->chains[i].nodelist_upd8_params = NULL; @@ -211,11 +211,11 @@ static void test_filter_creation() { static void test_filter_changes() { in3_register_eth_basic(); - in3_t* c = in3_for_chain(ETH_CHAIN_ID_MAINNET); - c->transport = test_transport; - c->auto_update_list = false; - c->proof = PROOF_NONE; - c->signature_count = 0; + in3_t* c = in3_for_chain(ETH_CHAIN_ID_MAINNET); + c->transport = test_transport; + c->flags = FLAGS_STATS; + c->proof = PROOF_NONE; + c->signature_count = 0; for (int i = 0; i < c->chains_length; i++) c->chains[i].nodelist_upd8_params = NULL; @@ -274,7 +274,7 @@ static void test_filter_changes() { add_response("eth_blockNumber", "[]", "\"0x84cf60\"", NULL, NULL); TEST_ASSERT_EQUAL(2, filter_add(c, FILTER_BLOCK, NULL)); add_response("eth_blockNumber", "[]", "\"0x84cf60\"", NULL, NULL); - ctx = ctx_new(c, "{\"method\":\"eth_getBlockByNumber\",\"params\":[\"latest\",false]}"); + ctx = ctx_new(c, "{\"method\":\"eth_getBlockByNumber\",\"params\":[\"latest\",false]}"); result = sb_new(""); TEST_ASSERT_EQUAL(IN3_OK, filter_get_changes(ctx, 2, result)); TEST_ASSERT_EQUAL_STRING("[]", result->data); diff --git a/c/test/unit_tests/test_ipfs_api.c b/c/test/unit_tests/test_ipfs_api.c new file mode 100644 index 000000000..183eb017e --- /dev/null +++ b/c/test/unit_tests/test_ipfs_api.c @@ -0,0 +1,111 @@ +/******************************************************************************* + * This file is part of the Incubed project. + * Sources: https://github.com/slockit/in3-c + * + * Copyright (C) 2018-2019 slock.it GmbH, Blockchains LLC + * + * + * COMMERCIAL LICENSE USAGE + * + * Licensees holding a valid commercial license may use this file in accordance + * with the commercial license agreement provided with the Software or, alternatively, + * in accordance with the terms contained in a written agreement between you and + * slock.it GmbH/Blockchains LLC. For licensing terms and conditions or further + * information please contact slock.it at in3@slock.it. + * + * Alternatively, this file may be used under the AGPL license as follows: + * + * AGPL LICENSE USAGE + * + * This program is free software: you can redistribute it and/or modify it under the + * terms of the GNU Affero General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + * [Permissions of this strong copyleft license are conditioned on making available + * complete source code of licensed works and modifications, which include larger + * works using a licensed work, under the same license. Copyright and license notices + * must be preserved. Contributors provide an express grant of patent rights.] + * You should have received a copy of the GNU Affero General Public License along + * with this program. If not, see . + *******************************************************************************/ + +#ifndef TEST +#define TEST +#endif +#ifndef TEST +#define DEBUG +#endif + +#include "../../src/api/ipfs/ipfs_api.h" +#include "../../src/verifier/ipfs/ipfs.h" +#include "../test_utils.h" +#include "../util/transport.h" +#include + +#define LOREM_IPSUM "Lorem ipsum dolor sit amet" +#define LOREM_IPSUM_LONG "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation " \ + "ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint " \ + "occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." +#define LOREM_IPSUM_LONG_B64 "TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFV0IGV" \ + "uaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZSBpcnVyZSBkb2xvciBpbi" \ + "ByZXByZWhlbmRlcml0IGluIHZvbHVwdGF0ZSB2ZWxpdCBlc3NlIGNpbGx1bSBkb2xvcmUgZXUgZnVnaWF0IG51bGxhIHBhcmlhdHVyLiBFeGNlcHRldXIgc2ludCBvY2NhZWNhdCBjdXBpZGF0YXQgbm9uIHByb2lkZW50LCBzd" \ + "W50IGluIGN1bHBhIHF1aSBvZmZpY2lhIGRlc2VydW50IG1vbGxpdCBhbmltIGlkIGVzdCBsYWJvcnVtLg==" + +static in3_t* in3_init_test(chain_id_t chain) { + in3_t* in3 = in3_for_chain(chain); + in3->transport = test_transport; + in3_configure(in3, "{\"autoUpdateList\":false,\"nodes\":{\"0x7d0\": {\"needsUpdate\":false}}}"); + return in3; +} + +void test_in3_ipfs_api() { + in3_t* in3 = in3_init_test(ETH_CHAIN_ID_IPFS); + bytes_t b = {.data = (uint8_t*) LOREM_IPSUM, .len = strlen(LOREM_IPSUM)}; + + add_response("ipfs_put", "[\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQ=\",\"base64\"]", "\"QmbGySCLuGxu2GxVLYWeqJW9XeyjGFvpoZAhGhXDGEUQu8\"", NULL, NULL); + char* multihash = ipfs_put(in3, &b); + TEST_ASSERT_EQUAL_STRING("QmbGySCLuGxu2GxVLYWeqJW9XeyjGFvpoZAhGhXDGEUQu8", multihash); + + add_response("ipfs_get", "[\"QmbGySCLuGxu2GxVLYWeqJW9XeyjGFvpoZAhGhXDGEUQu8\",\"base64\"]", "\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQ=\"", NULL, NULL); + bytes_t* content = ipfs_get(in3, multihash); + + TEST_ASSERT_EQUAL_MEMORY(LOREM_IPSUM, content->data, content->len); + + free(multihash); + b_free(content); + in3_free(in3); +} + +void test_in3_ipfs_api_long() { + in3_t* in3 = in3_init_test(ETH_CHAIN_ID_IPFS); + bytes_t b = {.data = (uint8_t*) LOREM_IPSUM_LONG, .len = strlen(LOREM_IPSUM_LONG)}; + + add_response("ipfs_put", "[\"" LOREM_IPSUM_LONG_B64 "\",\"base64\"]", "\"QmdefnkMuNaAro8sT2i5rufFbJmfd621UFsaoTaaL1Goh9\"", NULL, NULL); + char* multihash = ipfs_put(in3, &b); + TEST_ASSERT_EQUAL_STRING("QmdefnkMuNaAro8sT2i5rufFbJmfd621UFsaoTaaL1Goh9", multihash); + + add_response("ipfs_get", "[\"QmdefnkMuNaAro8sT2i5rufFbJmfd621UFsaoTaaL1Goh9\",\"base64\"]", "\"" LOREM_IPSUM_LONG_B64 "\"", NULL, NULL); + bytes_t* content = ipfs_get(in3, multihash); + + TEST_ASSERT_EQUAL_MEMORY(LOREM_IPSUM_LONG, content->data, content->len); + + free(multihash); + b_free(content); + in3_free(in3); +} + +/* + * Main + */ +int main() { + in3_register_ipfs(); + in3_log_set_quiet(true); + + TESTS_BEGIN(); + RUN_TEST(test_in3_ipfs_api); + RUN_TEST(test_in3_ipfs_api_long); + return TESTS_END(); +} diff --git a/test/unit_tests/test_key_hash.c b/c/test/unit_tests/test_key_hash.c similarity index 91% rename from test/unit_tests/test_key_hash.c rename to c/test/unit_tests/test_key_hash.c index cfd4ea924..66dd5a2cf 100644 --- a/test/unit_tests/test_key_hash.c +++ b/c/test/unit_tests/test_key_hash.c @@ -48,7 +48,7 @@ static void test_key_hash_collisions(); // Internal implementation that mirrors key() from data.c with IN3_DONT_HASH_KEYS not defined d_key_t key_(const char* c) { uint16_t val = 0; - size_t l = strlen(c); + size_t l = strlen(c); for (; l; l--, c++) val ^= *c | val << 7; return val; } @@ -81,8 +81,6 @@ static int compare(const void* a, const void* b) { } static uint16_t collision(uint16_t* hashes, size_t sz) { - qsort(hashes, sz, sizeof(uint16_t), compare); - bool dup = false; int i = 1; for (; i < sz; ++i) { @@ -102,7 +100,8 @@ static char* filetostr(const char* filename) { fseek(f, 0, SEEK_END); length = ftell(f); fseek(f, 0, SEEK_SET); - buffer = _malloc(length); + buffer = _malloc(length + 1); + buffer[length] = 0; if (buffer) { fread(buffer, 1, length, f); } @@ -117,7 +116,7 @@ void test_key_hash_collisions() { TEST_ASSERT(hashes != NULL); const char* delim = "\n"; - char* keyfilestr = filetostr("../src/core/client/keys.h"); + char* keyfilestr = filetostr("../c/src/core/client/keys.h"); TEST_ASSERT_MESSAGE(keyfilestr != NULL, "File keys.h not found!"); // skip legal header char* keys = strstr(keyfilestr, "*/"); @@ -130,16 +129,21 @@ void test_key_hash_collisions() { hashes = _realloc(hashes, cap * 2 * sizeof(*hashes), cap); cap *= 2; } - char* kstr = substr(tok, "key(\"", "\")"); + char* kstr= substr(tok, "key(\"", "\")"); if (kstr) { hashes[i] = key_(kstr); #ifdef DEBUG printf("\"%s\" => [%u]\n", kstr, hashes[i]); #endif } + else{ + hashes[i]= 0; + } } + uint16_t nc = -1; + qsort(hashes, i, sizeof(uint16_t), compare); + nc = collision(hashes, i); + TEST_ASSERT_EQUAL(0, nc); _free(keyfilestr); - - TEST_ASSERT_EQUAL(0, collision(hashes, i)); _free(hashes); } \ No newline at end of file diff --git a/test/unit_tests/test_logging.c b/c/test/unit_tests/test_logging.c similarity index 98% rename from test/unit_tests/test_logging.c rename to c/test/unit_tests/test_logging.c index 51172addc..7c360923b 100644 --- a/test/unit_tests/test_logging.c +++ b/c/test/unit_tests/test_logging.c @@ -101,7 +101,8 @@ static void test_prefix(void) { fclose(fp); fp = fopen("test.log", "rb"); - log = malloc(size); + log = _malloc(size + 1); + log[size] = 0; fread(log, sizeof(char), size, fp); TEST_ASSERT_EQUAL_STRING_LEN(log, prefix, strlen(prefix)); fclose(fp); diff --git a/c/test/unit_tests/test_nodelist.c b/c/test/unit_tests/test_nodelist.c new file mode 100644 index 000000000..fd95612ed --- /dev/null +++ b/c/test/unit_tests/test_nodelist.c @@ -0,0 +1,681 @@ +/******************************************************************************* + * This file is part of the Incubed project. + * Sources: https://github.com/slockit/in3-c + * + * Copyright (C) 2018-2019 slock.it GmbH, Blockchains LLC + * + * + * COMMERCIAL LICENSE USAGE + * + * Licensees holding a valid commercial license may use this file in accordance + * with the commercial license agreement provided with the Software or, alternatively, + * in accordance with the terms contained in a written agreement between you and + * slock.it GmbH/Blockchains LLC. For licensing terms and conditions or further + * information please contact slock.it at in3@slock.it. + * + * Alternatively, this file may be used under the AGPL license as follows: + * + * AGPL LICENSE USAGE + * + * This program is free software: you can redistribute it and/or modify it under the + * terms of the GNU Affero General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + * [Permissions of this strong copyleft license are conditioned on making available + * complete source code of licensed works and modifications, which include larger + * works using a licensed work, under the same license. Copyright and license notices + * must be preserved. Contributors provide an express grant of patent rights.] + * You should have received a copy of the GNU Affero General Public License along + * with this program. If not, see . + *******************************************************************************/ + +#ifndef TEST +#define TEST +#define DEBUG +#endif + +#include "../../src/api/eth1/eth_api.h" +#include "../../src/core/client/nodelist.h" +#include "../../src/verifier/eth1/full/eth_full.h" +#include "../src/core/util/log.h" +#include "../test_utils.h" +#include "../util/transport.h" + +#define ADD_RESPONSE_NODELIST_3(last_block) add_response("in3_nodeList", \ + "[0,\"0x0000000100000002000000030000000400000005000000060000000700000008\",[]]", \ + "{" \ + " \"nodes\": [{" \ + " \"url\": \"https://in3-v2.slock.it/mainnet/nd-1\"," \ + " \"address\": \"0x45d45e6ff99e6c34a235d263965910298985fcfe\"," \ + " \"index\": 0," \ + " \"deposit\": \"0x2386f26fc10000\"," \ + " \"props\": \"0x6000001dd\"," \ + " \"timeout\": 3456000," \ + " \"registerTime\": 1576224418," \ + " \"weight\": 2000" \ + " }," \ + " {" \ + " \"url\": \"https://in3-v2.slock.it/mainnet/nd-2\"," \ + " \"address\": \"0x1fe2e9bf29aa1938859af64c413361227d04059a\"," \ + " \"index\": 1," \ + " \"deposit\": \"0x2386f26fc10000\"," \ + " \"props\": \"0x6000001dd\"," \ + " \"timeout\": 3456000," \ + " \"registerTime\": 1576224531," \ + " \"weight\": 2000" \ + " }," \ + " {" \ + " \"url\": \"https://in3-v2.slock.it/mainnet/nd-3\"," \ + " \"address\": \"0x945f75c0408c0026a3cd204d36f5e47745182fd4\"," \ + " \"index\": 2," \ + " \"deposit\": \"0x2386f26fc10000\"," \ + " \"props\": \"0x6000001dd\"," \ + " \"timeout\": 3456000," \ + " \"registerTime\": 1576224604," \ + " \"weight\": 2000" \ + " }]," \ + " \"contract\": \"0xac1b824795e1eb1f6e609fe0da9b9af8beaab60f\"," \ + " \"registryId\": \"0x23d5345c5c13180a8080bd5ddbe7cde64683755dcce6e734d95b7b573845facb\"," \ + " \"lastBlockNumber\": " last_block "," \ + " \"totalServers\": 3" \ + "}", \ + NULL, \ + NULL) +#define ADD_RESPONSE_NODELIST_2(last_block) add_response("in3_nodeList", \ + "[0,\"0x0000000100000002000000030000000400000005000000060000000700000008\",[]]", \ + "{" \ + " \"nodes\": [{" \ + " \"url\": \"https://in3-v2.slock.it/mainnet/nd-1\"," \ + " \"address\": \"0x45d45e6ff99e6c34a235d263965910298985fcfe\"," \ + " \"index\": 0," \ + " \"deposit\": \"0x2386f26fc10000\"," \ + " \"props\": \"0x6000001dd\"," \ + " \"timeout\": 3456000," \ + " \"registerTime\": 1576224418," \ + " \"weight\": 2000" \ + " }," \ + " {" \ + " \"url\": \"https://in3-v2.slock.it/mainnet/nd-2\"," \ + " \"address\": \"0x1fe2e9bf29aa1938859af64c413361227d04059a\"," \ + " \"index\": 1," \ + " \"deposit\": \"0x2386f26fc10000\"," \ + " \"props\": \"0x6000001dd\"," \ + " \"timeout\": 3456000," \ + " \"registerTime\": 1576224531," \ + " \"weight\": 2000" \ + " }]," \ + " \"contract\": \"0xac1b824795e1eb1f6e609fe0da9b9af8beaab60f\"," \ + " \"registryId\": \"0x23d5345c5c13180a8080bd5ddbe7cde64683755dcce6e734d95b7b573845facb\"," \ + " \"lastBlockNumber\": " last_block "," \ + " \"totalServers\": 2" \ + "}", \ + NULL, \ + NULL); +#define ADD_RESPONSE_BLOCK_NUMBER(nl, blk, blk_hex) add_response("eth_blockNumber", \ + "[]", \ + "\"" blk_hex "\"", \ + NULL, \ + "{" \ + " \"lastValidatorChange\": 0," \ + " \"lastNodeList\": " nl "," \ + " \"execTime\": 59," \ + " \"rpcTime\": 59," \ + " \"rpcCount\": 1," \ + " \"currentBlock\": " blk "," \ + " \"version\": \"2.0.0\"" \ + "}") + +IN3_IMPORT_TEST bool in3_node_props_match(in3_node_props_t np_config, in3_node_props_t np); + +static void test_capabilities(void) { + in3_node_props_t npclient, npserver; + + in3_node_props_init(&npclient); + in3_node_props_init(&npserver); + TEST_ASSERT(in3_node_props_match(npclient, npserver)); + TEST_ASSERT_EQUAL(in3_node_props_get(npclient, NODE_PROP_MIN_BLOCK_HEIGHT), 0); + TEST_ASSERT_FALSE(in3_node_props_get(npclient, NODE_PROP_PROOF)); + TEST_ASSERT_FALSE(in3_node_props_matches(npclient, NODE_PROP_HTTP)); + + in3_node_props_init(&npclient); + in3_node_props_set(&npclient, NODE_PROP_MIN_BLOCK_HEIGHT, 10); + in3_node_props_init(&npserver); + in3_node_props_set(&npserver, NODE_PROP_PROOF, true); + in3_node_props_set(&npserver, NODE_PROP_MULTICHAIN, true); + in3_node_props_set(&npserver, NODE_PROP_ARCHIVE, true); + in3_node_props_set(&npserver, NODE_PROP_HTTP, true); + in3_node_props_set(&npserver, NODE_PROP_BINARY, true); + in3_node_props_set(&npserver, NODE_PROP_ONION, true); + in3_node_props_set(&npserver, NODE_PROP_MIN_BLOCK_HEIGHT, 6); + TEST_ASSERT_TRUE(in3_node_props_match(npclient, npserver)); + + in3_node_props_init(&npclient); + in3_node_props_set(&npclient, NODE_PROP_PROOF, true); + in3_node_props_set(&npclient, NODE_PROP_ARCHIVE, true); + in3_node_props_set(&npclient, NODE_PROP_BINARY, true); + in3_node_props_set(&npclient, NODE_PROP_SIGNER, true); + in3_node_props_init(&npserver); + in3_node_props_set(&npserver, NODE_PROP_PROOF, true); + in3_node_props_set(&npserver, NODE_PROP_MULTICHAIN, true); + in3_node_props_set(&npserver, NODE_PROP_ARCHIVE, true); + in3_node_props_set(&npserver, NODE_PROP_HTTP, true); + in3_node_props_set(&npserver, NODE_PROP_BINARY, true); + in3_node_props_set(&npserver, NODE_PROP_ONION, true); + in3_node_props_set(&npserver, NODE_PROP_SIGNER, true); + in3_node_props_set(&npserver, NODE_PROP_DATA, true); + in3_node_props_set(&npserver, NODE_PROP_STATS, true); + TEST_ASSERT(in3_node_props_match(npclient, npserver)); + + in3_node_props_init(&npclient); + in3_node_props_init(&npserver); + in3_node_props_set(&npserver, NODE_PROP_PROOF, true); + in3_node_props_set(&npserver, NODE_PROP_MULTICHAIN, true); + in3_node_props_set(&npserver, NODE_PROP_ARCHIVE, true); + in3_node_props_set(&npserver, NODE_PROP_HTTP, true); + in3_node_props_set(&npserver, NODE_PROP_BINARY, true); + in3_node_props_set(&npserver, NODE_PROP_ONION, true); + TEST_ASSERT(in3_node_props_match(npclient, npserver)); + + in3_node_props_init(&npclient); + in3_node_props_set(&npclient, NODE_PROP_PROOF, true); + in3_node_props_init(&npserver); + in3_node_props_set(&npserver, NODE_PROP_HTTP, true); + TEST_ASSERT_FALSE(in3_node_props_match(npclient, npserver)); + + in3_node_props_init(&npclient); + in3_node_props_set(&npclient, NODE_PROP_MIN_BLOCK_HEIGHT, 5); + in3_node_props_init(&npserver); + in3_node_props_set(&npserver, NODE_PROP_MIN_BLOCK_HEIGHT, 6); + TEST_ASSERT_FALSE(in3_node_props_match(npclient, npserver)); + + in3_node_props_init(&npclient); + in3_node_props_set(&npclient, NODE_PROP_MIN_BLOCK_HEIGHT, 1); + in3_node_props_init(&npserver); + in3_node_props_set(&npserver, NODE_PROP_MIN_BLOCK_HEIGHT, 1); + TEST_ASSERT_TRUE(in3_node_props_match(npclient, npserver)); + + in3_node_props_init(&npclient); + in3_node_props_set(&npclient, NODE_PROP_MIN_BLOCK_HEIGHT, 0); + in3_node_props_init(&npserver); + in3_node_props_set(&npserver, NODE_PROP_MIN_BLOCK_HEIGHT, 6); + TEST_ASSERT_TRUE(in3_node_props_match(npclient, npserver)); + + in3_node_props_init(&npclient); + in3_node_props_set(&npclient, NODE_PROP_PROOF, true); + in3_node_props_set(&npclient, NODE_PROP_HTTP, true); + in3_node_props_set(&npclient, NODE_PROP_BINARY, true); + in3_node_props_set(&npclient, NODE_PROP_MIN_BLOCK_HEIGHT, 5); + in3_node_props_init(&npserver); + npserver = 1U | (1U << 3U) | (1U << 4U) | (5UL << 32U); + TEST_ASSERT_EQUAL_MEMORY(&npclient, &npserver, sizeof(in3_node_props_t)); + + in3_node_props_init(&npclient); + in3_node_props_set(&npclient, NODE_PROP_MIN_BLOCK_HEIGHT, 5); + TEST_ASSERT_EQUAL(in3_node_props_get(npclient, NODE_PROP_MIN_BLOCK_HEIGHT), 5); + in3_node_props_set(&npclient, NODE_PROP_MIN_BLOCK_HEIGHT, 0); + TEST_ASSERT_EQUAL(in3_node_props_get(npclient, NODE_PROP_MIN_BLOCK_HEIGHT), 0); + in3_node_props_set(&npclient, NODE_PROP_MIN_BLOCK_HEIGHT, 255); + TEST_ASSERT_EQUAL(in3_node_props_get(npclient, NODE_PROP_MIN_BLOCK_HEIGHT), 255); +} + +static in3_t* in3_init_test(chain_id_t chain) { + in3_register_eth_full(); + in3_t* in3 = in3_for_chain(chain); + in3->chain_id = chain; + in3->transport = test_transport; + in3->flags |= FLAGS_AUTO_UPDATE_LIST; + return in3; +} + +// Scenario 1: nodelist updated in a very recent block +// Begin with 3 nodes in first nodeList update (always taken from a boot node) which happened at block 87989012 (i.e. `lastBlockNumber`). +// After 200 secs, `eth_blockNumber` returns 87989050 and reports a nodeList update happened at 87989048 (i.e. `lastNodeList`). +// Since, we have set `replace_latest_block` to default (i.e. 6), we postpone the update for `avg_block_time * 6 - (87989050 - 87989048)) = 60` seconds. +// A request now shouldn't trigger a nodeList update. We then go to the future (i.e. to expected update time) and run `eth_blockNumber` +// again; this should trigger a nodeList update. +static void test_nodelist_update_1() { + in3_t* c = in3_init_test(ETH_CHAIN_ID_MAINNET); + c->proof = PROOF_NONE; + c->replace_latest_block = DEF_REPL_LATEST_BLK; + + // start time + uint64_t t = 1; + in3_time(&t); + + // begin with 3 nodes, i.e. one node more than the usual boot nodes + ADD_RESPONSE_BLOCK_NUMBER("87989048", "87989050", "0x53E9B3A"); + ADD_RESPONSE_NODELIST_3("87989012"); + + // fast forward to future, after a recent nodeList update (i.e. 2 blocks back) + t = 200; + in3_time(&t); + + uint64_t blk = eth_blockNumber(c); + TEST_ASSERT_NOT_EQUAL(0, blk); + + in3_chain_t* chain = in3_find_chain(c, ETH_CHAIN_ID_MAINNET); + TEST_ASSERT_EQUAL(chain->nodelist_length, 3); + TEST_ASSERT_NOT_NULL(chain->nodelist_upd8_params); + TEST_ASSERT_EQUAL(chain->nodelist_upd8_params->exp_last_block, 87989048); + + // update must be postponed until block is at least replace_latest_block old + t = 0; + t = in3_time(&t) + (chain->avg_block_time * (c->replace_latest_block - 2)); // store expected update time + TEST_ASSERT_EQUAL(chain->nodelist_upd8_params->timestamp, t); + ADD_RESPONSE_BLOCK_NUMBER("87989048", "87989053", "0x53E9B3D"); + + // another request must not trigger the nodeList update just yet + blk = eth_blockNumber(c); + TEST_ASSERT_NOT_EQUAL(0, blk); + TEST_ASSERT_NOT_NULL(chain->nodelist_upd8_params); + + // fast forward to expected update time + in3_time(&t); + + // reset rand to be deterministic + int s = 0; + in3_rand(&s); + + // any request should now trigger a nodeList update + // in new update node 3 was removed + ADD_RESPONSE_BLOCK_NUMBER("87989048", "87989050", "0x53E9B3A"); + ADD_RESPONSE_NODELIST_2("87989048"); + blk = eth_blockNumber(c); + TEST_ASSERT_NOT_EQUAL(0, blk); + TEST_ASSERT_EQUAL(chain->nodelist_length, 2); + TEST_ASSERT_NULL(chain->nodelist_upd8_params); + + in3_free(c); +} + +// Scenario 2: nodelist updated again while prev nodelist update was postponed +// Begin with 3 nodes in first nodeList update (always taken from a boot node) which happened at block 87989012 (i.e. `lastBlockNumber`). +// After 200 secs, `eth_blockNumber` returns 87989050 and reports a nodeList update happened at 87989049 (i.e. `lastNodeList`). +// Since, we have set `replace_latest_block` to default (i.e. 10), we postpone the update for `avg_block_time * 10 - (87989050 - 87989049)) = 135` seconds. +// `eth_blockNumber` now does not trigger a nodeList update. We move 60 secs ahead in time and do another `eth_blockNumber` which returns 87989054, this again +// does not trigger a nodeList update but reports a newer nodeList update happened at 87989052 (i.e. `lastNodeList`). So, we again postpone +// update. We again move ahead in time just before expected update time and call `eth_blockNumber` to check that nodeList isn't updated. +// We then go to the future (i.e. to expected update time) and run `eth_blockNumber` again; this should trigger a nodeList update. +static void test_nodelist_update_2() { + in3_t* c = in3_init_test(ETH_CHAIN_ID_MAINNET); + c->proof = PROOF_NONE; + c->replace_latest_block = 10; + + // start time + uint64_t t = 1; + in3_time(&t); + + // reset rand to be deterministic + int s = 0; + in3_rand(&s); + + // begin with 3 nodes, i.e. one node more than the usual boot nodes + ADD_RESPONSE_BLOCK_NUMBER("87989049", "87989050", "0x53E9B3A"); + ADD_RESPONSE_NODELIST_3("87989012"); + + // fast forward to future, after a recent nodeList update (i.e. 2 blocks back) + t = 200; + in3_time(&t); + + uint64_t blk = eth_blockNumber(c); + TEST_ASSERT_NOT_EQUAL(0, blk); + + in3_chain_t* chain = in3_find_chain(c, ETH_CHAIN_ID_MAINNET); + TEST_ASSERT_EQUAL(chain->nodelist_length, 3); + TEST_ASSERT_NOT_NULL(chain->nodelist_upd8_params); + TEST_ASSERT_EQUAL(chain->nodelist_upd8_params->exp_last_block, 87989049); + + // update must be postponed until block is at least replace_latest_block old + t = 0; + t = in3_time(&t) + (chain->avg_block_time * (c->replace_latest_block - 1)); // store expected update time + TEST_ASSERT_EQUAL(chain->nodelist_upd8_params->timestamp, t); + + ADD_RESPONSE_BLOCK_NUMBER("87989051", "87989053", "0x53E9B3D"); + // another request must not trigger the nodeList update just yet + blk = eth_blockNumber(c); + TEST_ASSERT_NOT_EQUAL(0, blk); + TEST_ASSERT_NOT_NULL(chain->nodelist_upd8_params); + + // we are told that the nodelist changed again at 87989051, so reverify wait time and update params + TEST_ASSERT_NOT_NULL(chain->nodelist_upd8_params); + TEST_ASSERT_EQUAL(chain->nodelist_upd8_params->exp_last_block, 87989051); + t = 0; + t = in3_time(&t) + (chain->avg_block_time * (c->replace_latest_block - 2)); // store expected update time + TEST_ASSERT_EQUAL(chain->nodelist_upd8_params->timestamp, t); + + // fast forward to expected update time + in3_time(&t); + + // reset rand to be deterministic + s = 0; + in3_rand(&s); + + // any request should now trigger a nodeList update + // in new update node 3 was removed + ADD_RESPONSE_BLOCK_NUMBER("87989048", "87989050", "0x53E9B3A"); + ADD_RESPONSE_NODELIST_2("87989048"); + blk = eth_blockNumber(c); + TEST_ASSERT_NOT_EQUAL(0, blk); + TEST_ASSERT_EQUAL(chain->nodelist_length, 2); + TEST_ASSERT_NULL(chain->nodelist_upd8_params); + + in3_free(c); +} + +// Scenario 3: Usual case +// Begin with 3 nodes in first nodeList update (always taken from a boot node) which happened at block 87989012 (i.e. `lastBlockNumber`). +// After 200 secs, `eth_blockNumber` returns 87989050 and reports a nodeList update happened at 87989038 (i.e. `lastNodeList`). +// A request now should trigger a nodeList update. +static void test_nodelist_update_3() { + in3_t* c = in3_init_test(ETH_CHAIN_ID_MAINNET); + c->proof = PROOF_NONE; + c->replace_latest_block = DEF_REPL_LATEST_BLK; + + // start time + uint64_t t = 1; + in3_time(&t); + + // reset rand to be deterministic + int s = 0; + in3_rand(&s); + + // begin with 3 nodes, i.e. one node more than the usual boot nodes + ADD_RESPONSE_BLOCK_NUMBER("87989038", "87989050", "0x53E9B3A"); + ADD_RESPONSE_NODELIST_3("87989012"); + + t = 200; + in3_time(&t); + + uint64_t blk = eth_blockNumber(c); + TEST_ASSERT_NOT_EQUAL(0, blk); + + in3_chain_t* chain = in3_find_chain(c, ETH_CHAIN_ID_MAINNET); + TEST_ASSERT_EQUAL(chain->nodelist_length, 3); + TEST_ASSERT_NOT_NULL(chain->nodelist_upd8_params); + TEST_ASSERT_EQUAL(chain->nodelist_upd8_params->exp_last_block, 87989038); + + // reset rand to be deterministic + s = 0; + in3_rand(&s); + + // any request should now trigger a nodeList update + ADD_RESPONSE_BLOCK_NUMBER("87989038", "87989050", "0x53E9B3A"); + ADD_RESPONSE_NODELIST_2("87989038"); + blk = eth_blockNumber(c); + TEST_ASSERT_NOT_EQUAL(0, blk); + TEST_ASSERT_EQUAL(chain->nodelist_length, 2); + TEST_ASSERT_NULL(chain->nodelist_upd8_params); + + in3_free(c); +} + +// Scenario 4: node lies about nodeList update by reporting a newer lastNodeList, but gives old nodeList when asked +// Begin with 3 nodes in first nodeList update (always taken from a boot node) which happened at block 87989012 (i.e. `lastBlockNumber`). +// After 200 secs, `eth_blockNumber` returns 87989050 and lies to us saying that a nodeList update happened at 87989038 (i.e. `lastNodeList`). +// A request now should trigger a nodeList update (taken from same node that reported the update). Because the node lied to us, it cannot +// furnish a newer nodeList and still gives us an old list. This must be detected and the node should be blacklisted. +static void test_nodelist_update_4() { + in3_t* c = in3_init_test(ETH_CHAIN_ID_MAINNET); + c->proof = PROOF_NONE; + c->replace_latest_block = DEF_REPL_LATEST_BLK; + + // start time + uint64_t t = 1; + in3_time(&t); + + // reset rand to be deterministic + int s = 0; + in3_rand(&s); + + // begin with 3 nodes, i.e. one node more than the usual boot nodes + ADD_RESPONSE_BLOCK_NUMBER("87989038", "87989050", "0x53E9B3A"); + ADD_RESPONSE_NODELIST_3("87989012"); + + t = 200; + in3_time(&t); + + uint64_t blk = eth_blockNumber(c); + TEST_ASSERT_NOT_EQUAL(0, blk); + + in3_chain_t* chain = in3_find_chain(c, ETH_CHAIN_ID_MAINNET); + TEST_ASSERT_EQUAL(chain->nodelist_length, 3); + TEST_ASSERT_NOT_NULL(chain->nodelist_upd8_params); + TEST_ASSERT_EQUAL(chain->nodelist_upd8_params->exp_last_block, 87989038); + + // reset rand to be deterministic + s = 0; + in3_rand(&s); + + // any request should now trigger a nodeList update + // but since the node lied and cannot give us a new list it gives us the old list + ADD_RESPONSE_BLOCK_NUMBER("87989012", "87989050", "0x53E9B3A"); + ADD_RESPONSE_NODELIST_3("87989012"); + blk = eth_blockNumber(c); + TEST_ASSERT_NOT_EQUAL(0, blk); + TEST_ASSERT_EQUAL(chain->nodelist_length, 3); + TEST_ASSERT_NULL(chain->nodelist_upd8_params); + + bool is_blacklisted = false; + for (int i = 0; i < chain->nodelist_length; ++i) + if (chain->weights[i].blacklisted_until) + is_blacklisted = true; + TEST_ASSERT_TRUE(is_blacklisted); + + in3_free(c); +} + +// Scenario 5: Boot nodes do not respond for first update +static void test_nodelist_update_5() { + in3_t* c = in3_init_test(ETH_CHAIN_ID_MAINNET); + c->replace_latest_block = DEF_REPL_LATEST_BLK; + c->proof = PROOF_NONE; + c->max_attempts = 1; + + // start time + uint64_t t = 1; + in3_time(&t); + + // reset rand to be deterministic + int s = 0; + in3_rand(&s); + + ADD_RESPONSE_BLOCK_NUMBER("87989038", "87989050", "0x53E9B3A"); + add_response("in3_nodeList", + "[0,\"0x0000000100000002000000030000000400000005000000060000000700000008\",[]]", + NULL, + "\"Internal server error!\"", + NULL); + + uint64_t blk = eth_blockNumber(c); + TEST_ASSERT_NOT_EQUAL(0, blk); + + in3_chain_t* chain = in3_find_chain(c, ETH_CHAIN_ID_MAINNET); + TEST_ASSERT_NOT_NULL(chain->nodelist_upd8_params); + TEST_ASSERT_EQUAL(chain->nodelist_upd8_params->exp_last_block, 87989038); + + // reset rand to be deterministic + s = 0; + in3_rand(&s); + + ADD_RESPONSE_BLOCK_NUMBER("87989038", "87989050", "0x53E9B3A"); + ADD_RESPONSE_NODELIST_3("87989038"); + blk = eth_blockNumber(c); + TEST_ASSERT_NOT_EQUAL(0, blk); + TEST_ASSERT_EQUAL(chain->nodelist_length, 3); + TEST_ASSERT_NULL(chain->nodelist_upd8_params); + + in3_free(c); +} + +// Scenario 6: Wrong first update response +static void test_nodelist_update_6() { + in3_t* c = in3_init_test(ETH_CHAIN_ID_MAINNET); + c->replace_latest_block = DEF_REPL_LATEST_BLK; + c->max_attempts = 1; + + // start time + uint64_t t = 1; + in3_time(&t); + + // reset rand to be deterministic + int s = 0; + in3_rand(&s); + + ADD_RESPONSE_BLOCK_NUMBER("87989038", "87989050", "0x53E9B3A"); + add_response("in3_nodeList", + "[0,\"0x0000000100000002000000030000000400000005000000060000000700000008\",[]]", + "{}", + NULL, + NULL); + + uint64_t blk = eth_blockNumber(c); + TEST_ASSERT_NOT_EQUAL(0, blk); + + in3_chain_t* chain = in3_find_chain(c, ETH_CHAIN_ID_MAINNET); + TEST_ASSERT_NOT_NULL(chain->nodelist_upd8_params); + TEST_ASSERT_EQUAL(chain->nodelist_upd8_params->exp_last_block, 87989038); + + // reset rand to be deterministic + s = 0; + in3_rand(&s); + + c->proof = PROOF_NONE; + + ADD_RESPONSE_BLOCK_NUMBER("87989038", "87989050", "0x53E9B3A"); + ADD_RESPONSE_NODELIST_3("87989038"); + blk = eth_blockNumber(c); + TEST_ASSERT_NOT_EQUAL(0, blk); + TEST_ASSERT_EQUAL(chain->nodelist_length, 3); + TEST_ASSERT_NULL(chain->nodelist_upd8_params); + + in3_free(c); +} + +// Scenario 7: lastNodeList > currentBlock +// Begin with 3 nodes in first nodeList update (always taken from a boot node) which happened at block 87989012 (i.e. `lastBlockNumber`). +// eth_blockNumber returns a lastNodeList > currentBlock. This is impossible, so we ignore it and do NOT update the nodeList. +static void test_nodelist_update_7() { + in3_t* c = in3_init_test(ETH_CHAIN_ID_MAINNET); + c->proof = PROOF_NONE; + c->replace_latest_block = DEF_REPL_LATEST_BLK; + + // start time + uint64_t t = 1; + in3_time(&t); + + // reset rand to be deterministic + int s = 0; + in3_rand(&s); + + // begin with 3 nodes, i.e. one node more than the usual boot nodes + ADD_RESPONSE_BLOCK_NUMBER("87989999", "87989050", "0x53E9B3A"); + ADD_RESPONSE_NODELIST_3("87989012"); + + uint64_t blk = eth_blockNumber(c); + TEST_ASSERT_NOT_EQUAL(0, blk); + + in3_chain_t* chain = in3_find_chain(c, ETH_CHAIN_ID_MAINNET); + TEST_ASSERT_EQUAL(chain->nodelist_length, 3); + TEST_ASSERT_NULL(chain->nodelist_upd8_params); + + in3_free(c); +} + +// Scenario 8: Newer `lastNodeList` with wrong response +// Begin with 3 nodes in first nodeList update (always taken from a boot node) which happened at block 87989012 (i.e. `lastBlockNumber`). +// After 200 secs, `eth_blockNumber` returns an error result but reports a nodeList update happened at 87989038 (i.e. `lastNodeList`). +// Since the result was not valid, we must not accept the `lastNodeList` and should not trigger a nodeList update. +// A request now should trigger a nodeList update. +static void test_nodelist_update_8() { + in3_t* c = in3_init_test(ETH_CHAIN_ID_MAINNET); + c->proof = PROOF_NONE; + c->replace_latest_block = DEF_REPL_LATEST_BLK; + c->max_attempts = 0; + + // start time + uint64_t t = 1; + in3_time(&t); + + // reset rand to be deterministic + int s = 0; + in3_rand(&s); + + // begin with 3 nodes, i.e. one node more than the usual boot nodes + ADD_RESPONSE_BLOCK_NUMBER("87989038", "87989050", "0x53E9B3A"); + ADD_RESPONSE_NODELIST_3("87989038"); + + t = 200; + in3_time(&t); + TEST_ASSERT_NOT_EQUAL(0, eth_blockNumber(c)); + + // reset rand to be deterministic + s = 0; + in3_rand(&s); + + // test that nodelist_upd8_params are not set when we have an error response + add_response("eth_blockNumber", + "[]", + NULL, + "\"Error: Internal server error\"", + "{" + " \"lastValidatorChange\": 0," + " \"lastNodeList\": 87989049," + " \"execTime\": 59," + " \"rpcTime\": 59," + " \"rpcCount\": 1," + " \"currentBlock\": 87989092," + " \"version\": \"2.0.0\"" + "}"); + TEST_ASSERT_EQUAL(0, eth_blockNumber(c)); + in3_chain_t* chain = in3_find_chain(c, ETH_CHAIN_ID_MAINNET); + TEST_ASSERT_NULL(chain->nodelist_upd8_params); + + // test that nodelist_upd8_params are not set when we have a response without proof + c->proof = PROOF_STANDARD; + add_response("eth_getBalance", + "[\"0x000000000000000000000000000000000000dead\",\"latest\"]", + "\"0x2a595770eb8ed0c5827\"", + NULL, + "{" + " \"lastValidatorChange\": 0," + " \"lastNodeList\": 87989049," + " \"execTime\": 59," + " \"rpcTime\": 59," + " \"rpcCount\": 1," + " \"currentBlock\": 87989092," + " \"version\": \"2.0.0\"" + "}"); + + address_t addr; + hex_to_bytes("0x000000000000000000000000000000000000dead", -1, addr, 20); + long double balance = as_double(eth_getBalance(c, addr, BLKNUM_LATEST())); + TEST_ASSERT_EQUAL(0, balance); + + chain = in3_find_chain(c, ETH_CHAIN_ID_MAINNET); + TEST_ASSERT_NULL(chain->nodelist_upd8_params); + + in3_free(c); +} + +/* + * Main + */ +int main() { + TESTS_BEGIN(); + in3_log_set_quiet(true); + in3_set_func_time(mock_time); + in3_set_func_rand(mock_rand); + RUN_TEST(test_capabilities); + RUN_TEST(test_nodelist_update_1); + RUN_TEST(test_nodelist_update_2); + RUN_TEST(test_nodelist_update_3); + RUN_TEST(test_nodelist_update_4); + RUN_TEST(test_nodelist_update_5); + RUN_TEST(test_nodelist_update_6); + RUN_TEST(test_nodelist_update_7); + RUN_TEST(test_nodelist_update_8); + return TESTS_END(); +} diff --git a/test/unit_tests/test_request.c b/c/test/unit_tests/test_request.c similarity index 83% rename from test/unit_tests/test_request.c rename to c/test/unit_tests/test_request.c index c00337c8a..ee5ba834d 100644 --- a/test/unit_tests/test_request.c +++ b/c/test/unit_tests/test_request.c @@ -71,10 +71,8 @@ static void test_configure_request() { c->proof = PROOF_FULL; c->signature_count = 2; c->finality = 10; - c->include_code = true; + c->flags = FLAGS_INCLUDE_CODE | FLAGS_BINARY | FLAGS_HTTP | FLAGS_AUTO_UPDATE_LIST; c->replace_latest_block = 6; - c->use_binary = true; - c->use_http = true; for (int i = 0; i < c->chains_length; i++) c->chains[i].nodelist_upd8_params = NULL; @@ -98,6 +96,29 @@ static void test_configure_request() { in3_free(c); } +static void test_configure_signed_request() { + in3_t* c = in3_for_chain(ETH_CHAIN_ID_LOCAL); + TEST_ASSERT_NULL(in3_configure(c, "{\"key\":\"0x1234567890123456789012345678901234567890123456789012345678901234\"}")); + c->flags = FLAGS_INCLUDE_CODE; + for (int i = 0; i < c->chains_length; i++) c->chains[i].nodelist_upd8_params = NULL; + + in3_ctx_t* ctx = ctx_new(c, "{\"method\":\"eth_blockNumber\",\"params\":[]}"); + TEST_ASSERT_EQUAL(IN3_WAITING, in3_ctx_execute(ctx)); + in3_request_t* request = in3_create_request(ctx); + json_ctx_t* json = parse_json(request->payload); + d_token_t* in3 = d_get(d_get_at(json->result, 0), K_IN3); + TEST_ASSERT_NOT_NULL(in3); + bytes_t* sig = d_get_bytes(in3, "sig"); + TEST_ASSERT_NOT_NULL(sig); + TEST_ASSERT_EQUAL(65, sig->len); + char hex[150]; + TEST_ASSERT_EQUAL(65 * 2, bytes_to_hex(sig->data, sig->len, hex)); // 65bytes *2 + TEST_ASSERT_EQUAL_STRING("8e39d2066cf9d1898e6bc9fbbfaa8fd6b9e5a86515e643f537c831982718866d0903e91f5f8824363dd3754fe550b37aa1e6eeb3742f13ad36d3321972e959a701", hex); + request_free(request, ctx, false); + json_free(json); + ctx_free(ctx); + in3_free(c); +} static void test_exec_req() { in3_t* c = in3_for_chain(ETH_CHAIN_ID_MAINNET); char* result = in3_client_exec_req(c, "{\"method\":\"web3_sha3\",\"params\":[\"0x1234\"]}"); @@ -156,21 +177,20 @@ static void test_configure_validation() { TEST_ASSERT_CONFIGURE_FAIL("mismatched type: autoUpdateList", c, "{\"autoUpdateList\":\"1\"}", "expected boolean"); TEST_ASSERT_CONFIGURE_FAIL("mismatched type: autoUpdateList", c, "{\"autoUpdateList\":\"0x00000\"}", "expected boolean"); TEST_ASSERT_CONFIGURE_PASS(c, "{\"autoUpdateList\":true}"); - TEST_ASSERT_EQUAL(c->auto_update_list, true); + TEST_ASSERT_EQUAL(c->flags & FLAGS_AUTO_UPDATE_LIST, FLAGS_AUTO_UPDATE_LIST); TEST_ASSERT_CONFIGURE_FAIL("mismatched type: chainId", c, "{\"chainId\":\"-1\"}", "expected uint32 or string"); TEST_ASSERT_CONFIGURE_FAIL("mismatched type: chainId", c, "{\"chainId\":\"\"}", "expected uint32 or string"); TEST_ASSERT_CONFIGURE_FAIL("mismatched type: chainId", c, "{\"chainId\":\"0\"}", "expected uint32 or string"); TEST_ASSERT_CONFIGURE_FAIL("mismatched type: chainId", c, "{\"chainId\":false}", "expected uint32 or string"); TEST_ASSERT_CONFIGURE_FAIL("mismatched type: chainId", c, "{\"chainId\":\"0x1203030230\"}", "expected uint32 or string"); + TEST_ASSERT_CONFIGURE_FAIL("uinitialized chain: chainId", c, "{\"chainId\":0}", "chain corresponding to chain id not initialized!"); TEST_ASSERT_CONFIGURE_PASS(c, "{\"chainId\":\"mainnet\"}"); TEST_ASSERT_EQUAL(c->chain_id, 1); - TEST_ASSERT_CONFIGURE_PASS(c, "{\"chainId\":0}"); - TEST_ASSERT_EQUAL(c->chain_id, 0); - TEST_ASSERT_CONFIGURE_PASS(c, "{\"chainId\":4294967295}"); // UINT32_MAX - TEST_ASSERT_EQUAL(c->chain_id, 4294967295U); - TEST_ASSERT_CONFIGURE_PASS(c, "{\"chainId\":\"0xffffffff\"}"); // UINT32_MAX - TEST_ASSERT_EQUAL(c->chain_id, 0xffffffff); + TEST_ASSERT_CONFIGURE_PASS(c, "{\"chainId\":5}"); + TEST_ASSERT_EQUAL(c->chain_id, ETH_CHAIN_ID_GOERLI); + TEST_ASSERT_CONFIGURE_PASS(c, "{\"chainId\":\"0x2a\"}"); + TEST_ASSERT_EQUAL(c->chain_id, ETH_CHAIN_ID_KOVAN); TEST_ASSERT_CONFIGURE_FAIL("mismatched type: signatureCount", c, "{\"signatureCount\":\"-1\"}", "expected uint8"); TEST_ASSERT_CONFIGURE_FAIL("mismatched type: signatureCount", c, "{\"signatureCount\":\"0x1234\"}", "expected uint8"); @@ -204,7 +224,7 @@ static void test_configure_validation() { TEST_ASSERT_CONFIGURE_FAIL("mismatched type: includeCode", c, "{\"includeCode\":\"1\"}", "expected boolean"); TEST_ASSERT_CONFIGURE_FAIL("mismatched type: includeCode", c, "{\"includeCode\":\"0x00000\"}", "expected boolean"); TEST_ASSERT_CONFIGURE_PASS(c, "{\"includeCode\":true}"); - TEST_ASSERT_EQUAL(c->include_code, true); + TEST_ASSERT_EQUAL(FLAGS_INCLUDE_CODE, c->flags & FLAGS_INCLUDE_CODE); TEST_ASSERT_CONFIGURE_FAIL("mismatched type: maxAttempts", c, "{\"maxAttempts\":\"-1\"}", "expected uint16"); TEST_ASSERT_CONFIGURE_FAIL("mismatched type: maxAttempts", c, "{\"maxAttempts\":\"0x123412341234\"}", "expected uint16"); @@ -219,19 +239,33 @@ static void test_configure_validation() { TEST_ASSERT_CONFIGURE_FAIL("mismatched type: keepIn3", c, "{\"keepIn3\":\"1\"}", "expected boolean"); TEST_ASSERT_CONFIGURE_FAIL("mismatched type: keepIn3", c, "{\"keepIn3\":\"0x00000\"}", "expected boolean"); TEST_ASSERT_CONFIGURE_PASS(c, "{\"keepIn3\":true}"); - TEST_ASSERT_EQUAL(c->keep_in3, true); + TEST_ASSERT_EQUAL(FLAGS_KEEP_IN3, c->flags & FLAGS_KEEP_IN3); + + TEST_ASSERT_CONFIGURE_FAIL("mismatched type: key", c, "{\"key\":1}", "expected 256 bit data"); + TEST_ASSERT_CONFIGURE_FAIL("mismatched type: key", c, "{\"key\":\"1\"}", "expected 256 bit data"); + TEST_ASSERT_CONFIGURE_FAIL("mismatched type: key", c, "{\"key\":\"0x00000\"}", "expected 256 bit data"); + TEST_ASSERT_CONFIGURE_PASS(c, "{\"key\":\"0x1234567890123456789012345678901234567890123456789012345678901234\"}"); + bytes32_t b256; + hex_to_bytes("0x1234567890123456789012345678901234567890123456789012345678901234", -1, b256, 32); + TEST_ASSERT_EQUAL_MEMORY(c->key, b256, 32); TEST_ASSERT_CONFIGURE_FAIL("mismatched type: useBinary", c, "{\"useBinary\":1}", "expected boolean"); TEST_ASSERT_CONFIGURE_FAIL("mismatched type: useBinary", c, "{\"useBinary\":\"1\"}", "expected boolean"); TEST_ASSERT_CONFIGURE_FAIL("mismatched type: useBinary", c, "{\"useBinary\":\"0x00000\"}", "expected boolean"); TEST_ASSERT_CONFIGURE_PASS(c, "{\"useBinary\":true}"); - TEST_ASSERT_EQUAL(c->use_binary, true); + TEST_ASSERT_EQUAL(FLAGS_BINARY, c->flags & FLAGS_BINARY); TEST_ASSERT_CONFIGURE_FAIL("mismatched type: useHttp", c, "{\"useHttp\":1}", "expected boolean"); TEST_ASSERT_CONFIGURE_FAIL("mismatched type: useHttp", c, "{\"useHttp\":\"1\"}", "expected boolean"); TEST_ASSERT_CONFIGURE_FAIL("mismatched type: useHttp", c, "{\"useHttp\":\"0x00000\"}", "expected boolean"); TEST_ASSERT_CONFIGURE_PASS(c, "{\"useHttp\":true}"); - TEST_ASSERT_EQUAL(c->use_http, true); + TEST_ASSERT_EQUAL(FLAGS_HTTP, c->flags & FLAGS_HTTP); + + TEST_ASSERT_CONFIGURE_FAIL("mismatched type: stats", c, "{\"stats\":1}", "expected boolean"); + TEST_ASSERT_CONFIGURE_FAIL("mismatched type: stats", c, "{\"stats\":\"1\"}", "expected boolean"); + TEST_ASSERT_CONFIGURE_FAIL("mismatched type: stats", c, "{\"stats\":\"0x00000\"}", "expected boolean"); + TEST_ASSERT_CONFIGURE_PASS(c, "{\"stats\":false}"); + TEST_ASSERT_EQUAL(0, c->flags & FLAGS_STATS); TEST_ASSERT_CONFIGURE_FAIL("mismatched type: maxBlockCache", c, "{\"maxBlockCache\":\"-1\"}", "expected uint32"); TEST_ASSERT_CONFIGURE_FAIL("mismatched type: maxBlockCache", c, "{\"maxBlockCache\":\"\"}", "expected uint32"); @@ -326,6 +360,16 @@ static void test_configure_validation() { TEST_ASSERT_CONFIGURE_PASS(c, "{\"proof\":\"full\"}"); TEST_ASSERT_EQUAL(c->proof, PROOF_FULL); + TEST_ASSERT_CONFIGURE_FAIL("mismatched type: replaceLatestBlock", c, "{\"replaceLatestBlock\":\"-1\"}", "expected uint8"); + TEST_ASSERT_CONFIGURE_FAIL("mismatched type: replaceLatestBlock", c, "{\"replaceLatestBlock\":\"0x123412341234\"}", "expected uint8"); + TEST_ASSERT_CONFIGURE_FAIL("mismatched type: replaceLatestBlock", c, "{\"replaceLatestBlock\":\"value\"}", "expected uint8"); + TEST_ASSERT_CONFIGURE_FAIL("mismatched type: replaceLatestBlock", c, "{\"replaceLatestBlock\":65536}", "expected uint8"); + TEST_ASSERT_CONFIGURE_PASS(c, "{\"replaceLatestBlock\":0}"); + TEST_ASSERT_CONFIGURE_PASS(c, "{\"replaceLatestBlock\":255}"); + TEST_ASSERT_CONFIGURE_PASS(c, "{\"replaceLatestBlock\":\"0xff\"}"); + TEST_ASSERT_EQUAL(c->replace_latest_block, 255); + TEST_ASSERT_EQUAL(in3_node_props_get(c->node_props, NODE_PROP_MIN_BLOCK_HEIGHT), c->replace_latest_block); + TEST_ASSERT_CONFIGURE_FAIL("mismatched type: requestCount", c, "{\"requestCount\":\"-1\"}", "expected uint8"); TEST_ASSERT_CONFIGURE_FAIL("mismatched type: requestCount", c, "{\"requestCount\":\"0x123412341234\"}", "expected uint8"); TEST_ASSERT_CONFIGURE_FAIL("mismatched type: requestCount", c, "{\"requestCount\":\"value\"}", "expected uint8"); @@ -409,7 +453,15 @@ static void test_configure_validation() { " \"props\":\"0xffff\"," " \"address\":\"" NODE_ADDRS "\"" " }]," - " \"needsUpdate\":true" + " \"needsUpdate\":true," + " \"avgBlockTime\":7," + " \"verifiedHashes\":[{" + " \"block\": \"0x234ad3\"," + " \"hash\": \"0x1230980495039470913820938019274231230980495039470913820938019274\"" + " },{" + " \"block\": \"0x234a99\"," + " \"hash\": \"0xda879213bf9834ff2eade0921348dda879213bf9834ff2eade0921348d238130\"" + " }]" " }" " }" "}"); @@ -422,7 +474,6 @@ static void test_configure_validation() { hex_to_bytes(CONTRACT_ADDRS, -1, addr, 20); TEST_ASSERT_EQUAL_MEMORY(chain->contract->data, addr, 20); - bytes32_t b256; hex_to_bytes(REGISTRY_ID, -1, b256, 32); TEST_ASSERT_EQUAL_MEMORY(chain->registry_id, b256, 32); @@ -432,6 +483,16 @@ static void test_configure_validation() { hex_to_bytes(NODE_ADDRS, -1, addr, 20); TEST_ASSERT_EQUAL_MEMORY(chain->nodelist[0].address->data, addr, 20); + TEST_ASSERT_EQUAL(0x234ad3, chain->verified_hashes[0].block_number); + hex_to_bytes("0x1230980495039470913820938019274231230980495039470913820938019274", -1, b256, 32); + TEST_ASSERT_EQUAL_MEMORY(chain->verified_hashes[0].hash, b256, 32); + + TEST_ASSERT_EQUAL(0x234a99, chain->verified_hashes[1].block_number); + hex_to_bytes("0xda879213bf9834ff2eade0921348dda879213bf9834ff2eade0921348d238130", -1, b256, 32); + TEST_ASSERT_EQUAL_MEMORY(chain->verified_hashes[1].hash, b256, 32); + + TEST_ASSERT_EQUAL(7, chain->avg_block_time); + in3_free(c); } @@ -451,5 +512,6 @@ int main() { RUN_TEST(test_exec_req); RUN_TEST(test_configure); RUN_TEST(test_configure_validation); + RUN_TEST(test_configure_signed_request); return TESTS_END(); } diff --git a/test/unit_tests/test_rpc_api.c b/c/test/unit_tests/test_rpc_api.c similarity index 87% rename from test/unit_tests/test_rpc_api.c rename to c/test/unit_tests/test_rpc_api.c index 106542a43..92bf64d73 100644 --- a/test/unit_tests/test_rpc_api.c +++ b/c/test/unit_tests/test_rpc_api.c @@ -43,6 +43,7 @@ #include "../../src/api/eth1/eth_api.h" #include "../../src/core/client/context.h" #include "../../src/core/client/keys.h" +#include "../../src/core/util/bitset.h" #include "../../src/core/util/data.h" #include "../../src/core/util/log.h" #include "../../src/verifier/eth1/full/eth_full.h" @@ -55,12 +56,11 @@ static void test_in3_config() { - in3_t* c = in3_for_chain(ETH_CHAIN_ID_MAINNET); - ; - c->transport = test_transport; - c->auto_update_list = false; - c->proof = PROOF_NONE; - c->signature_count = 0; + in3_t* c = in3_for_chain(ETH_CHAIN_ID_MAINNET); + c->transport = test_transport; + c->flags = FLAGS_STATS; + c->proof = PROOF_NONE; + c->signature_count = 0; in3_ctx_t* ctx = in3_client_rpc_ctx(c, "in3_config", "[{\ \"chainId\":7,\ @@ -97,9 +97,9 @@ static void test_in3_config() { ctx_free(ctx); TEST_ASSERT_EQUAL(7, c->chain_id); - TEST_ASSERT_EQUAL(true, c->auto_update_list); + TEST_ASSERT_EQUAL(FLAGS_AUTO_UPDATE_LIST, c->flags & FLAGS_AUTO_UPDATE_LIST); TEST_ASSERT_EQUAL(50, c->finality); - TEST_ASSERT_EQUAL(true, c->include_code); + TEST_ASSERT_EQUAL(FLAGS_INCLUDE_CODE, c->flags & FLAGS_INCLUDE_CODE); TEST_ASSERT_EQUAL(99, c->max_attempts); TEST_ASSERT_EQUAL(98, c->max_block_cache); TEST_ASSERT_EQUAL(97, c->max_code_cache); @@ -109,7 +109,7 @@ static void test_in3_config() { TEST_ASSERT_EQUAL(94, c->replace_latest_block); TEST_ASSERT_EQUAL(93, c->request_count); TEST_ASSERT_EQUAL(92, c->signature_count); - TEST_ASSERT_EQUAL(1, c->keep_in3); + TEST_ASSERT_EQUAL(FLAGS_KEEP_IN3, c->flags & FLAGS_KEEP_IN3); in3_chain_t* chain = in3_find_chain(c, 7); TEST_ASSERT_NOT_NULL(chain); @@ -134,12 +134,12 @@ static void test_in3_config() { static void test_in3_client_rpc() { char * result = NULL, *error = NULL; - in3_t* c = in3_for_chain(ETH_CHAIN_ID_MAINNET); - c->transport = test_transport; - c->auto_update_list = false; - c->proof = PROOF_NONE; - c->signature_count = 0; - c->max_attempts = 1; + in3_t* c = in3_for_chain(ETH_CHAIN_ID_MAINNET); + c->transport = test_transport; + c->flags = FLAGS_STATS; + c->proof = PROOF_NONE; + c->signature_count = 0; + c->max_attempts = 1; for (int i = 0; i < c->chains_length; i++) c->chains[i].nodelist_upd8_params = NULL; @@ -183,7 +183,7 @@ static void test_in3_client_rpc() { // test in3_client_exec_req() with keep_in3 set to true // TODO: also test with use_binary set to true - c->keep_in3 = true; + c->flags |= FLAGS_KEEP_IN3; add_response("eth_blockNumber", "[]", NULL, "{\"message\":\"Undefined\"}", "{\"version\": \"2.1.0\",\"chainId\": \"0x5\",\"verification\": \"proof\"}"); char* response = in3_client_exec_req(c, "{\"method\":\"eth_blockNumber\",\"jsonrpc\":\"2.0\",\"id\":1,\"params\":[]}"); TEST_ASSERT_NOT_NULL(response); @@ -191,7 +191,7 @@ static void test_in3_client_rpc() { free(response); // test in3_client_exec_req() with keep_in3 set to false - c->keep_in3 = false; + BITMASK_CLEAR(c->flags, FLAGS_KEEP_IN3); add_response("eth_blockNumber", "[]", NULL, "{\"message\":\"Undefined\"}", "{\"version\": \"2.1.0\",\"chainId\": \"0x5\",\"verification\": \"proof\"}"); response = in3_client_exec_req(c, "{\"method\":\"eth_blockNumber\",\"jsonrpc\":\"2.0\",\"id\":1,\"params\":[]}"); TEST_ASSERT_NOT_NULL(response); @@ -239,6 +239,31 @@ static void test_in3_client_chain() { in3_free(c); } +static void checksum(d_token_t* params, chain_id_t chain, char* result) { + bytes_t* adr = d_get_bytes_at(params, 0); + in3_ret_t res = to_checksum(adr->data, 0, result); +} + +static void test_in3_checksum_rpc() { + char* param_test = "[\"0x0dE496AE79194D5F5b18eB66987B504A0FEB32f2\",false]"; + char * result = NULL, *error = NULL; + in3_t* in3 = in3_for_chain(ETH_CHAIN_ID_MAINNET); + json_ctx_t* json = parse_json(param_test); + d_token_t* address = &json->result[0]; + char ret_checksum[43]; + checksum(address, 0, ret_checksum); + in3_ret_t ret = in3_client_rpc(in3, "in3_checksumAddress", param_test, &result, &error); + // remove quotes from result + char str_result[43]; + memcpy(str_result, &result[1], 42); + str_result[42] = '\0'; + TEST_ASSERT_EQUAL(ret, IN3_OK); + TEST_ASSERT_EQUAL(error, NULL); + TEST_ASSERT_EQUAL_STRING(ret_checksum, str_result); + free(result); + free(error); +} + static void test_in3_client_context() { in3_t* c = in3_for_chain(ETH_CHAIN_ID_MULTICHAIN); in3_ctx_t* ctx = ctx_new(c, "[{\"id\":1,\"jsonrpc\":\"2.0\"," @@ -294,6 +319,7 @@ int main() { TESTS_BEGIN(); RUN_TEST(test_in3_config); RUN_TEST(test_in3_client_rpc); + RUN_TEST(test_in3_checksum_rpc); RUN_TEST(test_in3_client_chain); RUN_TEST(test_in3_client_context); return TESTS_END(); diff --git a/test/unit_tests/test_sign.c b/c/test/unit_tests/test_sign.c similarity index 96% rename from test/unit_tests/test_sign.c rename to c/test/unit_tests/test_sign.c index ec1c41fa4..f3738628b 100644 --- a/test/unit_tests/test_sign.c +++ b/c/test/unit_tests/test_sign.c @@ -53,12 +53,12 @@ #include static void test_sign() { - in3_t* c = in3_for_chain(ETH_CHAIN_ID_MAINNET); - c->transport = test_transport; - c->chain_id = 0x1; - c->auto_update_list = false; - c->proof = PROOF_NONE; - c->signature_count = 0; + in3_t* c = in3_for_chain(ETH_CHAIN_ID_MAINNET); + c->transport = test_transport; + c->chain_id = 0x1; + c->flags = FLAGS_STATS; + c->proof = PROOF_NONE; + c->signature_count = 0; for (int i = 0; i < c->chains_length; i++) c->chains[i].nodelist_upd8_params = NULL; diff --git a/test/unit_tests/test_verify_eth_getLog.c b/c/test/unit_tests/test_verify_eth_getLog.c similarity index 100% rename from test/unit_tests/test_verify_eth_getLog.c rename to c/test/unit_tests/test_verify_eth_getLog.c diff --git a/test/unity/unity.c b/c/test/unity/unity.c similarity index 100% rename from test/unity/unity.c rename to c/test/unity/unity.c diff --git a/test/unity/unity.h b/c/test/unity/unity.h similarity index 100% rename from test/unity/unity.h rename to c/test/unity/unity.h diff --git a/test/unity/unity_internals.h b/c/test/unity/unity_internals.h similarity index 100% rename from test/unity/unity_internals.h rename to c/test/unity/unity_internals.h diff --git a/test/util/platform.h b/c/test/util/platform.h similarity index 100% rename from test/util/platform.h rename to c/test/util/platform.h diff --git a/test/util/stack_diag.c b/c/test/util/stack_diag.c similarity index 100% rename from test/util/stack_diag.c rename to c/test/util/stack_diag.c diff --git a/test/util/stack_diag.h b/c/test/util/stack_diag.h similarity index 100% rename from test/util/stack_diag.h rename to c/test/util/stack_diag.h diff --git a/test/util/transport.c b/c/test/util/transport.c similarity index 96% rename from test/util/transport.c rename to c/test/util/transport.c index db5953898..65ee9f81b 100644 --- a/test/util/transport.c +++ b/c/test/util/transport.c @@ -10,7 +10,7 @@ #include "../test_utils.h" #include #include -#define MOCK_PATH "../test/testdata/mock/%s.json" +#define MOCK_PATH "../c/test/testdata/mock/%s.json" static void clean_json_str(char* s) { const char* d = s; @@ -101,7 +101,7 @@ in3_ret_t test_transport(in3_request_t* req) { d_token_t* request = d_type(r->result) == T_ARRAY ? r->result + 1 : r->result; char* method = d_get_string(request, "method"); str_range_t params = d_to_json(d_get(request, key("params"))); - char p[params.len + 1]; + char* p = alloca(params.len + 1); strncpy(p, params.data, params.len); p[params.len] = 0; clean_json_str(p); @@ -126,7 +126,7 @@ in3_ret_t mock_transport(in3_request_t* req) { TEST_ASSERT_NOT_NULL_MESSAGE(response_buffer, "no request registered"); TEST_ASSERT_NOT_NULL_MESSAGE(r, "payload not parseable"); str_range_t params = d_to_json(d_get(request, key("params"))); - char p[params.len + 1]; + char* p = alloca(params.len + 1); strncpy(p, params.data, params.len); p[params.len] = 0; clean_json_str(p); diff --git a/test/util/transport.h b/c/test/util/transport.h similarity index 100% rename from test/util/transport.h rename to c/test/util/transport.h diff --git a/test/vm_runner.c b/c/test/vm_runner.c similarity index 100% rename from test/vm_runner.c rename to c/test/vm_runner.c diff --git a/test/vm_runner.h b/c/test/vm_runner.h similarity index 100% rename from test/vm_runner.h rename to c/test/vm_runner.h diff --git a/examples/js/README.md b/examples/js/README.md deleted file mode 100644 index 7324a3361..000000000 --- a/examples/js/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# Examples for JavaScript/TypeScript - -- [get_block_rpc](./get_block_rpc.js) - getting a block as raw verfified JSON-RPC-Result - - -## Building - -In order to run those examples, you need to install `in3-wasm` - -``` -npm install in3-wasm -``` - -You can then execute each example individually: - -``` -node get_block_rpc.js -``` - diff --git a/examples/js/build.sh b/examples/js/build.sh deleted file mode 100755 index 3d34f5b0f..000000000 --- a/examples/js/build.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -# build ... -npm i in3-wasm diff --git a/examples/js/get_block_rpc.js b/examples/js/get_block_rpc.js deleted file mode 100644 index a0ef4a560..000000000 --- a/examples/js/get_block_rpc.js +++ /dev/null @@ -1,24 +0,0 @@ -const IN3 = require('in3-wasm') - -async function showLatestBlock() { - // create new incubed instance - var c = new IN3() - - await c.setConfig({ - chainId: 0x5 // use goerli - }) - - // send raw RPC-Request - const lastBlockResponse = await c.send({ method: 'eth_getBlockByNumber', params: ['latest', false] }) - - if (lastBlockResponse.error) - console.error("Error getting the latest block : ", lastBlockResponse.error) - else - console.log("latest Block: ", JSON.stringify(lastBlockResponse.result, null, 2)) - - // clean up - c.free() - -} - -showLatestBlock().catch(console.error) \ No newline at end of file diff --git a/src/api/CMakeLists.txt b/java/CMakeLists.txt similarity index 95% rename from src/api/CMakeLists.txt rename to java/CMakeLists.txt index 8663ac7a7..b4f51b944 100644 --- a/src/api/CMakeLists.txt +++ b/java/CMakeLists.txt @@ -33,8 +33,7 @@ ############################################################################### -IF (IN3API) - add_subdirectory(eth1) - add_subdirectory(usn) -ENDIF (IN3API) +# build modules +add_subdirectory(src) +add_subdirectory(docs) diff --git a/build.gradle b/java/build.gradle similarity index 72% rename from build.gradle rename to java/build.gradle index 382503d14..008f53157 100644 --- a/build.gradle +++ b/java/build.gradle @@ -13,21 +13,36 @@ apply plugin: 'java' apply plugin: "eclipse" +def jarSourceFolder = "../build/lib/in3.jar" +def jarOutputFolder = "./target" + +test.dependsOn 'copyJarToBindings' + +task createLibDir { + mkdir jarOutputFolder +} + +task copyJarToBindings(type: Copy) { + dependsOn 'createLibDir' + from jarSourceFolder + into jarOutputFolder +} + sourceSets { main { java { - srcDirs = ['./src/bindings/java'] + srcDirs = [jarOutputFolder] } resources { - srcDirs = ['./src/bindings/java'] + srcDirs = [jarOutputFolder] } } test { java { - srcDirs = ['./test/bindings/java/test'] + srcDirs = ['./test'] } resources { - srcDirs = ['./test/bindings/java/resources'] + srcDirs = ['./resources'] } } } @@ -49,6 +64,7 @@ repositories { dependencies { // Use JUnit test framework // https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine + compile fileTree(include: ['*.jar'], dir: jarOutputFolder) testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.6.0-RC1' testImplementation 'org.json:json:20190722' testImplementation 'commons-io:commons-io:2.6' diff --git a/java/docs/1_install.md b/java/docs/1_install.md new file mode 100644 index 000000000..9426be5bb --- /dev/null +++ b/java/docs/1_install.md @@ -0,0 +1,107 @@ +## Installing + + + +The Incubed Java client uses JNI in order to call native functions. But all the native-libraries are bundled inside the jar-file. +This jar file ha **no** dependencies and can even be used standalone: + +like + +```sh +java -cp in3.jar in3.IN3 eth_getBlockByNumber latest false +``` + +### Downloading + + +The jar file can be downloaded from the latest release. [here](https://github.com/slockit/in3-c/releases). + +Alternatively, If you wish to download Incubed using the maven package manager, add this to your pom.xml +``` + + it.slock + in3 + 2.21 + +``` + +After which, install in3 with ```mvn install ```. + +### Building + +For building the shared library you need to enable java by using the `-DJAVA=true` flag: + +```sh +git clone git@github.com:slockit/in3-c.git +mkdir -p in3-c/build +cd in3-c/build +cmake -DJAVA=true .. && make +``` + +You will find the `in3.jar` in the build/lib - folder. + +### Android + +In order to use Incubed in android simply follow these steps: + +Step 1: Create a top-level CMakeLists.txt in android project inside app folder and link this to gradle. Follow the steps using this [guide](https://developer.android.com/studio/projects/gradle-external-native-builds) on howto link. + +The Content of the `CMakeLists.txt` should look like this: + +```sh + +cmake_minimum_required(VERSION 3.4.1) + +# turn off FAST_MATH in the evm. +ADD_DEFINITIONS(-DIN3_MATH_LITE) + +# loop through the required module and cretae the build-folders +foreach(module + c/src/core + c/src/verifier/eth1/nano + c/src/verifier/eth1/evm + c/src/verifier/eth1/basic + c/src/verifier/eth1/full + java/src + c/src/third-party/crypto + c/src/third-party/tommath + c/src/api/eth1) + file(MAKE_DIRECTORY in3-c/${module}/outputs) + add_subdirectory( in3-c/${module} in3-c/${module}/outputs ) +endforeach() + +``` + +Step 2: clone [in3-c](https://github.com/slockit/in3-c.git) into the `app`-folder or use this script to clone and update in3: + +```sh +#!/usr/bin/env sh + +#github-url for in3-c +IN3_SRC=https://github.com/slockit/in3-c.git + +cd app + +# if it exists we only call git pull +if [ -d in3-c ]; then + cd in3-c + git pull + cd .. +else +# if not we clone it + git clone $IN3_SRC +fi + + +# copy the java-sources to the main java path +cp -r in3-c/java/src/in3 src/main/java/ +``` + +Step 3: Use methods available in app/src/main/java/in3/IN3.java from android activity to access IN3 functions. + + +Here is example how to use it: + +https://github.com/slockit/in3-example-android + + diff --git a/java/docs/2_examples.md b/java/docs/2_examples.md new file mode 100644 index 000000000..88f2fbf54 --- /dev/null +++ b/java/docs/2_examples.md @@ -0,0 +1,350 @@ +# Examples + +### CallFunction + +source : [in3-c/java/examples/CallFunction.java](https://github.com/slockit/in3-c/blob/master/java/examples/CallFunction.java) + +Calling Functions of Contracts + + +```java +/// Calling Functions of Contracts + +// This Example shows how to call functions and use the decoded results. Here we get the struct from the registry. + +import in3.*; +import in3.eth1.*; + +public class CallFunction { + // + public static void main(String[] args) { + // create incubed + IN3 in3 = IN3.forChain(Chain.MAINNET); // set it to mainnet (which is also dthe default) + + // call a contract, which uses eth_call to get the result. + Object[] result = (Object[]) in3.getEth1API().call( // call a function of a contract + "0x2736D225f85740f42D17987100dc8d58e9e16252", // address of the contract + "servers(uint256):(string,address,uint256,uint256,uint256,address)", // function signature + 1); // first argument, which is the index of the node we are looking for. + + System.out.println("url : " + result[0]); + System.out.println("owner : " + result[1]); + System.out.println("deposit : " + result[2]); + System.out.println("props : " + result[3]); + } +} + +``` + +### Configure + +source : [in3-c/java/examples/Configure.java](https://github.com/slockit/in3-c/blob/master/java/examples/Configure.java) + +Changing the default configuration + + +```java +/// Changing the default configuration + +// In order to change the default configuration, just use the classes inside in3.config package. + +package in3; + +import in3.*; +import in3.config.*; +import in3.eth1.Block; + +public class Configure { + // + public static void main(String[] args) { + // create incubed client + IN3 in3 = IN3.forChain(Chain.GOERLI); // set it to goerli + + // Setup a Configuration object for the client + ClientConfiguration clientConfig = in3.getConfig(); + clientConfig.setReplaceLatestBlock(6); // define that latest will be -6 + clientConfig.setAutoUpdateList(false); // prevents node automatic update + clientConfig.setMaxAttempts(1); // sets max attempts to 1 before giving up + clientConfig.setProof(Proof.none); // does not require proof (not recommended) + + // Setup the NodeConfiguration object for the nodes on a certain chain + NodeConfiguration nodeConfiguration = new NodeConfiguration(Chain.GOERLI, clientConfig); + nodeConfiguration.setNeedsUpdate(false); + nodeConfiguration.setContract("0xac1b824795e1eb1f6e609fe0da9b9af8beaab60f"); + nodeConfiguration.setRegistryId("0x23d5345c5c13180a8080bd5ddbe7cde64683755dcce6e734d95b7b573845facb"); + + in3.setConfig(clientConfig); + + Block block = in3.getEth1API().getBlockByNumber(Block.LATEST, true); + System.out.println(block.getHash()); + } +} +``` + +### GetBalance + +source : [in3-c/java/examples/GetBalance.java](https://github.com/slockit/in3-c/blob/master/java/examples/GetBalance.java) + +getting the Balance with or without API + + +```java +/// getting the Balance with or without API + +import in3.*; +import in3.eth1.*; +import java.math.BigInteger; +import java.util.*; + +public class GetBalance { + + static String AC_ADDR = "0xc94770007dda54cF92009BFF0dE90c06F603a09f"; + + public static void main(String[] args) throws Exception { + // create incubed + IN3 in3 = IN3.forChain(Chain.MAINNET); // set it to mainnet (which is also dthe default) + + System.out.println("Balance API" + GetBalanceAPI(in3).longValue()); + + System.out.println("Balance RPC " + GetBalanceRPC(in3)); + } + + static BigInteger GetBalanceAPI(IN3 in3) { + return in3.getEth1API().getBalance(AC_ADDR, Block.LATEST); + } + + static String GetBalanceRPC(IN3 in3) { + return in3.sendRPC("eth_getBalance", new Object[] {AC_ADDR, "latest"}); + } +} + +``` + +### GetBlockAPI + +source : [in3-c/java/examples/GetBlockAPI.java](https://github.com/slockit/in3-c/blob/master/java/examples/GetBlockAPI.java) + +getting a block with API + + +```java +/// getting a block with API + +import in3.*; +import in3.eth1.*; +import java.math.BigInteger; +import java.util.*; + +public class GetBlockAPI { + // + public static void main(String[] args) throws Exception { + // create incubed + IN3 in3 = IN3.forChain(Chain.MAINNET); // set it to mainnet (which is also dthe default) + + // read the latest Block including all Transactions. + Block latestBlock = in3.getEth1API().getBlockByNumber(Block.LATEST, true); + + // Use the getters to retrieve all containing data + System.out.println("current BlockNumber : " + latestBlock.getNumber()); + System.out.println("minded at : " + new Date(latestBlock.getTimeStamp()) + " by " + latestBlock.getAuthor()); + + // get all Transaction of the Block + Transaction[] transactions = latestBlock.getTransactions(); + + BigInteger sum = BigInteger.valueOf(0); + for (int i = 0; i < transactions.length; i++) + sum = sum.add(transactions[i].getValue()); + + System.out.println("total Value transfered in all Transactions : " + sum + " wei"); + } +} +``` + +### GetBlockRPC + +source : [in3-c/java/examples/GetBlockRPC.java](https://github.com/slockit/in3-c/blob/master/java/examples/GetBlockRPC.java) + +getting a block without API + + +```java +/// getting a block without API + +import in3.*; +import in3.eth1.*; +import java.math.BigInteger; +import java.util.*; + +public class GetBlockRPC { + // + public static void main(String[] args) throws Exception { + // create incubed + IN3 in3 = IN3.forChain(Chain.MAINNET); // set it to mainnet (which is also the default) + + // read the latest Block without the Transactions. + String result = in3.sendRPC("eth_getBlockByNumber", new Object[] {"latest", false}); + + // print the json-data + System.out.println("current Block : " + result); + } +} +``` + +### GetTransaction + +source : [in3-c/java/examples/GetTransaction.java](https://github.com/slockit/in3-c/blob/master/java/examples/GetTransaction.java) + +getting a Transaction with or without API + + +```java +/// getting a Transaction with or without API + +import in3.*; +import in3.eth1.*; +import java.math.BigInteger; +import java.util.*; + +public class GetTransaction { + + static String TXN_HASH = "0xdd80249a0631cf0f1593c7a9c9f9b8545e6c88ab5252287c34bc5d12457eab0e"; + + public static void main(String[] args) throws Exception { + // create incubed + IN3 in3 = IN3.forChain(Chain.MAINNET); // set it to mainnet (which is also dthe default) + + Transaction txn = GetTransactionAPI(in3); + System.out.println("Transaction API #blockNumber: " + txn.getBlockNumber()); + + System.out.println("Transaction RPC :" + GetTransactionRPC(in3)); + } + + static Transaction GetTransactionAPI(IN3 in3) { + return in3.getEth1API().getTransactionByHash(TXN_HASH); + } + + static String GetTransactionRPC(IN3 in3) { + return in3.sendRPC("eth_getTransactionByHash", new Object[] {TXN_HASH}); + } +} +``` + +### GetTransactionReceipt + +source : [in3-c/java/examples/GetTransactionReceipt.java](https://github.com/slockit/in3-c/blob/master/java/examples/GetTransactionReceipt.java) + +getting a TransactionReceipt with or without API + + +```java +/// getting a TransactionReceipt with or without API + +import in3.*; +import in3.eth1.*; +import java.math.BigInteger; +import java.util.*; + +public class GetTransactionReceipt { + static String TRANSACTION_HASH = "0xdd80249a0631cf0f1593c7a9c9f9b8545e6c88ab5252287c34bc5d12457eab0e"; + + // + public static void main(String[] args) throws Exception { + // create incubed + IN3 in3 = IN3.forChain(Chain.MAINNET); // set it to mainnet (which is also the default) + + TransactionReceipt txn = GetTransactionReceiptAPI(in3); + System.out.println("TransactionRerceipt API : for txIndex " + txn.getTransactionIndex() + " Block num " + txn.getBlockNumber() + " Gas used " + txn.getGasUsed() + " status " + txn.getStatus()); + + System.out.println("TransactionReceipt RPC : " + GetTransactionReceiptRPC(in3)); + } + + static TransactionReceipt GetTransactionReceiptAPI(IN3 in3) { + return in3.getEth1API().getTransactionReceipt(TRANSACTION_HASH); + } + + static String GetTransactionReceiptRPC(IN3 in3) { + return in3.sendRPC("eth_getTransactionReceipt", new Object[] {TRANSACTION_HASH}); + } +} + +``` + +### SendTransaction + +source : [in3-c/java/examples/SendTransaction.java](https://github.com/slockit/in3-c/blob/master/java/examples/SendTransaction.java) + +Sending Transactions + + +```java + +/// Sending Transactions + +// In order to send, you need a Signer. The SimpleWallet class is a basic implementation which can be used. + +package in3; + +import in3.*; +import in3.eth1.*; +import java.io.IOException; +import java.math.BigInteger; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class SendTransaction { + // + public static void main(String[] args) throws IOException { + // create incubed + IN3 in3 = IN3.forChain(Chain.MAINNET); // set it to mainnet (which is also dthe default) + + // create a wallet managing the private keys + SimpleWallet wallet = new SimpleWallet(); + + // add accounts by adding the private keys + String keyFile = "myKey.json"; + String myPassphrase = ""; + + // read the keyfile and decoded the private key + String account = wallet.addKeyStore( + Files.readString(Paths.get(keyFile)), + myPassphrase); + + // use the wallet as signer + in3.setSigner(wallet); + + String receipient = "0x1234567890123456789012345678901234567890"; + BigInteger value = BigInteger.valueOf(100000); + + // create a Transaction + TransactionRequest tx = new TransactionRequest(); + tx.setFrom(account); + tx.setTo("0x1234567890123456789012345678901234567890"); + tx.setFunction("transfer(address,uint256)"); + tx.setParams(new Object[] {receipient, value}); + + String txHash = in3.getEth1API().sendTransaction(tx); + + System.out.println("Transaction sent with hash = " + txHash); + } +} + +``` + + +### Building + +In order to run those examples, you only need a Java SDK installed. + +``` +./build.sh +``` + +will build all examples in this directory. + +In order to run a example use + +``` +java -cp $IN3/build/lib/in3.jar:. GetBlockAPI +``` + diff --git a/java/docs/CMakeLists.txt b/java/docs/CMakeLists.txt new file mode 100644 index 000000000..c96c8e685 --- /dev/null +++ b/java/docs/CMakeLists.txt @@ -0,0 +1,23 @@ +# first we can indicate the documentation build as an option and set it to ON by default +if (BUILD_DOC) + # check if Doxygen is installed + find_package(Doxygen) + if (DOXYGEN_FOUND) + # set input and output files + set(DOXYGEN_IN_JAVA ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in) + set(DOXYGEN_OUT_JAVA ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile) + + # request to configure the file + configure_file(${DOXYGEN_IN_JAVA} ${DOXYGEN_OUT_JAVA} @ONLY) + message("Doxygen java build started") + + # note the option ALL which allows to build the docs together with the application + add_custom_target( doc_doxygen_java ALL + COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT_JAVA} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Generating Java API documentation with Doxygen" + VERBATIM ) + else (DOXYGEN_FOUND) + message("Doxygen need to be installed to generate the doxygen documentation") + endif (DOXYGEN_FOUND) +endif() \ No newline at end of file diff --git a/java/docs/Doxyfile.in b/java/docs/Doxyfile.in new file mode 100644 index 000000000..4ded95d68 --- /dev/null +++ b/java/docs/Doxyfile.in @@ -0,0 +1,2468 @@ +# Doxyfile 1.8.14 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See +# https://www.gnu.org/software/libiconv/ for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = "IN3 (incubed)" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = 1 + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = the minimal verifiaction client + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = @CMAKE_CURRENT_BINARY_DIR@/doc_doxygen/ + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = YES + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines (in the resulting output). You can put ^^ in the value part of an +# alias to insert a newline as if a physical newline was in the original file. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 0. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +#TOC_INCLUDE_HEADINGS = 0 + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +#GROUP_NESTED_COMPOUNDS = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO, these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +#HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = YES + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = NO + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = NO + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = NO + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +#WARN_AS_ERROR = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = @CMAKE_CURRENT_SOURCE_DIR@/../src @CMAKE_CURRENT_SOURCE_DIR@/../docs + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: https://www.gnu.org/software/libiconv/) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.idl \ + *.ddl \ + *.odl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.cs \ + *.d \ + *.php \ + *.php4 \ + *.php5 \ + *.phtml \ + *.inc \ + *.m \ + *.markdown \ + *.md \ + *.mm \ + *.dox \ + *.py \ + *.pyw \ + *.f90 \ + *.f95 \ + *.f03 \ + *.f08 \ + *.f \ + *.for \ + *.tcl \ + *.vhd \ + *.vhdl \ + *.ucf \ + *.qsf + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = */crypto/* */jsmn/* zephyr + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = 0_home.md + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see https://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# https://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = NO + +# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML +# documentation will contain a main index with vertical navigation menus that +# are dynamically created via Javascript. If disabled, the navigation index will +# consists of multiple levels of tabs that are statically embedded in every HTML +# page. Disable this option to support browsers that do not have Javascript, +# like the Qt help browser. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +#HTML_DYNAMIC_MENUS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: https://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See https://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://doc.qt.io/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://doc.qt.io/qt-4.8/qthelpproject.html#virtual-folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://doc.qt.io/qt-4.8/qthelpproject.html#custom-filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://doc.qt.io/qt-4.8/qthelpproject.html#custom-filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://doc.qt.io/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANSPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# https://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from https://www.mathjax.org before deployment. +# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/ + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /