-
Notifications
You must be signed in to change notification settings - Fork 114
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Refactor portal test directory structure
- Loading branch information
Showing
32 changed files
with
286 additions
and
280 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
108 changes: 36 additions & 72 deletions
108
fluffy/tests/beacon_network_tests/test_beacon_historical_summaries.nim
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,84 +1,48 @@ | ||
# fluffy | ||
# Copyright (c) 2024 Status Research & Development GmbH | ||
# Copyright (c) 2023-2024 Status Research & Development GmbH | ||
# Licensed and distributed under either of | ||
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT). | ||
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0). | ||
# at your option. This file may not be copied, modified, or distributed except according to those terms. | ||
|
||
{.used.} | ||
|
||
{.push raises: [].} | ||
|
||
import | ||
unittest2, | ||
stew/byteutils, | ||
results, | ||
beacon_chain/networking/network_metadata, | ||
beacon_chain/spec/forks, | ||
../../network/beacon/[beacon_chain_historical_summaries, beacon_content], | ||
../../eth_data/yaml_utils | ||
|
||
type YamlHistoricalSummariesWithProof* = object | ||
content_key*: string | ||
content_value*: string | ||
beacon_state_root*: string | ||
historical_summaries_root*: string | ||
historical_summaries_state_proof*: array[5, string] | ||
epoch*: uint64 | ||
|
||
suite "Beacon HistoricalSummariesWithProof": | ||
const testVectorDir = | ||
"./vendor/portal-spec-tests/tests/mainnet/beacon_chain/historical_summaries_with_proof/deneb/" | ||
|
||
beacon_chain/spec/datatypes/capella, | ||
# Test helpers | ||
beacon_chain /../ tests/testblockutil, | ||
beacon_chain /../ tests/mocking/mock_genesis, | ||
beacon_chain /../ tests/consensus_spec/fixtures_utils, | ||
../../network/beacon/beacon_chain_historical_summaries | ||
|
||
suite "Beacon Chain Historical Summaries": | ||
let | ||
metadata = getMetadataForNetwork("mainnet") | ||
genesisState = | ||
try: | ||
template genesisData(): auto = | ||
metadata.genesis.bakedBytes | ||
|
||
newClone( | ||
readSszForkedHashedBeaconState( | ||
metadata.cfg, genesisData.toOpenArray(genesisData.low, genesisData.high) | ||
) | ||
) | ||
except CatchableError as err: | ||
raiseAssert "Invalid baked-in state: " & err.msg | ||
|
||
# Although the test data is generated from a test state, we need to use the | ||
# forkDigests of mainnet as apparently these are used in the generated test vector. | ||
genesis_validators_root = getStateField(genesisState[], genesis_validators_root) | ||
# genesis_validators_root = Digest.fromHex( | ||
# "0x2170688a9e92595fb353c0a2ad6733431a8066c7ecb48ab3b2aaf9091a1722b1" | ||
# ) | ||
forkDigests = newClone ForkDigests.init(metadata.cfg, genesis_validators_root) | ||
|
||
test "HistoricalSummaries Encoding/Decoding and Verification": | ||
const file = testVectorDir & "historical_summaries_with_proof.yaml" | ||
let | ||
testCase = YamlHistoricalSummariesWithProof.loadFromYaml(file).valueOr: | ||
raiseAssert "Invalid test vector file: " & error | ||
|
||
contentKeyEncoded = testCase.content_key.hexToSeqByte() | ||
contentValueEncoded = testCase.content_value.hexToSeqByte() | ||
|
||
# Decode content and content key | ||
contentKey = decodeSsz(contentKeyEncoded, ContentKey) | ||
contentValue = | ||
decodeSsz(forkDigests[], contentValueEncoded, HistoricalSummariesWithProof) | ||
check: | ||
contentKey.isOk() | ||
contentValue.isOk() | ||
|
||
let summariesWithProof = contentValue.value() | ||
let root = hash_tree_root(summariesWithProof.historical_summaries) | ||
|
||
check: | ||
root.data == testCase.historical_summaries_root.hexToSeqByte() | ||
summariesWithProof.epoch == testCase.epoch | ||
verifyProof(summariesWithProof, Digest.fromHex(testCase.beacon_state_root)) | ||
|
||
# Encode content and content key | ||
let consensusFork = consensusForkAtEpoch(metadata.cfg, summariesWithProof.epoch) | ||
let forkDigest = atConsensusFork(forkDigests[], consensusFork) | ||
check: | ||
encodeSsz(summariesWithProof, forkDigest) == contentValueEncoded | ||
encode(contentKey.value()).asSeq() == contentKeyEncoded | ||
cfg = genesisTestRuntimeConfig(ConsensusFork.Capella) | ||
state = newClone(initGenesisState(cfg = cfg)) | ||
var cache = StateCache() | ||
|
||
var blocks: seq[capella.SignedBeaconBlock] | ||
# Note: | ||
# Adding 8192 blocks. First block is genesis block and not one of these. | ||
# Then one extra block is needed to get the historical summaries, block | ||
# roots and state roots processed. | ||
# index i = 0 is second block. | ||
# index i = 8190 is 8192th block and last one that is part of the first | ||
# historical root | ||
for i in 0 ..< SLOTS_PER_HISTORICAL_ROOT: | ||
blocks.add(addTestBlock(state[], cache, cfg = cfg).capellaData) | ||
|
||
test "Historical Summaries Proof": | ||
withState(state[]): | ||
when consensusFork >= ConsensusFork.Capella: | ||
let historical_summaries = forkyState.data.historical_summaries | ||
let res = buildProof(state[]) | ||
check res.isOk() | ||
let proof = res.get() | ||
|
||
withState(state[]): | ||
check verifyProof(historical_summaries, proof, forkyState.root) |
84 changes: 84 additions & 0 deletions
84
fluffy/tests/beacon_network_tests/test_beacon_historical_summaries_vectors.nim
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
# fluffy | ||
# Copyright (c) 2024 Status Research & Development GmbH | ||
# Licensed and distributed under either of | ||
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT). | ||
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0). | ||
# at your option. This file may not be copied, modified, or distributed except according to those terms. | ||
|
||
{.used.} | ||
|
||
import | ||
unittest2, | ||
stew/byteutils, | ||
results, | ||
beacon_chain/networking/network_metadata, | ||
beacon_chain/spec/forks, | ||
../../network/beacon/[beacon_chain_historical_summaries, beacon_content], | ||
../../eth_data/yaml_utils | ||
|
||
type YamlHistoricalSummariesWithProof* = object | ||
content_key*: string | ||
content_value*: string | ||
beacon_state_root*: string | ||
historical_summaries_root*: string | ||
historical_summaries_state_proof*: array[5, string] | ||
epoch*: uint64 | ||
|
||
suite "Beacon Chain Historical Summaries With Proof - Test Vectors": | ||
const testVectorDir = | ||
"./vendor/portal-spec-tests/tests/mainnet/beacon_chain/historical_summaries_with_proof/deneb/" | ||
|
||
let | ||
metadata = getMetadataForNetwork("mainnet") | ||
genesisState = | ||
try: | ||
template genesisData(): auto = | ||
metadata.genesis.bakedBytes | ||
|
||
newClone( | ||
readSszForkedHashedBeaconState( | ||
metadata.cfg, genesisData.toOpenArray(genesisData.low, genesisData.high) | ||
) | ||
) | ||
except CatchableError as err: | ||
raiseAssert "Invalid baked-in state: " & err.msg | ||
|
||
# Although the test data is generated from a test state, we need to use the | ||
# forkDigests of mainnet as apparently these are used in the generated test vector. | ||
genesis_validators_root = getStateField(genesisState[], genesis_validators_root) | ||
# genesis_validators_root = Digest.fromHex( | ||
# "0x2170688a9e92595fb353c0a2ad6733431a8066c7ecb48ab3b2aaf9091a1722b1" | ||
# ) | ||
forkDigests = newClone ForkDigests.init(metadata.cfg, genesis_validators_root) | ||
|
||
test "HistoricalSummaries Encoding/Decoding and Verification": | ||
const file = testVectorDir & "historical_summaries_with_proof.yaml" | ||
let | ||
testCase = YamlHistoricalSummariesWithProof.loadFromYaml(file).valueOr: | ||
raiseAssert "Invalid test vector file: " & error | ||
|
||
contentKeyEncoded = testCase.content_key.hexToSeqByte() | ||
contentValueEncoded = testCase.content_value.hexToSeqByte() | ||
|
||
# Decode content and content key | ||
contentKey = decodeSsz(contentKeyEncoded, ContentKey) | ||
contentValue = | ||
decodeSsz(forkDigests[], contentValueEncoded, HistoricalSummariesWithProof) | ||
check: | ||
contentKey.isOk() | ||
contentValue.isOk() | ||
|
||
let summariesWithProof = contentValue.value() | ||
let root = hash_tree_root(summariesWithProof.historical_summaries) | ||
|
||
check: | ||
root.data == testCase.historical_summaries_root.hexToSeqByte() | ||
summariesWithProof.epoch == testCase.epoch | ||
verifyProof(summariesWithProof, Digest.fromHex(testCase.beacon_state_root)) | ||
|
||
# Encode content and content key | ||
let consensusFork = consensusForkAtEpoch(metadata.cfg, summariesWithProof.epoch) | ||
let forkDigest = atConsensusFork(forkDigests[], consensusFork) | ||
check: | ||
encodeSsz(summariesWithProof, forkDigest) == contentValueEncoded | ||
encode(contentKey.value()).asSeq() == contentKeyEncoded |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
13 changes: 13 additions & 0 deletions
13
fluffy/tests/history_network_tests/all_history_network_custom_chain_tests.nim
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
# Nimbus | ||
# Copyright (c) 2024 Status Research & Development GmbH | ||
# Licensed under either of | ||
# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0) | ||
# * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT) | ||
# at your option. This file may not be copied, modified, or distributed except according to those terms. | ||
|
||
{.warning[UnusedImport]: off.} | ||
|
||
# Note: These tests are separated because they require a custom merge block | ||
# number defined at compile time. Once runtime chain config gets added these | ||
# tests can be compiled together with all the other portal tests. | ||
import ./test_historical_hashes_accumulator, ./test_history_network |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.