diff --git a/.github/scripts/load-test-ref.sh b/.github/scripts/load-test-ref.sh index 3db08fbcb..f43240987 100755 --- a/.github/scripts/load-test-ref.sh +++ b/.github/scripts/load-test-ref.sh @@ -1,4 +1,4 @@ #!/bin/sh -REF=fdcee27ec509564d9330382cad6200101ac61cee +REF=6129da00879bbb2831ef01588604fbade1ec197a echo "TEST_VECTORS_REF=$REF" >> "$GITHUB_ENV" diff --git a/.github/workflows/build-qa.yml b/.github/workflows/build-qa.yml index 21466e662..a59255890 100644 --- a/.github/workflows/build-qa.yml +++ b/.github/workflows/build-qa.yml @@ -2,10 +2,9 @@ name: Build - Lint & Test on: push: - branches: [ "main" ] + branches: ["main"] pull_request: - branches: [ "main" ] - merge_group: + branches: ["main"] jobs: test: @@ -16,17 +15,16 @@ jobs: node-version: [22.x] steps: - - uses: actions/checkout@v4 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - cache: 'npm' - - run: npm ci - - run: npm run qa - - run: npm test - - run: GP_VERSION=0.6.7 npm test - - run: GP_VERSION=0.7.0 npm test - - run: GP_VERSION=0.7.1 npm test - - run: GP_VERSION=0.7.2 npm test - - run: npm run docs + - uses: actions/checkout@v4 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: "npm" + - run: npm ci + - run: npm run qa + - run: npm test + - run: GP_VERSION=0.7.0 npm test + - run: GP_VERSION=0.7.1 npm test + - run: GP_VERSION=0.7.2 npm test + - run: npm run docs diff --git a/.github/workflows/vectors-jamduna-067.yml b/.github/workflows/vectors-jamduna-067.yml deleted file mode 100644 index f1939478b..000000000 --- a/.github/workflows/vectors-jamduna-067.yml +++ /dev/null @@ -1,51 +0,0 @@ -name: VECTORS - jamduna-0.6.7 - -on: - workflow_dispatch: - pull_request: - branches: [ "main" ] - merge_group: - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.event.merge_group.head_ref || github.ref }} - cancel-in-progress: true - -env: - TEST_VECTORS_REF: a0c8a6a66a7f5e9cc270755498e3b811ae38bf93 - GP_VERSION: 0.6.7 - TEST_SUITE: jamduna - -jobs: - state_transition: - runs-on: self-hosted - - strategy: - matrix: - node-version: [22.x] - - steps: - - uses: actions/checkout@v4 - - name: Checkout JAM test vectors - uses: actions/checkout@v4 - with: - repository: fluffylabs/test-vectors - path: "./test-vectors" - ref: ${{ env.TEST_VECTORS_REF }} - submodules: true - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - cache: "npm" - - run: npm ci - - run: npm start -w @typeberry/test-runner -- jamduna-067.ts - - name: Display results - if: always() - run: cat ./dist/jamduna-067.txt - - name: Upload new results - if: failure() - uses: actions/upload-artifact@v4 - with: - path: | - ./dist/jamduna-067.txt - name: jamdunavectors-results diff --git a/.github/workflows/vectors-javajam.yml b/.github/workflows/vectors-javajam.yml deleted file mode 100644 index 56b50034e..000000000 --- a/.github/workflows/vectors-javajam.yml +++ /dev/null @@ -1,53 +0,0 @@ -name: VECTORS - javajam - -on: - workflow_dispatch: - pull_request: - branches: [ "main" ] - merge_group: - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.event.merge_group.head_ref || github.ref }} - cancel-in-progress: true - -env: - TEST_VECTORS_REF: ffffffffffffffffffffffffffffffffffffffff # loaded in scripts/load-test-ref.sh - GP_VERSION: 0.6.7 - -jobs: - state_transition: - runs-on: self-hosted - - strategy: - matrix: - node-version: [22.x] - - steps: - - uses: actions/checkout@v4 - - name: Load test ref - run: .github/scripts/load-test-ref.sh - - name: Checkout JAM test vectors - uses: actions/checkout@v4 - with: - repository: fluffylabs/test-vectors - path: "./test-vectors" - ref: ${{ env.TEST_VECTORS_REF }} - submodules: true - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - cache: "npm" - - run: npm ci - - run: npm start -w @typeberry/test-runner -- javajam.ts - - name: Display results - if: always() - run: cat ./dist/javajam.txt - - name: Upload new results - if: failure() - uses: actions/upload-artifact@v4 - with: - path: | - ./dist/javajam.txt - name: javajamvectors-results - diff --git a/.github/workflows/vectors-w3f.yml b/.github/workflows/vectors-w3f-070.yml similarity index 88% rename from .github/workflows/vectors-w3f.yml rename to .github/workflows/vectors-w3f-070.yml index 209850523..845d0aec7 100644 --- a/.github/workflows/vectors-w3f.yml +++ b/.github/workflows/vectors-w3f-070.yml @@ -1,4 +1,4 @@ -name: VECTORS - w3f-0.6.7 +name: VECTORS - w3f-0.7.0 on: workflow_dispatch: @@ -12,7 +12,7 @@ concurrency: env: TEST_VECTORS_REF: ffffffffffffffffffffffffffffffffffffffff # loaded in scripts/load-test-ref.sh - GP_VERSION: 0.6.7 + GP_VERSION: 0.7.0 jobs: run: @@ -40,14 +40,14 @@ jobs: node-version: ${{ matrix.node-version }} cache: "npm" - run: npm ci - - run: npm start -w @typeberry/test-runner -- w3f.ts + - run: npm start -w @typeberry/test-runner -- w3f-070.ts - name: Display results if: always() - run: cat ./dist/w3f.txt + run: cat ./dist/w3f-070.txt - name: Upload new transaction log if: failure() uses: actions/upload-artifact@v4 with: path: | - ./dist/w3f.txt + ./dist/w3f-070.txt name: jamtestvectors-results diff --git a/.github/workflows/vectors-w3f-davxy-067.yml b/.github/workflows/vectors-w3f-davxy-067.yml deleted file mode 100644 index 578d930a1..000000000 --- a/.github/workflows/vectors-w3f-davxy-067.yml +++ /dev/null @@ -1,53 +0,0 @@ -name: VECTORS - W3F davxy-0.6.7 - -on: - workflow_dispatch: - pull_request: - branches: [ "main" ] - merge_group: - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.event.merge_group.head_ref || github.ref }} - cancel-in-progress: true - -env: - TEST_VECTORS_REF: ffffffffffffffffffffffffffffffffffffffff # loaded in scripts/load-test-ref.sh - GP_VERSION: 0.6.7 - -jobs: - run: - runs-on: self-hosted - - strategy: - matrix: - node-version: [22.x] - # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ - - steps: - - uses: actions/checkout@v4 - - name: Load test ref - run: .github/scripts/load-test-ref.sh - - name: Checkout JAM test vectors - uses: actions/checkout@v4 - with: - repository: fluffylabs/test-vectors - path: "./test-vectors" - ref: ${{ env.TEST_VECTORS_REF }} - submodules: true - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - cache: "npm" - - run: npm ci - - run: npm start -w @typeberry/test-runner -- w3f-davxy-067.ts - - name: Display results - if: always() - run: cat ./dist/w3f-davxy-067.txt - - name: Upload new transaction log - if: failure() - uses: actions/upload-artifact@v4 - with: - path: | - ./dist/w3f-davxy-067.txt - name: jamtestvectors-davxy-results diff --git a/README.md b/README.md index bd518c02a..befbf5406 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,6 @@ the submitted code. By creating the PR you accept this requirement.** Gray Paper compliance can be controlled via `GP_VERSION` environment variable. -- [x] 0.6.7 - [x] 0.7.0 - [x] 0.7.1 - [x] 0.7.2 diff --git a/bin/test-runner/jamduna-067.ts b/bin/test-runner/jamduna-067.ts deleted file mode 100644 index 6f13183f0..000000000 --- a/bin/test-runner/jamduna-067.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { StateTransition } from "@typeberry/state-vectors"; -import { logger, main, parseArgs, runner, SelectedPvm } from "./common.js"; -import { runStateTransition } from "./state-transition/state-transition.js"; - -const runners = [ - runner("state_transition", runStateTransition) - .fromJson(StateTransition.fromJson) - .fromBin(StateTransition.Codec) - .withVariants([SelectedPvm.Ananas, SelectedPvm.Builtin]), -].map((x) => x.build()); - -main(runners, "test-vectors/jamduna_067", { - ...parseArgs(process.argv.slice(2)), - patterns: [".json"], - accepted: { - ".json": ["traces/"], - }, - ignored: [], -}) - .then((r) => logger.log`${r}`) - .catch((e) => { - logger.error`${e}`; - process.exit(-1); - }); diff --git a/bin/test-runner/package.json b/bin/test-runner/package.json index 139e00ad5..313320ca9 100644 --- a/bin/test-runner/package.json +++ b/bin/test-runner/package.json @@ -35,16 +35,12 @@ }, "scripts": { "start": "tsx --test-timeout=900000 ./index.ts", - "w3f:0.6.7": "GP_VERSION=0.6.7 tsx ./w3f.ts", - "w3f:0.7.1": "GP_VERSION=0.7.1 tsx ./w3f.ts", - "w3f-davxy:0.6.7": "GP_VERSION=0.6.7 tsx ./w3f-davxy-067.ts", + "w3f:0.7.0": "GP_VERSION=0.7.0 tsx ./w3f-070.ts", "w3f-davxy:0.7.0": "GP_VERSION=0.7.0 tsx ./w3f-davxy-070.ts", "w3f-davxy:0.7.1": "GP_VERSION=0.7.1 tsx ./w3f-davxy-071.ts", "w3f-davxy:0.7.2": "GP_VERSION=0.7.2 tsx ./w3f-davxy-072.ts", "jam-conformance:0.7.0": "GP_VERSION=0.7.0 tsx ./jam-conformance-070.ts", "jam-conformance:0.7.1": "GP_VERSION=0.7.1 tsx ./jam-conformance-071.ts", - "jamduna:0.6.7": "GP_VERSION=0.6.7 TEST_SUITE=jamduna tsx ./jamduna-067.ts", - "javajam:0.6.7": "GP_VERSION=0.6.7 tsx ./javajam.ts", "test": "tsx --test $(find . -type f -name '*.test.ts' | tr '\\n' ' ')" }, "author": "Fluffy Labs", diff --git a/bin/test-runner/w3f-070.ts b/bin/test-runner/w3f-070.ts new file mode 100644 index 000000000..be5a0aaba --- /dev/null +++ b/bin/test-runner/w3f-070.ts @@ -0,0 +1,27 @@ +import { logger, main, parseArgs } from "./common.js"; +import { runners } from "./w3f/runners.js"; + +main(runners, "test-vectors/w3f-070", { + ...parseArgs(process.argv.slice(2)), + patterns: [".json"], + ignored: [ + "genesis.json", + + // TODO: Unrecognized test case + "erasure/", + + // TODO: Expected values to be strictly deep-equal + "trie/", + + // Invalid test cases + // Tests case uses json structure from v0.7.1+ + // Unrecognized test case + "codec/tiny/work_package.json", + "codec/full/work_package.json", + ], +}) + .then((r) => logger.log`${r}`) + .catch((e) => { + logger.error`${e}`; + process.exit(-1); + }); diff --git a/bin/test-runner/w3f-davxy-067.ts b/bin/test-runner/w3f-davxy-067.ts deleted file mode 100644 index 36101c139..000000000 --- a/bin/test-runner/w3f-davxy-067.ts +++ /dev/null @@ -1,313 +0,0 @@ -import { logger, main, parseArgs } from "./common.js"; -import { runners } from "./w3f/runners.js"; - -main(runners, "test-vectors/w3f-davxy_067", { - ...parseArgs(process.argv.slice(2)), - patterns: [".json"], - accepted: { - ".json": ["traces"], - }, - ignored: [ - "genesis.json", - // note [seko] storage tests await implementation of read/write - "traces/storage_light/00000003.json", - "traces/storage_light/00000004.json", - "traces/storage_light/00000005.json", - "traces/storage_light/00000011.json", - "traces/storage_light/00000012.json", - "traces/storage_light/00000016.json", - "traces/storage_light/00000017.json", - "traces/storage_light/00000020.json", - "traces/storage_light/00000021.json", - "traces/storage_light/00000022.json", - "traces/storage_light/00000026.json", - "traces/storage_light/00000027.json", - "traces/storage_light/00000028.json", - "traces/storage_light/00000030.json", - "traces/storage_light/00000034.json", - "traces/storage_light/00000035.json", - "traces/storage_light/00000036.json", - "traces/storage_light/00000038.json", - "traces/storage_light/00000040.json", - "traces/storage_light/00000042.json", - "traces/storage_light/00000043.json", - "traces/storage_light/00000044.json", - "traces/storage_light/00000046.json", - "traces/storage_light/00000049.json", - "traces/storage_light/00000053.json", - "traces/storage_light/00000054.json", - "traces/storage_light/00000055.json", - "traces/storage_light/00000056.json", - "traces/storage_light/00000057.json", - "traces/storage_light/00000058.json", - "traces/storage_light/00000059.json", - "traces/storage_light/00000060.json", - "traces/storage_light/00000062.json", - "traces/storage_light/00000063.json", - "traces/storage_light/00000065.json", - "traces/storage_light/00000067.json", - "traces/storage_light/00000070.json", - "traces/storage_light/00000071.json", - "traces/storage_light/00000072.json", - "traces/storage_light/00000073.json", - "traces/storage_light/00000074.json", - "traces/storage_light/00000075.json", - "traces/storage_light/00000079.json", - "traces/storage_light/00000080.json", - "traces/storage_light/00000082.json", - "traces/storage_light/00000083.json", - "traces/storage_light/00000084.json", - "traces/storage_light/00000086.json", - "traces/storage_light/00000087.json", - "traces/storage_light/00000091.json", - "traces/storage_light/00000092.json", - "traces/storage_light/00000093.json", - "traces/storage_light/00000096.json", - "traces/storage_light/00000097.json", - "traces/storage_light/00000099.json", - "traces/storage_light/00000100.json", - "traces/storage/00000001.json", - "traces/storage/00000002.json", - "traces/storage/00000004.json", - "traces/storage/00000005.json", - "traces/storage/00000006.json", - "traces/storage/00000007.json", - "traces/storage/00000009.json", - "traces/storage/00000010.json", - "traces/storage/00000011.json", - "traces/storage/00000012.json", - "traces/storage/00000013.json", - "traces/storage/00000014.json", - "traces/storage/00000015.json", - "traces/storage/00000016.json", - "traces/storage/00000017.json", - "traces/storage/00000018.json", - "traces/storage/00000019.json", - "traces/storage/00000020.json", - "traces/storage/00000021.json", - "traces/storage/00000022.json", - "traces/storage/00000023.json", - "traces/storage/00000024.json", - "traces/storage/00000025.json", - "traces/storage/00000026.json", - "traces/storage/00000027.json", - "traces/storage/00000028.json", - "traces/storage/00000029.json", - "traces/storage/00000030.json", - "traces/storage/00000031.json", - "traces/storage/00000032.json", - "traces/storage/00000033.json", - "traces/storage/00000034.json", - "traces/storage/00000035.json", - "traces/storage/00000036.json", - "traces/storage/00000038.json", - "traces/storage/00000039.json", - "traces/storage/00000040.json", - "traces/storage/00000041.json", - "traces/storage/00000042.json", - "traces/storage/00000043.json", - "traces/storage/00000044.json", - "traces/storage/00000046.json", - "traces/storage/00000047.json", - "traces/storage/00000048.json", - "traces/storage/00000049.json", - "traces/storage/00000050.json", - "traces/storage/00000051.json", - "traces/storage/00000052.json", - "traces/storage/00000053.json", - "traces/storage/00000054.json", - "traces/storage/00000055.json", - "traces/storage/00000056.json", - "traces/storage/00000058.json", - "traces/storage/00000059.json", - "traces/storage/00000060.json", - "traces/storage/00000061.json", - "traces/storage/00000062.json", - "traces/storage/00000064.json", - "traces/storage/00000065.json", - "traces/storage/00000066.json", - "traces/storage/00000067.json", - "traces/storage/00000068.json", - "traces/storage/00000069.json", - "traces/storage/00000070.json", - "traces/storage/00000071.json", - "traces/storage/00000072.json", - "traces/storage/00000073.json", - "traces/storage/00000074.json", - "traces/storage/00000075.json", - "traces/storage/00000077.json", - "traces/storage/00000078.json", - "traces/storage/00000079.json", - "traces/storage/00000080.json", - "traces/storage/00000081.json", - "traces/storage/00000082.json", - "traces/storage/00000083.json", - "traces/storage/00000084.json", - "traces/storage/00000085.json", - "traces/storage/00000086.json", - "traces/storage/00000087.json", - "traces/storage/00000088.json", - "traces/storage/00000089.json", - "traces/storage/00000090.json", - "traces/storage/00000091.json", - "traces/storage/00000092.json", - "traces/storage/00000093.json", - "traces/storage/00000094.json", - "traces/storage/00000095.json", - "traces/storage/00000096.json", - "traces/storage/00000097.json", - "traces/storage/00000100.json", - // note [seko] preimage tests fail with differences in storage utilisation, accumulateGasUsed and lookupHistory - "traces/preimages_light/00000003.json", - "traces/preimages_light/00000006.json", - "traces/preimages_light/00000010.json", - "traces/preimages_light/00000011.json", - "traces/preimages_light/00000016.json", - "traces/preimages_light/00000017.json", - "traces/preimages_light/00000019.json", - "traces/preimages_light/00000020.json", - "traces/preimages_light/00000021.json", - "traces/preimages_light/00000022.json", - "traces/preimages_light/00000023.json", - "traces/preimages_light/00000024.json", - "traces/preimages_light/00000025.json", - "traces/preimages_light/00000029.json", - "traces/preimages_light/00000030.json", - "traces/preimages_light/00000031.json", - "traces/preimages_light/00000032.json", - "traces/preimages_light/00000034.json", - "traces/preimages_light/00000036.json", - "traces/preimages_light/00000037.json", - "traces/preimages_light/00000038.json", - "traces/preimages_light/00000040.json", - "traces/preimages_light/00000041.json", - "traces/preimages_light/00000043.json", - "traces/preimages_light/00000044.json", - "traces/preimages_light/00000046.json", - "traces/preimages_light/00000053.json", - "traces/preimages_light/00000054.json", - "traces/preimages_light/00000055.json", - "traces/preimages_light/00000056.json", - "traces/preimages_light/00000057.json", - "traces/preimages_light/00000058.json", - "traces/preimages_light/00000059.json", - "traces/preimages_light/00000060.json", - "traces/preimages_light/00000061.json", - "traces/preimages_light/00000062.json", - "traces/preimages_light/00000063.json", - "traces/preimages_light/00000064.json", - "traces/preimages_light/00000065.json", - "traces/preimages_light/00000066.json", - "traces/preimages_light/00000069.json", - "traces/preimages_light/00000070.json", - "traces/preimages_light/00000071.json", - "traces/preimages_light/00000072.json", - "traces/preimages_light/00000073.json", - "traces/preimages_light/00000074.json", - "traces/preimages_light/00000079.json", - "traces/preimages_light/00000080.json", - "traces/preimages_light/00000081.json", - "traces/preimages_light/00000082.json", - "traces/preimages_light/00000087.json", - "traces/preimages_light/00000089.json", - "traces/preimages_light/00000090.json", - "traces/preimages_light/00000092.json", - "traces/preimages_light/00000094.json", - "traces/preimages_light/00000096.json", - "traces/preimages_light/00000097.json", - "traces/preimages_light/00000098.json", - "traces/preimages_light/00000099.json", - "traces/preimages/00000001.json", - "traces/preimages/00000002.json", - "traces/preimages/00000004.json", - "traces/preimages/00000005.json", - "traces/preimages/00000006.json", - "traces/preimages/00000007.json", - "traces/preimages/00000008.json", - "traces/preimages/00000009.json", - "traces/preimages/00000010.json", - "traces/preimages/00000011.json", - "traces/preimages/00000012.json", - "traces/preimages/00000013.json", - "traces/preimages/00000014.json", - "traces/preimages/00000015.json", - "traces/preimages/00000016.json", - "traces/preimages/00000017.json", - "traces/preimages/00000018.json", - "traces/preimages/00000019.json", - "traces/preimages/00000020.json", - "traces/preimages/00000021.json", - "traces/preimages/00000022.json", - "traces/preimages/00000023.json", - "traces/preimages/00000024.json", - "traces/preimages/00000025.json", - "traces/preimages/00000026.json", - "traces/preimages/00000028.json", - "traces/preimages/00000029.json", - "traces/preimages/00000030.json", - "traces/preimages/00000031.json", - "traces/preimages/00000032.json", - "traces/preimages/00000034.json", - "traces/preimages/00000035.json", - "traces/preimages/00000036.json", - "traces/preimages/00000037.json", - "traces/preimages/00000038.json", - "traces/preimages/00000039.json", - "traces/preimages/00000040.json", - "traces/preimages/00000043.json", - "traces/preimages/00000045.json", - "traces/preimages/00000047.json", - "traces/preimages/00000048.json", - "traces/preimages/00000049.json", - "traces/preimages/00000050.json", - "traces/preimages/00000051.json", - "traces/preimages/00000052.json", - "traces/preimages/00000053.json", - "traces/preimages/00000054.json", - "traces/preimages/00000055.json", - "traces/preimages/00000056.json", - "traces/preimages/00000057.json", - "traces/preimages/00000058.json", - "traces/preimages/00000059.json", - "traces/preimages/00000060.json", - "traces/preimages/00000061.json", - "traces/preimages/00000062.json", - "traces/preimages/00000063.json", - "traces/preimages/00000064.json", - "traces/preimages/00000066.json", - "traces/preimages/00000067.json", - "traces/preimages/00000069.json", - "traces/preimages/00000070.json", - "traces/preimages/00000071.json", - "traces/preimages/00000072.json", - "traces/preimages/00000073.json", - "traces/preimages/00000075.json", - "traces/preimages/00000076.json", - "traces/preimages/00000077.json", - "traces/preimages/00000078.json", - "traces/preimages/00000080.json", - "traces/preimages/00000081.json", - "traces/preimages/00000082.json", - "traces/preimages/00000083.json", - "traces/preimages/00000084.json", - "traces/preimages/00000085.json", - "traces/preimages/00000086.json", - "traces/preimages/00000087.json", - "traces/preimages/00000088.json", - "traces/preimages/00000090.json", - "traces/preimages/00000091.json", - "traces/preimages/00000092.json", - "traces/preimages/00000093.json", - "traces/preimages/00000094.json", - "traces/preimages/00000095.json", - "traces/preimages/00000096.json", - "traces/preimages/00000097.json", - "traces/preimages/00000098.json", - "traces/preimages/00000099.json", - ], -}) - .then((r) => logger.log`${r}`) - .catch((e) => { - logger.error`${e}`; - process.exit(-1); - }); diff --git a/bin/test-runner/w3f.ts b/bin/test-runner/w3f.ts deleted file mode 100644 index 4be2d629d..000000000 --- a/bin/test-runner/w3f.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { logger, main, parseArgs } from "./common.js"; -import { runners } from "./w3f/runners.js"; - -main(runners, "test-vectors/w3f-fluffy", { - ...parseArgs(process.argv.slice(2)), - patterns: [".json"], - ignored: [ - "genesis.json", - // invalid tests - "host_function", - // Ignored - not working correctly in 0.6.7 and we ditched fixing them. - "traces/preimages_light/00000070.json", - "traces/preimages_light/00000073.json", - // TODO [ToDr] Erasure coding test vectors need to be updated to GP 0.7.0 - "erasure/", - // Ignored due to incorrect expected gas - // https://paritytech.github.io/matrix-archiver/archive/_21ddsEwXlCWnreEGuqXZ_3Apolkadot.io/index.html#$qvS25IbmiyGNWR0kuxhZpukDWP5H7d_5rmUiEJ7KTUI - "pvm/programs/inst_load_u8_nok.json", - "pvm/programs/inst_store_imm_indirect_u16_with_offset_nok.json", - "pvm/programs/inst_store_imm_indirect_u32_with_offset_nok.json", - "pvm/programs/inst_store_imm_indirect_u64_with_offset_nok.json", - "pvm/programs/inst_store_imm_indirect_u8_with_offset_nok.json", - "pvm/programs/inst_store_imm_u8_trap_inaccessible.json", - "pvm/programs/inst_store_imm_u8_trap_read_only.json", - "pvm/programs/inst_store_indirect_u16_with_offset_nok.json", - "pvm/programs/inst_store_indirect_u32_with_offset_nok.json", - "pvm/programs/inst_store_indirect_u64_with_offset_nok.json", - "pvm/programs/inst_store_indirect_u8_with_offset_nok.json", - "pvm/programs/inst_store_u8_trap_inaccessible.json", - "pvm/programs/inst_store_u8_trap_read_only.json", - ], -}) - .then((r) => logger.log`${r}`) - .catch((e) => { - logger.error`${e}`; - process.exit(-1); - }); diff --git a/packages/core/utils/compatibility.test.ts b/packages/core/utils/compatibility.test.ts index 8becd141f..9966a86b6 100644 --- a/packages/core/utils/compatibility.test.ts +++ b/packages/core/utils/compatibility.test.ts @@ -31,27 +31,27 @@ describe("GrayPaper compatibility", { concurrency: false }, () => { const gpVersion = GpVersion.V0_7_0; Compatibility.override(gpVersion); - assert.equal(Compatibility.isGreaterOrEqual(GpVersion.V0_6_7), true); assert.equal(Compatibility.isGreaterOrEqual(GpVersion.V0_7_0), true); assert.equal(Compatibility.isGreaterOrEqual(GpVersion.V0_7_1), false); + assert.equal(Compatibility.isGreaterOrEqual(GpVersion.V0_7_2), false); }); it("Should check an order of versions (isLessThan)", () => { const gpVersion = GpVersion.V0_7_0; Compatibility.override(gpVersion); + assert.equal(Compatibility.isLessThan(GpVersion.V0_7_2), true); assert.equal(Compatibility.isLessThan(GpVersion.V0_7_1), true); assert.equal(Compatibility.isLessThan(GpVersion.V0_7_0), false); - assert.equal(Compatibility.isLessThan(GpVersion.V0_6_7), false); }); it("Should order values by versions and get the one for highest version matching", () => { - const gpVersion = GpVersion.V0_7_0; + const gpVersion = GpVersion.V0_7_1; Compatibility.override(gpVersion); const record = { - [GpVersion.V0_6_7]: "low", - [GpVersion.V0_7_1]: "high", + [GpVersion.V0_7_0]: "low", + [GpVersion.V0_7_2]: "high", }; const result = Compatibility.selectIfGreaterOrEqual({ fallback: "default", versions: record }); @@ -60,13 +60,13 @@ describe("GrayPaper compatibility", { concurrency: false }, () => { }); it("Should return middle value that is greater or equal current value", () => { - const gpVersion = GpVersion.V0_7_0; + const gpVersion = GpVersion.V0_7_1; Compatibility.override(gpVersion); const record = { - [GpVersion.V0_6_7]: "low", - [GpVersion.V0_7_0]: "mid", - [GpVersion.V0_7_1]: "high", + [GpVersion.V0_7_0]: "low", + [GpVersion.V0_7_1]: "mid", + [GpVersion.V0_7_2]: "high", }; const result = Compatibility.selectIfGreaterOrEqual({ fallback: "default", versions: record }); @@ -75,13 +75,13 @@ describe("GrayPaper compatibility", { concurrency: false }, () => { }); it("Should return highest value that is greater or equal current value", () => { - const gpVersion = GpVersion.V0_7_1; + const gpVersion = GpVersion.V0_7_2; Compatibility.override(gpVersion); const record = { - [GpVersion.V0_6_7]: "low", - [GpVersion.V0_7_0]: "mid", - [GpVersion.V0_7_1]: "high", + [GpVersion.V0_7_0]: "low", + [GpVersion.V0_7_1]: "mid", + [GpVersion.V0_7_2]: "high", }; const result = Compatibility.selectIfGreaterOrEqual({ fallback: "default", versions: record }); @@ -90,12 +90,12 @@ describe("GrayPaper compatibility", { concurrency: false }, () => { }); it("Should return default if no version is greater or equal", () => { - const gpVersion = GpVersion.V0_6_7; + const gpVersion = GpVersion.V0_7_0; Compatibility.override(gpVersion); const record = { - [GpVersion.V0_7_0]: "mid", - [GpVersion.V0_7_1]: "high", + [GpVersion.V0_7_1]: "mid", + [GpVersion.V0_7_2]: "high", }; const result = Compatibility.selectIfGreaterOrEqual({ fallback: "default", versions: record }); @@ -104,7 +104,7 @@ describe("GrayPaper compatibility", { concurrency: false }, () => { }); it("Should return default if record is empty", () => { - const gpVersion = GpVersion.V0_6_7; + const gpVersion = GpVersion.V0_7_0; Compatibility.override(gpVersion); const result = Compatibility.selectIfGreaterOrEqual({ fallback: "default", versions: {} }); diff --git a/packages/core/utils/compatibility.ts b/packages/core/utils/compatibility.ts index 111c462c5..3214f4c87 100644 --- a/packages/core/utils/compatibility.ts +++ b/packages/core/utils/compatibility.ts @@ -1,7 +1,6 @@ import { env } from "./env.js"; export enum GpVersion { - V0_6_7 = "0.6.7", V0_7_0 = "0.7.0", V0_7_1 = "0.7.1", V0_7_2 = "0.7.2", @@ -9,10 +8,10 @@ export enum GpVersion { export enum TestSuite { W3F_DAVXY = "w3f-davxy", - JAMDUNA = "jamduna", } -const ALL_VERSIONS_IN_ORDER = [GpVersion.V0_6_7, GpVersion.V0_7_0, GpVersion.V0_7_1, GpVersion.V0_7_2]; +// NOTE: Also acts as a supported versions +const ALL_VERSIONS_IN_ORDER = [GpVersion.V0_7_0, GpVersion.V0_7_1, GpVersion.V0_7_2]; export const DEFAULT_SUITE = TestSuite.W3F_DAVXY; export const DEFAULT_VERSION = GpVersion.V0_7_2; diff --git a/packages/jam/block/header.test.ts b/packages/jam/block/header.test.ts index 5bb10d2c4..d942c500e 100644 --- a/packages/jam/block/header.test.ts +++ b/packages/jam/block/header.test.ts @@ -5,7 +5,6 @@ import { Decoder, Encoder } from "@typeberry/codec"; import { tinyChainSpec } from "@typeberry/config"; import { BANDERSNATCH_VRF_SIGNATURE_BYTES } from "@typeberry/crypto/bandersnatch.js"; import { HASH_SIZE } from "@typeberry/hash"; -import { Compatibility, GpVersion } from "@typeberry/utils"; import { tryAsTimeSlot, tryAsValidatorIndex } from "./common.js"; import { encodeUnsealedHeader, Header } from "./header.js"; @@ -32,15 +31,11 @@ describe("Header", () => { assert.deepStrictEqual( encoded.toString(), - Compatibility.isGreaterOrEqual(GpVersion.V0_7_0) - ? "0x0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a05050505050505050505050505050505050505050505050505050505050505050e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0a00000000000400010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101000f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f" - : "0x0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a05050505050505050505050505050505050505050505050505050505050505050e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0a00000000000004000101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f", + "0x0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a05050505050505050505050505050505050505050505050505050505050505050e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0a00000000000400010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101000f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f", ); assert.deepStrictEqual( encodedNoSeal.toString(), - Compatibility.isGreaterOrEqual(GpVersion.V0_7_0) - ? "0x0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a05050505050505050505050505050505050505050505050505050505050505050e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0a0000000000040001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100" - : "0x0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a05050505050505050505050505050505050505050505050505050505050505050e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0a0000000000000400010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101", + "0x0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a05050505050505050505050505050505050505050505050505050505050505050e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0a0000000000040001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100", ); }); }); diff --git a/packages/jam/block/header.ts b/packages/jam/block/header.ts index 24a82c8a8..f514dd412 100644 --- a/packages/jam/block/header.ts +++ b/packages/jam/block/header.ts @@ -3,7 +3,7 @@ import { type CodecRecord, codec, type DescribedBy } from "@typeberry/codec"; import { BANDERSNATCH_KEY_BYTES, type BandersnatchKey, ED25519_KEY_BYTES, type Ed25519Key } from "@typeberry/crypto"; import { BANDERSNATCH_VRF_SIGNATURE_BYTES, type BandersnatchVrfSignature } from "@typeberry/crypto/bandersnatch.js"; import { HASH_SIZE, WithHash } from "@typeberry/hash"; -import { Compatibility, GpVersion, WithDebug } from "@typeberry/utils"; +import { WithDebug } from "@typeberry/utils"; import { codecPerEpochBlock, codecPerValidator, @@ -104,45 +104,24 @@ export const encodeUnsealedHeader = (view: HeaderView): BytesBlob => { return BytesBlob.blobFrom(encodedFullHeader.subarray(0, encodedUnsealedLen)); }; -/** - * Codec descriptor with pre 0.7.0 encoding order - */ -const legacyDescriptor = { - parentHeaderHash: codec.bytes(HASH_SIZE).asOpaque(), - priorStateRoot: codec.bytes(HASH_SIZE).asOpaque(), - extrinsicHash: codec.bytes(HASH_SIZE).asOpaque(), - timeSlotIndex: codec.u32.asOpaque(), - epochMarker: codec.optional(EpochMarker.Codec), - ticketsMarker: codec.optional(TicketsMarker.Codec), - offendersMarker: codec.sequenceVarLen(codec.bytes(ED25519_KEY_BYTES).asOpaque()), - bandersnatchBlockAuthorIndex: codec.u16.asOpaque(), - entropySource: codec.bytes(BANDERSNATCH_VRF_SIGNATURE_BYTES).asOpaque(), - seal: codec.bytes(BANDERSNATCH_VRF_SIGNATURE_BYTES).asOpaque(), -}; - /** * The header of the JAM block. * - * https://graypaper.fluffylabs.dev/#/579bd12/0c66000c7200 + * https://graypaper.fluffylabs.dev/#/ab2cdbd/0c66000c7200?v=0.7.2 */ export class Header extends WithDebug { - static Codec = codec.Class( - Header, - Compatibility.isLessThan(GpVersion.V0_7_0) - ? legacyDescriptor - : { - parentHeaderHash: codec.bytes(HASH_SIZE).asOpaque(), - priorStateRoot: codec.bytes(HASH_SIZE).asOpaque(), - extrinsicHash: codec.bytes(HASH_SIZE).asOpaque(), - timeSlotIndex: codec.u32.asOpaque(), - epochMarker: codec.optional(EpochMarker.Codec), - ticketsMarker: codec.optional(TicketsMarker.Codec), - bandersnatchBlockAuthorIndex: codec.u16.asOpaque(), - entropySource: codec.bytes(BANDERSNATCH_VRF_SIGNATURE_BYTES).asOpaque(), - offendersMarker: codec.sequenceVarLen(codec.bytes(ED25519_KEY_BYTES).asOpaque()), - seal: codec.bytes(BANDERSNATCH_VRF_SIGNATURE_BYTES).asOpaque(), - }, - ); + static Codec = codec.Class(Header, { + parentHeaderHash: codec.bytes(HASH_SIZE).asOpaque(), + priorStateRoot: codec.bytes(HASH_SIZE).asOpaque(), + extrinsicHash: codec.bytes(HASH_SIZE).asOpaque(), + timeSlotIndex: codec.u32.asOpaque(), + epochMarker: codec.optional(EpochMarker.Codec), + ticketsMarker: codec.optional(TicketsMarker.Codec), + bandersnatchBlockAuthorIndex: codec.u16.asOpaque(), + entropySource: codec.bytes(BANDERSNATCH_VRF_SIGNATURE_BYTES).asOpaque(), + offendersMarker: codec.sequenceVarLen(codec.bytes(ED25519_KEY_BYTES).asOpaque()), + seal: codec.bytes(BANDERSNATCH_VRF_SIGNATURE_BYTES).asOpaque(), + }); static create(h: CodecRecord
) { return Object.assign(Header.empty(), h); diff --git a/packages/jam/block/test-block-0-6-5.ts b/packages/jam/block/test-block-0-6-5.ts deleted file mode 100644 index d18214f3e..000000000 --- a/packages/jam/block/test-block-0-6-5.ts +++ /dev/null @@ -1,2 +0,0 @@ -// taken from w3f codec/tiny/block.json test -export default "0x5c743dbc514284b2ea57798787c5a155ef9d7ac1e9499ec65910a7a3d65897b72591ebd047489f1006361a4254731466a946174af02fe1d86681d254cfd4a00b74a9e79d2618e0ce8720ff61811b10e045c02224a09299f04e404a9656e85c812a00000001ae85d6635e9ae539d0846b911ec86a27fe000f619b78bcac8a74b77e36f6dbcf333a7e328f0c4183f4b947e1d8f68aa4034f762e5ecdb5a7f6fbf0afea2fd8cdff71c6c03ff88adb5ed52c9681de1629a54e702fc14729f6b50d2f0a76f185b34418fb8c85bb3985394a8c2756d3643457ce614546202a2f50b093d762499acedee6d555b82024f1ccf8a1e37e60fa60fd40b1958c4bb3006af78647950e1b91ad93247bd01307550ec7acd757ce6fb805fcf73db364063265b30a949e90d9339326edb21e5541717fde24ec085000b28709847b8aab1ac51f84e94b37ca1b66cab2b9ff25c2410fbe9b8a717abb298c716a03983c98ceb4def2087500b8e3410746846d17469fb2f95ef365efcab9f4e22fa1feb53111c995376be8019981ccf30aa5444688b3cab47697b37d5cac5707bb3289e986b19b17db437206931a8d151e5c8fe2b9d8a606966a79edd2f9e5db47e83947ce368ccba53bf6ba20a40b8b8c5d436f92ecf605421e873a99ec528761eb52a88a2f9a057b3b3003e6f32a2105650944fcd101621fd5bb3124c9fd191d114b7ad936c1d79d734f9f21392eab0084d01534b31c1dd87c81645fd762482a90027754041ca1b56133d0466c0600014418fb8c85bb3985394a8c2756d3643457ce614546202a2f50b093d762499ace0300ae85d6635e9ae539d0846b911ec86a27fe000f619b78bcac8a74b77e36f6dbcf49a52360f74a0233cea0775356ab0512fafff0683df08fae3cb848122e296cbc50fed22418ea55f19e55b3c75eb8b0ec71dcae0d79823d39920bf8d6a2256c5f31dc5b1e9423eccff9bccd6549eae8034162158000d5be9339919cc03d14046e6431c14cbb172b3aed702b9e9869904b1f39a6fe1f3e904b0fd536f13e8cac496682e1c81898e88e604904fa7c3e496f9a8771ef1102cc29d567c4aad283f7b003008c25c063c631c0d4cd0206159b3495deb761cc057e06192fe5497dc9b3744c7b9e975801b14185ebe44f91704eb45f652ed1913c35bd733813a32bca7f7d02bec508724e0bc643989f015d7f4bc483fb6c10f01a8279ab75067316fd3463bcc215f1b0dc85250b15bc42aa7473561204bd8aae566d506e2b0cfd7adbc44ca17d94226eb0cfc09c2180acd27d184f272af2bd2d9c57fb54b134eebccecab7dec04483bb191cf889a5e2852ade92ada839cdad17b7dc9525ecb2e134c5dc415743f8f564c386a7c4d7bca8bc6a5dc125308fbb274c44f5bbe911d9ce5c670044e3343986cf66900c198bb377b53a607a0b23ac9caac9ef751a7850488854381bc2ad3cdec73e3be1cc7d014cf92b4ef289b1bfa15124e147b3c4d902c89bf1195d15452e4bde9599392a3099b783dca00dcfb6540d2eda3c05cbf5415608105e60181da8f9d7729c3cc22228a2f1dbd562ee6400c0aa74d17cab13f7014febebecaed9c3a079cbaa92fc71443635d4149ca39e89c7d157e238f856a0701a664e1ff99a7b8b0a18fb9733d1e9255bff6a5345896d0696c2094e24f8b5eeb7538a96edf09830291df328d633d098ee2e4ad1b037590390c393c7ec85f0308b198f5a7f0d0d171ba7d1623f2c7c4131f8fd76ce67c1fe363d029099d454e316e842785f6bac40e7bba10217e3f457755c0fd35251a99ea180df1c7a6ba824166243109de8bb00b2aeb7436d15ebd2d1fbf40d389158903a1d95344a0492909bce4719ae43c4c8623ad733a9621e87b8f737b8ee1af9fb4180eccb9716804afaf59393113d3b10a359b65ff7b9ead5cb36bc576ad8c58a5c8750403971347f9a27c7022b8c56f754f7d5b353cce72b12fc9f317307d6a2999daf1de765f56bcf6859792fc208a1458902a7255c3ea59c172238236dc5e7e10b1b96d657c2d5f0c13afa9c8ff7288c6349ede216e8069a26b1d4254e0ac4c783f54922976b8430464a4f7bec582750820276cda6deac10dece627b1def68f02160bcc98add96b4198e279eafdc5f4fc54f074e2011ddb4faa336960cd3cf4bbcbbe7015632fb800298d8484e05430bf95773da1d76bef380a1f4012f24ea5c5cfc5631ea3b7799222ca555250b8591751fd1d59df4abeb690d66e634aceeaf381ac13f60ee9dcd6c4645385b029b8776d7c0d8edddba0f039e3e7efca4d9c13fe75b27834585d9ac0e8f427efa5ed25d13d9f42a34c834ec1a5c2f07076e2677a80977884012425bfe958b306e2deb61b677bd4e4952df117fab2a3d2bdf4be8e7bae62f1415dd86adeb8bfa5bcf7a329ed19cb770750c1ee3901502ac3d44882f3cb85c78dd1164cdf48f9742ed80dc644c4a6117e95b90b4403f2cbcb44856c7aeae36aa64ee19c671350a1fffa4c0eead5863430c72d9681d80a66a95e083051eabe71518efb861c9a2316d949b177b8d415855625996c2322183506053ed443a24107e8826f2f30f1d0196df96edf78718a587f89e5aa52ca187a7e04ed51433fb030af5633510042de1e904ec2478743c58d3535151b430452e82e77608d6ee7f56a1a1446b4fa6d89aa979a90422233a05b82564695ff4b6361d920a22c441c6f0505fa260a71b7e1f278711f27ebd9c00b4885a671021d0d75bc9a9c95ceb73cadb1c301f1da2111a86a5f87a8a7d5153ebbc98bf3a83ef65e5d7aedec99927bc5138dacbc75e8391f91537417ee7f8d72869df185a333d081423f4222c114a04727e0de4169b0e32f3b85b9cdab701208a2b39c7fb0892e09b01186f76ea73bd927fcef68886433ca15f4c968581d50fabed92a7dd7f005fb99c5d5fafbacd763c2c401dbbd3e89eee769ff41ed06b771675070242405e5ac7bae5f547b7e64ee82aca2e32977453da4c5651038e51420c33dfeb24f8a6ea1271de70e1dc8100dbf0df3d71cb30915cb8937cc31caa7cfc0ed5bca03de30ab2e67e55feffcc0c8db7e98414ef85896b9b881958527a9f2d0cc68b02795f4131c3812b1393ce9f6f0617d1aec9a3cd51be4bddb7a75cc8bc710197e618407fe4a1b8908dac4b8031d22e8f7591304c8641daf97abcbc55e81de7b935b94ef074fcb19808e7c3fa0ce827f70a3feb301da33af34fb9a4ad21acc7dcabcabe06f9fba188eeb9e30badc43fda3030fb8f888a41a8822c7fa32ff8fe0dd2abfc7d6323ebcdd0092d5f82c5d94e6ea29602036479afe8e29f97741a1e3c2b59c217dc67d8a25f7ce12bf1febf6b4a5b2646fd81cdf0a75e20fc0de981f48471527728b0c4d151fbdd9b32e6c6b3c6cd71db9b51d1cca8eef4a128d63f542bdb129c6edca628e1276d8376347bd2071d949b7ec5d1bfc18ebc61753a5f24544d1ae75b6f6f35a5707fc99e787b86cb5a17138069f5bac8d16e08b20781b8841ff928a49ec7bf09f5f39159cb44370a5ce16b93b2d4325445bfd641f2ef750e1971690a4f11e815d418a4dca01f8d039f4543a59665dcea27a24dbb1fddca0a2e90b4e3292dfc7a5cee69c1e707cd491742f3d3015d9499b07bbf6ddc2342e48522c149089311cf6ccc9bf957b509e52df550f06e70f4f601c01c1326e0ce7e7ce2547fcc16509b8bdb1577b15adb042f1e393c01bc010ba3460119ab738e58e39297278315b0825b8b798835a7a0b133a0d890a24018f0797c3ba43d62dcda03320215c5734bc1b10e8bef5003aefb5513ce9cd1964db23b1a143c4da8142676e254f00f84cfc15fa1a3bab78536f5f9e2cbce7560be876142a8655b8c1fdf0ffab7e187ace3c37ed2c6dfc4590e658ad2efc8cdec6140452493e2693e682946d1c99a62cca529f46a6e9874ef72955e4d855881e35ef53fd95e307f9ebf94542860711bdd288ab13d8dec1fecd82fc9a2eb97e67ae38ec859034473972157b819b3215e359bf17952b95aaa2932f09e2a8c8e0fea82de9c6c2612766ed50702667520fbd5089c0cc300e9d32893799cf73520f5a925bdfb791a419e80e118d2ba69031566da30c06f5e83e74f4eae8a886018a4c1269a97217851bcb4bb945dbf1309d1d2e59d78474f5e52702536761eed0d9fd01e46261b61dca3fc85a0b4bdfa315edb0972fed80399909eef35ed10cda0e1a66680eedcf15b400d404dadf77cda5641412c20a465cea4411820ee491678821eef8dca745a2ffd8a787837d22b486342499ad84a51d4093655947185bfe72018c16b8fe622ab58c7d965e8dac3b1d5c9cedfb27f562d077ab85e1293496d69f6bafd8468855b50255788b430ed6e6ef8c0fde28651b005a91dbb0fd4d0635108d5ff9e4527fefa66817221b76f03040302011081095e6122e3bc9d961e00014a7fc8330503020110d257bc7d93a55be3561d720d40a6a342060302011038db056c7c3065fadb630ce6ccbc73850130466e0ae1b05dde5249872475f6beeac368fd014b5a3413ceb32d38721432842a0000007af11fdaa717c398e223211842b41392f18df4bbc4ea0f4cfb972f19c7a64949e8e52949f6e4fb1d943248df48c3f2b538200fddfea22388e5e061be8ebf21a74500c0564c5e0de0942589df4343ad1956da66797240e2a2f2d6f8116b5047768986f6967658df626fa39cbfb6014b50196d23bc2cfbfa71a7591ca7715472dd2b489329de635d4bbb8c47cdccbbc1285e48bf9dbad365af44b205343e99dea298f360751ab5b251361fbfd3ad5b0e84f051ccece6b00830aed31a5354e00b20b9ed210000000003022e5e165cc8bd586404257f5cd6f5a31177b5c951eb076c7c10174f90006eef05010203040500020403020170a50829851e8f6a8c80f92806ae0e95eb7c06ad064e311cc39107b3219e532efa99b97e72fcfaef616108de981a59dc3310e2a9f5e73cd44d702ecaaccd86962a000000000000000003aabbcc000000000008070605fcfc857dab216daf41f409c2012685846e4d34aedfeacaf84d9adfebda73fae6d55e07438aeeeb0d6509ab28af8a758d1fb70424db6b27c7e1ef6473e721c3282100000000000000020000000000002a0000000200005f6e74d204c2490e71be4451963d7d7da797d4fd37d6e0bda56927d02a3302ca3b3a0e08c961e7580e97a0f08c269f549728f52d9c7de3affe850a037138001201003a6813f7691895a444d72cad60e3d54d64266fbaf567d7a5816a6623edcdbafed304517e4de88a399ed4d3faa2fc86e38243acbf480a652a236c27e515939032020cffbf67aae50aeed3c6f8f0d9bf7d854ffd87cef8358cbbaa587a9e3bd1a7760100002d8ec7b235be3b3cbe9be3d5ff36f082942102d64a0dc5953709a95cca55b58b1af297f534d464264be77477b547f3c596b947edbca33f6631f1aa188d25a38b2398ce69c3585e1b1b574a5a7185a2a086350abd4606d15aace8b4610b494772010100dda7a577f150ee83afedc9d3b50a4f00fcf21248e6f73097abcc4bb634f854aedc53769838d294b09c0184fb0e66f09bae8cc243f842a6cc401488591e9ffdb102dd1b65c036547750d2f84ff4c6fac7de56944658530a62e81c6cc290087440d003000000010000c072848f5bc77d85a09dc4e69f3420293891163406ec3a49ccf31a5ff8c063042a9c8c59e5f83d4d276ab4110af0ca85d7a713434694f8c6b391b122c303aadb010100cb021d8507925eb2d49040cc08cbcca0af197c5f3eb7aad639a82497a8d6046780da26d4cbc113b375c34298bc5be500eb088a33a099f86e428154c9f6724d8c01020028e928fc44c1bf90f9c68001e59d89e855f5db43a75b256d89e2008e2d472bf57e3f7743e52ebde917b12f51135f8918cfdcba29115cc4856a9dc984efe9fe5e0103004a7237797e717725fbc0f43a5bbc50b318db3e59f5f536776a189bf65c6508100eedbb2bae1e2ed123c2fb025ca8e8b7f306ced32b03fd98c1045aef4153a1ae010400c20960a26a917aa7376623c7612c50741ed3442172c62edce97c5c8c9ced29179d1d5cb8aa8fbb8d6f42d49761f85ec4705b054c76f82a9d31dc05fec139b5102bdbba473648c1414a534e2cd362571cfb340151d6bb268db379c5997b08dc6103000000000000cb0d510da863ab88970035c564818ed98b1a3243e2ea7de5f3f9b91e8379296746d96d19de9e4f536170c9fcea20bb325472d44b922a34ad7a27743631bfd0240001001a509d06dad9740f09a2c3fea342a172167708819b731c0df4df8a6b890def37b2d9a6c05e044d169e32dfbece42c74f2271fed95592f4c2b36aa23da88968820002000fe8a4cd86dd6d4e1fa6c9ed4baa11cdd793f0af31b177d17337cd11e2e91a15c0a098cabd79911c2572896500ce82a98519c4f937e462feb80e01f182b0a8cb000300bac9cf0c23a6bca795a71cc4f7432e41eeab1e864176c2dd499c547e6c501e490fe0ad051e7c165b4264ae6c167ef85ebf1191d664f7f1c53fa53c6c798bc6cb000400b47e1f3145a2f4a6221f5072197cb87316d38e44bc8363272cac8b87397629bac5092bbae7c4738079cecc2b2468e23b281e5c833435ed5918c3b0aa150472360299841f584606ab31badcdf38e8122874a699e0cb3989d8ddc7c0874b8f5f76bf4418fb8c85bb3985394a8c2756d3643457ce614546202a2f50b093d762499ace99841f584606ab31badcdf38e8122874a699e0cb3989d8ddc7c0874b8f5f76bfc87c17f29dfbde33cfe599f3fb71d0fc211140801080ec105fbf435a977f784ad0e1f11843bda78bec027cd2046488ec6c54bbbfa8170442c988768eb006a16aad93247bd01307550ec7acd757ce6fb805fcf73db364063265b30a949e90d933d0e1f11843bda78bec027cd2046488ec6c54bbbfa8170442c988768eb006a16ad1d7e7fd185aebad9fd4ddbd0a8707eeb17bf9e70509aaf7b176da7a72e2e54a01536fd52c4f4b1330e67d49717974435bf1c18edd91b69d343186a784844415bc004418fb8c85bb3985394a8c2756d3643457ce614546202a2f50b093d762499ace557e5ee3660be9247c4908c74a46c91eebd713925dd7f2ede3ef4900ba277039f7d46ec15432116176cce8ce39d8ae21eabafdf71796eeb724ee7e4ff1dd1fd7"; diff --git a/packages/jam/block/test-helpers.ts b/packages/jam/block/test-helpers.ts index 39140fc7b..325a9bc70 100644 --- a/packages/jam/block/test-helpers.ts +++ b/packages/jam/block/test-helpers.ts @@ -1,18 +1,12 @@ import { BytesBlob } from "@typeberry/bytes"; import { Decoder } from "@typeberry/codec"; import { tinyChainSpec } from "@typeberry/config"; -import { Compatibility, GpVersion } from "@typeberry/utils"; import { Block } from "./block.js"; import testBlockData from "./test-block.js"; -import testBlockData_0_6_5 from "./test-block-0-6-5.js"; import testWorkReportData from "./test-work-report.js"; -import testWorkReportData_0_6_5 from "./test-work-report-0-6-5.js"; export function testBlockHex() { - if (Compatibility.isGreaterOrEqual(GpVersion.V0_7_0)) { - return testBlockData; - } - return testBlockData_0_6_5; + return testBlockData; } export function testBlock() { @@ -24,5 +18,5 @@ export function testBlockView() { } export function testWorkReportHex() { - return Compatibility.isGreaterOrEqual(GpVersion.V0_7_0) ? testWorkReportData : testWorkReportData_0_6_5; + return testWorkReportData; } diff --git a/packages/jam/block/test-work-report-0-6-5.ts b/packages/jam/block/test-work-report-0-6-5.ts deleted file mode 100644 index cec997aac..000000000 --- a/packages/jam/block/test-work-report-0-6-5.ts +++ /dev/null @@ -1 +0,0 @@ -export default "0x3930000063c03371b9dad9f1c60473ec0326c970984e9c90c0b5ed90eba6ada471ba4d8658e5c51934af8039cde6c9683669a9802021c0e9fc3bda4e9ecc986def429389c74f0ee9bf7e8531eae672a7995b9a209153d1891610d032572ecea56cc11d9b0300c0564c5e0de0942589df4343ad1956da66797240e2a2f2d6f8116b5047768986f6967658df626fa39cbfb6014b50196d23bc2cfbfa71a7591ca7715472dd2b489329de635d4bbb8c47cdccbbc1285e48bf9dbad365af44b205343e99dea298f3168490e085497fcb6cbe3b220e2fa32456f30c1570412edd76ccb93be9254fef040000000000022e5e165cc8bd586404257f5cd6f5a31177b5c951eb076c7c10174f90006eef000001810000008178abf4f459e8ed591be1f7f629168213a5ac2a487c28c0ef1a806198096c7afa99b97e72fcfaef616108de981a59dc3310e2a9f5e73cd44d702ecaaccd86967800000000000000000c64756d6d792d726573756c74000000000000"; diff --git a/packages/jam/block/work-item.ts b/packages/jam/block/work-item.ts index 10e8e1796..4b0a2c084 100644 --- a/packages/jam/block/work-item.ts +++ b/packages/jam/block/work-item.ts @@ -3,7 +3,7 @@ import { type CodecRecord, codec } from "@typeberry/codec"; import { asKnownSize, type KnownSizeArray } from "@typeberry/collections"; import { HASH_SIZE, type OpaqueHash } from "@typeberry/hash"; import { sumU32, type U16, type U32 } from "@typeberry/numbers"; -import { Compatibility, GpVersion, type Opaque, WithDebug } from "@typeberry/utils"; +import { type Opaque, WithDebug } from "@typeberry/utils"; import { codecKnownSizeArray } from "./codec-utils.js"; import type { ServiceGas, ServiceId } from "./common.js"; import type { CodeHash } from "./hash.js"; @@ -107,38 +107,23 @@ export function workItemExtrinsicsCodec(workItems: WorkItem[]) { /** * Work Item which is a part of some work package. * - * https://graypaper.fluffylabs.dev/#/579bd12/198b00199600 + * https://graypaper.fluffylabs.dev/#/ab2cdbd/1a86001a9100?v=0.7.2 */ export class WorkItem extends WithDebug { - static Codec = Compatibility.isGreaterOrEqual(GpVersion.V0_7_0) - ? codec.Class(WorkItem, { - service: codec.u32.asOpaque(), - codeHash: codec.bytes(HASH_SIZE).asOpaque(), - refineGasLimit: codec.u64.asOpaque(), - accumulateGasLimit: codec.u64.asOpaque(), - exportCount: codec.u16, - payload: codec.blob, - importSegments: codecKnownSizeArray(ImportSpec.Codec, { - minLength: 0, - maxLength: MAX_NUMBER_OF_SEGMENTS, - typicalLength: MAX_NUMBER_OF_SEGMENTS, - }), - extrinsic: codec.sequenceVarLen(WorkItemExtrinsicSpec.Codec), - }) - : codec.Class(WorkItem, { - service: codec.u32.asOpaque(), - codeHash: codec.bytes(HASH_SIZE).asOpaque(), - payload: codec.blob, - refineGasLimit: codec.u64.asOpaque(), - accumulateGasLimit: codec.u64.asOpaque(), - importSegments: codecKnownSizeArray(ImportSpec.Codec, { - minLength: 0, - maxLength: MAX_NUMBER_OF_SEGMENTS, - typicalLength: MAX_NUMBER_OF_SEGMENTS, - }), - extrinsic: codec.sequenceVarLen(WorkItemExtrinsicSpec.Codec), - exportCount: codec.u16, - }); + static Codec = codec.Class(WorkItem, { + service: codec.u32.asOpaque(), + codeHash: codec.bytes(HASH_SIZE).asOpaque(), + refineGasLimit: codec.u64.asOpaque(), + accumulateGasLimit: codec.u64.asOpaque(), + exportCount: codec.u16, + payload: codec.blob, + importSegments: codecKnownSizeArray(ImportSpec.Codec, { + minLength: 0, + maxLength: MAX_NUMBER_OF_SEGMENTS, + typicalLength: MAX_NUMBER_OF_SEGMENTS, + }), + extrinsic: codec.sequenceVarLen(WorkItemExtrinsicSpec.Codec), + }); static create({ service, diff --git a/packages/jam/block/work-package.ts b/packages/jam/block/work-package.ts index 03de3b139..9e50952b0 100644 --- a/packages/jam/block/work-package.ts +++ b/packages/jam/block/work-package.ts @@ -3,7 +3,7 @@ import { type CodecRecord, codec, type DescribedBy } from "@typeberry/codec"; import { FixedSizeArray } from "@typeberry/collections"; import { HASH_SIZE } from "@typeberry/hash"; import { tryAsU8, type U8 } from "@typeberry/numbers"; -import { Compatibility, check, GpVersion, WithDebug } from "@typeberry/utils"; +import { check, WithDebug } from "@typeberry/utils"; import type { ServiceId } from "./common.js"; import type { CodeHash } from "./hash.js"; import { RefineContext } from "./refine-context.js"; @@ -35,29 +35,17 @@ export const MAX_NUMBER_OF_WORK_ITEMS = 16; * https://graypaper.fluffylabs.dev/#/579bd12/197000197200 */ export class WorkPackage extends WithDebug { - static Codec = Compatibility.isGreaterOrEqual(GpVersion.V0_7_0) - ? codec.Class(WorkPackage, { - authCodeHost: codec.u32.asOpaque(), - authCodeHash: codec.bytes(HASH_SIZE).asOpaque(), - context: RefineContext.Codec, - authorization: codec.blob, - parametrization: codec.blob, - items: codec.sequenceVarLen(WorkItem.Codec).convert( - (x) => x, - (items) => FixedSizeArray.new(items, tryAsWorkItemsCount(items.length)), - ), - }) - : codec.Class(WorkPackage, { - authorization: codec.blob, - authCodeHost: codec.u32.asOpaque(), - authCodeHash: codec.bytes(HASH_SIZE).asOpaque(), - parametrization: codec.blob, - context: RefineContext.Codec, - items: codec.sequenceVarLen(WorkItem.Codec).convert( - (x) => x, - (items) => FixedSizeArray.new(items, tryAsWorkItemsCount(items.length)), - ), - }); + static Codec = codec.Class(WorkPackage, { + authCodeHost: codec.u32.asOpaque(), + authCodeHash: codec.bytes(HASH_SIZE).asOpaque(), + context: RefineContext.Codec, + authorization: codec.blob, + parametrization: codec.blob, + items: codec.sequenceVarLen(WorkItem.Codec).convert( + (x) => x, + (items) => FixedSizeArray.new(items, tryAsWorkItemsCount(items.length)), + ), + }); static create({ authorization, diff --git a/packages/jam/block/work-report.ts b/packages/jam/block/work-report.ts index c74d95bf9..7be9a32ab 100644 --- a/packages/jam/block/work-report.ts +++ b/packages/jam/block/work-report.ts @@ -3,7 +3,7 @@ import { type CodecRecord, codec } from "@typeberry/codec"; import { FixedSizeArray } from "@typeberry/collections"; import { HASH_SIZE, type OpaqueHash } from "@typeberry/hash"; import { isU16, tryAsU32, type U16, type U32 } from "@typeberry/numbers"; -import { Compatibility, GpVersion, WithDebug } from "@typeberry/utils"; +import { WithDebug } from "@typeberry/utils"; import { type CoreIndex, type ServiceGas, tryAsCoreIndex } from "./common.js"; import { type AuthorizerHash, @@ -52,9 +52,31 @@ export class WorkPackageSpec extends WithDebug { /** * A report of execution of some work package. * - * https://graypaper.fluffylabs.dev/#/cc517d7/131c01132401?v=0.6.5 + * https://graypaper.fluffylabs.dev/#/ab2cdbd/13bb0113c301?v=0.7.2 */ -export class WorkReportNoCodec extends WithDebug { +export class WorkReport extends WithDebug { + static Codec = codec.Class(WorkReport, { + workPackageSpec: WorkPackageSpec.Codec, + context: RefineContext.Codec, + coreIndex: codec.varU32.convert( + (o) => tryAsU32(o), + (i) => { + if (!isU16(i)) { + throw new Error(`Core index exceeds U16: ${i}`); + } + return tryAsCoreIndex(i); + }, + ), + authorizerHash: codec.bytes(HASH_SIZE).asOpaque(), + authorizationGasUsed: codec.varU64.asOpaque(), + authorizationOutput: codec.blob, + segmentRootLookup: codec.readonlyArray(codec.sequenceVarLen(WorkPackageInfo.Codec)), + results: codec.sequenceVarLen(WorkResult.Codec).convert( + (x) => x, + (items) => FixedSizeArray.new(items, tryAsWorkItemsCount(items.length)), + ), + }); + static create({ workPackageSpec, context, @@ -64,8 +86,8 @@ export class WorkReportNoCodec extends WithDebug { segmentRootLookup, results, authorizationGasUsed, - }: CodecRecord) { - return new WorkReportNoCodec( + }: CodecRecord) { + return new WorkReport( workPackageSpec, context, coreIndex, @@ -80,11 +102,11 @@ export class WorkReportNoCodec extends WithDebug { protected constructor( /** `s`: Work package specification. */ public readonly workPackageSpec: WorkPackageSpec, - /** `x`: Refinement context. */ + /** `c`: Refinement context. */ public readonly context: RefineContext, - /** `c`: Core index on which the work is done. */ + /** *`c`*: Core index on which the work is done. */ public readonly coreIndex: CoreIndex, - /** `a`: Hash of the authorizer. */ + /** *`a`*: Hash of the authorizer. */ public readonly authorizerHash: AuthorizerHash, /** `o`: Authorization output. */ public readonly authorizationOutput: BytesBlob, @@ -95,59 +117,9 @@ export class WorkReportNoCodec extends WithDebug { public readonly segmentRootLookup: readonly WorkPackageInfo[], /** `r`: The results of evaluation of each of the items in the work package. */ public readonly results: FixedSizeArray, - /** `g`: Gas used during authorization. */ + /** *`g`*: Gas used during authorization. */ public readonly authorizationGasUsed: ServiceGas, ) { super(); } } - -const WorkReportCodec = codec.Class(WorkReportNoCodec, { - workPackageSpec: WorkPackageSpec.Codec, - context: RefineContext.Codec, - coreIndex: codec.varU32.convert( - (o) => tryAsU32(o), - (i) => { - if (!isU16(i)) { - throw new Error(`Core index exceeds U16: ${i}`); - } - return tryAsCoreIndex(i); - }, - ), - authorizerHash: codec.bytes(HASH_SIZE).asOpaque(), - authorizationGasUsed: codec.varU64.asOpaque(), - authorizationOutput: codec.blob, - segmentRootLookup: codec.readonlyArray(codec.sequenceVarLen(WorkPackageInfo.Codec)), - results: codec.sequenceVarLen(WorkResult.Codec).convert( - (x) => x, - (items) => FixedSizeArray.new(items, tryAsWorkItemsCount(items.length)), - ), -}); - -const WorkReportCodecPre070 = codec.Class(WorkReportNoCodec, { - workPackageSpec: WorkPackageSpec.Codec, - context: RefineContext.Codec, - coreIndex: codec.varU32.convert( - (o) => tryAsU32(o), - (i) => { - if (!isU16(i)) { - throw new Error(`Core index exceeds U16: ${i}`); - } - return tryAsCoreIndex(i); - }, - ), - authorizerHash: codec.bytes(HASH_SIZE).asOpaque(), - authorizationOutput: codec.blob, - segmentRootLookup: codec.readonlyArray(codec.sequenceVarLen(WorkPackageInfo.Codec)), - results: codec.sequenceVarLen(WorkResult.Codec).convert( - (x) => x, - (items) => FixedSizeArray.new(items, tryAsWorkItemsCount(items.length)), - ), - authorizationGasUsed: codec.varU64.asOpaque(), -}); - -export class WorkReport extends WorkReportNoCodec { - static Codec: typeof WorkReportCodec = Compatibility.isGreaterOrEqual(GpVersion.V0_7_0) - ? WorkReportCodec - : WorkReportCodecPre070; -} diff --git a/packages/jam/jam-host-calls/accumulate/transfer.ts b/packages/jam/jam-host-calls/accumulate/transfer.ts index 90133449c..39d970e8b 100644 --- a/packages/jam/jam-host-calls/accumulate/transfer.ts +++ b/packages/jam/jam-host-calls/accumulate/transfer.ts @@ -20,14 +20,7 @@ const MEMO_START_REG = 10; // `o` * https://graypaper.fluffylabs.dev/#/ab2cdbd/373f00373f00?v=0.7.2 */ export class Transfer implements HostCallHandler { - index = tryAsHostCallIndex( - Compatibility.selectIfGreaterOrEqual({ - fallback: 11, - versions: { - [GpVersion.V0_6_7]: 20, - }, - }), - ); + index = tryAsHostCallIndex(20); /** * `g = 10 + t` * diff --git a/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.test.ts b/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.test.ts index 1aa8fb2bf..e2e7c3d5b 100644 --- a/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.test.ts +++ b/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.test.ts @@ -7,7 +7,7 @@ import { Bytes, BytesBlob } from "@typeberry/bytes"; import { Decoder } from "@typeberry/codec"; import { asKnownSize } from "@typeberry/collections"; import { tryAsU32 } from "@typeberry/numbers"; -import { Compatibility, GpVersion, OK } from "@typeberry/utils"; +import { OK } from "@typeberry/utils"; import { ClientHandler, ServerHandler, STREAM_KIND } from "./ce-133-work-package-submission.js"; import { testClientServer } from "./test-utils.js"; @@ -47,9 +47,8 @@ describe("CE133", () => { }); }); -const testWorkPackage = Compatibility.isGreaterOrEqual(GpVersion.V0_7_0) - ? "0x78563412022e5e165cc8bd586404257f5cd6f5a31177b5c951eb076c7c10174f90006eefc0564c5e0de0942589df4343ad1956da66797240e2a2f2d6f8116b5047768986f6967658df626fa39cbfb6014b50196d23bc2cfbfa71a7591ca7715472dd2b489329de635d4bbb8c47cdccbbc1285e48bf9dbad365af44b205343e99dea298f360751ab5b251361fbfd3ad5b0e84f051ccece6b00830aed31a5354e00b20b9ed21000000000501020304050a00010203040506070809020403020170a50829851e8f6a8c80f92806ae0e95eb7c06ad064e311cc39107b3219e532e2a000000000000002a00000000000000040005010203040503461236a7eb29dcffc1dd282ce1de0e0ed691fc80e91e02276fe8f778f088a1b80000e7cb536522c1c1b41fff8021055b774e929530941ea12c10f1213c56455f29ad0100b0a487a4adf6a0eda5d69ddd2f8b241cf44204f0ff793e993e5e553b7862a1dc020002381a0e351c5593018bbc87dd6694695caa1c0c1ddb24e70995da878d89495bf1100000006c437d85cd8327f42a35d427ede1b5871347d3aae7442f2df1ff80f834acf17a1100000008070605fcfc857dab216daf41f409c2012685846e4d34aedfeacaf84d9adfebda73fae64d000000000000004d00000000000000070003030201023e5d0bea78537414bd1cfdaeb0f22d743bcaba5dbffacbabce8457f4cd78f69b0000b7f8dffa65971832ec9e19719debc04b1ccd9ad27187a4943807ca756962481b01000380b628780612e8928705018d1ced53b2f76607ad026a86e4f36c99ac0491f8eb2000000047f142b4488bbd34e59afc60a0daedc6020e8be52a3cedecbd75e93ee9908adf21000000cc2f47030ff8a9fe8d02e8eb87e86d4db05b57258d30f9d81acb3b280d04e87722000000" - : "0x05010203040578563412022e5e165cc8bd586404257f5cd6f5a31177b5c951eb076c7c10174f90006eef0a00010203040506070809c0564c5e0de0942589df4343ad1956da66797240e2a2f2d6f8116b5047768986f6967658df626fa39cbfb6014b50196d23bc2cfbfa71a7591ca7715472dd2b489329de635d4bbb8c47cdccbbc1285e48bf9dbad365af44b205343e99dea298f360751ab5b251361fbfd3ad5b0e84f051ccece6b00830aed31a5354e00b20b9ed2100000000020403020170a50829851e8f6a8c80f92806ae0e95eb7c06ad064e311cc39107b3219e532e0501020304052a000000000000002a0000000000000003461236a7eb29dcffc1dd282ce1de0e0ed691fc80e91e02276fe8f778f088a1b80000e7cb536522c1c1b41fff8021055b774e929530941ea12c10f1213c56455f29ad0100b0a487a4adf6a0eda5d69ddd2f8b241cf44204f0ff793e993e5e553b7862a1dc020002381a0e351c5593018bbc87dd6694695caa1c0c1ddb24e70995da878d89495bf1100000006c437d85cd8327f42a35d427ede1b5871347d3aae7442f2df1ff80f834acf17a11000000040008070605fcfc857dab216daf41f409c2012685846e4d34aedfeacaf84d9adfebda73fae6030302014d000000000000004d00000000000000023e5d0bea78537414bd1cfdaeb0f22d743bcaba5dbffacbabce8457f4cd78f69b0000b7f8dffa65971832ec9e19719debc04b1ccd9ad27187a4943807ca756962481b01000380b628780612e8928705018d1ced53b2f76607ad026a86e4f36c99ac0491f8eb2000000047f142b4488bbd34e59afc60a0daedc6020e8be52a3cedecbd75e93ee9908adf21000000cc2f47030ff8a9fe8d02e8eb87e86d4db05b57258d30f9d81acb3b280d04e877220000000700"; +const testWorkPackage = + "0x78563412022e5e165cc8bd586404257f5cd6f5a31177b5c951eb076c7c10174f90006eefc0564c5e0de0942589df4343ad1956da66797240e2a2f2d6f8116b5047768986f6967658df626fa39cbfb6014b50196d23bc2cfbfa71a7591ca7715472dd2b489329de635d4bbb8c47cdccbbc1285e48bf9dbad365af44b205343e99dea298f360751ab5b251361fbfd3ad5b0e84f051ccece6b00830aed31a5354e00b20b9ed21000000000501020304050a00010203040506070809020403020170a50829851e8f6a8c80f92806ae0e95eb7c06ad064e311cc39107b3219e532e2a000000000000002a00000000000000040005010203040503461236a7eb29dcffc1dd282ce1de0e0ed691fc80e91e02276fe8f778f088a1b80000e7cb536522c1c1b41fff8021055b774e929530941ea12c10f1213c56455f29ad0100b0a487a4adf6a0eda5d69ddd2f8b241cf44204f0ff793e993e5e553b7862a1dc020002381a0e351c5593018bbc87dd6694695caa1c0c1ddb24e70995da878d89495bf1100000006c437d85cd8327f42a35d427ede1b5871347d3aae7442f2df1ff80f834acf17a1100000008070605fcfc857dab216daf41f409c2012685846e4d34aedfeacaf84d9adfebda73fae64d000000000000004d00000000000000070003030201023e5d0bea78537414bd1cfdaeb0f22d743bcaba5dbffacbabce8457f4cd78f69b0000b7f8dffa65971832ec9e19719debc04b1ccd9ad27187a4943807ca756962481b01000380b628780612e8928705018d1ced53b2f76607ad026a86e4f36c99ac0491f8eb2000000047f142b4488bbd34e59afc60a0daedc6020e8be52a3cedecbd75e93ee9908adf21000000cc2f47030ff8a9fe8d02e8eb87e86d4db05b57258d30f9d81acb3b280d04e87722000000"; const testExtrinsicData = (): WorkItemExtrinsics => { // this is coming from work items in the `testWorkPackage`; const lengths = [16, 17, 32, 33, 34]; diff --git a/packages/jam/safrole/safrole-seal-067.test.ts b/packages/jam/safrole/safrole-seal-067.test.ts deleted file mode 100644 index 58463d99a..000000000 --- a/packages/jam/safrole/safrole-seal-067.test.ts +++ /dev/null @@ -1,244 +0,0 @@ -import assert from "node:assert"; -import { describe, it } from "node:test"; -import { - EpochMarker, - Header, - reencodeAsView, - tryAsPerEpochBlock, - tryAsPerValidator, - tryAsTimeSlot, - tryAsValidatorIndex, - ValidatorKeys, -} from "@typeberry/block"; -import { Ticket, tryAsTicketAttempt } from "@typeberry/block/tickets.js"; -import { Bytes } from "@typeberry/bytes"; -import { asKnownSize } from "@typeberry/collections"; -import { tinyChainSpec } from "@typeberry/config"; -import { BANDERSNATCH_KEY_BYTES, BLS_KEY_BYTES, ED25519_KEY_BYTES } from "@typeberry/crypto"; -import { BANDERSNATCH_VRF_SIGNATURE_BYTES } from "@typeberry/crypto/bandersnatch.js"; -import { HASH_SIZE } from "@typeberry/hash"; -import { VALIDATOR_META_BYTES, ValidatorData } from "@typeberry/state"; -import { SafroleSealingKeysData } from "@typeberry/state/safrole-data.js"; -import { Compatibility, GpVersion } from "@typeberry/utils"; -import { BandernsatchWasm } from "./bandersnatch-wasm.js"; -import { SafroleSeal } from "./safrole-seal.js"; - -const bandersnatch = BandernsatchWasm.new(); - -if (Compatibility.isLessThan(GpVersion.V0_7_0)) { - describe("Safrole Seal verification", () => { - it("should verify a valid fallback mode seal and entropySource", async () => { - // based on jamduna/data/fallback/blocks/1_000.json - const header = Header.create({ - parentHeaderHash: Bytes.parseBytes( - "0x03c6255f4eed3db451c775e33e2d7ef03a1ba7fb79cd525b5ddf650703ccdb92", - HASH_SIZE, - ).asOpaque(), - priorStateRoot: Bytes.parseBytes( - "0xc07cdbce686c64d0a9b6539c70b0bb821b6a74d9de750a46a5da05b5640c290a", - HASH_SIZE, - ).asOpaque(), - extrinsicHash: Bytes.parseBytes( - "0x189d15af832dfe4f67744008b62c334b569fcbb4c261e0f065655697306ca252", - HASH_SIZE, - ).asOpaque(), - timeSlotIndex: tryAsTimeSlot(12), - epochMarker: EpochMarker.create({ - entropy: Bytes.parseBytes( - "0x6f6ad2224d7d58aec6573c623ab110700eaca20a48dc2965d535e466d524af2a", - HASH_SIZE, - ).asOpaque(), - ticketsEntropy: Bytes.parseBytes( - "0x835ac82bfa2ce8390bb50680d4b7a73dfa2a4cff6d8c30694b24a605f9574eaf", - HASH_SIZE, - ).asOpaque(), - validators: TEST_VALIDATOR_KEYS, - }), - ticketsMarker: null, - offendersMarker: [], - bandersnatchBlockAuthorIndex: tryAsValidatorIndex(4), - entropySource: Bytes.parseBytes( - "0x4b213bfc74f65eb109896f1d57e78809d1a94c0c1b2e4543a9ee470eb6cfdfee96228bd01847dbe9e92c5c8c190fab85da4cb5ecd63cd3c758730b17b1247d1be6a5107ff246b08fbf8dcad39ba00b33e9ee4e2b934f62ee7e503e2a1eeaba11", - BANDERSNATCH_VRF_SIGNATURE_BYTES, - ).asOpaque(), - seal: Bytes.parseBytes( - "0xa060e079fdeefc27d1278b9a3d1922874c87e8d0dc7885d08443a29a460af827cd497cb2e9df412a1c80c7601f225ec96d05da90c23a4effc9219904b46f1f0404807dd2b0db02bc30212e91f32c2446134f45782acb1e093cd1c9f1b904120f", - BANDERSNATCH_VRF_SIGNATURE_BYTES, - ).asOpaque(), - }); - const spec = tinyChainSpec; - const headerView = reencodeAsView(Header.Codec, header, spec); - - const safroleSeal = new SafroleSeal(bandersnatch); - const result = await safroleSeal.verifyHeaderSeal(headerView, { - currentValidatorData: TEST_VALIDATOR_DATA, - sealingKeySeries: SafroleSealingKeysData.keys( - tryAsPerEpochBlock( - [ - Bytes.parseBytes( - "0x48e5fcdce10e0b64ec4eebd0d9211c7bac2f27ce54bca6f7776ff6fee86ab3e3", - BANDERSNATCH_KEY_BYTES, - ).asOpaque(), - Bytes.zero(BANDERSNATCH_KEY_BYTES).asOpaque(), - Bytes.zero(BANDERSNATCH_KEY_BYTES).asOpaque(), - Bytes.zero(BANDERSNATCH_KEY_BYTES).asOpaque(), - Bytes.zero(BANDERSNATCH_KEY_BYTES).asOpaque(), - Bytes.zero(BANDERSNATCH_KEY_BYTES).asOpaque(), - Bytes.zero(BANDERSNATCH_KEY_BYTES).asOpaque(), - Bytes.zero(BANDERSNATCH_KEY_BYTES).asOpaque(), - Bytes.zero(BANDERSNATCH_KEY_BYTES).asOpaque(), - Bytes.zero(BANDERSNATCH_KEY_BYTES).asOpaque(), - Bytes.zero(BANDERSNATCH_KEY_BYTES).asOpaque(), - Bytes.zero(BANDERSNATCH_KEY_BYTES).asOpaque(), - ], - spec, - ), - ), - currentEntropy: Bytes.parseBytes( - "0xd2d34655ebcad804c56d2fd5f932c575b6a5dbb3f5652c5202bcc75ab9c2cc95", - HASH_SIZE, - ).asOpaque(), - }); - - assert.deepStrictEqual(result, { - isError: false, - isOk: true, - ok: Bytes.parseBytes( - "0x543054132a05c2710ac8fd0924810d3a8f7b7a7637c31a35cf6a05d54122529f", - HASH_SIZE, - ).asOpaque(), - }); - }); - - it("should verify a valid ticket seal and entropySource", async () => { - // based on jamduna/data/safrole/blocks/2_000.json - const header = Header.create({ - parentHeaderHash: Bytes.parseBytes( - "0xd8427123fd8f6bc0f6dc42cfab14c25328667c87ceb9221a55bd85b3bc2d3e3e", - HASH_SIZE, - ).asOpaque(), - priorStateRoot: Bytes.parseBytes( - "0x3f9434363d9661bb5990fb94356edcce546649a1a4b3015c1b93de9980d88bc0", - HASH_SIZE, - ).asOpaque(), - extrinsicHash: Bytes.parseBytes( - "0x85518b5771f4601dce81fdca1920ae2b8d11153f05cc7120ade02ae678ef1296", - HASH_SIZE, - ).asOpaque(), - timeSlotIndex: tryAsTimeSlot(24), - epochMarker: EpochMarker.create({ - entropy: Bytes.parseBytes( - "0x767ac90c16dcbf976628e835c103b2d7906080546c7176062b110955b19923ae", - HASH_SIZE, - ).asOpaque(), - ticketsEntropy: Bytes.parseBytes( - "0x6f6ad2224d7d58aec6573c623ab110700eaca20a48dc2965d535e466d524af2a", - HASH_SIZE, - ).asOpaque(), - validators: TEST_VALIDATOR_KEYS, - }), - ticketsMarker: null, - offendersMarker: [], - bandersnatchBlockAuthorIndex: tryAsValidatorIndex(2), - entropySource: Bytes.parseBytes( - "0xcf74e8792ab2b10faecd1df7a0a66b93230408c16ba5cb2ec199eeb75e26cbd1ab9bfeedce7d6312dedae8fcabbcb8c5a7fa2f48f0919fdc85a5ebba4d12680785e29524e32ed25baf7fe74af82a0509f1e81247bcfa1d299d48ea775fa7af15", - BANDERSNATCH_VRF_SIGNATURE_BYTES, - ).asOpaque(), - seal: Bytes.parseBytes( - "0x98853cdfca6cda5238fc065a678421737782fffbc986819b67dfe96786febdbad5b3adf65fd37ac0a977a287a38c4394ff0a3dcd7523eead74d3885ad26e9e168a52bcb47ac41a53b97c009fcd14d7b9a0ca8f8654496cb9516d704d6d447115", - BANDERSNATCH_VRF_SIGNATURE_BYTES, - ).asOpaque(), - }); - const spec = tinyChainSpec; - const headerView = reencodeAsView(Header.Codec, header, spec); - - const safroleSeal = new SafroleSeal(bandersnatch); - const result = await safroleSeal.verifyHeaderSeal(headerView, { - currentValidatorData: TEST_VALIDATOR_DATA, - sealingKeySeries: SafroleSealingKeysData.tickets( - tryAsPerEpochBlock( - [ - Ticket.create({ - id: Bytes.parseBytes("0x0b7537993b0a700def26bb16e99ed0bfb530f616e4c13cf63ecb60bcbe83387d", HASH_SIZE), - attempt: tryAsTicketAttempt(2), - }), - emptyTicket(), - emptyTicket(), - emptyTicket(), - emptyTicket(), - emptyTicket(), - emptyTicket(), - emptyTicket(), - emptyTicket(), - emptyTicket(), - emptyTicket(), - emptyTicket(), - ], - spec, - ), - ), - currentEntropy: Bytes.parseBytes( - "0x835ac82bfa2ce8390bb50680d4b7a73dfa2a4cff6d8c30694b24a605f9574eaf", - HASH_SIZE, - ).asOpaque(), - }); - - assert.deepStrictEqual(result, { - isError: false, - isOk: true, - ok: Bytes.parseBytes( - "0xc4b7950fa7836d7b8da1ac65e1664d7d07acffe6f0f1a51776fe5811e568265b", - HASH_SIZE, - ).asOpaque(), - }); - }); - }); - - const emptyTicket = (): Ticket => Ticket.create({ id: Bytes.zero(HASH_SIZE), attempt: tryAsTicketAttempt(0) }); - - const TEST_VALIDATOR_KEYS = tryAsPerValidator( - [ - { - bandersnatch: "0x5e465beb01dbafe160ce8216047f2155dd0569f058afd52dcea601025a8d161d", - ed25519: "0x3b6a27bcceb6a42d62a3a8d02a6f0d73653215771de243a63ac048a18b59da29", - }, - { - bandersnatch: "0x3d5e5a51aab2b048f8686ecd79712a80e3265a114cc73f14bdb2a59233fb66d0", - ed25519: "0x22351e22105a19aabb42589162ad7f1ea0df1c25cebf0e4a9fcd261301274862", - }, - { - bandersnatch: "0xaa2b95f7572875b0d0f186552ae745ba8222fc0b5bd456554bfe51c68938f8bc", - ed25519: "0xe68e0cf7f26c59f963b5846202d2327cc8bc0c4eff8cb9abd4012f9a71decf00", - }, - { - bandersnatch: "0x7f6190116d118d643a98878e294ccf62b509e214299931aad8ff9764181a4e33", - ed25519: "0xb3e0e096b02e2ec98a3441410aeddd78c95e27a0da6f411a09c631c0f2bea6e9", - }, - { - bandersnatch: "0x48e5fcdce10e0b64ec4eebd0d9211c7bac2f27ce54bca6f7776ff6fee86ab3e3", - ed25519: "0x5c7f34a4bd4f2d04076a8c6f9060a0c8d2c6bdd082ceb3eda7df381cb260faff", - }, - { - bandersnatch: "0xf16e5352840afb47e206b5c89f560f2611835855cf2e6ebad1acc9520a72591d", - ed25519: "0x837ce344bc9defceb0d7de7e9e9925096768b7adb4dad932e532eb6551e0ea02", - }, - ].map((x) => - ValidatorKeys.create({ - bandersnatch: Bytes.parseBytes(x.bandersnatch, BANDERSNATCH_KEY_BYTES).asOpaque(), - ed25519: Bytes.parseBytes(x.ed25519, ED25519_KEY_BYTES).asOpaque(), - }), - ), - tinyChainSpec, - ); - - const TEST_VALIDATOR_DATA = asKnownSize( - TEST_VALIDATOR_KEYS.map((x) => - ValidatorData.create({ - bandersnatch: x.bandersnatch, - ed25519: x.ed25519, - bls: Bytes.zero(BLS_KEY_BYTES).asOpaque(), - metadata: Bytes.zero(VALIDATOR_META_BYTES).asOpaque(), - }), - ), - ); -} diff --git a/packages/jam/safrole/safrole-seal.test.ts b/packages/jam/safrole/safrole-seal.test.ts index 7c1f75bfd..405f26046 100644 --- a/packages/jam/safrole/safrole-seal.test.ts +++ b/packages/jam/safrole/safrole-seal.test.ts @@ -17,218 +17,209 @@ import { BANDERSNATCH_VRF_SIGNATURE_BYTES } from "@typeberry/crypto/bandersnatch import { HASH_SIZE } from "@typeberry/hash"; import { VALIDATOR_META_BYTES, ValidatorData } from "@typeberry/state"; import { SafroleSealingKeysData } from "@typeberry/state/safrole-data.js"; -import { Compatibility, GpVersion } from "@typeberry/utils"; import { BandernsatchWasm } from "./bandersnatch-wasm.js"; import { SafroleSeal } from "./safrole-seal.js"; const bandersnatch = BandernsatchWasm.new(); -if (Compatibility.isGreaterOrEqual(GpVersion.V0_7_0)) { - describe("Safrole Seal verification", () => { - it("should verify a valid fallback mode seal and entropySource", async () => { - // based on test-vectors/w3f-davxy_070/traces/fallback/00000002.json - const header = Header.create({ - parentHeaderHash: Bytes.parseBytes( - "0x74ad675f8d6480a17b6ec0178962ea0166053c384689044c6f4cd38c97c2776d", - HASH_SIZE, - ).asOpaque(), - priorStateRoot: Bytes.parseBytes( - "0x4542b8bd55b25f52767e37c1c72004fefdd068878084e9c87c3ab0dc38543173", - HASH_SIZE, - ).asOpaque(), - extrinsicHash: Bytes.parseBytes( - "0x189d15af832dfe4f67744008b62c334b569fcbb4c261e0f065655697306ca252", - HASH_SIZE, - ).asOpaque(), - timeSlotIndex: tryAsTimeSlot(2), - epochMarker: null, - ticketsMarker: null, - offendersMarker: [], - bandersnatchBlockAuthorIndex: tryAsValidatorIndex(3), - entropySource: Bytes.parseBytes( - "0x21237c35f11cd849a27ffa62e4aeb1c9a06bca2e42b89e16f93932d773b4ed5e7df1d7c48986eeb1313462aec31668dbfa6d3e499b457c678320ce0bb0fb611be3b6b240e1cd757e624d50cb1a163ca5c6348f97b782f5db74f8877eae593a0d", - BANDERSNATCH_VRF_SIGNATURE_BYTES, - ).asOpaque(), - seal: Bytes.parseBytes( - "0x732cef37ec4d9f100aca7445a486afc3fa1015056e3377905168e7b88d40286e68d943e77c0e5f5539c40416cd494b50aeb227ba55701d64e5586c790aebc60c1eba819c07c1b6f8fbca0d7765caaa61e494271c925df7ee42e6a19b0d3d2313", - BANDERSNATCH_VRF_SIGNATURE_BYTES, - ).asOpaque(), - }); - const spec = tinyChainSpec; - const headerView = reencodeAsView(Header.Codec, header, spec); +describe("Safrole Seal verification", () => { + it("should verify a valid fallback mode seal and entropySource", async () => { + // based on test-vectors/w3f-davxy_070/traces/fallback/00000002.json + const header = Header.create({ + parentHeaderHash: Bytes.parseBytes( + "0x74ad675f8d6480a17b6ec0178962ea0166053c384689044c6f4cd38c97c2776d", + HASH_SIZE, + ).asOpaque(), + priorStateRoot: Bytes.parseBytes( + "0x4542b8bd55b25f52767e37c1c72004fefdd068878084e9c87c3ab0dc38543173", + HASH_SIZE, + ).asOpaque(), + extrinsicHash: Bytes.parseBytes( + "0x189d15af832dfe4f67744008b62c334b569fcbb4c261e0f065655697306ca252", + HASH_SIZE, + ).asOpaque(), + timeSlotIndex: tryAsTimeSlot(2), + epochMarker: null, + ticketsMarker: null, + offendersMarker: [], + bandersnatchBlockAuthorIndex: tryAsValidatorIndex(3), + entropySource: Bytes.parseBytes( + "0x21237c35f11cd849a27ffa62e4aeb1c9a06bca2e42b89e16f93932d773b4ed5e7df1d7c48986eeb1313462aec31668dbfa6d3e499b457c678320ce0bb0fb611be3b6b240e1cd757e624d50cb1a163ca5c6348f97b782f5db74f8877eae593a0d", + BANDERSNATCH_VRF_SIGNATURE_BYTES, + ).asOpaque(), + seal: Bytes.parseBytes( + "0x732cef37ec4d9f100aca7445a486afc3fa1015056e3377905168e7b88d40286e68d943e77c0e5f5539c40416cd494b50aeb227ba55701d64e5586c790aebc60c1eba819c07c1b6f8fbca0d7765caaa61e494271c925df7ee42e6a19b0d3d2313", + BANDERSNATCH_VRF_SIGNATURE_BYTES, + ).asOpaque(), + }); + const spec = tinyChainSpec; + const headerView = reencodeAsView(Header.Codec, header, spec); - const safroleSeal = new SafroleSeal(bandersnatch); - const result = await safroleSeal.verifyHeaderSeal(headerView, { - currentValidatorData: TEST_VALIDATOR_DATA, - sealingKeySeries: SEALING_KEYS, - currentEntropy: Bytes.parseBytes( - "0x405c80c1f6a2d5a0f8dbc56996f04230221100d9500244648f02a795d7850eac", - HASH_SIZE, - ).asOpaque(), - }); + const safroleSeal = new SafroleSeal(bandersnatch); + const result = await safroleSeal.verifyHeaderSeal(headerView, { + currentValidatorData: TEST_VALIDATOR_DATA, + sealingKeySeries: SEALING_KEYS, + currentEntropy: Bytes.parseBytes( + "0x405c80c1f6a2d5a0f8dbc56996f04230221100d9500244648f02a795d7850eac", + HASH_SIZE, + ).asOpaque(), + }); - assert.deepStrictEqual(result, { - isError: false, - isOk: true, - ok: Bytes.parseBytes( - "0xc13af3d0cbdb7174590f34518e3beb05708935ceaee242e7ba11a94ca87bd007", - HASH_SIZE, - ).asOpaque(), - }); + assert.deepStrictEqual(result, { + isError: false, + isOk: true, + ok: Bytes.parseBytes("0xc13af3d0cbdb7174590f34518e3beb05708935ceaee242e7ba11a94ca87bd007", HASH_SIZE).asOpaque(), }); + }); - it("should verify a valid ticket seal and entropySource", async () => { - // based on test-vectors/w3f-davxy_070/traces/safrole/00000002.json - const header = Header.create({ - parentHeaderHash: Bytes.parseBytes( - "0x74ad675f8d6480a17b6ec0178962ea0166053c384689044c6f4cd38c97c2776d", - HASH_SIZE, - ).asOpaque(), - priorStateRoot: Bytes.parseBytes( - "0x4542b8bd55b25f52767e37c1c72004fefdd068878084e9c87c3ab0dc38543173", - HASH_SIZE, - ).asOpaque(), - extrinsicHash: Bytes.parseBytes( - "0x189d15af832dfe4f67744008b62c334b569fcbb4c261e0f065655697306ca252", - HASH_SIZE, - ).asOpaque(), - timeSlotIndex: tryAsTimeSlot(2), - epochMarker: null, - ticketsMarker: null, - offendersMarker: [], - bandersnatchBlockAuthorIndex: tryAsValidatorIndex(3), - entropySource: Bytes.parseBytes( - "0x21237c35f11cd849a27ffa62e4aeb1c9a06bca2e42b89e16f93932d773b4ed5e7df1d7c48986eeb1313462aec31668dbfa6d3e499b457c678320ce0bb0fb611be3b6b240e1cd757e624d50cb1a163ca5c6348f97b782f5db74f8877eae593a0d", - BANDERSNATCH_VRF_SIGNATURE_BYTES, - ).asOpaque(), - seal: Bytes.parseBytes( - "0x732cef37ec4d9f100aca7445a486afc3fa1015056e3377905168e7b88d40286e68d943e77c0e5f5539c40416cd494b50aeb227ba55701d64e5586c790aebc60c1eba819c07c1b6f8fbca0d7765caaa61e494271c925df7ee42e6a19b0d3d2313", - BANDERSNATCH_VRF_SIGNATURE_BYTES, - ).asOpaque(), - }); - const spec = tinyChainSpec; - const headerView = reencodeAsView(Header.Codec, header, spec); + it("should verify a valid ticket seal and entropySource", async () => { + // based on test-vectors/w3f-davxy_070/traces/safrole/00000002.json + const header = Header.create({ + parentHeaderHash: Bytes.parseBytes( + "0x74ad675f8d6480a17b6ec0178962ea0166053c384689044c6f4cd38c97c2776d", + HASH_SIZE, + ).asOpaque(), + priorStateRoot: Bytes.parseBytes( + "0x4542b8bd55b25f52767e37c1c72004fefdd068878084e9c87c3ab0dc38543173", + HASH_SIZE, + ).asOpaque(), + extrinsicHash: Bytes.parseBytes( + "0x189d15af832dfe4f67744008b62c334b569fcbb4c261e0f065655697306ca252", + HASH_SIZE, + ).asOpaque(), + timeSlotIndex: tryAsTimeSlot(2), + epochMarker: null, + ticketsMarker: null, + offendersMarker: [], + bandersnatchBlockAuthorIndex: tryAsValidatorIndex(3), + entropySource: Bytes.parseBytes( + "0x21237c35f11cd849a27ffa62e4aeb1c9a06bca2e42b89e16f93932d773b4ed5e7df1d7c48986eeb1313462aec31668dbfa6d3e499b457c678320ce0bb0fb611be3b6b240e1cd757e624d50cb1a163ca5c6348f97b782f5db74f8877eae593a0d", + BANDERSNATCH_VRF_SIGNATURE_BYTES, + ).asOpaque(), + seal: Bytes.parseBytes( + "0x732cef37ec4d9f100aca7445a486afc3fa1015056e3377905168e7b88d40286e68d943e77c0e5f5539c40416cd494b50aeb227ba55701d64e5586c790aebc60c1eba819c07c1b6f8fbca0d7765caaa61e494271c925df7ee42e6a19b0d3d2313", + BANDERSNATCH_VRF_SIGNATURE_BYTES, + ).asOpaque(), + }); + const spec = tinyChainSpec; + const headerView = reencodeAsView(Header.Codec, header, spec); - const safroleSeal = new SafroleSeal(bandersnatch); - const result = await safroleSeal.verifyHeaderSeal(headerView, { - currentValidatorData: TEST_VALIDATOR_DATA, - sealingKeySeries: SEALING_KEYS, - currentEntropy: Bytes.parseBytes( - "0x405c80c1f6a2d5a0f8dbc56996f04230221100d9500244648f02a795d7850eac", - HASH_SIZE, - ).asOpaque(), - }); + const safroleSeal = new SafroleSeal(bandersnatch); + const result = await safroleSeal.verifyHeaderSeal(headerView, { + currentValidatorData: TEST_VALIDATOR_DATA, + sealingKeySeries: SEALING_KEYS, + currentEntropy: Bytes.parseBytes( + "0x405c80c1f6a2d5a0f8dbc56996f04230221100d9500244648f02a795d7850eac", + HASH_SIZE, + ).asOpaque(), + }); - assert.deepStrictEqual(result, { - isError: false, - isOk: true, - ok: Bytes.parseBytes( - "0xc13af3d0cbdb7174590f34518e3beb05708935ceaee242e7ba11a94ca87bd007", - HASH_SIZE, - ).asOpaque(), - }); + assert.deepStrictEqual(result, { + isError: false, + isOk: true, + ok: Bytes.parseBytes("0xc13af3d0cbdb7174590f34518e3beb05708935ceaee242e7ba11a94ca87bd007", HASH_SIZE).asOpaque(), }); }); +}); - const TEST_VALIDATOR_KEYS = tryAsPerValidator( - [ - { - bandersnatch: "0xff71c6c03ff88adb5ed52c9681de1629a54e702fc14729f6b50d2f0a76f185b3", - ed25519: "0x4418fb8c85bb3985394a8c2756d3643457ce614546202a2f50b093d762499ace", - }, - { - bandersnatch: "0xdee6d555b82024f1ccf8a1e37e60fa60fd40b1958c4bb3006af78647950e1b91", - ed25519: "0xad93247bd01307550ec7acd757ce6fb805fcf73db364063265b30a949e90d933", - }, - { - bandersnatch: "0x9326edb21e5541717fde24ec085000b28709847b8aab1ac51f84e94b37ca1b66", - ed25519: "0xcab2b9ff25c2410fbe9b8a717abb298c716a03983c98ceb4def2087500b8e341", - }, - { - bandersnatch: "0x0746846d17469fb2f95ef365efcab9f4e22fa1feb53111c995376be8019981cc", - ed25519: "0xf30aa5444688b3cab47697b37d5cac5707bb3289e986b19b17db437206931a8d", - }, - { - bandersnatch: "0x151e5c8fe2b9d8a606966a79edd2f9e5db47e83947ce368ccba53bf6ba20a40b", - ed25519: "0x8b8c5d436f92ecf605421e873a99ec528761eb52a88a2f9a057b3b3003e6f32a", - }, - { - bandersnatch: "0x2105650944fcd101621fd5bb3124c9fd191d114b7ad936c1d79d734f9f21392e", - ed25519: "0xab0084d01534b31c1dd87c81645fd762482a90027754041ca1b56133d0466c06", - }, - ].map((x) => - ValidatorKeys.create({ - bandersnatch: Bytes.parseBytes(x.bandersnatch, BANDERSNATCH_KEY_BYTES).asOpaque(), - ed25519: Bytes.parseBytes(x.ed25519, ED25519_KEY_BYTES).asOpaque(), - }), - ), - tinyChainSpec, - ); +const TEST_VALIDATOR_KEYS = tryAsPerValidator( + [ + { + bandersnatch: "0xff71c6c03ff88adb5ed52c9681de1629a54e702fc14729f6b50d2f0a76f185b3", + ed25519: "0x4418fb8c85bb3985394a8c2756d3643457ce614546202a2f50b093d762499ace", + }, + { + bandersnatch: "0xdee6d555b82024f1ccf8a1e37e60fa60fd40b1958c4bb3006af78647950e1b91", + ed25519: "0xad93247bd01307550ec7acd757ce6fb805fcf73db364063265b30a949e90d933", + }, + { + bandersnatch: "0x9326edb21e5541717fde24ec085000b28709847b8aab1ac51f84e94b37ca1b66", + ed25519: "0xcab2b9ff25c2410fbe9b8a717abb298c716a03983c98ceb4def2087500b8e341", + }, + { + bandersnatch: "0x0746846d17469fb2f95ef365efcab9f4e22fa1feb53111c995376be8019981cc", + ed25519: "0xf30aa5444688b3cab47697b37d5cac5707bb3289e986b19b17db437206931a8d", + }, + { + bandersnatch: "0x151e5c8fe2b9d8a606966a79edd2f9e5db47e83947ce368ccba53bf6ba20a40b", + ed25519: "0x8b8c5d436f92ecf605421e873a99ec528761eb52a88a2f9a057b3b3003e6f32a", + }, + { + bandersnatch: "0x2105650944fcd101621fd5bb3124c9fd191d114b7ad936c1d79d734f9f21392e", + ed25519: "0xab0084d01534b31c1dd87c81645fd762482a90027754041ca1b56133d0466c06", + }, + ].map((x) => + ValidatorKeys.create({ + bandersnatch: Bytes.parseBytes(x.bandersnatch, BANDERSNATCH_KEY_BYTES).asOpaque(), + ed25519: Bytes.parseBytes(x.ed25519, ED25519_KEY_BYTES).asOpaque(), + }), + ), + tinyChainSpec, +); - const TEST_VALIDATOR_DATA = asKnownSize( - TEST_VALIDATOR_KEYS.map((x) => - ValidatorData.create({ - bandersnatch: x.bandersnatch, - ed25519: x.ed25519, - bls: Bytes.zero(BLS_KEY_BYTES).asOpaque(), - metadata: Bytes.zero(VALIDATOR_META_BYTES).asOpaque(), - }), - ), - ); +const TEST_VALIDATOR_DATA = asKnownSize( + TEST_VALIDATOR_KEYS.map((x) => + ValidatorData.create({ + bandersnatch: x.bandersnatch, + ed25519: x.ed25519, + bls: Bytes.zero(BLS_KEY_BYTES).asOpaque(), + metadata: Bytes.zero(VALIDATOR_META_BYTES).asOpaque(), + }), + ), +); - const SEALING_KEYS = SafroleSealingKeysData.keys( - tryAsPerEpochBlock( - [ - Bytes.parseBytes( - "0x2105650944fcd101621fd5bb3124c9fd191d114b7ad936c1d79d734f9f21392e", - BANDERSNATCH_KEY_BYTES, - ).asOpaque(), - Bytes.parseBytes( - "0xff71c6c03ff88adb5ed52c9681de1629a54e702fc14729f6b50d2f0a76f185b3", - BANDERSNATCH_KEY_BYTES, - ).asOpaque(), - Bytes.parseBytes( - "0x0746846d17469fb2f95ef365efcab9f4e22fa1feb53111c995376be8019981cc", - BANDERSNATCH_KEY_BYTES, - ).asOpaque(), - Bytes.parseBytes( - "0x0746846d17469fb2f95ef365efcab9f4e22fa1feb53111c995376be8019981cc", - BANDERSNATCH_KEY_BYTES, - ).asOpaque(), - Bytes.parseBytes( - "0x2105650944fcd101621fd5bb3124c9fd191d114b7ad936c1d79d734f9f21392e", - BANDERSNATCH_KEY_BYTES, - ).asOpaque(), - Bytes.parseBytes( - "0x9326edb21e5541717fde24ec085000b28709847b8aab1ac51f84e94b37ca1b66", - BANDERSNATCH_KEY_BYTES, - ).asOpaque(), - Bytes.parseBytes( - "0x2105650944fcd101621fd5bb3124c9fd191d114b7ad936c1d79d734f9f21392e", - BANDERSNATCH_KEY_BYTES, - ).asOpaque(), - Bytes.parseBytes( - "0x151e5c8fe2b9d8a606966a79edd2f9e5db47e83947ce368ccba53bf6ba20a40b", - BANDERSNATCH_KEY_BYTES, - ).asOpaque(), - Bytes.parseBytes( - "0x0746846d17469fb2f95ef365efcab9f4e22fa1feb53111c995376be8019981cc", - BANDERSNATCH_KEY_BYTES, - ).asOpaque(), - Bytes.parseBytes( - "0x151e5c8fe2b9d8a606966a79edd2f9e5db47e83947ce368ccba53bf6ba20a40b", - BANDERSNATCH_KEY_BYTES, - ).asOpaque(), - Bytes.parseBytes( - "0xff71c6c03ff88adb5ed52c9681de1629a54e702fc14729f6b50d2f0a76f185b3", - BANDERSNATCH_KEY_BYTES, - ).asOpaque(), - Bytes.parseBytes( - "0x0746846d17469fb2f95ef365efcab9f4e22fa1feb53111c995376be8019981cc", - BANDERSNATCH_KEY_BYTES, - ).asOpaque(), - ], - tinyChainSpec, - ), - ); -} +const SEALING_KEYS = SafroleSealingKeysData.keys( + tryAsPerEpochBlock( + [ + Bytes.parseBytes( + "0x2105650944fcd101621fd5bb3124c9fd191d114b7ad936c1d79d734f9f21392e", + BANDERSNATCH_KEY_BYTES, + ).asOpaque(), + Bytes.parseBytes( + "0xff71c6c03ff88adb5ed52c9681de1629a54e702fc14729f6b50d2f0a76f185b3", + BANDERSNATCH_KEY_BYTES, + ).asOpaque(), + Bytes.parseBytes( + "0x0746846d17469fb2f95ef365efcab9f4e22fa1feb53111c995376be8019981cc", + BANDERSNATCH_KEY_BYTES, + ).asOpaque(), + Bytes.parseBytes( + "0x0746846d17469fb2f95ef365efcab9f4e22fa1feb53111c995376be8019981cc", + BANDERSNATCH_KEY_BYTES, + ).asOpaque(), + Bytes.parseBytes( + "0x2105650944fcd101621fd5bb3124c9fd191d114b7ad936c1d79d734f9f21392e", + BANDERSNATCH_KEY_BYTES, + ).asOpaque(), + Bytes.parseBytes( + "0x9326edb21e5541717fde24ec085000b28709847b8aab1ac51f84e94b37ca1b66", + BANDERSNATCH_KEY_BYTES, + ).asOpaque(), + Bytes.parseBytes( + "0x2105650944fcd101621fd5bb3124c9fd191d114b7ad936c1d79d734f9f21392e", + BANDERSNATCH_KEY_BYTES, + ).asOpaque(), + Bytes.parseBytes( + "0x151e5c8fe2b9d8a606966a79edd2f9e5db47e83947ce368ccba53bf6ba20a40b", + BANDERSNATCH_KEY_BYTES, + ).asOpaque(), + Bytes.parseBytes( + "0x0746846d17469fb2f95ef365efcab9f4e22fa1feb53111c995376be8019981cc", + BANDERSNATCH_KEY_BYTES, + ).asOpaque(), + Bytes.parseBytes( + "0x151e5c8fe2b9d8a606966a79edd2f9e5db47e83947ce368ccba53bf6ba20a40b", + BANDERSNATCH_KEY_BYTES, + ).asOpaque(), + Bytes.parseBytes( + "0xff71c6c03ff88adb5ed52c9681de1629a54e702fc14729f6b50d2f0a76f185b3", + BANDERSNATCH_KEY_BYTES, + ).asOpaque(), + Bytes.parseBytes( + "0x0746846d17469fb2f95ef365efcab9f4e22fa1feb53111c995376be8019981cc", + BANDERSNATCH_KEY_BYTES, + ).asOpaque(), + ], + tinyChainSpec, + ), +); diff --git a/packages/jam/state-merkleization/keys.ts b/packages/jam/state-merkleization/keys.ts index 5a841c0a5..8b8533d25 100644 --- a/packages/jam/state-merkleization/keys.ts +++ b/packages/jam/state-merkleization/keys.ts @@ -4,12 +4,10 @@ import { Bytes, BytesBlob } from "@typeberry/bytes"; import { type Blake2b, HASH_SIZE, type OpaqueHash } from "@typeberry/hash"; import { tryAsU32, type U32, u32AsLeBytes } from "@typeberry/numbers"; import type { StorageKey } from "@typeberry/state"; -import { Compatibility, GpVersion, type Opaque } from "@typeberry/utils"; +import type { Opaque } from "@typeberry/utils"; export type StateKey = Opaque; -const U32_BYTES = 4; - /** Numeric mapping for state entries. */ export enum StateKeyIdx { Unused = 0, @@ -71,25 +69,11 @@ export namespace stateKeys { /** https://graypaper.fluffylabs.dev/#/1c979cb/3bba033bba03?v=0.7.1 */ export function serviceStorage(blake2b: Blake2b, serviceId: ServiceId, key: StorageKey): StateKey { - if (Compatibility.isLessThan(GpVersion.V0_6_7)) { - const out = Bytes.zero(HASH_SIZE); - out.raw.set(u32AsLeBytes(tryAsU32(2 ** 32 - 1)), 0); - out.raw.set(key.raw.subarray(0, HASH_SIZE - U32_BYTES), U32_BYTES); - return legacyServiceNested(serviceId, out); - } - return serviceNested(blake2b, serviceId, tryAsU32(2 ** 32 - 1), key); } /** https://graypaper.fluffylabs.dev/#/1c979cb/3bd7033bd703?v=0.7.1 */ export function servicePreimage(blake2b: Blake2b, serviceId: ServiceId, hash: PreimageHash): StateKey { - if (Compatibility.isLessThan(GpVersion.V0_6_7)) { - const out = Bytes.zero(HASH_SIZE); - out.raw.set(u32AsLeBytes(tryAsU32(2 ** 32 - 2)), 0); - out.raw.set(hash.raw.subarray(1, HASH_SIZE - U32_BYTES + 1), U32_BYTES); - return legacyServiceNested(serviceId, out); - } - return serviceNested(blake2b, serviceId, tryAsU32(2 ** 32 - 2), hash); } @@ -100,14 +84,6 @@ export namespace stateKeys { hash: PreimageHash, preimageLength: U32, ): StateKey { - if (Compatibility.isLessThan(GpVersion.V0_6_7)) { - const doubleHash = blake2b.hashBytes(hash); - const out = Bytes.zero(HASH_SIZE); - out.raw.set(u32AsLeBytes(preimageLength), 0); - out.raw.set(doubleHash.raw.subarray(2, HASH_SIZE - U32_BYTES + 2), U32_BYTES); - return legacyServiceNested(serviceId, out); - } - return serviceNested(blake2b, serviceId, preimageLength, hash); } diff --git a/packages/jam/state-merkleization/serialized-state.ts b/packages/jam/state-merkleization/serialized-state.ts index a60cbc598..c560607ce 100644 --- a/packages/jam/state-merkleization/serialized-state.ts +++ b/packages/jam/state-merkleization/serialized-state.ts @@ -1,11 +1,11 @@ import { type ServiceId, tryAsTimeSlot } from "@typeberry/block"; import type { PreimageHash } from "@typeberry/block/preimage.js"; -import { BytesBlob } from "@typeberry/bytes"; +import type { BytesBlob } from "@typeberry/bytes"; import { type Decode, Decoder } from "@typeberry/codec"; import { HashDictionary } from "@typeberry/collections"; import type { ChainSpec } from "@typeberry/config"; import type { Blake2b } from "@typeberry/hash"; -import { type U32, u32AsLeBytes } from "@typeberry/numbers"; +import type { U32 } from "@typeberry/numbers"; import { type EnumerableState, type LookupHistorySlots, @@ -16,7 +16,7 @@ import { tryAsLookupHistorySlots, } from "@typeberry/state"; import type { StateView, WithStateView } from "@typeberry/state/state-view.js"; -import { asOpaqueType, Compatibility, GpVersion, safeAllocUint8Array, TEST_COMPARE_USING } from "@typeberry/utils"; +import { TEST_COMPARE_USING } from "@typeberry/utils"; import type { StateKey } from "./keys.js"; import { serialize } from "./serialize.js"; import { type SerializedStateBackend, SerializedStateView } from "./serialized-state-view.js"; @@ -210,15 +210,6 @@ export class SerializedService implements Service { /** Retrieve a storage item. */ getStorage(rawKey: StorageKey): BytesBlob | null { - if (Compatibility.isLessThan(GpVersion.V0_6_7)) { - const SERVICE_ID_BYTES = 4; - const serviceIdAndKey = safeAllocUint8Array(SERVICE_ID_BYTES + rawKey.length); - serviceIdAndKey.set(u32AsLeBytes(this.serviceId)); - serviceIdAndKey.set(rawKey.raw, SERVICE_ID_BYTES); - const key: StorageKey = asOpaqueType(BytesBlob.blobFrom(this.blake2b.hashBytes(serviceIdAndKey).raw)); - return this.retrieveOptional(serialize.serviceStorage(this.blake2b, this.serviceId, key)) ?? null; - } - return this.retrieveOptional(serialize.serviceStorage(this.blake2b, this.serviceId, rawKey)) ?? null; } diff --git a/packages/jam/state-merkleization/state-entries.test.ts b/packages/jam/state-merkleization/state-entries.test.ts index f11799538..86653a1d9 100644 --- a/packages/jam/state-merkleization/state-entries.test.ts +++ b/packages/jam/state-merkleization/state-entries.test.ts @@ -57,10 +57,8 @@ describe("State Serialization", () => { assert.deepStrictEqual(state.authPools, authPools); const expectedRoot = Compatibility.selectIfGreaterOrEqual({ - fallback: "0xb075c9dacc6df40a4ac189b6573e9a0d35f2744a759b1ce0d51a272bab3bea5f", + fallback: "0xcf33ddfb0987283f7614652d7eb4d3509e5efd93466a4b28ab4865cc912a66e1", versions: { - [GpVersion.V0_6_7]: "0xa6354341d3c232456ec5cdd4fd84daf474d7083ebc4de180363e656c6e62a704", - [GpVersion.V0_7_0]: "0xcf33ddfb0987283f7614652d7eb4d3509e5efd93466a4b28ab4865cc912a66e1", [GpVersion.V0_7_1]: "0xf1dff0f8d8d5470aa6fc381d07e644f5b2f7a32bf06a7cf1dc664fe4b6298402", }, }); diff --git a/packages/jam/state/statistics.test.ts b/packages/jam/state/statistics.test.ts index e66113a3f..a835e5008 100644 --- a/packages/jam/state/statistics.test.ts +++ b/packages/jam/state/statistics.test.ts @@ -2,28 +2,20 @@ import { describe, it } from "node:test"; import { BytesBlob } from "@typeberry/bytes"; import { Decoder } from "@typeberry/codec"; import { tinyChainSpec } from "@typeberry/config"; -import { Compatibility, GpVersion, TestSuite } from "@typeberry/utils"; +import { Compatibility, GpVersion } from "@typeberry/utils"; import { StatisticsData } from "./statistics.js"; describe("Statistics", () => { - const doit = Compatibility.isSuite(TestSuite.JAMDUNA, GpVersion.V0_6_7) ? it : it.skip; - - doit("should decode statistics data 1 with no error", () => { - const spec = tinyChainSpec; - - Decoder.decodeObject(StatisticsData.Codec, BytesBlob.parseBlob(STATISTICS1), spec); + const STATISTICS = Compatibility.selectIfGreaterOrEqual({ + fallback: + "0x010000000300000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000030000000600000000000000000000000000000000000000010000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810e0000000000000000000100000000000001000000000000000000", + versions: { + // varu32 for serviceid + no onTransfer + [GpVersion.V0_7_1]: + "0x010000000300000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000030000000600000000000000000000000000000000000000010000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810e000000000000000000010000000000000100000000000000", + }, }); - - doit("should decode statistics data 2", () => { - const spec = tinyChainSpec; - Compatibility.overrideSuite(TestSuite.JAMDUNA); - - Decoder.decodeObject(StatisticsData.Codec, BytesBlob.parseBlob(STATISTICS2), spec); + it("should decode statistics data with no error", () => { + Decoder.decodeObject(StatisticsData.Codec, BytesBlob.parseBlob(STATISTICS), tinyChainSpec); }); }); - -const STATISTICS1 = - "0x0000000000000000000000000000000003000000030000000000000000000000000000000000000003000000030000000200000000000000000000000000000003000000030000000000000000000000000000000000000000000000030000000200000000000000000000000000000000000000030000000200000000000000000000000000000000000000030000000200000006000000000000000000000000000000060000000200000000000000000000000000000006000000060000000300000003000000000000000000000006000000060000000300000003000000000000000000000006000000060000000100000000000000000000000000000000000000060000000100000000000000000000000000000000000000060000000000000000008124c2fd3500000000000000000214000000000001c02b5a00000000000000001c51ddb1000001c1d2db0000000000000000"; - -const STATISTICS2 = - "0x00000000000000000000000000000000030000000400000000000000000000000000000000000000030000000400000002000000000000000000000000000000030000000400000001000000030000000000000000000000000000000400000002000000000000000000000000000000000000000400000002000000000000000000000000000000000000000400000002000000060000000000000000000000000000000600000002000000000000000000000000000000060000000600000003000000030000000000000000000000060000000600000003000000030000000000000000000000060000000600000001000000000000000000000000000000000000000600000001000000000000000000000000000000000000000600000081240600000000000000000000000000000214000000000000000000000001a5ff00001c51ddb1000000000000000001c0e26c0000"; diff --git a/packages/jam/state/statistics.ts b/packages/jam/state/statistics.ts index b3b2e5b01..d1c27d664 100644 --- a/packages/jam/state/statistics.ts +++ b/packages/jam/state/statistics.ts @@ -4,22 +4,13 @@ import { type ServiceGas, type ServiceId, tryAsServiceGas, - tryAsServiceId, } from "@typeberry/block"; import { type CodecRecord, codec, type DescribedBy, type Descriptor } from "@typeberry/codec"; import { tryAsU16, tryAsU32, tryAsU64, type U16, type U32 } from "@typeberry/numbers"; -import { Compatibility, GpVersion, TestSuite } from "@typeberry/utils"; +import { Compatibility, GpVersion } from "@typeberry/utils"; import { codecPerCore, type PerCore } from "./common.js"; import { ignoreValueWithDefault } from "./service.js"; -const codecServiceId: Descriptor = - Compatibility.isSuite(TestSuite.W3F_DAVXY) || Compatibility.isSuite(TestSuite.JAMDUNA, GpVersion.V0_6_7) - ? codec.u32.asOpaque() - : codec.varU32.convert( - (s) => tryAsU32(s), - (i) => tryAsServiceId(i), - ); - /** * Activity Record of a single validator. * @@ -82,31 +73,20 @@ const codecVarGas: Descriptor = codec.varU64.convert( * Single core statistics. * Updated per block, based on incoming work reports (`w`). * - * https://graypaper.fluffylabs.dev/#/68eaa1f/18f10318f103?v=0.6.4 + * https://graypaper.fluffylabs.dev/#/ab2cdbd/197902197902?v=0.7.2 * https://github.com/gavofyork/graypaper/blob/9bffb08f3ea7b67832019176754df4fb36b9557d/text/statistics.tex#L65 */ export class CoreStatistics { - static Codec = Compatibility.isGreaterOrEqual(GpVersion.V0_7_0) - ? codec.Class(CoreStatistics, { - dataAvailabilityLoad: codec.varU32, - popularity: codecVarU16, - imports: codecVarU16, - extrinsicCount: codecVarU16, - extrinsicSize: codec.varU32, - exports: codecVarU16, - bundleSize: codec.varU32, - gasUsed: codecVarGas, - }) - : codec.Class(CoreStatistics, { - dataAvailabilityLoad: codec.varU32, - popularity: codecVarU16, - imports: codecVarU16, - exports: codecVarU16, - extrinsicSize: codec.varU32, - extrinsicCount: codecVarU16, - bundleSize: codec.varU32, - gasUsed: codecVarGas, - }); + static Codec = codec.Class(CoreStatistics, { + dataAvailabilityLoad: codec.varU32, + popularity: codecVarU16, + imports: codecVarU16, + extrinsicCount: codecVarU16, + extrinsicSize: codec.varU32, + exports: codecVarU16, + bundleSize: codec.varU32, + gasUsed: codecVarGas, + }); static create(v: CodecRecord) { return new CoreStatistics( @@ -152,7 +132,7 @@ export class CoreStatistics { * Service statistics. * Updated per block, based on available work reports (`W`). * - * https://graypaper.fluffylabs.dev/#/1c979cb/199802199802?v=0.7.1 + * https://graypaper.fluffylabs.dev/#/ab2cdbd/19e20219e202?v=0.7.2 */ export class ServiceStatistics { static Codec = Compatibility.selectIfGreaterOrEqual({ @@ -162,29 +142,15 @@ export class ServiceStatistics { refinementCount: codec.varU32, refinementGasUsed: codecVarGas, imports: codecVarU16, - exports: codecVarU16, - extrinsicSize: codec.varU32, extrinsicCount: codecVarU16, + extrinsicSize: codec.varU32, + exports: codecVarU16, accumulateCount: codec.varU32, accumulateGasUsed: codecVarGas, onTransfersCount: codec.varU32, onTransfersGasUsed: codecVarGas, }), versions: { - [GpVersion.V0_7_0]: codec.Class(ServiceStatistics, { - providedCount: codecVarU16, - providedSize: codec.varU32, - refinementCount: codec.varU32, - refinementGasUsed: codecVarGas, - imports: codecVarU16, - extrinsicCount: codecVarU16, - extrinsicSize: codec.varU32, - exports: codecVarU16, - accumulateCount: codec.varU32, - accumulateGasUsed: codecVarGas, - onTransfersCount: codec.varU32, - onTransfersGasUsed: codecVarGas, - }), [GpVersion.V0_7_1]: codec.Class(ServiceStatistics, { providedCount: codecVarU16, providedSize: codec.varU32, @@ -273,7 +239,7 @@ export class StatisticsData { current: codecPerValidator(ValidatorStatistics.Codec), previous: codecPerValidator(ValidatorStatistics.Codec), cores: codecPerCore(CoreStatistics.Codec), - services: codec.dictionary(codecServiceId, ServiceStatistics.Codec, { + services: codec.dictionary(codec.u32.asOpaque(), ServiceStatistics.Codec, { sortKeys: (a, b) => a - b, }), }); diff --git a/packages/jam/state/test.utils.ts b/packages/jam/state/test.utils.ts index 6064f04cd..8460871c0 100644 --- a/packages/jam/state/test.utils.ts +++ b/packages/jam/state/test.utils.ts @@ -18,7 +18,7 @@ import { BANDERSNATCH_RING_ROOT_BYTES } from "@typeberry/crypto/bandersnatch.js" import { HASH_SIZE } from "@typeberry/hash"; import { tryAsU16, tryAsU32, tryAsU64 } from "@typeberry/numbers"; import { MAX_VALUE } from "@typeberry/pvm-interpreter/ops/math-consts.js"; -import { Compatibility, GpVersion, TestSuite } from "@typeberry/utils"; +import { Compatibility, GpVersion } from "@typeberry/utils"; import { AUTHORIZATION_QUEUE_SIZE, AvailabilityAssignment, @@ -389,19 +389,16 @@ const activityRecord = ( const testValidatorData = () => Decoder.decodeObject(codecPerValidator(ValidatorData.Codec), BytesBlob.parseBlob(TEST_VALIDATOR_DATA), spec); -const TEST_AVAILABILITY_ASSIGNMENT = Compatibility.isGreaterOrEqual(GpVersion.V0_7_0) - ? "0xac9928d4eb0c942a07c40157fa4498b2efbbc65136819517dc94d50ff2ca9f490e010000ebb6b040a0ea039a8f9593e3a4b29005b1ebea1c5465c2753db1031a3ef30c85000000000000000000000000000000000000000000000000000000000000000000001a7d753af2e2be12f88dfcb7ca5c704641534094b061c8c3aa258d4b0acbf5c85e8f73cf5d9f94cb3a8313361a3b48e97968a9ac52ab9c29b4e88f4159c21560ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb53a31fd60656cb3de2c6ba9fafb8dee8d4c45d4bc87ca248cdda7625a68b987fb0e00000000000b27478648cd19b4f812f897a26976ecf312eac28508b4368d0c63ea949c7cb0000000010000000015f8485e3a88e86182e63280720d5ec9892578f0e577fb1bcdda5cf49795081584796f4f11ace690fc5a5bdb847db1e63cb36c97ef8f90f067a0846b654bf1c294260000000000000024ccbea4bf12716bc7f7583dd834aac2ca1b05af8dc5be285336156d0de73d9b9e20620000000000000010000000" - : "0xac9928d4eb0c942a07c40157fa4498b2efbbc65136819517dc94d50ff2ca9f490e010000ebb6b040a0ea039a8f9593e3a4b29005b1ebea1c5465c2753db1031a3ef30c85000000000000000000000000000000000000000000000000000000000000000000001a7d753af2e2be12f88dfcb7ca5c704641534094b061c8c3aa258d4b0acbf5c85e8f73cf5d9f94cb3a8313361a3b48e97968a9ac52ab9c29b4e88f4159c21560ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb53a31fd60656cb3de2c6ba9fafb8dee8d4c45d4bc87ca248cdda7625a68b987fb0e00000000000b27478648cd19b4f812f897a26976ecf312eac28508b4368d0c63ea949c7cb00000010000000015f8485e3a88e86182e63280720d5ec9892578f0e577fb1bcdda5cf49795081584796f4f11ace690fc5a5bdb847db1e63cb36c97ef8f90f067a0846b654bf1c294260000000000000024ccbea4bf12716bc7f7583dd834aac2ca1b05af8dc5be285336156d0de73d9b9e2062000000000000000010000000"; +const TEST_AVAILABILITY_ASSIGNMENT = + "0xac9928d4eb0c942a07c40157fa4498b2efbbc65136819517dc94d50ff2ca9f490e010000ebb6b040a0ea039a8f9593e3a4b29005b1ebea1c5465c2753db1031a3ef30c85000000000000000000000000000000000000000000000000000000000000000000001a7d753af2e2be12f88dfcb7ca5c704641534094b061c8c3aa258d4b0acbf5c85e8f73cf5d9f94cb3a8313361a3b48e97968a9ac52ab9c29b4e88f4159c21560ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb53a31fd60656cb3de2c6ba9fafb8dee8d4c45d4bc87ca248cdda7625a68b987fb0e00000000000b27478648cd19b4f812f897a26976ecf312eac28508b4368d0c63ea949c7cb0000000010000000015f8485e3a88e86182e63280720d5ec9892578f0e577fb1bcdda5cf49795081584796f4f11ace690fc5a5bdb847db1e63cb36c97ef8f90f067a0846b654bf1c294260000000000000024ccbea4bf12716bc7f7583dd834aac2ca1b05af8dc5be285336156d0de73d9b9e20620000000000000010000000"; const TEST_VALIDATOR_DATA = "0x5e465beb01dbafe160ce8216047f2155dd0569f058afd52dcea601025a8d161d3b6a27bcceb6a42d62a3a8d02a6f0d73653215771de243a63ac048a18b59da29b27150a1f1cd24bccc792ba7ba4220a1e8c36636e35a969d1d14b4c89bce7d1d463474fb186114a89dd70e88506fefc9830756c27a7845bec1cb6ee31e07211afd0dde34f0dc5d89231993cd323973faa23d84d521fd574e840b8617c75d1a1d0102aa3c71999137001a77464ced6bb2885c460be760c709009e26395716a52c8c52e6e23906a455b4264e7d0c75466e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d5e5a51aab2b048f8686ecd79712a80e3265a114cc73f14bdb2a59233fb66d022351e22105a19aabb42589162ad7f1ea0df1c25cebf0e4a9fcd261301274862a2534be5b2f761dc898160a9b4762eb46bd171222f6cdf87f5127a9e8970a54c44fe7b2e12dda098854a9aaab03c3a47953085668673a84b0cedb4b0391ed6ae2deb1c3e04f0bc618a2bc1287d8599e8a1c47ff715cd4cbd3fe80e2607744d4514b491ed2ef76ae114ecb1af99ba6af32189bf0471c06aa3e6acdaf82e7a959cb24a5c1444cac3a6678f5182459fd8ce0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa2b95f7572875b0d0f186552ae745ba8222fc0b5bd456554bfe51c68938f8bce68e0cf7f26c59f963b5846202d2327cc8bc0c4eff8cb9abd4012f9a71decf008faee314528448651e50bea6d2e7e5d3176698fea0b932405a4ec0a19775e72325e44a6d28f99fba887e04eb818f13d1b73f75f0161644283df61e7fbaad7713fae0ef79fe92499202834c97f512d744515a57971badf2df62e23697e9fe347f168fed0adb9ace131f49bbd500a324e2469569423f37c5d3b430990204ae17b383fcd582cb864168c8b46be8d779e7ca00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f6190116d118d643a98878e294ccf62b509e214299931aad8ff9764181a4e33b3e0e096b02e2ec98a3441410aeddd78c95e27a0da6f411a09c631c0f2bea6e98dfdac3e2f604ecda637e4969a139ceb70c534bd5edc4210eb5ac71178c1d62f0c977197a2c6a9e8ada6a14395bc9aa3a384d35f40c3493e20cb7efaa799f66d1cedd5b2928f8e34438b07072bbae404d7dfcee3f457f9103173805ee163ba550854e4660ccec49e25fafdb00e6adfbc8e875de1a9541e1721e956b972ef2b135cc7f71682615e12bb7d6acd353d7681000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000048e5fcdce10e0b64ec4eebd0d9211c7bac2f27ce54bca6f7776ff6fee86ab3e35c7f34a4bd4f2d04076a8c6f9060a0c8d2c6bdd082ceb3eda7df381cb260faffb78a95d81f6c7cdc517a36d81191b6f7718dcf44e76c0ce9fb724d3aea39fdb3c5f4ee31eb1f45e55b783b687b1e9087b092a18341c7cda102b4100685b0a014d55f1ccdb7600ec0db14bb90f7fc3126dc2625945bb44f302fc80df0c225546c06fa1952ef05bdc83ceb7a23373de0637cd9914272e3e3d1a455db6c48cc6b2b2c17e1dcf7cd1586a235821308aee0010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f16e5352840afb47e206b5c89f560f2611835855cf2e6ebad1acc9520a72591d837ce344bc9defceb0d7de7e9e9925096768b7adb4dad932e532eb6551e0ea02b0b9121622bf8a9a9e811ee926740a876dd0d9036f2f3060ebfab0c7c489a338a7728ee2da4a265696edcc389fe02b2caf20b5b83aeb64aaf4184bedf127f4eea1d737875854411d58ca4a2b69b066b0a0c09d2a0b7121ade517687c51954df913fe930c227723dd8f58aa2415946044dc3fb15c367a2185d0fc1f7d2bb102ff14a230d5f81cfc8ad445e51efddbf4260000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; // from post state of jamduna/assurances/1_004.json export const TEST_STATE_ROOT = Compatibility.selectIfGreaterOrEqual({ - fallback: "0xbe8cd9b7aa81b5a129d86781babaa869ffc3445f8960b147adc6dd0a1785a6a9", + fallback: "0xa48088ed900219e5115670c1dff1ae69396b8ca152f6a3d279d770114c458059", versions: { - [GpVersion.V0_6_7]: "0x1a7a9e304769a973af637617b07fab19d3836a62d603cb6bf116c79d79eaf32e", - [GpVersion.V0_7_0]: "0xa48088ed900219e5115670c1dff1ae69396b8ca152f6a3d279d770114c458059", [GpVersion.V0_7_1]: "0x6bf5545f35877d3c3f7066287daf2c96a37e22cab92426b188e2afd38ec87a9a", }, }); @@ -482,9 +479,7 @@ export const TEST_STATE = [ ], [ "0x0a00000000000000000000000000000000000000000000000000000000000000", - Compatibility.isGreaterOrEqual(GpVersion.V0_7_0) - ? "0x01ac9928d4eb0c942a07c40157fa4498b2efbbc65136819517dc94d50ff2ca9f490e010000ebb6b040a0ea039a8f9593e3a4b29005b1ebea1c5465c2753db1031a3ef30c85000000000000000000000000000000000000000000000000000000000000000000001a7d753af2e2be12f88dfcb7ca5c704641534094b061c8c3aa258d4b0acbf5c85e8f73cf5d9f94cb3a8313361a3b48e97968a9ac52ab9c29b4e88f4159c21560ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb53a31fd60656cb3de2c6ba9fafb8dee8d4c45d4bc87ca248cdda7625a68b987fb0e00000000000b27478648cd19b4f812f897a26976ecf312eac28508b4368d0c63ea949c7cb0000000010000000015f8485e3a88e86182e63280720d5ec9892578f0e577fb1bcdda5cf49795081584796f4f11ace690fc5a5bdb847db1e63cb36c97ef8f90f067a0846b654bf1c294260000000000000024ccbea4bf12716bc7f7583dd834aac2ca1b05af8dc5be285336156d0de73d9b9e2062000000000000001000000000" - : "0x01ac9928d4eb0c942a07c40157fa4498b2efbbc65136819517dc94d50ff2ca9f490e010000ebb6b040a0ea039a8f9593e3a4b29005b1ebea1c5465c2753db1031a3ef30c85000000000000000000000000000000000000000000000000000000000000000000001a7d753af2e2be12f88dfcb7ca5c704641534094b061c8c3aa258d4b0acbf5c85e8f73cf5d9f94cb3a8313361a3b48e97968a9ac52ab9c29b4e88f4159c21560ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb53a31fd60656cb3de2c6ba9fafb8dee8d4c45d4bc87ca248cdda7625a68b987fb0e00000000000b27478648cd19b4f812f897a26976ecf312eac28508b4368d0c63ea949c7cb00000010000000015f8485e3a88e86182e63280720d5ec9892578f0e577fb1bcdda5cf49795081584796f4f11ace690fc5a5bdb847db1e63cb36c97ef8f90f067a0846b654bf1c294260000000000000024ccbea4bf12716bc7f7583dd834aac2ca1b05af8dc5be285336156d0de73d9b9e206200000000000000001000000000", + "0x01ac9928d4eb0c942a07c40157fa4498b2efbbc65136819517dc94d50ff2ca9f490e010000ebb6b040a0ea039a8f9593e3a4b29005b1ebea1c5465c2753db1031a3ef30c85000000000000000000000000000000000000000000000000000000000000000000001a7d753af2e2be12f88dfcb7ca5c704641534094b061c8c3aa258d4b0acbf5c85e8f73cf5d9f94cb3a8313361a3b48e97968a9ac52ab9c29b4e88f4159c21560ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb53a31fd60656cb3de2c6ba9fafb8dee8d4c45d4bc87ca248cdda7625a68b987fb0e00000000000b27478648cd19b4f812f897a26976ecf312eac28508b4368d0c63ea949c7cb0000000010000000015f8485e3a88e86182e63280720d5ec9892578f0e577fb1bcdda5cf49795081584796f4f11ace690fc5a5bdb847db1e63cb36c97ef8f90f067a0846b654bf1c294260000000000000024ccbea4bf12716bc7f7583dd834aac2ca1b05af8dc5be285336156d0de73d9b9e2062000000000000001000000000", "c10", "", ], @@ -500,11 +495,8 @@ export const TEST_STATE = [ [ "0x0d00000000000000000000000000000000000000000000000000000000000000", Compatibility.selectIfGreaterOrEqual({ - fallback: Compatibility.isSuite(TestSuite.W3F_DAVXY) - ? // varU32 for serviceid - "0x010000000300000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000030000000600000000000000000000000000000000000000010000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810e0000000000000000000100000000000001000000000000000000" - : // legacy format with u32 for serviceid - "0x010000000300000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000030000000600000000000000000000000000000000000000010000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810e0000000000000000000100000001000000000000000000", + fallback: + "0x010000000300000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000030000000600000000000000000000000000000000000000010000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810e0000000000000000000100000000000001000000000000000000", versions: { // varu32 for serviceid + no onTransfer [GpVersion.V0_7_1]: diff --git a/packages/jam/transition/accumulate/operand.ts b/packages/jam/transition/accumulate/operand.ts index ed6a56c4d..56ce67232 100644 --- a/packages/jam/transition/accumulate/operand.ts +++ b/packages/jam/transition/accumulate/operand.ts @@ -4,47 +4,33 @@ import { WorkExecResult } from "@typeberry/block/work-result.js"; import { BytesBlob } from "@typeberry/bytes"; import { type CodecRecord, codec } from "@typeberry/codec"; import { HASH_SIZE, type OpaqueHash } from "@typeberry/hash"; -import { Compatibility, TestSuite, WithDebug } from "@typeberry/utils"; +import { WithDebug } from "@typeberry/utils"; /** * The set of wrangled operand tuples, used as an operand to the PVM Accumulation function. * - * https://graypaper.fluffylabs.dev/#/7e6ff6a/173d03173d03?v=0.6.7 + * https://graypaper.fluffylabs.dev/#/ab2cdbd/176b00176b00?v=0.7.2 */ export class Operand extends WithDebug { - // JamDuna uses a different order of operands. - static Codec = codec.Class( - Operand, - Compatibility.isSuite(TestSuite.JAMDUNA) - ? { - hash: codec.bytes(HASH_SIZE).asOpaque(), - exportsRoot: codec.bytes(HASH_SIZE).asOpaque(), - authorizerHash: codec.bytes(HASH_SIZE).asOpaque(), - authorizationOutput: codec.blob, - payloadHash: codec.bytes(HASH_SIZE), - gas: codec.varU64.asOpaque(), - result: WorkExecResult.Codec, - } - : { - // h - hash: codec.bytes(HASH_SIZE).asOpaque(), - // e - exportsRoot: codec.bytes(HASH_SIZE).asOpaque(), - // a - authorizerHash: codec.bytes(HASH_SIZE).asOpaque(), - // y - payloadHash: codec.bytes(HASH_SIZE), - // g - gas: codec.varU64.asOpaque(), - // d - result: WorkExecResult.Codec, - // o - authorizationOutput: codec.blob, - }, - ); + static Codec = codec.Class(Operand, { + // h + hash: codec.bytes(HASH_SIZE).asOpaque(), + // e + exportsRoot: codec.bytes(HASH_SIZE).asOpaque(), + // a + authorizerHash: codec.bytes(HASH_SIZE).asOpaque(), + // y + payloadHash: codec.bytes(HASH_SIZE), + // g + gas: codec.varU64.asOpaque(), + // d + result: WorkExecResult.Codec, + // o + authorizationOutput: codec.blob, + }); /** - * https://graypaper.fluffylabs.dev/#/7e6ff6a/181801189d01?v=0.6.7 + * https://graypaper.fluffylabs.dev/#/ab2cdbd/18680118eb01?v=0.7.2 */ hash: WorkPackageHash; exportsRoot: ExportsRootHash; diff --git a/packages/jam/transition/block-verifier.test.ts b/packages/jam/transition/block-verifier.test.ts index f59ba8edd..8ef4aaa7d 100644 --- a/packages/jam/transition/block-verifier.test.ts +++ b/packages/jam/transition/block-verifier.test.ts @@ -14,7 +14,7 @@ import { Decoder, Encoder } from "@typeberry/codec"; import { tinyChainSpec } from "@typeberry/config"; import { InMemoryBlocks } from "@typeberry/database"; import { Blake2b, HASH_SIZE, keccak, WithHash } from "@typeberry/hash"; -import { Compatibility, deepEqual, GpVersion, Result } from "@typeberry/utils"; +import { deepEqual, Result } from "@typeberry/utils"; import { BlockVerifier, BlockVerifierError } from "./block-verifier.js"; import { TransitionHasher } from "./hasher.js"; @@ -125,10 +125,10 @@ describe("Block Verifier", async () => { deepEqual( result, - Result.error(BlockVerifierError.InvalidExtrinsic, () => - Compatibility.isGreaterOrEqual(GpVersion.V0_7_0) - ? "Invalid extrinsic hash: 0x0202020202020202020202020202020202020202020202020202020202020202, expected 0x0377c11c61a370e532ce1b18a652aecdd060a3a3a257d53dac8f8e1cb32dea98" - : "Invalid extrinsic hash: 0x0202020202020202020202020202020202020202020202020202020202020202, expected 0x0cae6b5fb28258312381144a6dd6f8996f7181d7d6ab1016ec6e8108c332f932", + Result.error( + BlockVerifierError.InvalidExtrinsic, + () => + "Invalid extrinsic hash: 0x0202020202020202020202020202020202020202020202020202020202020202, expected 0x0377c11c61a370e532ce1b18a652aecdd060a3a3a257d53dac8f8e1cb32dea98", ), ); }); @@ -193,9 +193,7 @@ describe("Block Verifier", async () => { const result = await blockVerifier.verifyBlock(toBlockView(block)); - const expectedResult = Compatibility.isGreaterOrEqual(GpVersion.V0_7_0) - ? "0x81201f77f6a370731846cae2cbe3cf462c05feacebc3c546347fa4e442fd4fad" - : "0xf02989a8c20e88609e3aec79ba7159197bc8e7b5d43e27f98c911a96b61cdcb8"; + const expectedResult = "0x81201f77f6a370731846cae2cbe3cf462c05feacebc3c546347fa4e442fd4fad"; deepEqual(result, Result.ok(Bytes.parseBytes(expectedResult, HASH_SIZE).asOpaque())); }); }); diff --git a/packages/jam/transition/disputes/disputes.test.ts b/packages/jam/transition/disputes/disputes.test.ts index f1d9bb157..04bd08ac9 100644 --- a/packages/jam/transition/disputes/disputes.test.ts +++ b/packages/jam/transition/disputes/disputes.test.ts @@ -10,7 +10,7 @@ import { tinyChainSpec } from "@typeberry/config"; import { ED25519_KEY_BYTES, type Ed25519Key, initWasm } from "@typeberry/crypto"; import { Blake2b, HASH_SIZE } from "@typeberry/hash"; import { AvailabilityAssignment, DisputesRecords, hashComparator, tryAsPerCore } from "@typeberry/state"; -import { Compatibility, GpVersion, resultToString } from "@typeberry/utils"; +import { resultToString } from "@typeberry/utils"; import { Disputes } from "./disputes.js"; import * as testData from "./disputes.test.data.js"; import * as testData2 from "./disputes.test.data2.js"; @@ -74,7 +74,10 @@ describe("Disputes", () => { assert.strictEqual(ok, undefined); }); - it("should clear work-reports which were judged as invalid", async () => { + // NOTE [ToDr] This test is so far disabled for 0.7.0+ because we need + // to get the test data for it from w3f test vectors or regenerate the current + // data. + it.skip("should clear work-reports which were judged as invalid", async () => { const workReport0 = testData2.workReport( Bytes.parseBytes("0x11da6d1f761ddf9bdb4c9d6e5303ebd41f61858d0a5647a1a7bfe089bf921be9", HASH_SIZE).asOpaque(), 0, @@ -85,19 +88,9 @@ describe("Disputes", () => { ); const workReportHash0 = blake2b.hashBytes(Encoder.encodeObject(WorkReport.Codec, workReport0, tinyChainSpec)); - assert.strictEqual( - `${workReportHash0}`, - Compatibility.is(GpVersion.V0_6_7) - ? "0xb02d0c733076bb73458333c09682905985c7a0c62ae1f5dcf2e5b7f045f999e2" - : "0x23dd9ac280cd439a2c04b42cef1f2bbc9abecc7fe6454fecffef59ed110c047d", - ); + assert.strictEqual(`${workReportHash0}`, "0x23dd9ac280cd439a2c04b42cef1f2bbc9abecc7fe6454fecffef59ed110c047d"); const workReportHash1 = blake2b.hashBytes(Encoder.encodeObject(WorkReport.Codec, workReport1, tinyChainSpec)); - assert.strictEqual( - `${workReportHash1}`, - Compatibility.is(GpVersion.V0_6_7) - ? "0x253a07e4ceacf3541a6b529c5d8089180a226d3acb9d10b9c3026cd2744a893b" - : "0xf00057ba131e973a662509feb0fe6821bf3728860022b3dd9d5543b5bfa6bf8c", - ); + assert.strictEqual(`${workReportHash1}`, "0xf00057ba131e973a662509feb0fe6821bf3728860022b3dd9d5543b5bfa6bf8c"); const availabilityAssignment1 = AvailabilityAssignment.create({ workReport: workReport0, timeout: tryAsTimeSlot(42), @@ -134,13 +127,6 @@ describe("Disputes", () => { assert.strictEqual(resultToString(result), "OK: [object Object]"); assert.notStrictEqual(stateUpdate, undefined); - // NOTE [ToDr] This test is so far disabled for 0.7.0+ because we need - // to get the test data for it from w3f test vectors or regenerate the current - // data. - if (Compatibility.isGreaterOrEqual(GpVersion.V0_7_0)) { - return; - } - if (stateUpdate !== undefined) { const clearedAvailabilityAssignment = stateUpdate.availabilityAssignment; assert.strictEqual(clearedAvailabilityAssignment[0], null); diff --git a/packages/jam/transition/hasher.test.ts b/packages/jam/transition/hasher.test.ts index f78c87daa..99280ba62 100644 --- a/packages/jam/transition/hasher.test.ts +++ b/packages/jam/transition/hasher.test.ts @@ -22,7 +22,7 @@ import { ED25519_SIGNATURE_BYTES } from "@typeberry/crypto"; import { BANDERSNATCH_PROOF_BYTES } from "@typeberry/crypto/bandersnatch.js"; import { Blake2b, HASH_SIZE, keccak } from "@typeberry/hash"; import { tryAsU16, tryAsU32 } from "@typeberry/numbers"; -import { asOpaqueType, Compatibility, deepEqual, GpVersion } from "@typeberry/utils"; +import { asOpaqueType, deepEqual } from "@typeberry/utils"; import { TransitionHasher } from "./hasher.js"; describe("TransitionHasher", () => { @@ -151,9 +151,7 @@ describe("TransitionHasher", () => { guarantees: asOpaqueType(guarantees), }); const expectedResult: ExtrinsicHash = Bytes.parseBytes( - Compatibility.isGreaterOrEqual(GpVersion.V0_7_0) - ? "0xfc365cc4a1e5fffac3bf9a0189fc8fca444b9c5dff670b6b3ad4e4b6d925551c" - : "0xea2f2f4282c914664973aedb8c4d4ce87d79b00f8e848c8c6b7829831dd13fa3", + "0xfc365cc4a1e5fffac3bf9a0189fc8fca444b9c5dff670b6b3ad4e4b6d925551c", HASH_SIZE, ).asOpaque(); diff --git a/packages/jam/transition/reports/verify-credentials.test.ts b/packages/jam/transition/reports/verify-credentials.test.ts index 11faad2a6..2a5caaf06 100644 --- a/packages/jam/transition/reports/verify-credentials.test.ts +++ b/packages/jam/transition/reports/verify-credentials.test.ts @@ -6,7 +6,7 @@ import { HashSet } from "@typeberry/collections"; import { tinyChainSpec } from "@typeberry/config"; import { ED25519_SIGNATURE_BYTES, type Ed25519Key } from "@typeberry/crypto"; import { Blake2b } from "@typeberry/hash"; -import { asOpaqueType, Compatibility, deepEqual, GpVersion } from "@typeberry/utils"; +import { asOpaqueType, deepEqual } from "@typeberry/utils"; import { ReportsError } from "./error.js"; import { ENTROPY, @@ -222,9 +222,7 @@ describe("Reports.verifyCredentials", () => { const res = reports.verifyCredentials(input, hashes); const message = BytesBlob.parseBlob( - Compatibility.isGreaterOrEqual(GpVersion.V0_7_0) - ? "0x6a616d5f67756172616e7465650f8925aab38c879431d70efa7fa0adc2e1868aa1710aa032041b7c13b194ce36" - : "0x6a616d5f67756172616e746565d8b3242cac2d1db846434afa3a9eead57339a1244f3203de5e810bfe7ee84de5", + "0x6a616d5f67756172616e7465650f8925aab38c879431d70efa7fa0adc2e1868aa1710aa032041b7c13b194ce36", ); const validators = initialValidators();