From 061d7da67cd17bc0b17dab5e2f317ca6ccb5a67e Mon Sep 17 00:00:00 2001 From: Gustavo Valverde Date: Tue, 1 Mar 2022 10:50:18 -0400 Subject: [PATCH 1/6] feat(codeowners): add code reviewers to the repository (#3677) * feat(codeowners): add code owners in repository * fix(path): recently split out crate Co-authored-by: teor * fix(teams): use reviewers instead of owners name * fix(teams): wrong team name * docs: use correct default explanation * fix(path): add extra paths to devops team Co-authored-by: teor --- .github/CODEOWNERS | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 .github/CODEOWNERS diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 00000000000..b9acbc3286b --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,45 @@ +# These owners will be the default owners for everything in +# the repo. Unless a later match takes precedence, +# this teams will be requested for review when someone opens a pull request. +* @ZcashFoundation/network-reviewers @ZcashFoundation/cryptographic-reviewers + +# Network and Async Code +# To be reviewed by Teor, Janito, or Alfredo. +/tower-batch/ @ZcashFoundation/network-reviewers +/tower-fallback/ @ZcashFoundation/network-reviewers +/zebra-consensus/ @ZcashFoundation/network-reviewers +/zebra-network/ @ZcashFoundation/network-reviewers +/zebra-node-services/ @ZcashFoundation/network-reviewers +/zebra-state/ @ZcashFoundation/network-reviewers +/zebra-tests/src/mock_service.rs @ZcashFoundation/network-reviewers +/zebra-tests/src/service_extensions.rs @ZcashFoundation/network-reviewers +/zebra-tests/src/transcript.rs @ZcashFoundation/network-reviewers +/zebra-utils/ @ZcashFoundation/network-reviewers +/zebrad/src/commands/ @ZcashFoundation/network-reviewers +/zebrad/src/components/ @ZcashFoundation/network-reviewers + +# Cryptographic Code +# To be reviewed by Deirdre, Conrado, or Marek. +/zebra-consensus/src/primitives/ @ZcashFoundation/cryptographic-reviewers +/zebra-chain/src/primitives/ @ZcashFoundation/cryptographic-reviewers +/zebra-chain/src/orchard/ @ZcashFoundation/cryptographic-reviewers +/zebra-chain/src/sapling/ @ZcashFoundation/cryptographic-reviewers +/zebra-chain/src/sprout/ @ZcashFoundation/cryptographic-reviewers +/zebra-chain/src/transparent/ @ZcashFoundation/cryptographic-reviewers +/zebra-chain/src/history_tree.rs @ZcashFoundation/cryptographic-reviewers +/zebra-chain/src/history_tree/ @ZcashFoundation/cryptographic-reviewers + +# Devops Code +# To be reviewed by Gustavo, Deirdre, Teor, or Conrado. +/.github/ @ZcashFoundation/devops-reviewers +/docker/ @ZcashFoundation/devops-reviewers +cloudbuild.yaml @ZcashFoundation/devops-reviewers +codecov.yml @ZcashFoundation/devops-reviewers +.dockerignore @ZcashFoundation/devops-reviewers +codecov.yml @ZcashFoundation/devops-reviewers +firebase.json @ZcashFoundation/devops-reviewers +katex-header.html @ZcashFoundation/devops-reviewers + +# Unsafe Code +# To be reviewed by Teor, Janito, Conrado, or Marek. +/zebra-script/ @ZcashFoundation/unsafe-rust-reviewers From 30cc048166741366b917c9dfa717273d1555bf26 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 2 Mar 2022 00:49:09 +0000 Subject: [PATCH 2/6] build(deps): bump secp256k1 from 0.21.2 to 0.21.3 (#3632) Bumps [secp256k1](https://github.com/rust-bitcoin/rust-secp256k1) from 0.21.2 to 0.21.3. - [Release notes](https://github.com/rust-bitcoin/rust-secp256k1/releases) - [Changelog](https://github.com/rust-bitcoin/rust-secp256k1/blob/master/CHANGELOG.md) - [Commits](https://github.com/rust-bitcoin/rust-secp256k1/commits) --- updated-dependencies: - dependency-name: secp256k1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- zebra-chain/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 172c0f44b3b..0dc2058a7ae 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3698,9 +3698,9 @@ dependencies = [ [[package]] name = "secp256k1" -version = "0.21.2" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab7883017d5b21f011ef8040ea9c6c7ac90834c0df26a69e4c0b06276151f125" +checksum = "9c42e6f1735c5f00f51e43e28d6634141f2bcad10931b2609ddd74a86d751260" dependencies = [ "secp256k1-sys", "serde", diff --git a/zebra-chain/Cargo.toml b/zebra-chain/Cargo.toml index b021ef1a573..267b7e5fdb2 100644 --- a/zebra-chain/Cargo.toml +++ b/zebra-chain/Cargo.toml @@ -36,7 +36,7 @@ jubjub = "0.8.0" lazy_static = "1.4.0" rand_core = "0.6" ripemd160 = "0.9" -secp256k1 = { version = "0.21.2", features = ["serde"] } +secp256k1 = { version = "0.21.3", features = ["serde"] } serde = { version = "1", features = ["serde_derive", "rc"] } serde-big-array = "0.3.2" sha2 = { version = "0.9.9", features=["compress"] } From 41d61a62f99c68e79da1f5617dde4e1ca59b20ea Mon Sep 17 00:00:00 2001 From: teor Date: Wed, 2 Mar 2022 12:01:57 +1000 Subject: [PATCH 3/6] refactor(test): split lightwalletd test launch into separate methods (#3628) * fix(test): only run lightwalletd test when the ZEBRA_TEST_LIGHTWALLETD env var is set * fix(test): actually skip the test * doc(zebrad): add some test TODOs * doc(test): document zebrad-specific process launch methods * refactor(zebrad): split lightwalletd launch into its own testing methods * fix(zebrad/test): simplify file writing Co-authored-by: Janito Vaqueiro Ferreira Filho * refactor(zebrad/test): rename argument variables Co-authored-by: Janito Vaqueiro Ferreira Filho * lint(zebrad/tests): remove unused import * fix(zebrad/test): restore SocketAddr import that was removed on main * rustfmt * fix(zebrad/test): update integration test to match adityapk00/lightwalletd behaviour * rustfmt Co-authored-by: Janito Vaqueiro Ferreira Filho Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- zebrad/tests/acceptance.rs | 192 ++++++++++++++++++++++--------------- 1 file changed, 114 insertions(+), 78 deletions(-) diff --git a/zebrad/tests/acceptance.rs b/zebrad/tests/acceptance.rs index 267900411fd..7c857171889 100644 --- a/zebrad/tests/acceptance.rs +++ b/zebrad/tests/acceptance.rs @@ -27,7 +27,10 @@ use color_eyre::{ }; use tempfile::TempDir; -use std::{collections::HashSet, convert::TryInto, env, path::Path, path::PathBuf, time::Duration}; +use std::{ + collections::HashSet, convert::TryInto, env, net::SocketAddr, path::Path, path::PathBuf, + time::Duration, +}; use zebra_chain::{ block::Height, @@ -123,6 +126,8 @@ trait ZebradTestDirExt where Self: AsRef + Sized, { + // Zebra methods + /// Spawn `zebrad` with `args` as a child process in this test directory, /// potentially taking ownership of the tempdir for the duration of the /// child process. @@ -130,7 +135,7 @@ where /// If there is a config in the test directory, pass it to `zebrad`. fn spawn_child(self, args: &[&str]) -> Result>; - /// Create a config file and use it for all subsequently spawned processes. + /// Create a config file and use it for all subsequently spawned `zebrad` processes. /// Returns an error if the config already exists. /// /// If needed: @@ -139,14 +144,14 @@ where fn with_config(self, config: &mut ZebradConfig) -> Result; /// Create a config file with the exact contents of `config`, and use it for - /// all subsequently spawned processes. Returns an error if the config + /// all subsequently spawned `zebrad` processes. Returns an error if the config /// already exists. /// /// If needed: /// - recursively create directories for the config and state fn with_exact_config(self, config: &ZebradConfig) -> Result; - /// Overwrite any existing config file, and use the newly written config for + /// Overwrite any existing `zebrad` config file, and use the newly written config for /// all subsequently spawned processes. /// /// If needed: @@ -154,19 +159,39 @@ where /// - set `config.cache_dir` based on `self` fn replace_config(self, config: &mut ZebradConfig) -> Result; - /// `cache_dir` config update helper. + /// `cache_dir` config update helper for `zebrad`. /// /// If needed: /// - set the cache_dir in the config. fn cache_config_update_helper(self, config: &mut ZebradConfig) -> Result; - /// Config writing helper. + /// Config writing helper for `zebrad`. /// /// If needed: /// - recursively create directories for the config and state, /// /// Then write out the config. fn write_config_helper(self, config: &ZebradConfig) -> Result; + + // lightwalletd methods + + /// Spawn `lightwalletd` with `args` as a child process in this test directory, + /// potentially taking ownership of the tempdir for the duration of the + /// child process. + /// + /// By default, launch a working test instance with logging, and avoid port conflicts. + /// + /// # Panics + /// + /// If there is no lightwalletd config in the test directory. + fn spawn_lightwalletd_child(self, args: &[&str]) -> Result>; + + /// Create a config file and use it for all subsequently spawned `lightwalletd` processes. + /// Returns an error if the config already exists. + /// + /// If needed: + /// - recursively create directories for the config + fn with_lightwalletd_config(self, zebra_rpc_listener: SocketAddr) -> Result; } impl ZebradTestDirExt for T @@ -174,8 +199,8 @@ where Self: TestDirExt + AsRef + Sized, { fn spawn_child(self, args: &[&str]) -> Result> { - let path = self.as_ref(); - let default_config_path = path.join("zebrad.toml"); + let dir = self.as_ref(); + let default_config_path = dir.join("zebrad.toml"); if default_config_path.exists() { let mut extra_args: Vec<_> = vec![ @@ -247,6 +272,69 @@ where Ok(self) } + + fn spawn_lightwalletd_child(self, extra_args: &[&str]) -> Result> { + let dir = self.as_ref().to_owned(); + let default_config_path = dir.join("lightwalletd-zcash.conf"); + + assert!( + default_config_path.exists(), + "lightwalletd requires a config" + ); + + // By default, launch a working test instance with logging, + // and avoid port conflicts. + let mut args: Vec<_> = vec![ + // the fake zcashd conf we just wrote + "--zcash-conf-path", + default_config_path + .as_path() + .to_str() + .expect("Path is valid Unicode"), + // the lightwalletd cache directory + // + // TODO: create a sub-directory for lightwalletd + "--data-dir", + dir.to_str().expect("Path is valid Unicode"), + // log to standard output + // + // TODO: if lightwalletd needs to run on Windows, + // work out how to log to the terminal on all platforms + "--log-file", + "/dev/stdout", + // let the OS choose a random available wallet client port + "--grpc-bind-addr", + "127.0.0.1:0", + "--http-bind-addr", + "127.0.0.1:0", + // don't require a TLS certificate for the HTTP server + "--no-tls-very-insecure", + ]; + args.extend_from_slice(extra_args); + + self.spawn_child_with_command("lightwalletd", &args) + } + + fn with_lightwalletd_config(self, zebra_rpc_listener: SocketAddr) -> Result { + use std::fs; + + let lightwalletd_config = format!( + "\ + rpcbind={}\n\ + rpcport={}\n\ + ", + zebra_rpc_listener.ip(), + zebra_rpc_listener.port(), + ); + + let dir = self.as_ref(); + fs::create_dir_all(dir)?; + + let config_file = dir.join("lightwalletd-zcash.conf"); + fs::write(config_file, lightwalletd_config.as_bytes())?; + + Ok(self) + } } #[test] @@ -933,6 +1021,7 @@ fn sync_large_checkpoints_mempool_mainnet() -> Result<()> { #[test] #[ignore] fn full_sync_mainnet() { + // TODO: add "ZEBRA" at the start of this env var, to avoid clashes full_sync_test(Mainnet, "FULL_SYNC_MAINNET_TIMEOUT_MINUTES").expect("unexpected test failure"); } @@ -944,6 +1033,7 @@ fn full_sync_mainnet() { #[test] #[ignore] fn full_sync_testnet() { + // TODO: add "ZEBRA" at the start of this env var, to avoid clashes full_sync_test(Testnet, "FULL_SYNC_TESTNET_TIMEOUT_MINUTES").expect("unexpected test failure"); } @@ -1499,86 +1589,29 @@ fn lightwalletd_integration() -> Result<()> { // [Note on port conflict](#Note on port conflict) let listen_port = random_known_port(); let listen_ip = "127.0.0.1".parse().expect("hard-coded IP is valid"); - let listen_addr = SocketAddr::new(listen_ip, listen_port); + let zebra_rpc_listener = SocketAddr::new(listen_ip, listen_port); // Write a configuration that has the rpc listen_addr option set // TODO: split this config into another function? let mut config = default_test_config()?; - config.rpc.listen_addr = Some(listen_addr); + config.rpc.listen_addr = Some(zebra_rpc_listener); - let dir = testdir()?.with_config(&mut config)?; - let mut zebrad = dir.spawn_child(&["start"])?.with_timeout(LAUNCH_DELAY); + let zdir = testdir()?.with_config(&mut config)?; + let mut zebrad = zdir.spawn_child(&["start"])?.with_timeout(LAUNCH_DELAY); // Wait until `zebrad` has opened the RPC endpoint - zebrad - .expect_stdout_line_matches(format!("Opened RPC endpoint at {}", listen_addr).as_str())?; + zebrad.expect_stdout_line_matches( + format!("Opened RPC endpoint at {}", zebra_rpc_listener).as_str(), + )?; // Launch lightwalletd - // TODO: split this into another function // Write a fake zcashd configuration that has the rpcbind and rpcport options set - // TODO: split this into another function - let dir = testdir()?; - let lightwalletd_config = format!( - "\ - rpcbind={}\n\ - rpcport={}\n\ - ", - listen_ip, listen_port - ); - - use std::fs; - use std::io::Write; - - let path = dir.path().to_owned(); - - // TODO: split this into another function - if !config.state.ephemeral { - let cache_dir = path.join("state"); - fs::create_dir_all(&cache_dir)?; - } else { - fs::create_dir_all(&path)?; - } - - let config_file = path.join("lightwalletd-zcash.conf"); - fs::File::create(config_file)?.write_all(lightwalletd_config.as_bytes())?; - - let result = { - let default_config_path = path.join("lightwalletd-zcash.conf"); - - assert!( - default_config_path.exists(), - "lightwalletd requires a config" - ); - - dir.spawn_child_with_command( - "lightwalletd", - &[ - // the fake zcashd conf we just wrote - "--zcash-conf-path", - default_config_path - .as_path() - .to_str() - .expect("Path is valid Unicode"), - // the lightwalletd cache directory - // - // TODO: create a sub-directory for lightwalletd - "--data-dir", - path.to_str().expect("Path is valid Unicode"), - // log to standard output - "--log-file", - "/dev/stdout", - // randomise wallet client ports - "--grpc-bind-addr", - "127.0.0.1:0", - "--http-bind-addr", - "127.0.0.1:0", - // don't require a TLS certificate - "--no-tls-very-insecure", - ], - ) - }; + let ldir = testdir()?; + let ldir = ldir.with_lightwalletd_config(zebra_rpc_listener)?; + // Launch the lightwalletd process + let result = ldir.spawn_lightwalletd_child(&[]); let (lightwalletd, zebrad) = zebrad.kill_on_error(result)?; let mut lightwalletd = lightwalletd.with_timeout(LAUNCH_DELAY); @@ -1601,8 +1634,11 @@ fn lightwalletd_integration() -> Result<()> { // // TODO: update the missing method name when we add a new Zebra RPC - let result = lightwalletd - .expect_stdout_line_matches("Method not found.*error zcashd getbestblockhash rpc"); + // Note: + // zcash/lightwalletd calls getbestblockhash here, but + // adityapk00/lightwalletd calls getblock + let result = + lightwalletd.expect_stdout_line_matches("Method not found.*error zcashd getblock rpc"); let (_, zebrad) = zebrad.kill_on_error(result)?; let result = lightwalletd.expect_stdout_line_matches( "Lightwalletd died with a Fatal error. Check logfile for details", From 744aca9d45d25a0d00a138c1f5f2b95cf843e366 Mon Sep 17 00:00:00 2001 From: teor Date: Wed, 2 Mar 2022 12:44:39 +1000 Subject: [PATCH 4/6] 7. test(database): snapshot raw RocksDB column family data (#3630) * refactor(state): split database access into modules by Zebra types Also split the genesis block check from the genesis note commitment trees. * test(db): snapshot column family names * fix(db): assert that the default column family is empty on open and close * feat(test): apply `cargo insta` settings to all tests * doc(db/test): improve test docs * test(db): snapshot column family data for the empty state * refactor(db/test): split out the raw database snapshot * test(db): snapshot raw database for blocks 0-2 * test(db): initial serialized snapshot data for raw database * test(db): tweak snapshot file names * test(db): rename snapshots for consistency * test(db): store empty column families in a single snapshot * test(db): simplify snapshot files by combining empty snapshots * doc(db/test): put comment in a better place * refactor(db): fastmod assert_default_is_empty assert_default_cf_is_empty * doc(test): explain when insta settings are needed * fix(state/test): use the network to initialize the state Co-authored-by: Janito Vaqueiro Ferreira Filho Co-authored-by: Janito Vaqueiro Ferreira Filho --- Cargo.lock | 90 +++++++++++ zebra-state/Cargo.toml | 11 +- .../src/service/finalized_state/disk_db.rs | 34 ++++- .../service/finalized_state/disk_db/tests.rs | 15 ++ .../finalized_state/disk_format/tests.rs | 29 ++++ .../disk_format/tests/snapshot.rs | 140 ++++++++++++++++++ .../block_by_height_raw_data@mainnet_0.snap | 12 ++ .../block_by_height_raw_data@mainnet_1.snap | 16 ++ .../block_by_height_raw_data@mainnet_2.snap | 20 +++ .../block_by_height_raw_data@testnet_0.snap | 12 ++ .../block_by_height_raw_data@testnet_1.snap | 16 ++ .../block_by_height_raw_data@testnet_2.snap | 20 +++ .../tests/snapshots/column_family_names.snap | 25 ++++ .../empty_column_families@mainnet_0.snap | 18 +++ .../empty_column_families@mainnet_1.snap | 12 ++ .../empty_column_families@mainnet_2.snap | 12 ++ .../empty_column_families@no_blocks.snap | 24 +++ .../empty_column_families@testnet_0.snap | 18 +++ .../empty_column_families@testnet_1.snap | 12 ++ .../empty_column_families@testnet_2.snap | 12 ++ .../hash_by_height_raw_data@mainnet_0.snap | 12 ++ .../hash_by_height_raw_data@mainnet_1.snap | 16 ++ .../hash_by_height_raw_data@mainnet_2.snap | 20 +++ .../hash_by_height_raw_data@testnet_0.snap | 12 ++ .../hash_by_height_raw_data@testnet_1.snap | 16 ++ .../hash_by_height_raw_data@testnet_2.snap | 20 +++ .../height_by_hash_raw_data@mainnet_0.snap | 12 ++ .../height_by_hash_raw_data@mainnet_1.snap | 16 ++ .../height_by_hash_raw_data@mainnet_2.snap | 20 +++ .../height_by_hash_raw_data@testnet_0.snap | 12 ++ .../height_by_hash_raw_data@testnet_1.snap | 16 ++ .../height_by_hash_raw_data@testnet_2.snap | 20 +++ .../orchard_anchors_raw_data@mainnet_1.snap | 12 ++ .../orchard_anchors_raw_data@mainnet_2.snap | 12 ++ .../orchard_anchors_raw_data@testnet_1.snap | 12 ++ .../orchard_anchors_raw_data@testnet_2.snap | 12 ++ ...te_commitment_tree_raw_data@mainnet_0.snap | 12 ++ ...te_commitment_tree_raw_data@mainnet_1.snap | 12 ++ ...te_commitment_tree_raw_data@mainnet_2.snap | 12 ++ ...te_commitment_tree_raw_data@testnet_0.snap | 12 ++ ...te_commitment_tree_raw_data@testnet_1.snap | 12 ++ ...te_commitment_tree_raw_data@testnet_2.snap | 12 ++ .../sapling_anchors_raw_data@mainnet_1.snap | 12 ++ .../sapling_anchors_raw_data@mainnet_2.snap | 12 ++ .../sapling_anchors_raw_data@testnet_1.snap | 12 ++ .../sapling_anchors_raw_data@testnet_2.snap | 12 ++ ...te_commitment_tree_raw_data@mainnet_0.snap | 12 ++ ...te_commitment_tree_raw_data@mainnet_1.snap | 12 ++ ...te_commitment_tree_raw_data@mainnet_2.snap | 12 ++ ...te_commitment_tree_raw_data@testnet_0.snap | 12 ++ ...te_commitment_tree_raw_data@testnet_1.snap | 12 ++ ...te_commitment_tree_raw_data@testnet_2.snap | 12 ++ .../sprout_anchors_raw_data@mainnet_1.snap | 12 ++ .../sprout_anchors_raw_data@mainnet_2.snap | 12 ++ .../sprout_anchors_raw_data@testnet_1.snap | 12 ++ .../sprout_anchors_raw_data@testnet_2.snap | 12 ++ ...te_commitment_tree_raw_data@mainnet_0.snap | 12 ++ ...te_commitment_tree_raw_data@mainnet_1.snap | 12 ++ ...te_commitment_tree_raw_data@mainnet_2.snap | 12 ++ ...te_commitment_tree_raw_data@testnet_0.snap | 12 ++ ...te_commitment_tree_raw_data@testnet_1.snap | 12 ++ ...te_commitment_tree_raw_data@testnet_2.snap | 12 ++ ...p_chain_value_pool_raw_data@mainnet_1.snap | 12 ++ ...p_chain_value_pool_raw_data@mainnet_2.snap | 12 ++ ...p_chain_value_pool_raw_data@testnet_1.snap | 12 ++ ...p_chain_value_pool_raw_data@testnet_2.snap | 12 ++ .../tx_by_hash_raw_data@mainnet_1.snap | 12 ++ .../tx_by_hash_raw_data@mainnet_2.snap | 16 ++ .../tx_by_hash_raw_data@testnet_1.snap | 12 ++ .../tx_by_hash_raw_data@testnet_2.snap | 16 ++ .../utxo_by_outpoint_raw_data@mainnet_1.snap | 16 ++ .../utxo_by_outpoint_raw_data@mainnet_2.snap | 24 +++ .../utxo_by_outpoint_raw_data@testnet_1.snap | 16 ++ .../utxo_by_outpoint_raw_data@testnet_2.snap | 24 +++ zebra-test/Cargo.toml | 1 + zebra-test/src/lib.rs | 16 +- 76 files changed, 1293 insertions(+), 8 deletions(-) create mode 100644 zebra-state/src/service/finalized_state/disk_db/tests.rs create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/block_by_height_raw_data@mainnet_0.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/block_by_height_raw_data@mainnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/block_by_height_raw_data@mainnet_2.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/block_by_height_raw_data@testnet_0.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/block_by_height_raw_data@testnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/block_by_height_raw_data@testnet_2.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/column_family_names.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@mainnet_0.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@mainnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@mainnet_2.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@no_blocks.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@testnet_0.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@testnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@testnet_2.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/hash_by_height_raw_data@mainnet_0.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/hash_by_height_raw_data@mainnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/hash_by_height_raw_data@mainnet_2.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/hash_by_height_raw_data@testnet_0.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/hash_by_height_raw_data@testnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/hash_by_height_raw_data@testnet_2.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/height_by_hash_raw_data@mainnet_0.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/height_by_hash_raw_data@mainnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/height_by_hash_raw_data@mainnet_2.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/height_by_hash_raw_data@testnet_0.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/height_by_hash_raw_data@testnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/height_by_hash_raw_data@testnet_2.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_anchors_raw_data@mainnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_anchors_raw_data@mainnet_2.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_anchors_raw_data@testnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_anchors_raw_data@testnet_2.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_note_commitment_tree_raw_data@mainnet_0.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_note_commitment_tree_raw_data@mainnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_note_commitment_tree_raw_data@mainnet_2.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_note_commitment_tree_raw_data@testnet_0.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_note_commitment_tree_raw_data@testnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_note_commitment_tree_raw_data@testnet_2.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_anchors_raw_data@mainnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_anchors_raw_data@mainnet_2.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_anchors_raw_data@testnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_anchors_raw_data@testnet_2.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_note_commitment_tree_raw_data@mainnet_0.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_note_commitment_tree_raw_data@mainnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_note_commitment_tree_raw_data@mainnet_2.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_note_commitment_tree_raw_data@testnet_0.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_note_commitment_tree_raw_data@testnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_note_commitment_tree_raw_data@testnet_2.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_anchors_raw_data@mainnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_anchors_raw_data@mainnet_2.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_anchors_raw_data@testnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_anchors_raw_data@testnet_2.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_note_commitment_tree_raw_data@mainnet_0.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_note_commitment_tree_raw_data@mainnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_note_commitment_tree_raw_data@mainnet_2.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_note_commitment_tree_raw_data@testnet_0.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_note_commitment_tree_raw_data@testnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_note_commitment_tree_raw_data@testnet_2.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tip_chain_value_pool_raw_data@mainnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tip_chain_value_pool_raw_data@mainnet_2.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tip_chain_value_pool_raw_data@testnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tip_chain_value_pool_raw_data@testnet_2.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tx_by_hash_raw_data@mainnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tx_by_hash_raw_data@mainnet_2.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tx_by_hash_raw_data@testnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tx_by_hash_raw_data@testnet_2.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/utxo_by_outpoint_raw_data@mainnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/utxo_by_outpoint_raw_data@mainnet_2.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/utxo_by_outpoint_raw_data@testnet_1.snap create mode 100644 zebra-state/src/service/finalized_state/disk_format/tests/snapshots/utxo_by_outpoint_raw_data@testnet_2.snap diff --git a/Cargo.lock b/Cargo.lock index 0dc2058a7ae..ae76200f999 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -740,6 +740,19 @@ dependencies = [ "tracing-error", ] +[[package]] +name = "console" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28b32d32ca44b70c3e4acd7db1babf555fa026e385fb95f18028f88848b3c31" +dependencies = [ + "encode_unicode", + "libc", + "once_cell", + "terminal_size", + "winapi", +] + [[package]] name = "const-oid" version = "0.6.2" @@ -1291,6 +1304,12 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + [[package]] name = "encoding_rs" version = "0.8.26" @@ -1971,6 +1990,21 @@ dependencies = [ "str_stack", ] +[[package]] +name = "insta" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c0c443f6dceb3a1cb7607c87501aa91e4b9c976044f725c2a74ca2152c91a4" +dependencies = [ + "console", + "once_cell", + "ron", + "serde", + "serde_json", + "serde_yaml", + "similar", +] + [[package]] name = "instant" version = "0.1.9" @@ -2198,6 +2232,12 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "linked-hash-map" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" + [[package]] name = "lock_api" version = "0.4.2" @@ -3511,6 +3551,17 @@ dependencies = [ "librocksdb-sys", ] +[[package]] +name = "ron" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b861ecaade43ac97886a512b360d01d66be9f41f3c61088b42cedf92e03d678" +dependencies = [ + "base64", + "bitflags", + "serde", +] + [[package]] name = "rsa" version = "0.5.0" @@ -3914,6 +3965,18 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_yaml" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a521f2940385c165a24ee286aa8599633d162077a54bdcae2a6fd5a7bfa7a0" +dependencies = [ + "indexmap", + "ryu", + "serde", + "yaml-rust", +] + [[package]] name = "sha-1" version = "0.9.8" @@ -4002,6 +4065,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f054c6c1a6e95179d6f23ed974060dcefb2d9388bb7256900badad682c499de4" +[[package]] +name = "similar" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e24979f63a11545f5f2c60141afe249d4f19f84581ea2138065e400941d83d3" + [[package]] name = "simple_asn1" version = "0.6.1" @@ -4235,6 +4304,16 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "terminal_size" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "textwrap" version = "0.11.0" @@ -5446,6 +5525,15 @@ dependencies = [ "lzma-sys", ] +[[package]] +name = "yaml-rust" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" +dependencies = [ + "linked-hash-map", +] + [[package]] name = "zcash_encoding" version = "0.0.0" @@ -5737,6 +5825,7 @@ dependencies = [ "futures", "halo2", "hex", + "insta", "itertools 0.10.3", "jubjub", "lazy_static", @@ -5766,6 +5855,7 @@ dependencies = [ "color-eyre", "futures", "hex", + "insta", "lazy_static", "once_cell", "owo-colors 3.2.0", diff --git a/zebra-state/Cargo.toml b/zebra-state/Cargo.toml index d731a40a0df..5b287572a05 100644 --- a/zebra-state/Cargo.toml +++ b/zebra-state/Cargo.toml @@ -36,14 +36,17 @@ zebra-test = { path = "../zebra-test/", optional = true } [dev-dependencies] color-eyre = "0.5.11" once_cell = "1.9" -# TODO: replace w/ crate version when released: https://github.com/ZcashFoundation/zebra/issues/2083 -# Note: if updating this, also update the workspace Cargo.toml to match. -halo2 = "=0.1.0-beta.1" +insta = { version = "1.12.0", features = ["ron"] } itertools = "0.10.3" -jubjub = "0.8.0" proptest = "0.10.1" proptest-derive = "0.3.0" spandoc = "0.2" + +# TODO: replace w/ crate version when released: https://github.com/ZcashFoundation/zebra/issues/2083 +# Note: if updating this, also update the workspace Cargo.toml to match. +halo2 = "=0.1.0-beta.1" +jubjub = "0.8.0" + tokio = { version = "1.16.1", features = ["full"] } zebra-chain = { path = "../zebra-chain", features = ["proptest-impl"] } diff --git a/zebra-state/src/service/finalized_state/disk_db.rs b/zebra-state/src/service/finalized_state/disk_db.rs index e682d457954..f1ff87c1fda 100644 --- a/zebra-state/src/service/finalized_state/disk_db.rs +++ b/zebra-state/src/service/finalized_state/disk_db.rs @@ -20,6 +20,9 @@ use crate::{ Config, }; +#[cfg(any(test, feature = "proptest-impl"))] +mod tests; + /// Wrapper struct to ensure low-level database access goes through the correct API. pub struct DiskDb { /// The inner RocksDB database. @@ -195,11 +198,16 @@ impl DiskDb { Ok(db) => { info!("Opened Zebra state cache at {}", path.display()); - DiskDb { + let db = DiskDb { db, ephemeral: config.ephemeral, - } + }; + + db.assert_default_cf_is_empty(); + + db } + // TODO: provide a different hint if the disk is full, see #1623 Err(e) => panic!( "Opening database {:?} failed: {:?}. \ @@ -210,6 +218,8 @@ impl DiskDb { } } + // Read methods + /// Returns the `Path` where the files used by this database are located. pub fn path(&self) -> &Path { self.db.path() @@ -240,12 +250,16 @@ impl DiskDb { !self.forward_iterator(cf_handle).valid() } + // Write methods + /// Writes `batch` to the database. pub fn write(&self, batch: DiskWriteBatch) -> Result<(), rocksdb::Error> { // TODO: move writing to the database to a blocking thread (#2188) self.db.write(batch.batch) } + // Private methods + /// Returns the database options for the finalized state database. fn options() -> rocksdb::Options { let mut opts = rocksdb::Options::default(); @@ -371,6 +385,8 @@ impl DiskDb { /// TODO: make private after the stop height check has moved to the syncer (#3442) /// move shutting down the database to a blocking thread (#2188) pub(crate) fn shutdown(&mut self) { + self.assert_default_cf_is_empty(); + // Drop isn't guaranteed to run, such as when we panic, or if the tokio shutdown times out. // // Zebra's data should be fine if we don't clean up, because: @@ -442,6 +458,20 @@ impl DiskDb { info!(?res, "removed temporary database files"); } } + + /// Check that the "default" column family is empty. + /// + /// # Panics + /// + /// If Zebra has a bug where it is storing data in the wrong column family. + fn assert_default_cf_is_empty(&self) { + if let Some(default_cf) = self.cf_handle("default") { + assert!( + self.is_empty(default_cf), + "Zebra should not store data in the 'default' column family" + ); + } + } } impl Drop for DiskDb { diff --git a/zebra-state/src/service/finalized_state/disk_db/tests.rs b/zebra-state/src/service/finalized_state/disk_db/tests.rs new file mode 100644 index 00000000000..1b540fbe5ef --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_db/tests.rs @@ -0,0 +1,15 @@ +//! Tests and test methods for low-level RocksDB access. + +#![allow(dead_code)] + +use crate::service::finalized_state::DiskDb; + +impl DiskDb { + /// Returns a list of column family names in this database. + pub fn list_cf(&self) -> Result, rocksdb::Error> { + let opts = DiskDb::options(); + let path = self.path(); + + rocksdb::DB::list_cf(&opts, path) + } +} diff --git a/zebra-state/src/service/finalized_state/disk_format/tests.rs b/zebra-state/src/service/finalized_state/disk_format/tests.rs index 1c063b46f0c..4680764c453 100644 --- a/zebra-state/src/service/finalized_state/disk_format/tests.rs +++ b/zebra-state/src/service/finalized_state/disk_format/tests.rs @@ -1,3 +1,32 @@ //! Tests for the finalized disk format. +use serde::{Deserialize, Serialize}; + mod prop; +mod snapshot; + +/// A formatting struct for raw key-value data +#[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] +struct KV { + /// The raw key bytes, as a hexadecimal-encoded string. + k: String, + + /// The raw value bytes, as a hexadecimal-encoded string. + v: String, +} + +impl KV { + /// Create a new `KV` from raw key-value data. + fn new(key: K, value: V) -> KV + where + K: AsRef<[u8]>, + V: AsRef<[u8]>, + { + KV::new_hex(hex::encode(key), hex::encode(value)) + } + + /// Create a new `KV` from hex-encoded key-value data. + fn new_hex(key: String, value: String) -> KV { + KV { k: key, v: value } + } +} diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs b/zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs new file mode 100644 index 00000000000..2223f0dfc58 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs @@ -0,0 +1,140 @@ +//! Data snapshot tests for RocksDB column families. +//! +//! These tests check: +//! - the name of each column family +//! - the number of key-value entries +//! - the bytes in each key and value +//! +//! These tests currently use fixed test vectors. +//! +//! # Fixing Test Failures +//! +//! If this test fails, run `cargo insta review` to update the test snapshots, +//! then commit the `test_*.snap` files using git. +//! +//! # TODO +//! +//! Test shielded data, and data activated in Overwinter and later network upgrades. + +use std::sync::Arc; + +use zebra_chain::{ + block::Block, + parameters::Network::{self, *}, + serialization::ZcashDeserializeInto, +}; + +use crate::{ + service::finalized_state::{disk_db::DiskDb, disk_format::tests::KV, FinalizedState}, + Config, +}; + +/// Snapshot test for RocksDB column families, and their key-value data. +/// +/// These snapshots contain the `default` column family, but it is not used by Zebra. +#[test] +fn test_raw_rocksdb_column_families() { + zebra_test::init(); + + test_raw_rocksdb_column_families_with_network(Mainnet); + test_raw_rocksdb_column_families_with_network(Testnet); +} + +/// Snapshot raw column families for `network`. +/// +/// See [`test_raw_rocksdb_column_families`]. +fn test_raw_rocksdb_column_families_with_network(network: Network) { + let mut net_suffix = network.to_string(); + net_suffix.make_ascii_lowercase(); + + let mut state = FinalizedState::new(&Config::ephemeral(), network); + + // Snapshot the column family names + let mut cf_names = state.db.list_cf().expect("empty database is valid"); + + // The order that RocksDB returns column families is irrelevant, + // because we always access them by name. + cf_names.sort(); + + // Assert that column family names are the same, regardless of the network. + // Later, we check they are also the same regardless of the block height. + insta::assert_ron_snapshot!("column_family_names", cf_names); + + // Assert that empty databases are the same, regardless of the network. + let mut settings = insta::Settings::clone_current(); + settings.set_snapshot_suffix("no_blocks"); + + settings.bind(|| snapshot_raw_rocksdb_column_family_data(&state.db, &cf_names)); + + // Snapshot raw database data for: + // - mainnet and testnet + // - genesis, block 1, and block 2 + let blocks = match network { + Mainnet => &*zebra_test::vectors::CONTINUOUS_MAINNET_BLOCKS, + Testnet => &*zebra_test::vectors::CONTINUOUS_TESTNET_BLOCKS, + }; + + // We limit the number of blocks, because the serialized data is a few kilobytes per block. + for height in 0..=2 { + let block: Arc = blocks + .get(&height) + .expect("block height has test data") + .zcash_deserialize_into() + .expect("test data deserializes"); + + state + .commit_finalized_direct(block.into(), "snapshot tests") + .expect("test block is valid"); + + let mut settings = insta::Settings::clone_current(); + settings.set_snapshot_suffix(format!("{}_{}", net_suffix, height)); + + settings.bind(|| snapshot_raw_rocksdb_column_family_data(&state.db, &cf_names)); + } +} + +/// Snapshot the data in each column family, using `cargo insta` and RON serialization. +fn snapshot_raw_rocksdb_column_family_data(db: &DiskDb, original_cf_names: &[String]) { + let mut new_cf_names = db.list_cf().expect("empty database is valid"); + new_cf_names.sort(); + + // Assert that column family names are the same, regardless of the network or block height. + assert_eq!( + original_cf_names, new_cf_names, + "unexpected extra column families", + ); + + let mut empty_column_families = Vec::new(); + + // Now run the data snapshots + for cf_name in original_cf_names { + let cf_handle = db + .cf_handle(cf_name) + .expect("RocksDB API provides correct names"); + + let mut cf_iter = db.forward_iterator(cf_handle); + + // The default raw data serialization is very verbose, so we hex-encode the bytes. + let cf_data: Vec = cf_iter + .by_ref() + .map(|(key, value)| KV::new(key, value)) + .collect(); + + if cf_name == "default" { + assert_eq!(cf_data.len(), 0, "default column family is never used"); + } else if cf_data.is_empty() { + // distinguish column family names from empty column families + empty_column_families.push(format!("{}: no entries", cf_name)); + } else { + insta::assert_ron_snapshot!(format!("{}_raw_data", cf_name), cf_data); + } + + assert_eq!( + cf_iter.status(), + Ok(()), + "unexpected column family iterator error", + ); + } + + insta::assert_ron_snapshot!("empty_column_families", empty_column_families); +} diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/block_by_height_raw_data@mainnet_0.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/block_by_height_raw_data@mainnet_0.snap new file mode 100644 index 00000000000..6c8b5b6d8ac --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/block_by_height_raw_data@mainnet_0.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000000", + v: "040000000000000000000000000000000000000000000000000000000000000000000000db4d7a85b768123f1dff1d4c4cece70083b2d27e117b4ac2e31d087988a5eac4000000000000000000000000000000000000000000000000000000000000000090041358ffff071f5712000000000000000000000000000000000000000000000000000000000000fd4005000a889f00854b8665cd555f4656f68179d31ccadc1b1f7fb0952726313b16941da348284d67add4686121d4e3d930160c1348d8191c25f12b267a6a9c131b5031cbf8af1f79c9d513076a216ec87ed045fa966e01214ed83ca02dc1797270a454720d3206ac7d931a0a680c5c5e099057592570ca9bdf6058343958b31901fce1a15a4f38fd347750912e14004c73dfe588b903b6c03166582eeaf30529b14072a7b3079e3a684601b9b3024054201f7440b0ee9eb1a7120ff43f713735494aa27b1f8bab60d7f398bca14f6abb2adbf29b04099121438a7974b078a11635b594e9170f1086140b4173822dd697894483e1c6b4e8b8dcd5cb12ca4903bc61e108871d4d915a9093c18ac9b02b6716ce1013ca2c1174e319c1a570215bc9ab5f7564765f7be20524dc3fdf8aa356fd94d445e05ab165ad8bb4a0db096c097618c81098f91443c719416d39837af6de85015dca0de89462b1d8386758b2cf8a99e00953b308032ae44c35e05eb71842922eb69797f68813b59caf266cb6c213569ae3280505421a7e3a0a37fdf8e2ea354fc5422816655394a9454bac542a9298f176e211020d63dee6852c40de02267e2fc9d5e1ff2ad9309506f02a1a71a0501b16d0d36f70cdfd8de78116c0c506ee0b8ddfdeb561acadf31746b5a9dd32c21930884397fb1682164cb565cc14e089d66635a32618f7eb05fe05082b8a3fae620571660a6b89886eac53dec109d7cbb6930ca698a168f301a950be152da1be2b9e07516995e20baceebecb5579d7cdbc16d09f3a50cb3c7dffe33f26686d4ff3f8946ee6475e98cf7b3cf9062b6966e838f865ff3de5fb064a37a21da7bb8dfd2501a29e184f207caaba364f36f2329a77515dcb710e29ffbf73e2bbd773fab1f9a6b005567affff605c132e4e4dd69f36bd201005458cfbd2c658701eb2a700251cefd886b1e674ae816d3f719bac64be649c172ba27a4fd55947d95d53ba4cbc73de97b8af5ed4840b659370c556e7376457f51e5ebb66018849923db82c1c9a819f173cccdb8f3324b239609a300018d0fb094adf5bd7cbb3834c69e6d0b3798065c525b20f040e965e1a161af78ff7561cd874f5f1b75aa0bc77f720589e1b810f831eac5073e6dd46d00a2793f70f7427f0f798f2f53a67e615e65d356e66fe40609a958a05edb4c175bcc383ea0530e67ddbe479a898943c6e3074c6fcc252d6014de3a3d292b03f0d88d312fe221be7be7e3c59d07fa0f2f4029e364f1f355c5d01fa53770d0cd76d82bf7e60f6903bc1beb772e6fde4a70be51d9c7e03c8d6d8dfb361a234ba47c470fe630820bbd920715621b9fbedb49fcee165ead0875e6c2b1af16f50b5d6140cc981122fcbcf7c5a4e3772b3661b628e08380abc545957e59f634705b1bbde2f0b4e055a5ec5676d859be77e20962b645e051a880fddb0180b4555789e1f9344a436a84dc5579e2553f1e5fb0a599c137be36cabbed0319831fea3fddf94ddc7971e4bcf02cdc93294a9aab3e3b13e3b058235b4f4ec06ba4ceaa49d675b4ba80716f3bc6976b1fbf9c8bf1f3e3a4dc1cd83ef9cf816667fb94f1e923ff63fef072e6a19321e4812f96cb0ffa864da50ad74deb76917a336f31dce03ed5f0303aad5e6a83634f9fcc371096f8288b8f02ddded5ff1bb9d49331e4a84dbe1543164438fde9ad71dab024779dcdde0b6602b5ae0a6265c14b94edd83b37403f4b78fcd2ed555b596402c28ee81d87a909c4e8722b30c71ecdd861b05f61f8b1231795c76adba2fdefa451b283a5d527955b9f3de1b9828e7b2e74123dd47062ddcc09b05e7fa13cb2212a6fdbc65d7e852cec463ec6fd929f5b8483cf3052113b13dac91b69f49d1b7d1aec01c4a68e41ce1570101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff071f0104455a6361736830623963346565663862376363343137656535303031653335303039383462366665613335363833613763616331343161303433633432303634383335643334ffffffff010000000000000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/block_by_height_raw_data@mainnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/block_by_height_raw_data@mainnet_1.snap new file mode 100644 index 00000000000..30ec8f73bd2 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/block_by_height_raw_data@mainnet_1.snap @@ -0,0 +1,16 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000000", + v: "040000000000000000000000000000000000000000000000000000000000000000000000db4d7a85b768123f1dff1d4c4cece70083b2d27e117b4ac2e31d087988a5eac4000000000000000000000000000000000000000000000000000000000000000090041358ffff071f5712000000000000000000000000000000000000000000000000000000000000fd4005000a889f00854b8665cd555f4656f68179d31ccadc1b1f7fb0952726313b16941da348284d67add4686121d4e3d930160c1348d8191c25f12b267a6a9c131b5031cbf8af1f79c9d513076a216ec87ed045fa966e01214ed83ca02dc1797270a454720d3206ac7d931a0a680c5c5e099057592570ca9bdf6058343958b31901fce1a15a4f38fd347750912e14004c73dfe588b903b6c03166582eeaf30529b14072a7b3079e3a684601b9b3024054201f7440b0ee9eb1a7120ff43f713735494aa27b1f8bab60d7f398bca14f6abb2adbf29b04099121438a7974b078a11635b594e9170f1086140b4173822dd697894483e1c6b4e8b8dcd5cb12ca4903bc61e108871d4d915a9093c18ac9b02b6716ce1013ca2c1174e319c1a570215bc9ab5f7564765f7be20524dc3fdf8aa356fd94d445e05ab165ad8bb4a0db096c097618c81098f91443c719416d39837af6de85015dca0de89462b1d8386758b2cf8a99e00953b308032ae44c35e05eb71842922eb69797f68813b59caf266cb6c213569ae3280505421a7e3a0a37fdf8e2ea354fc5422816655394a9454bac542a9298f176e211020d63dee6852c40de02267e2fc9d5e1ff2ad9309506f02a1a71a0501b16d0d36f70cdfd8de78116c0c506ee0b8ddfdeb561acadf31746b5a9dd32c21930884397fb1682164cb565cc14e089d66635a32618f7eb05fe05082b8a3fae620571660a6b89886eac53dec109d7cbb6930ca698a168f301a950be152da1be2b9e07516995e20baceebecb5579d7cdbc16d09f3a50cb3c7dffe33f26686d4ff3f8946ee6475e98cf7b3cf9062b6966e838f865ff3de5fb064a37a21da7bb8dfd2501a29e184f207caaba364f36f2329a77515dcb710e29ffbf73e2bbd773fab1f9a6b005567affff605c132e4e4dd69f36bd201005458cfbd2c658701eb2a700251cefd886b1e674ae816d3f719bac64be649c172ba27a4fd55947d95d53ba4cbc73de97b8af5ed4840b659370c556e7376457f51e5ebb66018849923db82c1c9a819f173cccdb8f3324b239609a300018d0fb094adf5bd7cbb3834c69e6d0b3798065c525b20f040e965e1a161af78ff7561cd874f5f1b75aa0bc77f720589e1b810f831eac5073e6dd46d00a2793f70f7427f0f798f2f53a67e615e65d356e66fe40609a958a05edb4c175bcc383ea0530e67ddbe479a898943c6e3074c6fcc252d6014de3a3d292b03f0d88d312fe221be7be7e3c59d07fa0f2f4029e364f1f355c5d01fa53770d0cd76d82bf7e60f6903bc1beb772e6fde4a70be51d9c7e03c8d6d8dfb361a234ba47c470fe630820bbd920715621b9fbedb49fcee165ead0875e6c2b1af16f50b5d6140cc981122fcbcf7c5a4e3772b3661b628e08380abc545957e59f634705b1bbde2f0b4e055a5ec5676d859be77e20962b645e051a880fddb0180b4555789e1f9344a436a84dc5579e2553f1e5fb0a599c137be36cabbed0319831fea3fddf94ddc7971e4bcf02cdc93294a9aab3e3b13e3b058235b4f4ec06ba4ceaa49d675b4ba80716f3bc6976b1fbf9c8bf1f3e3a4dc1cd83ef9cf816667fb94f1e923ff63fef072e6a19321e4812f96cb0ffa864da50ad74deb76917a336f31dce03ed5f0303aad5e6a83634f9fcc371096f8288b8f02ddded5ff1bb9d49331e4a84dbe1543164438fde9ad71dab024779dcdde0b6602b5ae0a6265c14b94edd83b37403f4b78fcd2ed555b596402c28ee81d87a909c4e8722b30c71ecdd861b05f61f8b1231795c76adba2fdefa451b283a5d527955b9f3de1b9828e7b2e74123dd47062ddcc09b05e7fa13cb2212a6fdbc65d7e852cec463ec6fd929f5b8483cf3052113b13dac91b69f49d1b7d1aec01c4a68e41ce1570101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff071f0104455a6361736830623963346565663862376363343137656535303031653335303039383462366665613335363833613763616331343161303433633432303634383335643334ffffffff010000000000000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000", + ), + KV( + k: "00000001", + v: "0400000008ce3d9731b000c08338455c8a4a6bd05da16e26b11daa1b917184ece80f04000946edb9c083c9942d92305444527765fad789c438c717783276a9f7fbf61b850000000000000000000000000000000000000000000000000000000000000000ac7a1358ffff071f7534e8cf161ff2e49d54bdb3bfbcde8cdbf2fc5963c9ec7d86aed4a67e975790fd4005002b2ee0d2f5d0c1ebf5a265b6f5b428f2fdc9aaea07078a6c5cab4f1bbfcd56489863deae6ea3fd8d3d0762e8e5295ff2670c9e90d8e8c68a54a40927e82a65e1d44ced20d835818e172d7b7f5ffe0245d0c3860a3f11af5658d68b6a7253b4684ffef5242fefa77a0bfc3437e8d94df9dc57510f5a128e676dd9ddf23f0ef75b460090f507499585541ab53a470c547ea02723d3a979930941157792c4362e42d3b9faca342a5c05a56909b046b5e92e2870fca7c932ae2c2fdd97d75b6e0ecb501701c1250246093c73efc5ec2838aeb80b59577741aa5ccdf4a631b79f70fc419e28714fa22108d991c29052b2f5f72294c355b57504369313470ecdd8e0ae97fc48e243a38c2ee7315bb05b7de9602047e97449c81e46746513221738dc729d7077a1771cea858865d85261e71e82003ccfbba2416358f023251206d6ef4c5596bc35b2b5bce3e9351798aa2c9904723034e5815c7512d260cc957df5db6adf9ed7272483312d1e68c60955a944e713355089876a704aef06359238f6de5a618f7bd0b4552ba72d05a6165e582f62d55ff2e1b76991971689ba3bee16a520fd85380a6e5a31de4dd4654d561101ce0ca390862d5774921eae2c284008692e9e08562144e8aa1f399a9d3fab0c4559c1f12bc945e626f7a89668613e8829767f4116ee9a4f832cf7c3ade3a7aba8cb04de39edd94d0d05093ed642adf9fbd9d373a80832ffd1c62034e4341546b3515f0e42e6d8570393c6754be5cdb7753b4709527d3f164aebf3d315934f7b3736a1b31052f6cc5699758950331163b3df05b9772e9bf99c8c77f8960e10a15edb06200106f45742d740c422c86b7e4f5a52d3732aa79ee54cfc92f76e03c268ae226477c19924e733caf95b8f350233a5312f4ed349d3ad76f032358f83a6d0d6f83b2a456742aad7f3e615fa72286300f0ea1c9793831ef3a5a4ae08640a6e32f53d1cba0be284b25e923d0d110ba227e54725632efcbbe17c05a9cde976504f6aece0c461b562cfae1b85d5f6782ee27b3e332ac0775f681682ce524b32889f1dc4231226f1aada0703beaf8d41732c9647a0a940a86f8a1be7f239c44fcaa7ed7a055506bdbe1df848f9e047226bee1b6d788a03f6e352eead99b419cfc41741942dbeb7a5c55788d5a3e636d8aab7b36b4db71d16700373bbc1cdeba8f9b1db10bf39a621bc737ea4f4e333698d6e09b51ac7a97fb6fd117ccad1d6b6b3a7451699d5bfe448650396d7b58867b3b0872be13ad0b43da267df0ad77025155f04e20c56d6a9befb3e9c7d23b82cbf3a534295ebda540682cc81be9273781b92519c858f9c25294fbacf75c3b3c15bda6d36de1c83336f93e96910dbdcb190d6ef123c98565ff6df1e903f57d4e4df167ba6b829d6d9713eb2126b0cf869940204137babcc6a1b7cb2f0b94318a7460e5d1a605c249bd2e72123ebad332332c18adcb285ed8874dbde084ebcd4f744465350d57110f037fffed1569d642c258749e65b0d13e117eaa37014a769b5ab479b7c77178880e77099f999abe712e543dbbf626ca9bcfddc42ff2f109d21c8bd464894e55ae504fdf81e1a7694180225da7dac8879abd1036cf26bb50532b8cf138b337a1a1bd1a43f8dd70b7399e2690c8e7a5a1fe099026b8f2a6f65fc0dbedda15ba65e0abd66c7176fb426980549892b4817de78e345a7aeab05744c3def4a2f283b4255b02c91c1af7354a368c67a11703c642a385c7453131ce3a78b24c5e22ab7e136a38498ce82082181884418cb4d6c2920f258a3ad20cfbe7104af1c6c6cb5e58bf29a9901721ad19c0a260cd09a3a772443a45aea4a5c439a95834ef5dc2e26343278947b7b796f796ae9bcadb29e2899a1d7313e6f7bfb6f8b0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff025100ffffffff0250c30000000000002321027a46eb513588b01b37ea24303f4b628afd12cc20df789fede0921e43cad3e875acd43000000000000017a9147d46a730d31f97b1930d3368a967c309bd4d136a8700000000", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/block_by_height_raw_data@mainnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/block_by_height_raw_data@mainnet_2.snap new file mode 100644 index 00000000000..e7bfcd2f612 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/block_by_height_raw_data@mainnet_2.snap @@ -0,0 +1,20 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000000", + v: "040000000000000000000000000000000000000000000000000000000000000000000000db4d7a85b768123f1dff1d4c4cece70083b2d27e117b4ac2e31d087988a5eac4000000000000000000000000000000000000000000000000000000000000000090041358ffff071f5712000000000000000000000000000000000000000000000000000000000000fd4005000a889f00854b8665cd555f4656f68179d31ccadc1b1f7fb0952726313b16941da348284d67add4686121d4e3d930160c1348d8191c25f12b267a6a9c131b5031cbf8af1f79c9d513076a216ec87ed045fa966e01214ed83ca02dc1797270a454720d3206ac7d931a0a680c5c5e099057592570ca9bdf6058343958b31901fce1a15a4f38fd347750912e14004c73dfe588b903b6c03166582eeaf30529b14072a7b3079e3a684601b9b3024054201f7440b0ee9eb1a7120ff43f713735494aa27b1f8bab60d7f398bca14f6abb2adbf29b04099121438a7974b078a11635b594e9170f1086140b4173822dd697894483e1c6b4e8b8dcd5cb12ca4903bc61e108871d4d915a9093c18ac9b02b6716ce1013ca2c1174e319c1a570215bc9ab5f7564765f7be20524dc3fdf8aa356fd94d445e05ab165ad8bb4a0db096c097618c81098f91443c719416d39837af6de85015dca0de89462b1d8386758b2cf8a99e00953b308032ae44c35e05eb71842922eb69797f68813b59caf266cb6c213569ae3280505421a7e3a0a37fdf8e2ea354fc5422816655394a9454bac542a9298f176e211020d63dee6852c40de02267e2fc9d5e1ff2ad9309506f02a1a71a0501b16d0d36f70cdfd8de78116c0c506ee0b8ddfdeb561acadf31746b5a9dd32c21930884397fb1682164cb565cc14e089d66635a32618f7eb05fe05082b8a3fae620571660a6b89886eac53dec109d7cbb6930ca698a168f301a950be152da1be2b9e07516995e20baceebecb5579d7cdbc16d09f3a50cb3c7dffe33f26686d4ff3f8946ee6475e98cf7b3cf9062b6966e838f865ff3de5fb064a37a21da7bb8dfd2501a29e184f207caaba364f36f2329a77515dcb710e29ffbf73e2bbd773fab1f9a6b005567affff605c132e4e4dd69f36bd201005458cfbd2c658701eb2a700251cefd886b1e674ae816d3f719bac64be649c172ba27a4fd55947d95d53ba4cbc73de97b8af5ed4840b659370c556e7376457f51e5ebb66018849923db82c1c9a819f173cccdb8f3324b239609a300018d0fb094adf5bd7cbb3834c69e6d0b3798065c525b20f040e965e1a161af78ff7561cd874f5f1b75aa0bc77f720589e1b810f831eac5073e6dd46d00a2793f70f7427f0f798f2f53a67e615e65d356e66fe40609a958a05edb4c175bcc383ea0530e67ddbe479a898943c6e3074c6fcc252d6014de3a3d292b03f0d88d312fe221be7be7e3c59d07fa0f2f4029e364f1f355c5d01fa53770d0cd76d82bf7e60f6903bc1beb772e6fde4a70be51d9c7e03c8d6d8dfb361a234ba47c470fe630820bbd920715621b9fbedb49fcee165ead0875e6c2b1af16f50b5d6140cc981122fcbcf7c5a4e3772b3661b628e08380abc545957e59f634705b1bbde2f0b4e055a5ec5676d859be77e20962b645e051a880fddb0180b4555789e1f9344a436a84dc5579e2553f1e5fb0a599c137be36cabbed0319831fea3fddf94ddc7971e4bcf02cdc93294a9aab3e3b13e3b058235b4f4ec06ba4ceaa49d675b4ba80716f3bc6976b1fbf9c8bf1f3e3a4dc1cd83ef9cf816667fb94f1e923ff63fef072e6a19321e4812f96cb0ffa864da50ad74deb76917a336f31dce03ed5f0303aad5e6a83634f9fcc371096f8288b8f02ddded5ff1bb9d49331e4a84dbe1543164438fde9ad71dab024779dcdde0b6602b5ae0a6265c14b94edd83b37403f4b78fcd2ed555b596402c28ee81d87a909c4e8722b30c71ecdd861b05f61f8b1231795c76adba2fdefa451b283a5d527955b9f3de1b9828e7b2e74123dd47062ddcc09b05e7fa13cb2212a6fdbc65d7e852cec463ec6fd929f5b8483cf3052113b13dac91b69f49d1b7d1aec01c4a68e41ce1570101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff071f0104455a6361736830623963346565663862376363343137656535303031653335303039383462366665613335363833613763616331343161303433633432303634383335643334ffffffff010000000000000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000", + ), + KV( + k: "00000001", + v: "0400000008ce3d9731b000c08338455c8a4a6bd05da16e26b11daa1b917184ece80f04000946edb9c083c9942d92305444527765fad789c438c717783276a9f7fbf61b850000000000000000000000000000000000000000000000000000000000000000ac7a1358ffff071f7534e8cf161ff2e49d54bdb3bfbcde8cdbf2fc5963c9ec7d86aed4a67e975790fd4005002b2ee0d2f5d0c1ebf5a265b6f5b428f2fdc9aaea07078a6c5cab4f1bbfcd56489863deae6ea3fd8d3d0762e8e5295ff2670c9e90d8e8c68a54a40927e82a65e1d44ced20d835818e172d7b7f5ffe0245d0c3860a3f11af5658d68b6a7253b4684ffef5242fefa77a0bfc3437e8d94df9dc57510f5a128e676dd9ddf23f0ef75b460090f507499585541ab53a470c547ea02723d3a979930941157792c4362e42d3b9faca342a5c05a56909b046b5e92e2870fca7c932ae2c2fdd97d75b6e0ecb501701c1250246093c73efc5ec2838aeb80b59577741aa5ccdf4a631b79f70fc419e28714fa22108d991c29052b2f5f72294c355b57504369313470ecdd8e0ae97fc48e243a38c2ee7315bb05b7de9602047e97449c81e46746513221738dc729d7077a1771cea858865d85261e71e82003ccfbba2416358f023251206d6ef4c5596bc35b2b5bce3e9351798aa2c9904723034e5815c7512d260cc957df5db6adf9ed7272483312d1e68c60955a944e713355089876a704aef06359238f6de5a618f7bd0b4552ba72d05a6165e582f62d55ff2e1b76991971689ba3bee16a520fd85380a6e5a31de4dd4654d561101ce0ca390862d5774921eae2c284008692e9e08562144e8aa1f399a9d3fab0c4559c1f12bc945e626f7a89668613e8829767f4116ee9a4f832cf7c3ade3a7aba8cb04de39edd94d0d05093ed642adf9fbd9d373a80832ffd1c62034e4341546b3515f0e42e6d8570393c6754be5cdb7753b4709527d3f164aebf3d315934f7b3736a1b31052f6cc5699758950331163b3df05b9772e9bf99c8c77f8960e10a15edb06200106f45742d740c422c86b7e4f5a52d3732aa79ee54cfc92f76e03c268ae226477c19924e733caf95b8f350233a5312f4ed349d3ad76f032358f83a6d0d6f83b2a456742aad7f3e615fa72286300f0ea1c9793831ef3a5a4ae08640a6e32f53d1cba0be284b25e923d0d110ba227e54725632efcbbe17c05a9cde976504f6aece0c461b562cfae1b85d5f6782ee27b3e332ac0775f681682ce524b32889f1dc4231226f1aada0703beaf8d41732c9647a0a940a86f8a1be7f239c44fcaa7ed7a055506bdbe1df848f9e047226bee1b6d788a03f6e352eead99b419cfc41741942dbeb7a5c55788d5a3e636d8aab7b36b4db71d16700373bbc1cdeba8f9b1db10bf39a621bc737ea4f4e333698d6e09b51ac7a97fb6fd117ccad1d6b6b3a7451699d5bfe448650396d7b58867b3b0872be13ad0b43da267df0ad77025155f04e20c56d6a9befb3e9c7d23b82cbf3a534295ebda540682cc81be9273781b92519c858f9c25294fbacf75c3b3c15bda6d36de1c83336f93e96910dbdcb190d6ef123c98565ff6df1e903f57d4e4df167ba6b829d6d9713eb2126b0cf869940204137babcc6a1b7cb2f0b94318a7460e5d1a605c249bd2e72123ebad332332c18adcb285ed8874dbde084ebcd4f744465350d57110f037fffed1569d642c258749e65b0d13e117eaa37014a769b5ab479b7c77178880e77099f999abe712e543dbbf626ca9bcfddc42ff2f109d21c8bd464894e55ae504fdf81e1a7694180225da7dac8879abd1036cf26bb50532b8cf138b337a1a1bd1a43f8dd70b7399e2690c8e7a5a1fe099026b8f2a6f65fc0dbedda15ba65e0abd66c7176fb426980549892b4817de78e345a7aeab05744c3def4a2f283b4255b02c91c1af7354a368c67a11703c642a385c7453131ce3a78b24c5e22ab7e136a38498ce82082181884418cb4d6c2920f258a3ad20cfbe7104af1c6c6cb5e58bf29a9901721ad19c0a260cd09a3a772443a45aea4a5c439a95834ef5dc2e26343278947b7b796f796ae9bcadb29e2899a1d7313e6f7bfb6f8b0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff025100ffffffff0250c30000000000002321027a46eb513588b01b37ea24303f4b628afd12cc20df789fede0921e43cad3e875acd43000000000000017a9147d46a730d31f97b1930d3368a967c309bd4d136a8700000000", + ), + KV( + k: "00000002", + v: "040000008392336da29773c56b1649ab555156ceb7e700ad7c230ea7a4571c7e22bc0700f4b084a7c2fc5a5aa2985f2bcb1d4a9a65562a589d628b0d869c5f1c8dd074890000000000000000000000000000000000000000000000000000000000000000ca7a1358ffff071fa5556cd346010000000000000000000000000000000000000000000000000002fd4005005605e4490c2e7fc1acf199d7401e18ab8d2be4c843103a7ebdd34046d5514559e6ecbe29c00b9adf6f1aa49f1d63b9c20fd9bca4d9bbb381cb82f59cee9f387deb34ec4fd6b1e12f656a554bc21db88bd1560a033e64099c0bef439cdd6055aaa4f79c360ad37d1f1df1fbd35214e17fc5a0b3c0d272b1e693d6ba9e5e0ae71c6ff58545776838c18b756bf98a83a6b9739b4dec356117b2b227f6f6ea3f04fd854aadf27b40b302d3fa50719aa02f99c2003b51eab8c64cfd145117054dcadb604ba65a8854a095bd9f02884a65225baf0547a7ee44882b11343d40b1a6511cbc4db1d2fd840a8cd63610d29c47bd5c920fe13c349d1044185cd40854f8e60a212d59e1fe281e8bd1343a682e95f3ea23fb5ca83f9913bbcb11232ffd7165ea4a475273df1f3bb53cb721548b28f772acf56060da5d26fab50c4f8b87781bf28843bea805340531a61f002b5aad9a0427b597af1a08659f1a7b4b6d69d53b13191cf35512bc3521359dda47911112d06ae5410281d918bf53049f8295f067f2b3794a90cc15358e294c6cbd7896108d7c897e4bf61aa72451a280cfce72e0515b8dc510a52743b7615b25ba2f13419d562f6148fa36132622953c0fb74ea0b4870f86ccc1ece9661b29516a2226ea16b7100dbeb718a674eedbbe9d23ab02fe1c634234f3c1275ae9d7f74c754c66dec0af7331fc1407075a06cba62098a9be09d24889e7d0a6cf77d875131fe1278e6fdea2bfd9423903e1cb4502edcef971c60b064d4d8a9703ff324574e3d0535a59ab091355185499545be1baffddf6c2b654e5c30e7e1291763fd70896217d91d876a9be914a8472fa292ea3cfdc4be84f4c645f62d8ccff990ac4f5c84e0775b147d1532e2d4f3a8fb92fda899280a3e42f2b927dbef872ec6058254eb20e2770efde7c57905e7741321e833533e0006344a4c6deb9a78e8496de1ae1464ef8367ae97714700e76658e2390cb9702d1413b333d7f04fb89dd09cefeb34e0ead616cd5d352a2f348758e0f5fc4220c6a0693acc90b8dcd7a372ecb688d86356c151d9703576af8e904adea9941d1a6296774ba62b4dae7bf0a078f740af040c584f0245ed2ffa351f0b550c8b80e192ba1a75eb40fc42d67b722ea04ea947ed53e831fe057153a8bd6897ddcd43cb558d2766fb05640ed0c1d14eae0739b11ec07e34f3ea6acbd9f807b9ea6476bda5964a9fca1819c854680f75857e57fbf3fc50e3f5b0d25cadadcd9b3428b85b70b95080c9423a836e9e9e2cbd485075a29452d65acf3d5762111d70a0fd389ac7214b96b11eb14ae48ff1e4930ea50d8261472fd8d04877af717b4d463c0d9a6cf397b5b91fb1a898b329c4b46b8c350e3c0122e186bc393fe6d361e117963d38e44e0ccf1c45f33440aaebd8f99ad7b019c6411bb070178fb6b76e085e3bdae4c883f1f4112e7db91c519c48769fe96f56350cc8687679747730f0aad3bc58b78f87d162104beee449e55eab45558241f32cb5a0f30fea0f38632adfc8a2b7292ff89641581bb6e0111af26dad9199596ce8d432e6f7d0a7415aacc473acfb8af68c9c6ef8b60c535da095cd3a02598fd82fe20481dc87bf6ed25fb95633dc7ff8bcf3f81c323546084170e567536b5c4ce9392ae1dc1f201d732134597e3c9353416fa40ff8f2628815e9b980f27a9c05adefa779ef1a35fdfe6423e9f671677311971bd91d9aeb6adf4c45769d07df7a24955f4082730fb0d3f6467472f75add86b827a7b664005931130029553fdb62ad9ffdb64b44701c0d94e7c5f5ba2340e641d9e34737e29b47e619659f458a161648c9fb81dddbcc73f1eebc92fd7f7b70356635f0de19912d82c9a978c2750aacbfbeee3ab62e96f7df7ce918fa30101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff025200ffffffff02a0860100000000002321027a46eb513588b01b37ea24303f4b628afd12cc20df789fede0921e43cad3e875aca86100000000000017a9147d46a730d31f97b1930d3368a967c309bd4d136a8700000000", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/block_by_height_raw_data@testnet_0.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/block_by_height_raw_data@testnet_0.snap new file mode 100644 index 00000000000..3a61d2ee9ea --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/block_by_height_raw_data@testnet_0.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000000", + v: "040000000000000000000000000000000000000000000000000000000000000000000000db4d7a85b768123f1dff1d4c4cece70083b2d27e117b4ac2e31d087988a5eac40000000000000000000000000000000000000000000000000000000000000000a11e1358ffff07200600000000000000000000000000000000000000000000000000000000000000fd400500a6a51259c3f6732481e2d035197218b7a69504461d04335503cd69759b2d02bd2b53a9653f42cb33c608511c953673fa9da76170958115fe92157ad3bb5720d927f18e09459bf5c6072973e143e20f9bdf0584058c96b7c2234c7565f100d5eea083ba5d3dbaff9f0681799a113e7beff4a611d2b49590563109962baa149b628aae869af791f2f70bb041bd7ebfa658570917f6654a142b05e7ec0289a4f46470be7be5f693b90173eaaa6e84907170f32602204f1f4e1c04b1830116ffd0c54f0b1caa9a5698357bd8aa1f5ac8fc93b405265d824ba0e49f69dab5446653927298e6b7bdc61ee86ff31c07bde86331b4e500d42e4e50417e285502684b7966184505b885b42819a88469d1e9cf55072d7f3510f85580db689302eab377e4e11b14a91fdd0df7627efc048934f0aff8e7eb77eb17b3a95de13678004f2512293891d8baf8dde0ef69be520a58bbd6038ce899c9594cf3e30b8c3d9c7ecc832d4c19a6212747b50724e6f70f6451f78fd27b58ce43ca33b1641304a916186cfbe7dbca224f55d08530ba851e4df22baf7ab7078e9cbea46c0798b35a750f54103b0cdd08c81a6505c4932f6bfbd492a9fced31d54e98b6370d4c96600552fcf5b37780ed18c8787d03200963600db297a8f05dfa551321d17b9917edadcda51e274830749d133ad226f8bb6b94f13b4f77e67b35b71f52112ce9ba5da706ad9573584a2570a4ff25d29ab9761a06bdcf2c33638bf9baf2054825037881c14adf3816ba0cbd0fca689aad3ce16f2fe362c98f48134a9221765d939f0b49677d1c2447e56b46859f1810e2cf23e82a53e0d44f34dae932581b3b7f49eaec59af872cf9de757a964f7b33d143a36c270189508fcafe19398e4d2966948164d40556b05b7ff532f66f5d1edc41334ef742f78221dfe0c7ae2275bb3f24c89ae35f00afeea4e6ed187b866b209dc6e83b660593fce7c40e143beb07ac86c56f39e895385924667efe3a3f031938753c7764a2dbeb0a643fd359c46e614873fd0424e435fa7fac083b9a41a9d6bf7e284eee537ea7c50dd239f359941a43dc982745184bf3ee31a8dc850316aa9c6b66d6985acee814373be3458550659e1a06287c3b3b76a185c5cb93e38c1eebcf34ff072894b6430aed8d34122dafd925c46a515cca79b0269c92b301890ca6b0dc8b679cdac0f23318c105de73d7a46d16d2dad988d49c22e9963c117960bdc70ef0db6b091cf09445a516176b7f6d58ec29539166cc8a38bbff387acefffab2ea5faad0e8bb70625716ef0edf61940733c25993ea3de9f0be23d36e7cb8da10505f9dc426cd0e6e5b173ab4fff8c37e1f1fb56d1ea372013d075e0934c6919393cfc21395eea20718fad03542a4162a9ded66c814ad8320b2d7c2da3ecaf206da34c502db2096d1c46699a91dd1c432f019ad434e2c1ce507f91104f66f491fed37b225b8e0b2888c37276cfa0468fc13b8d593fd9a2675f0f5b20b8a15f8fa7558176a530d6865738ddb25d3426dab905221681cf9da0e0200eea5b2eba3ad3a5237d2a391f9074bf1779a2005cee43eec2b058511532635e0fea61664f531ac2b356f40db5c5d275a4cf5c82d468976455af4e3362cc8f71aa95e71d394aff3ead6f7101279f95bcd8a0fedce1d21cb3c9f6dd3b182fce0db5d6712981b651f29178a24119968b14783cafa713bc5f2a65205a42e4ce9dc7ba462bdb1f3e4553afc15f5f39998fdb53e7e231e3e520a46943734a007c2daa1eda9f495791657eefcac5c32833936e568d06187857ed04d7b97167ae207c5c5ae54e528c36016a984235e9c5b2f0718d7b3aa93c7822ccc772580b6599671b3c02ece8a21399abd33cfd3028790133167d0a97e7de53dc8ff0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff071f0104455a6361736830623963346565663862376363343137656535303031653335303039383462366665613335363833613763616331343161303433633432303634383335643334ffffffff010000000000000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/block_by_height_raw_data@testnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/block_by_height_raw_data@testnet_1.snap new file mode 100644 index 00000000000..658b765a7e6 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/block_by_height_raw_data@testnet_1.snap @@ -0,0 +1,16 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000000", + v: "040000000000000000000000000000000000000000000000000000000000000000000000db4d7a85b768123f1dff1d4c4cece70083b2d27e117b4ac2e31d087988a5eac40000000000000000000000000000000000000000000000000000000000000000a11e1358ffff07200600000000000000000000000000000000000000000000000000000000000000fd400500a6a51259c3f6732481e2d035197218b7a69504461d04335503cd69759b2d02bd2b53a9653f42cb33c608511c953673fa9da76170958115fe92157ad3bb5720d927f18e09459bf5c6072973e143e20f9bdf0584058c96b7c2234c7565f100d5eea083ba5d3dbaff9f0681799a113e7beff4a611d2b49590563109962baa149b628aae869af791f2f70bb041bd7ebfa658570917f6654a142b05e7ec0289a4f46470be7be5f693b90173eaaa6e84907170f32602204f1f4e1c04b1830116ffd0c54f0b1caa9a5698357bd8aa1f5ac8fc93b405265d824ba0e49f69dab5446653927298e6b7bdc61ee86ff31c07bde86331b4e500d42e4e50417e285502684b7966184505b885b42819a88469d1e9cf55072d7f3510f85580db689302eab377e4e11b14a91fdd0df7627efc048934f0aff8e7eb77eb17b3a95de13678004f2512293891d8baf8dde0ef69be520a58bbd6038ce899c9594cf3e30b8c3d9c7ecc832d4c19a6212747b50724e6f70f6451f78fd27b58ce43ca33b1641304a916186cfbe7dbca224f55d08530ba851e4df22baf7ab7078e9cbea46c0798b35a750f54103b0cdd08c81a6505c4932f6bfbd492a9fced31d54e98b6370d4c96600552fcf5b37780ed18c8787d03200963600db297a8f05dfa551321d17b9917edadcda51e274830749d133ad226f8bb6b94f13b4f77e67b35b71f52112ce9ba5da706ad9573584a2570a4ff25d29ab9761a06bdcf2c33638bf9baf2054825037881c14adf3816ba0cbd0fca689aad3ce16f2fe362c98f48134a9221765d939f0b49677d1c2447e56b46859f1810e2cf23e82a53e0d44f34dae932581b3b7f49eaec59af872cf9de757a964f7b33d143a36c270189508fcafe19398e4d2966948164d40556b05b7ff532f66f5d1edc41334ef742f78221dfe0c7ae2275bb3f24c89ae35f00afeea4e6ed187b866b209dc6e83b660593fce7c40e143beb07ac86c56f39e895385924667efe3a3f031938753c7764a2dbeb0a643fd359c46e614873fd0424e435fa7fac083b9a41a9d6bf7e284eee537ea7c50dd239f359941a43dc982745184bf3ee31a8dc850316aa9c6b66d6985acee814373be3458550659e1a06287c3b3b76a185c5cb93e38c1eebcf34ff072894b6430aed8d34122dafd925c46a515cca79b0269c92b301890ca6b0dc8b679cdac0f23318c105de73d7a46d16d2dad988d49c22e9963c117960bdc70ef0db6b091cf09445a516176b7f6d58ec29539166cc8a38bbff387acefffab2ea5faad0e8bb70625716ef0edf61940733c25993ea3de9f0be23d36e7cb8da10505f9dc426cd0e6e5b173ab4fff8c37e1f1fb56d1ea372013d075e0934c6919393cfc21395eea20718fad03542a4162a9ded66c814ad8320b2d7c2da3ecaf206da34c502db2096d1c46699a91dd1c432f019ad434e2c1ce507f91104f66f491fed37b225b8e0b2888c37276cfa0468fc13b8d593fd9a2675f0f5b20b8a15f8fa7558176a530d6865738ddb25d3426dab905221681cf9da0e0200eea5b2eba3ad3a5237d2a391f9074bf1779a2005cee43eec2b058511532635e0fea61664f531ac2b356f40db5c5d275a4cf5c82d468976455af4e3362cc8f71aa95e71d394aff3ead6f7101279f95bcd8a0fedce1d21cb3c9f6dd3b182fce0db5d6712981b651f29178a24119968b14783cafa713bc5f2a65205a42e4ce9dc7ba462bdb1f3e4553afc15f5f39998fdb53e7e231e3e520a46943734a007c2daa1eda9f495791657eefcac5c32833936e568d06187857ed04d7b97167ae207c5c5ae54e528c36016a984235e9c5b2f0718d7b3aa93c7822ccc772580b6599671b3c02ece8a21399abd33cfd3028790133167d0a97e7de53dc8ff0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff071f0104455a6361736830623963346565663862376363343137656535303031653335303039383462366665613335363833613763616331343161303433633432303634383335643334ffffffff010000000000000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000", + ), + KV( + k: "00000001", + v: "04000000382c4a332661c7ed0671f32a34d724619f086c61873bce7c99859dd9920aa605755f7c7d27a811596e9fae6dd30ca45be86e901d499909de35b6ff1f699f7ef30000000000000000000000000000000000000000000000000000000000000000e9851358ffff0720000056c2264c31261d597c6fcea7c5e00160cf6be1cd89ca96a0389473e50000fd40050053f4438864bc5d6dfc009d4bba545ac5e5feaaf46f9455b975b02115f842a966e26517ce678f1c074d09cc8d0049a190859eb505af5f3e760312fbbe54da115db2bc03c96408f39b679891790b539d2d9d17a801dc6af9af14ca3f6ba060edce2a1dd45aa45f11fe37dbaf1eb2647ae7c393f6680c3d5d7e53687e34530f48edf58924a04d3e0231c150b1c8218998f674bc171edd222bcb4ac4ba4ea52d7baa86399f371d5284043e1e166f9069dd0f2904ff94c7922a70fa7c660e0553cc40a20d9ee08eb3f47278485801ddae9c270411360773f0b74e03db2d92c50952c9bd4924bbca2a260e1235e99df51fe71e75744232f2d641ef94f394110a5ad05f51a057e4cb515b92c16cb1404a8cdcc43d4a4bb2caa54ca35dccf41aa7d832da65123b7029223c46ed2a13387d598d445435d3cb32fdad9e27672903864c90d86353b162033078327b5b7aaffc89b40096ae004f2d5c6bd2c99188574348518db66e9b6020f93f12ee1c06f7b00fe346fefceaffb1da9e3cdf08285057f549733eb10825737fcd1431bfdfb155f323f24e95a869212baacf445b30f2670206645779110e6547d5da90a5f2fe5151da911d5ecd5a833023661d1356b6c395d85968947678d53efd4db7b06f23b21125e74492644277ea0c1131b80d6a4e3e8093b82332556fbb3255a55ac3f0b7e4844c0e12bf577c37fd02323ae5ef4781772ed501d63b568032a3d31576c5104a48c01ac54f715286932351a8adc8cf2467a84a0572e99f366ee00f82c3735545fd4bb941d591ce70070425a81304272db89887949bc7dd8236bb7e82190f9815da938cd6e8fec7660e91354326a7a9bfe38120e97997fca3c289d54513ed00286c2b825fbe84f91a39528f335674b5e957425a6edfdd00f2feb2c2df575616197998c1e964e069875d4d934f419a9b02b100848d023b76d47bd4e284c3895ef9227a40d8ea8826e86c7155d6aa95b8f9175812523a32cd611efc700688e03f7c245c5bff01718281b5d75cefe8318b2c08962236b14a0bf79534c203df735fd9cced97cbae07c2b4ee9cda8c9993f3f6277ff3fec261fb94d3961c4befe4b0893dcf67b312c7d8d6ff7adc8539cb2b1d3534fccf109efddd07a9f1e77b94ab1e505b164221dca1c34621b1e9d234c31a032a401267d95f65b800d579a2482638dfeade804149c81e95d7ef5510ac0b6212231506b1c635a2e1d2f0c9712989f9f246762fadb4c55c20f707dcc0e510a33e9465fc5d5bdbfa524dab0d7a1c6a1baaa36869cf542aa2257c5c44ef07547a570343442c6091e13bc04d559dc0e6db5b001861914bf956816edce2a86b274bd97f27e2dbb08608c16a3e5d8595952faa91fb162d7fa6a7a47e849a1ad8fab3ba620ee3295a04fe13e5fb655ac92ae60d01020b8999526af8d56b28733e69c9ffb285de27c61edc0bf62261ac0787eff347d0fcd62257301ede9603106ea41650a3e3119bd5c4e86a7f6a3f00934f3a545f7f21d41699f3e35d38cf925a8bdaf2bf7eedea11c31c3d8bf6c527c77c6378281cdf02211a58fa5e46d28d7e7c5fb79d69b31703fd752395da115845952cf99aaeb2155c2ab951a69f67d938f223185567e52cfa3e57b62c790bf78674c4b02c12b7d3225fe8f705b408ba11c24245b3924482e2f3480994461b550641a88cd941d371139f3498afacdcba1249631402b20695760eaada5376e68df0e45139c410700effc9420dc3726515e7fcb3f349320f30511451964bd9b6530682efec65910ceb548aa2ab05ac3309e803161697213631ae8e13cc7d223ac28446c1bf94a19a8782ac16ff57df7ee4f10fb6e488c02c68d6b6dee6987f6d2c39227da366c59f54ff67e312ca530e7c467c3dc80101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff03510101ffffffff0250c30000000000002321025229e1240a21004cf8338db05679fa34753706e84f6aebba086ba04317fd8f99acd43000000000000017a914ef775f1f997f122a062fff1a2d7443abd1f9c6428700000000", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/block_by_height_raw_data@testnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/block_by_height_raw_data@testnet_2.snap new file mode 100644 index 00000000000..e2c62be9622 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/block_by_height_raw_data@testnet_2.snap @@ -0,0 +1,20 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000000", + v: "040000000000000000000000000000000000000000000000000000000000000000000000db4d7a85b768123f1dff1d4c4cece70083b2d27e117b4ac2e31d087988a5eac40000000000000000000000000000000000000000000000000000000000000000a11e1358ffff07200600000000000000000000000000000000000000000000000000000000000000fd400500a6a51259c3f6732481e2d035197218b7a69504461d04335503cd69759b2d02bd2b53a9653f42cb33c608511c953673fa9da76170958115fe92157ad3bb5720d927f18e09459bf5c6072973e143e20f9bdf0584058c96b7c2234c7565f100d5eea083ba5d3dbaff9f0681799a113e7beff4a611d2b49590563109962baa149b628aae869af791f2f70bb041bd7ebfa658570917f6654a142b05e7ec0289a4f46470be7be5f693b90173eaaa6e84907170f32602204f1f4e1c04b1830116ffd0c54f0b1caa9a5698357bd8aa1f5ac8fc93b405265d824ba0e49f69dab5446653927298e6b7bdc61ee86ff31c07bde86331b4e500d42e4e50417e285502684b7966184505b885b42819a88469d1e9cf55072d7f3510f85580db689302eab377e4e11b14a91fdd0df7627efc048934f0aff8e7eb77eb17b3a95de13678004f2512293891d8baf8dde0ef69be520a58bbd6038ce899c9594cf3e30b8c3d9c7ecc832d4c19a6212747b50724e6f70f6451f78fd27b58ce43ca33b1641304a916186cfbe7dbca224f55d08530ba851e4df22baf7ab7078e9cbea46c0798b35a750f54103b0cdd08c81a6505c4932f6bfbd492a9fced31d54e98b6370d4c96600552fcf5b37780ed18c8787d03200963600db297a8f05dfa551321d17b9917edadcda51e274830749d133ad226f8bb6b94f13b4f77e67b35b71f52112ce9ba5da706ad9573584a2570a4ff25d29ab9761a06bdcf2c33638bf9baf2054825037881c14adf3816ba0cbd0fca689aad3ce16f2fe362c98f48134a9221765d939f0b49677d1c2447e56b46859f1810e2cf23e82a53e0d44f34dae932581b3b7f49eaec59af872cf9de757a964f7b33d143a36c270189508fcafe19398e4d2966948164d40556b05b7ff532f66f5d1edc41334ef742f78221dfe0c7ae2275bb3f24c89ae35f00afeea4e6ed187b866b209dc6e83b660593fce7c40e143beb07ac86c56f39e895385924667efe3a3f031938753c7764a2dbeb0a643fd359c46e614873fd0424e435fa7fac083b9a41a9d6bf7e284eee537ea7c50dd239f359941a43dc982745184bf3ee31a8dc850316aa9c6b66d6985acee814373be3458550659e1a06287c3b3b76a185c5cb93e38c1eebcf34ff072894b6430aed8d34122dafd925c46a515cca79b0269c92b301890ca6b0dc8b679cdac0f23318c105de73d7a46d16d2dad988d49c22e9963c117960bdc70ef0db6b091cf09445a516176b7f6d58ec29539166cc8a38bbff387acefffab2ea5faad0e8bb70625716ef0edf61940733c25993ea3de9f0be23d36e7cb8da10505f9dc426cd0e6e5b173ab4fff8c37e1f1fb56d1ea372013d075e0934c6919393cfc21395eea20718fad03542a4162a9ded66c814ad8320b2d7c2da3ecaf206da34c502db2096d1c46699a91dd1c432f019ad434e2c1ce507f91104f66f491fed37b225b8e0b2888c37276cfa0468fc13b8d593fd9a2675f0f5b20b8a15f8fa7558176a530d6865738ddb25d3426dab905221681cf9da0e0200eea5b2eba3ad3a5237d2a391f9074bf1779a2005cee43eec2b058511532635e0fea61664f531ac2b356f40db5c5d275a4cf5c82d468976455af4e3362cc8f71aa95e71d394aff3ead6f7101279f95bcd8a0fedce1d21cb3c9f6dd3b182fce0db5d6712981b651f29178a24119968b14783cafa713bc5f2a65205a42e4ce9dc7ba462bdb1f3e4553afc15f5f39998fdb53e7e231e3e520a46943734a007c2daa1eda9f495791657eefcac5c32833936e568d06187857ed04d7b97167ae207c5c5ae54e528c36016a984235e9c5b2f0718d7b3aa93c7822ccc772580b6599671b3c02ece8a21399abd33cfd3028790133167d0a97e7de53dc8ff0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff071f0104455a6361736830623963346565663862376363343137656535303031653335303039383462366665613335363833613763616331343161303433633432303634383335643334ffffffff010000000000000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000", + ), + KV( + k: "00000001", + v: "04000000382c4a332661c7ed0671f32a34d724619f086c61873bce7c99859dd9920aa605755f7c7d27a811596e9fae6dd30ca45be86e901d499909de35b6ff1f699f7ef30000000000000000000000000000000000000000000000000000000000000000e9851358ffff0720000056c2264c31261d597c6fcea7c5e00160cf6be1cd89ca96a0389473e50000fd40050053f4438864bc5d6dfc009d4bba545ac5e5feaaf46f9455b975b02115f842a966e26517ce678f1c074d09cc8d0049a190859eb505af5f3e760312fbbe54da115db2bc03c96408f39b679891790b539d2d9d17a801dc6af9af14ca3f6ba060edce2a1dd45aa45f11fe37dbaf1eb2647ae7c393f6680c3d5d7e53687e34530f48edf58924a04d3e0231c150b1c8218998f674bc171edd222bcb4ac4ba4ea52d7baa86399f371d5284043e1e166f9069dd0f2904ff94c7922a70fa7c660e0553cc40a20d9ee08eb3f47278485801ddae9c270411360773f0b74e03db2d92c50952c9bd4924bbca2a260e1235e99df51fe71e75744232f2d641ef94f394110a5ad05f51a057e4cb515b92c16cb1404a8cdcc43d4a4bb2caa54ca35dccf41aa7d832da65123b7029223c46ed2a13387d598d445435d3cb32fdad9e27672903864c90d86353b162033078327b5b7aaffc89b40096ae004f2d5c6bd2c99188574348518db66e9b6020f93f12ee1c06f7b00fe346fefceaffb1da9e3cdf08285057f549733eb10825737fcd1431bfdfb155f323f24e95a869212baacf445b30f2670206645779110e6547d5da90a5f2fe5151da911d5ecd5a833023661d1356b6c395d85968947678d53efd4db7b06f23b21125e74492644277ea0c1131b80d6a4e3e8093b82332556fbb3255a55ac3f0b7e4844c0e12bf577c37fd02323ae5ef4781772ed501d63b568032a3d31576c5104a48c01ac54f715286932351a8adc8cf2467a84a0572e99f366ee00f82c3735545fd4bb941d591ce70070425a81304272db89887949bc7dd8236bb7e82190f9815da938cd6e8fec7660e91354326a7a9bfe38120e97997fca3c289d54513ed00286c2b825fbe84f91a39528f335674b5e957425a6edfdd00f2feb2c2df575616197998c1e964e069875d4d934f419a9b02b100848d023b76d47bd4e284c3895ef9227a40d8ea8826e86c7155d6aa95b8f9175812523a32cd611efc700688e03f7c245c5bff01718281b5d75cefe8318b2c08962236b14a0bf79534c203df735fd9cced97cbae07c2b4ee9cda8c9993f3f6277ff3fec261fb94d3961c4befe4b0893dcf67b312c7d8d6ff7adc8539cb2b1d3534fccf109efddd07a9f1e77b94ab1e505b164221dca1c34621b1e9d234c31a032a401267d95f65b800d579a2482638dfeade804149c81e95d7ef5510ac0b6212231506b1c635a2e1d2f0c9712989f9f246762fadb4c55c20f707dcc0e510a33e9465fc5d5bdbfa524dab0d7a1c6a1baaa36869cf542aa2257c5c44ef07547a570343442c6091e13bc04d559dc0e6db5b001861914bf956816edce2a86b274bd97f27e2dbb08608c16a3e5d8595952faa91fb162d7fa6a7a47e849a1ad8fab3ba620ee3295a04fe13e5fb655ac92ae60d01020b8999526af8d56b28733e69c9ffb285de27c61edc0bf62261ac0787eff347d0fcd62257301ede9603106ea41650a3e3119bd5c4e86a7f6a3f00934f3a545f7f21d41699f3e35d38cf925a8bdaf2bf7eedea11c31c3d8bf6c527c77c6378281cdf02211a58fa5e46d28d7e7c5fb79d69b31703fd752395da115845952cf99aaeb2155c2ab951a69f67d938f223185567e52cfa3e57b62c790bf78674c4b02c12b7d3225fe8f705b408ba11c24245b3924482e2f3480994461b550641a88cd941d371139f3498afacdcba1249631402b20695760eaada5376e68df0e45139c410700effc9420dc3726515e7fcb3f349320f30511451964bd9b6530682efec65910ceb548aa2ab05ac3309e803161697213631ae8e13cc7d223ac28446c1bf94a19a8782ac16ff57df7ee4f10fb6e488c02c68d6b6dee6987f6d2c39227da366c59f54ff67e312ca530e7c467c3dc80101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff03510101ffffffff0250c30000000000002321025229e1240a21004cf8338db05679fa34753706e84f6aebba086ba04317fd8f99acd43000000000000017a914ef775f1f997f122a062fff1a2d7443abd1f9c6428700000000", + ), + KV( + k: "00000002", + v: "04000000238d665a062b9007836a7d8f968ba2f3847af5f542733389a952cf9b86795502d5b3ccfd5e7828c4b2d221bae3178c500e21d33399c39a2508a0a82d53c022580000000000000000000000000000000000000000000000000000000000000000898c1358ffff072000005b7d311fedc046109a4482bd0eccdf21a6089c99fce43633d03352530000fd400500282db5ba22a2c122aba42724a991196cd01cc2b7013318f691d61171db79202d2e5979b0b6d5692cd129eb37b7541ff51b7b2a840b45273f86d2509acfaa39183bb3850f9916ec8246ad9ee785462c9cda0ea202f12c7ccba8cc155096016a87a6fc40a6a44f5f3b309a868f30d9080b128c75234a6c3d019fb7fbe29708d01daaab84e4891a00d15ffdd9a598dd678899102265e2090a4b7b26ec55764febbfd1f5fe791aef8500619578359cb2abfb19844981b5c0e67e86b6549765bd638f3a701b0fc8a56d00c4efb87b55883f1d81012e5b02d44e10ec9bf620f20ad62ca549be934d11103f9142b3201ff31b7791c1636aaeadc512b2c0f801a64959300d5d526c2fc58e2838162659fe59168f2214b41d1ec963d543e2660ea630d031e2671c8c841fa9c1b58f7475bfe958724cf89c038d29306dc0043b93148ab95f6e99017ec5863db2f9130c48187bfd013924b34eaefd1db6b2818f4f6a604185fa774c2c069455c6eb195a5382403404c47db312b29b5d84e44c4a645f06ef7899f0b78962e95d5476bc989dcb9458c24733a435b151c9fb46c32cbebd3318cf3ed7310533cfa0b087d58c687505070858765968d1f7077f0e6dd75ebf15d74bb8c7466ef2f4974df537f5dd64097f4adf8b1cff61c00181ad26f94cca9c01960db31edc454c1650da4f4390b4aa0efd46c9ed527ed8bb068494285da2680993e8d355caf6a0bd42a4d681780db2312eef129aa76c6081ceff231311ea93fd65fb0b80df077c49ca69d8996b1ebcfd74bad793d7914b4748af45f31ad018dd12997bfcf809df3894bbd7a10cc585797915356389b744f71ee58ac25484b635fe12a1b20909c97edb1d7ae20b1ef1c776260ebab06e16a34c2789fb5555ddc954cc38f07ac551ac3b46c1370f4fa1ba22ac35d82134eaa0d3f3198eeef723030072214ede447893a03f706d389ea60ef8a81ff7e20ae920cb1a5219e93e1bd2058df6296dc8ba39e4d403199d2c209c3d6b3b2d462aecc04b0e248e7f1e9d204a1f6b7df51073ae2faab55be3353713743c5db40555bebda203a5c79fc3324cb8fb7629c9391931a1268c97fad6d6ab7ebc583330356372df8c5e9e885422c75ab956932351858452c5904a5aad3d9fd840e356abd580479d9a531cda6de08277008bb3a1bdf08604c1df0d8e8cd475cb455161bfe5d9710bc0dfac4214afeeed4bca6148b54241b8f4ab221502917f261705715c7388d9e91d3685a1f67c484a24b716912fe33a89ca7ebc3a5b77e6b36657c7e2b2e1e8b2b699690ca749339b7b2673fb1083496bbc753fdfc49ff6e921c5e35f27d9175afa7da3793d6a7ad5eb0ab8c9ee0e60a8ae438e3145cf64b5f6417625ca934b9d7acc150efa9b53618c15b4d8318be5de0855696d92ef2e018d97ebd24102e824bbd040aed958a51016a91661180e64932f2316b5ee55923263d19d293996118f511f22912e8c9c435af630099fc47b7c4ab581b7d760418314c0e6e814b3bbddb486517436d56ddc774701072cd77beada2cc94cad87f3d1cb83db4da05c2e141bc175bc8848e548c27584995333ef1d9eadd8d7f028cae60d5b0e9642db7245d388ff58c6a31556319a29c0dc14362b957b6220a428966d66d6c3339a12a503806de7dc4c4561bab6968245e41b27ae89fffbfd1bd2f4104d074f0f2b759576f9e16c0e2f73bedc7c0e0da97698e07ca1d729b113938a6b29c3b19d9b8225303f80d6dc0e39bec343ac9a2d23926ab414666e079e68745998ff73dacbe1645bd004dd06236f615f11d47e9b2d54cf8573d9a295bda88af4b2c6c603db0c0757485a543725b1cc04f7e9f38445ed875ec54317418600b4113600e137417e5d1fc333159a7e365d0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff03520103ffffffff02a086010000000000232102acce9f6c16986c525fd34759d851ef5b4b85b5019a57bd59747be0ef1ba62523aca86100000000000017a914ef775f1f997f122a062fff1a2d7443abd1f9c6428700000000", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/column_family_names.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/column_family_names.snap new file mode 100644 index 00000000000..9d4578554db --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/column_family_names.snap @@ -0,0 +1,25 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 41 +expression: cf_names + +--- +[ + "block_by_height", + "default", + "hash_by_height", + "height_by_hash", + "history_tree", + "orchard_anchors", + "orchard_note_commitment_tree", + "orchard_nullifiers", + "sapling_anchors", + "sapling_note_commitment_tree", + "sapling_nullifiers", + "sprout_anchors", + "sprout_note_commitment_tree", + "sprout_nullifiers", + "tip_chain_value_pool", + "tx_by_hash", + "utxo_by_outpoint", +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@mainnet_0.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@mainnet_0.snap new file mode 100644 index 00000000000..ccedb7da156 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@mainnet_0.snap @@ -0,0 +1,18 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 140 +expression: empty_column_families + +--- +[ + "history_tree: no entries", + "orchard_anchors: no entries", + "orchard_nullifiers: no entries", + "sapling_anchors: no entries", + "sapling_nullifiers: no entries", + "sprout_anchors: no entries", + "sprout_nullifiers: no entries", + "tip_chain_value_pool: no entries", + "tx_by_hash: no entries", + "utxo_by_outpoint: no entries", +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@mainnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@mainnet_1.snap new file mode 100644 index 00000000000..04606c4d166 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@mainnet_1.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 140 +expression: empty_column_families + +--- +[ + "history_tree: no entries", + "orchard_nullifiers: no entries", + "sapling_nullifiers: no entries", + "sprout_nullifiers: no entries", +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@mainnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@mainnet_2.snap new file mode 100644 index 00000000000..04606c4d166 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@mainnet_2.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 140 +expression: empty_column_families + +--- +[ + "history_tree: no entries", + "orchard_nullifiers: no entries", + "sapling_nullifiers: no entries", + "sprout_nullifiers: no entries", +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@no_blocks.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@no_blocks.snap new file mode 100644 index 00000000000..92b776bf185 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@no_blocks.snap @@ -0,0 +1,24 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 140 +expression: empty_column_families + +--- +[ + "block_by_height: no entries", + "hash_by_height: no entries", + "height_by_hash: no entries", + "history_tree: no entries", + "orchard_anchors: no entries", + "orchard_note_commitment_tree: no entries", + "orchard_nullifiers: no entries", + "sapling_anchors: no entries", + "sapling_note_commitment_tree: no entries", + "sapling_nullifiers: no entries", + "sprout_anchors: no entries", + "sprout_note_commitment_tree: no entries", + "sprout_nullifiers: no entries", + "tip_chain_value_pool: no entries", + "tx_by_hash: no entries", + "utxo_by_outpoint: no entries", +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@testnet_0.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@testnet_0.snap new file mode 100644 index 00000000000..ccedb7da156 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@testnet_0.snap @@ -0,0 +1,18 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 140 +expression: empty_column_families + +--- +[ + "history_tree: no entries", + "orchard_anchors: no entries", + "orchard_nullifiers: no entries", + "sapling_anchors: no entries", + "sapling_nullifiers: no entries", + "sprout_anchors: no entries", + "sprout_nullifiers: no entries", + "tip_chain_value_pool: no entries", + "tx_by_hash: no entries", + "utxo_by_outpoint: no entries", +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@testnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@testnet_1.snap new file mode 100644 index 00000000000..04606c4d166 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@testnet_1.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 140 +expression: empty_column_families + +--- +[ + "history_tree: no entries", + "orchard_nullifiers: no entries", + "sapling_nullifiers: no entries", + "sprout_nullifiers: no entries", +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@testnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@testnet_2.snap new file mode 100644 index 00000000000..04606c4d166 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/empty_column_families@testnet_2.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 140 +expression: empty_column_families + +--- +[ + "history_tree: no entries", + "orchard_nullifiers: no entries", + "sapling_nullifiers: no entries", + "sprout_nullifiers: no entries", +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/hash_by_height_raw_data@mainnet_0.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/hash_by_height_raw_data@mainnet_0.snap new file mode 100644 index 00000000000..c49a2468da2 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/hash_by_height_raw_data@mainnet_0.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000000", + v: "08ce3d9731b000c08338455c8a4a6bd05da16e26b11daa1b917184ece80f0400", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/hash_by_height_raw_data@mainnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/hash_by_height_raw_data@mainnet_1.snap new file mode 100644 index 00000000000..b56d8b463fc --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/hash_by_height_raw_data@mainnet_1.snap @@ -0,0 +1,16 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000000", + v: "08ce3d9731b000c08338455c8a4a6bd05da16e26b11daa1b917184ece80f0400", + ), + KV( + k: "00000001", + v: "8392336da29773c56b1649ab555156ceb7e700ad7c230ea7a4571c7e22bc0700", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/hash_by_height_raw_data@mainnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/hash_by_height_raw_data@mainnet_2.snap new file mode 100644 index 00000000000..a1ca372b0e8 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/hash_by_height_raw_data@mainnet_2.snap @@ -0,0 +1,20 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000000", + v: "08ce3d9731b000c08338455c8a4a6bd05da16e26b11daa1b917184ece80f0400", + ), + KV( + k: "00000001", + v: "8392336da29773c56b1649ab555156ceb7e700ad7c230ea7a4571c7e22bc0700", + ), + KV( + k: "00000002", + v: "ed73e297d7c51cb8dc53fc2213d7e2e3f116eb4f26434496fc1926906ca20200", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/hash_by_height_raw_data@testnet_0.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/hash_by_height_raw_data@testnet_0.snap new file mode 100644 index 00000000000..f9c2f99a9e2 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/hash_by_height_raw_data@testnet_0.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000000", + v: "382c4a332661c7ed0671f32a34d724619f086c61873bce7c99859dd9920aa605", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/hash_by_height_raw_data@testnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/hash_by_height_raw_data@testnet_1.snap new file mode 100644 index 00000000000..f8f94c6188d --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/hash_by_height_raw_data@testnet_1.snap @@ -0,0 +1,16 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000000", + v: "382c4a332661c7ed0671f32a34d724619f086c61873bce7c99859dd9920aa605", + ), + KV( + k: "00000001", + v: "238d665a062b9007836a7d8f968ba2f3847af5f542733389a952cf9b86795502", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/hash_by_height_raw_data@testnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/hash_by_height_raw_data@testnet_2.snap new file mode 100644 index 00000000000..bb0caadf0c5 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/hash_by_height_raw_data@testnet_2.snap @@ -0,0 +1,20 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000000", + v: "382c4a332661c7ed0671f32a34d724619f086c61873bce7c99859dd9920aa605", + ), + KV( + k: "00000001", + v: "238d665a062b9007836a7d8f968ba2f3847af5f542733389a952cf9b86795502", + ), + KV( + k: "00000002", + v: "181ac2d6dc0ae73a82d7db472ac2879a7c24d8b12e5f73efc33a55549ea4f100", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/height_by_hash_raw_data@mainnet_0.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/height_by_hash_raw_data@mainnet_0.snap new file mode 100644 index 00000000000..e762ff63004 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/height_by_hash_raw_data@mainnet_0.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "08ce3d9731b000c08338455c8a4a6bd05da16e26b11daa1b917184ece80f0400", + v: "00000000", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/height_by_hash_raw_data@mainnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/height_by_hash_raw_data@mainnet_1.snap new file mode 100644 index 00000000000..914bf99bcd3 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/height_by_hash_raw_data@mainnet_1.snap @@ -0,0 +1,16 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "08ce3d9731b000c08338455c8a4a6bd05da16e26b11daa1b917184ece80f0400", + v: "00000000", + ), + KV( + k: "8392336da29773c56b1649ab555156ceb7e700ad7c230ea7a4571c7e22bc0700", + v: "00000001", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/height_by_hash_raw_data@mainnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/height_by_hash_raw_data@mainnet_2.snap new file mode 100644 index 00000000000..1ccd71ab705 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/height_by_hash_raw_data@mainnet_2.snap @@ -0,0 +1,20 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "08ce3d9731b000c08338455c8a4a6bd05da16e26b11daa1b917184ece80f0400", + v: "00000000", + ), + KV( + k: "8392336da29773c56b1649ab555156ceb7e700ad7c230ea7a4571c7e22bc0700", + v: "00000001", + ), + KV( + k: "ed73e297d7c51cb8dc53fc2213d7e2e3f116eb4f26434496fc1926906ca20200", + v: "00000002", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/height_by_hash_raw_data@testnet_0.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/height_by_hash_raw_data@testnet_0.snap new file mode 100644 index 00000000000..71dd02bb1e6 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/height_by_hash_raw_data@testnet_0.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "382c4a332661c7ed0671f32a34d724619f086c61873bce7c99859dd9920aa605", + v: "00000000", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/height_by_hash_raw_data@testnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/height_by_hash_raw_data@testnet_1.snap new file mode 100644 index 00000000000..cf23a489ba7 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/height_by_hash_raw_data@testnet_1.snap @@ -0,0 +1,16 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "238d665a062b9007836a7d8f968ba2f3847af5f542733389a952cf9b86795502", + v: "00000001", + ), + KV( + k: "382c4a332661c7ed0671f32a34d724619f086c61873bce7c99859dd9920aa605", + v: "00000000", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/height_by_hash_raw_data@testnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/height_by_hash_raw_data@testnet_2.snap new file mode 100644 index 00000000000..7843dfea672 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/height_by_hash_raw_data@testnet_2.snap @@ -0,0 +1,20 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "181ac2d6dc0ae73a82d7db472ac2879a7c24d8b12e5f73efc33a55549ea4f100", + v: "00000002", + ), + KV( + k: "238d665a062b9007836a7d8f968ba2f3847af5f542733389a952cf9b86795502", + v: "00000001", + ), + KV( + k: "382c4a332661c7ed0671f32a34d724619f086c61873bce7c99859dd9920aa605", + v: "00000000", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_anchors_raw_data@mainnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_anchors_raw_data@mainnet_1.snap new file mode 100644 index 00000000000..ead12edf3c0 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_anchors_raw_data@mainnet_1.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "ae2935f1dfd8a24aed7c70df7de3a668eb7a49b1319880dde2bbd9031ae5d82f", + v: "", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_anchors_raw_data@mainnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_anchors_raw_data@mainnet_2.snap new file mode 100644 index 00000000000..ead12edf3c0 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_anchors_raw_data@mainnet_2.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "ae2935f1dfd8a24aed7c70df7de3a668eb7a49b1319880dde2bbd9031ae5d82f", + v: "", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_anchors_raw_data@testnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_anchors_raw_data@testnet_1.snap new file mode 100644 index 00000000000..ead12edf3c0 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_anchors_raw_data@testnet_1.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "ae2935f1dfd8a24aed7c70df7de3a668eb7a49b1319880dde2bbd9031ae5d82f", + v: "", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_anchors_raw_data@testnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_anchors_raw_data@testnet_2.snap new file mode 100644 index 00000000000..ead12edf3c0 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_anchors_raw_data@testnet_2.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "ae2935f1dfd8a24aed7c70df7de3a668eb7a49b1319880dde2bbd9031ae5d82f", + v: "", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_note_commitment_tree_raw_data@mainnet_0.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_note_commitment_tree_raw_data@mainnet_0.snap new file mode 100644 index 00000000000..d6210355eda --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_note_commitment_tree_raw_data@mainnet_0.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000000", + v: "0000", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_note_commitment_tree_raw_data@mainnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_note_commitment_tree_raw_data@mainnet_1.snap new file mode 100644 index 00000000000..3e28b2112e2 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_note_commitment_tree_raw_data@mainnet_1.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000001", + v: "0001ae2935f1dfd8a24aed7c70df7de3a668eb7a49b1319880dde2bbd9031ae5d82f", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_note_commitment_tree_raw_data@mainnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_note_commitment_tree_raw_data@mainnet_2.snap new file mode 100644 index 00000000000..26ace2ece9f --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_note_commitment_tree_raw_data@mainnet_2.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000002", + v: "0001ae2935f1dfd8a24aed7c70df7de3a668eb7a49b1319880dde2bbd9031ae5d82f", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_note_commitment_tree_raw_data@testnet_0.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_note_commitment_tree_raw_data@testnet_0.snap new file mode 100644 index 00000000000..d6210355eda --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_note_commitment_tree_raw_data@testnet_0.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000000", + v: "0000", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_note_commitment_tree_raw_data@testnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_note_commitment_tree_raw_data@testnet_1.snap new file mode 100644 index 00000000000..3e28b2112e2 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_note_commitment_tree_raw_data@testnet_1.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000001", + v: "0001ae2935f1dfd8a24aed7c70df7de3a668eb7a49b1319880dde2bbd9031ae5d82f", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_note_commitment_tree_raw_data@testnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_note_commitment_tree_raw_data@testnet_2.snap new file mode 100644 index 00000000000..26ace2ece9f --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/orchard_note_commitment_tree_raw_data@testnet_2.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000002", + v: "0001ae2935f1dfd8a24aed7c70df7de3a668eb7a49b1319880dde2bbd9031ae5d82f", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_anchors_raw_data@mainnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_anchors_raw_data@mainnet_1.snap new file mode 100644 index 00000000000..647bb2e8a38 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_anchors_raw_data@mainnet_1.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "fbc2f4300c01f0b7820d00e3347c8da4ee614674376cbc45359daa54f9b5493e", + v: "", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_anchors_raw_data@mainnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_anchors_raw_data@mainnet_2.snap new file mode 100644 index 00000000000..647bb2e8a38 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_anchors_raw_data@mainnet_2.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "fbc2f4300c01f0b7820d00e3347c8da4ee614674376cbc45359daa54f9b5493e", + v: "", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_anchors_raw_data@testnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_anchors_raw_data@testnet_1.snap new file mode 100644 index 00000000000..647bb2e8a38 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_anchors_raw_data@testnet_1.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "fbc2f4300c01f0b7820d00e3347c8da4ee614674376cbc45359daa54f9b5493e", + v: "", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_anchors_raw_data@testnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_anchors_raw_data@testnet_2.snap new file mode 100644 index 00000000000..647bb2e8a38 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_anchors_raw_data@testnet_2.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "fbc2f4300c01f0b7820d00e3347c8da4ee614674376cbc45359daa54f9b5493e", + v: "", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_note_commitment_tree_raw_data@mainnet_0.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_note_commitment_tree_raw_data@mainnet_0.snap new file mode 100644 index 00000000000..d6210355eda --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_note_commitment_tree_raw_data@mainnet_0.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000000", + v: "0000", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_note_commitment_tree_raw_data@mainnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_note_commitment_tree_raw_data@mainnet_1.snap new file mode 100644 index 00000000000..a8c073c6d9e --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_note_commitment_tree_raw_data@mainnet_1.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000001", + v: "0001fbc2f4300c01f0b7820d00e3347c8da4ee614674376cbc45359daa54f9b5493e", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_note_commitment_tree_raw_data@mainnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_note_commitment_tree_raw_data@mainnet_2.snap new file mode 100644 index 00000000000..13c0fa4eea4 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_note_commitment_tree_raw_data@mainnet_2.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000002", + v: "0001fbc2f4300c01f0b7820d00e3347c8da4ee614674376cbc45359daa54f9b5493e", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_note_commitment_tree_raw_data@testnet_0.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_note_commitment_tree_raw_data@testnet_0.snap new file mode 100644 index 00000000000..d6210355eda --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_note_commitment_tree_raw_data@testnet_0.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000000", + v: "0000", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_note_commitment_tree_raw_data@testnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_note_commitment_tree_raw_data@testnet_1.snap new file mode 100644 index 00000000000..a8c073c6d9e --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_note_commitment_tree_raw_data@testnet_1.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000001", + v: "0001fbc2f4300c01f0b7820d00e3347c8da4ee614674376cbc45359daa54f9b5493e", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_note_commitment_tree_raw_data@testnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_note_commitment_tree_raw_data@testnet_2.snap new file mode 100644 index 00000000000..13c0fa4eea4 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sapling_note_commitment_tree_raw_data@testnet_2.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000002", + v: "0001fbc2f4300c01f0b7820d00e3347c8da4ee614674376cbc45359daa54f9b5493e", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_anchors_raw_data@mainnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_anchors_raw_data@mainnet_1.snap new file mode 100644 index 00000000000..631aca38cb9 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_anchors_raw_data@mainnet_1.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "d7c612c817793191a1e68652121876d6b3bde40f4fa52bc314145ce6e5cdd259", + v: "0001d7c612c817793191a1e68652121876d6b3bde40f4fa52bc314145ce6e5cdd259", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_anchors_raw_data@mainnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_anchors_raw_data@mainnet_2.snap new file mode 100644 index 00000000000..631aca38cb9 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_anchors_raw_data@mainnet_2.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "d7c612c817793191a1e68652121876d6b3bde40f4fa52bc314145ce6e5cdd259", + v: "0001d7c612c817793191a1e68652121876d6b3bde40f4fa52bc314145ce6e5cdd259", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_anchors_raw_data@testnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_anchors_raw_data@testnet_1.snap new file mode 100644 index 00000000000..631aca38cb9 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_anchors_raw_data@testnet_1.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "d7c612c817793191a1e68652121876d6b3bde40f4fa52bc314145ce6e5cdd259", + v: "0001d7c612c817793191a1e68652121876d6b3bde40f4fa52bc314145ce6e5cdd259", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_anchors_raw_data@testnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_anchors_raw_data@testnet_2.snap new file mode 100644 index 00000000000..631aca38cb9 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_anchors_raw_data@testnet_2.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "d7c612c817793191a1e68652121876d6b3bde40f4fa52bc314145ce6e5cdd259", + v: "0001d7c612c817793191a1e68652121876d6b3bde40f4fa52bc314145ce6e5cdd259", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_note_commitment_tree_raw_data@mainnet_0.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_note_commitment_tree_raw_data@mainnet_0.snap new file mode 100644 index 00000000000..d6210355eda --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_note_commitment_tree_raw_data@mainnet_0.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000000", + v: "0000", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_note_commitment_tree_raw_data@mainnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_note_commitment_tree_raw_data@mainnet_1.snap new file mode 100644 index 00000000000..c79c0f4efd5 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_note_commitment_tree_raw_data@mainnet_1.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000001", + v: "0001d7c612c817793191a1e68652121876d6b3bde40f4fa52bc314145ce6e5cdd259", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_note_commitment_tree_raw_data@mainnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_note_commitment_tree_raw_data@mainnet_2.snap new file mode 100644 index 00000000000..f7ac48619b5 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_note_commitment_tree_raw_data@mainnet_2.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000002", + v: "0001d7c612c817793191a1e68652121876d6b3bde40f4fa52bc314145ce6e5cdd259", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_note_commitment_tree_raw_data@testnet_0.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_note_commitment_tree_raw_data@testnet_0.snap new file mode 100644 index 00000000000..d6210355eda --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_note_commitment_tree_raw_data@testnet_0.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000000", + v: "0000", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_note_commitment_tree_raw_data@testnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_note_commitment_tree_raw_data@testnet_1.snap new file mode 100644 index 00000000000..c79c0f4efd5 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_note_commitment_tree_raw_data@testnet_1.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000001", + v: "0001d7c612c817793191a1e68652121876d6b3bde40f4fa52bc314145ce6e5cdd259", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_note_commitment_tree_raw_data@testnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_note_commitment_tree_raw_data@testnet_2.snap new file mode 100644 index 00000000000..f7ac48619b5 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/sprout_note_commitment_tree_raw_data@testnet_2.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "00000002", + v: "0001d7c612c817793191a1e68652121876d6b3bde40f4fa52bc314145ce6e5cdd259", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tip_chain_value_pool_raw_data@mainnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tip_chain_value_pool_raw_data@mainnet_1.snap new file mode 100644 index 00000000000..4ee189bcac8 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tip_chain_value_pool_raw_data@mainnet_1.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "", + v: "24f4000000000000000000000000000000000000000000000000000000000000", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tip_chain_value_pool_raw_data@mainnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tip_chain_value_pool_raw_data@mainnet_2.snap new file mode 100644 index 00000000000..4f67e28019a --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tip_chain_value_pool_raw_data@mainnet_2.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "", + v: "6cdc020000000000000000000000000000000000000000000000000000000000", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tip_chain_value_pool_raw_data@testnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tip_chain_value_pool_raw_data@testnet_1.snap new file mode 100644 index 00000000000..4ee189bcac8 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tip_chain_value_pool_raw_data@testnet_1.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "", + v: "24f4000000000000000000000000000000000000000000000000000000000000", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tip_chain_value_pool_raw_data@testnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tip_chain_value_pool_raw_data@testnet_2.snap new file mode 100644 index 00000000000..4f67e28019a --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tip_chain_value_pool_raw_data@testnet_2.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "", + v: "6cdc020000000000000000000000000000000000000000000000000000000000", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tx_by_hash_raw_data@mainnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tx_by_hash_raw_data@mainnet_1.snap new file mode 100644 index 00000000000..38c80ed02be --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tx_by_hash_raw_data@mainnet_1.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "0946edb9c083c9942d92305444527765fad789c438c717783276a9f7fbf61b85", + v: "0000000100000000", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tx_by_hash_raw_data@mainnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tx_by_hash_raw_data@mainnet_2.snap new file mode 100644 index 00000000000..6b36e3ed3c0 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tx_by_hash_raw_data@mainnet_2.snap @@ -0,0 +1,16 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "0946edb9c083c9942d92305444527765fad789c438c717783276a9f7fbf61b85", + v: "0000000100000000", + ), + KV( + k: "f4b084a7c2fc5a5aa2985f2bcb1d4a9a65562a589d628b0d869c5f1c8dd07489", + v: "0000000200000000", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tx_by_hash_raw_data@testnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tx_by_hash_raw_data@testnet_1.snap new file mode 100644 index 00000000000..cf564f00a88 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tx_by_hash_raw_data@testnet_1.snap @@ -0,0 +1,12 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "755f7c7d27a811596e9fae6dd30ca45be86e901d499909de35b6ff1f699f7ef3", + v: "0000000100000000", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tx_by_hash_raw_data@testnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tx_by_hash_raw_data@testnet_2.snap new file mode 100644 index 00000000000..dcb07e782b0 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/tx_by_hash_raw_data@testnet_2.snap @@ -0,0 +1,16 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "755f7c7d27a811596e9fae6dd30ca45be86e901d499909de35b6ff1f699f7ef3", + v: "0000000100000000", + ), + KV( + k: "d5b3ccfd5e7828c4b2d221bae3178c500e21d33399c39a2508a0a82d53c02258", + v: "0000000200000000", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/utxo_by_outpoint_raw_data@mainnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/utxo_by_outpoint_raw_data@mainnet_1.snap new file mode 100644 index 00000000000..8551b75ce99 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/utxo_by_outpoint_raw_data@mainnet_1.snap @@ -0,0 +1,16 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "0946edb9c083c9942d92305444527765fad789c438c717783276a9f7fbf61b8500000000", + v: "000000010150c30000000000002321027a46eb513588b01b37ea24303f4b628afd12cc20df789fede0921e43cad3e875ac", + ), + KV( + k: "0946edb9c083c9942d92305444527765fad789c438c717783276a9f7fbf61b8501000000", + v: "0000000101d43000000000000017a9147d46a730d31f97b1930d3368a967c309bd4d136a87", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/utxo_by_outpoint_raw_data@mainnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/utxo_by_outpoint_raw_data@mainnet_2.snap new file mode 100644 index 00000000000..d875f4861fc --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/utxo_by_outpoint_raw_data@mainnet_2.snap @@ -0,0 +1,24 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "0946edb9c083c9942d92305444527765fad789c438c717783276a9f7fbf61b8500000000", + v: "000000010150c30000000000002321027a46eb513588b01b37ea24303f4b628afd12cc20df789fede0921e43cad3e875ac", + ), + KV( + k: "0946edb9c083c9942d92305444527765fad789c438c717783276a9f7fbf61b8501000000", + v: "0000000101d43000000000000017a9147d46a730d31f97b1930d3368a967c309bd4d136a87", + ), + KV( + k: "f4b084a7c2fc5a5aa2985f2bcb1d4a9a65562a589d628b0d869c5f1c8dd0748900000000", + v: "0000000201a0860100000000002321027a46eb513588b01b37ea24303f4b628afd12cc20df789fede0921e43cad3e875ac", + ), + KV( + k: "f4b084a7c2fc5a5aa2985f2bcb1d4a9a65562a589d628b0d869c5f1c8dd0748901000000", + v: "0000000201a86100000000000017a9147d46a730d31f97b1930d3368a967c309bd4d136a87", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/utxo_by_outpoint_raw_data@testnet_1.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/utxo_by_outpoint_raw_data@testnet_1.snap new file mode 100644 index 00000000000..acde1bb1445 --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/utxo_by_outpoint_raw_data@testnet_1.snap @@ -0,0 +1,16 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "755f7c7d27a811596e9fae6dd30ca45be86e901d499909de35b6ff1f699f7ef300000000", + v: "000000010150c30000000000002321025229e1240a21004cf8338db05679fa34753706e84f6aebba086ba04317fd8f99ac", + ), + KV( + k: "755f7c7d27a811596e9fae6dd30ca45be86e901d499909de35b6ff1f699f7ef301000000", + v: "0000000101d43000000000000017a914ef775f1f997f122a062fff1a2d7443abd1f9c64287", + ), +] diff --git a/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/utxo_by_outpoint_raw_data@testnet_2.snap b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/utxo_by_outpoint_raw_data@testnet_2.snap new file mode 100644 index 00000000000..8a944fc9e1c --- /dev/null +++ b/zebra-state/src/service/finalized_state/disk_format/tests/snapshots/utxo_by_outpoint_raw_data@testnet_2.snap @@ -0,0 +1,24 @@ +--- +source: zebra-state/src/service/finalized_state/disk_format/tests/snapshot.rs +assertion_line: 125 +expression: cf_data + +--- +[ + KV( + k: "755f7c7d27a811596e9fae6dd30ca45be86e901d499909de35b6ff1f699f7ef300000000", + v: "000000010150c30000000000002321025229e1240a21004cf8338db05679fa34753706e84f6aebba086ba04317fd8f99ac", + ), + KV( + k: "755f7c7d27a811596e9fae6dd30ca45be86e901d499909de35b6ff1f699f7ef301000000", + v: "0000000101d43000000000000017a914ef775f1f997f122a062fff1a2d7443abd1f9c64287", + ), + KV( + k: "d5b3ccfd5e7828c4b2d221bae3178c500e21d33399c39a2508a0a82d53c0225800000000", + v: "0000000201a086010000000000232102acce9f6c16986c525fd34759d851ef5b4b85b5019a57bd59747be0ef1ba62523ac", + ), + KV( + k: "d5b3ccfd5e7828c4b2d221bae3178c500e21d33399c39a2508a0a82d53c0225801000000", + v: "0000000201a86100000000000017a914ef775f1f997f122a062fff1a2d7443abd1f9c64287", + ), +] diff --git a/zebra-test/Cargo.toml b/zebra-test/Cargo.toml index 40bce0ca3dc..0c3d2b06e3e 100644 --- a/zebra-test/Cargo.toml +++ b/zebra-test/Cargo.toml @@ -11,6 +11,7 @@ edition = "2021" hex = "0.4.3" lazy_static = "1.4.0" once_cell = "1.9" +insta = "1.12.0" proptest = "0.10.1" rand = "0.8" regex = "1.5.4" diff --git a/zebra-test/src/lib.rs b/zebra-test/src/lib.rs index 716f07f0952..2caa5afc57a 100644 --- a/zebra-test/src/lib.rs +++ b/zebra-test/src/lib.rs @@ -50,9 +50,21 @@ pub static RUNTIME: Lazy = Lazy::new(|| { static INIT: Once = Once::new(); -/// Initialize globals for tests such as the tracing subscriber and panic / error -/// reporting hooks +/// Initialize global and thread-specific settings for tests, +/// such as tracing configs, panic hooks, and `cargo insta` settings. +/// +/// This function should be called at the start of every test. pub fn init() { + // Per-test + + // Settings for threads that snapshots data using `insta` + + let mut settings = insta::Settings::clone_current(); + settings.set_prepend_module_to_snapshot(false); + settings.bind_to_thread(); + + // Globals + INIT.call_once(|| { let fmt_layer = fmt::layer().with_target(false); // Use the RUST_LOG env var, or by default: From d08b13da73b7090402679151efd1d5d2f9baaf13 Mon Sep 17 00:00:00 2001 From: teor Date: Wed, 2 Mar 2022 18:53:00 +1000 Subject: [PATCH 5/6] fix(zebrad/test): use the correct stop condition for the cached state tests (#3688) --- zebrad/tests/acceptance.rs | 47 ++++++++++++-------------------------- 1 file changed, 15 insertions(+), 32 deletions(-) diff --git a/zebrad/tests/acceptance.rs b/zebrad/tests/acceptance.rs index 7c857171889..8df54ac58fd 100644 --- a/zebrad/tests/acceptance.rs +++ b/zebrad/tests/acceptance.rs @@ -1247,12 +1247,9 @@ fn cached_mandatory_checkpoint_test_config() -> Result { /// /// If `check_legacy_chain` is true, make sure the logs contain the legacy chain check. /// -/// Callers can supply an extra `test_child_predicate`, which is called on -/// the `TestChild` between the startup checks, and the final -/// `STOP_AT_HEIGHT_REGEX` check. -/// -/// The `TestChild` is spawned with a timeout, so the predicate should use -/// `expect_stdout_line_matches` or `expect_stderr_line_matches`. +/// The test passes when `zebrad` logs the `stop_regex`. +/// Typically this is `STOP_AT_HEIGHT_REGEX`, +/// with an extra check for checkpoint or full validation. /// /// This test ignores the `ZEBRA_SKIP_NETWORK_TESTS` env var. /// @@ -1260,16 +1257,13 @@ fn cached_mandatory_checkpoint_test_config() -> Result { /// /// Returns an error if the child exits or the fixed timeout elapses /// before `STOP_AT_HEIGHT_REGEX` is found. -fn create_cached_database_height

( +fn create_cached_database_height( network: Network, height: Height, debug_skip_parameter_preload: bool, checkpoint_sync: bool, - test_child_predicate: impl Into>, -) -> Result<()> -where - P: FnOnce(&mut TestChild) -> Result<()>, -{ + stop_regex: &str, +) -> Result<()> { println!("Creating cached database"); // 16 hours let timeout = Duration::from_secs(60 * 60 * 16); @@ -1295,11 +1289,7 @@ where child.expect_stdout_line_matches("starting legacy chain check")?; child.expect_stdout_line_matches("no legacy chain found")?; - if let Some(test_child_predicate) = test_child_predicate.into() { - test_child_predicate(&mut child)?; - } - - child.expect_stdout_line_matches(STOP_AT_HEIGHT_REGEX)?; + child.expect_stdout_line_matches(stop_regex)?; child.kill()?; @@ -1308,38 +1298,31 @@ where fn create_cached_database(network: Network) -> Result<()> { let height = network.mandatory_checkpoint_height(); + let checkpoint_stop_regex = format!("{}.*CommitFinalized request", STOP_AT_HEIGHT_REGEX); + create_cached_database_height( network, height, true, // Use checkpoints to increase sync performance while caching the database true, - |test_child: &mut TestChild| { - // make sure pre-cached databases finish before the mandatory checkpoint - // - // TODO: this check passes even if we reach the mandatory checkpoint, - // because we sync finalized state, then non-finalized state. - // Instead, fail if we see "best non-finalized chain root" in the logs. - test_child.expect_stdout_line_matches("CommitFinalized request")?; - Ok(()) - }, + // Check that we're still using checkpoints when we finish the cached sync + &checkpoint_stop_regex, ) } fn sync_past_mandatory_checkpoint(network: Network) -> Result<()> { let height = network.mandatory_checkpoint_height() + 1200; + let full_validation_stop_regex = + format!("{}.*best non-finalized chain root", STOP_AT_HEIGHT_REGEX); + create_cached_database_height( network, height.unwrap(), false, // Test full validation by turning checkpoints off false, - |test_child: &mut TestChild| { - // make sure cached database tests finish after the mandatory checkpoint, - // using the non-finalized state (the checkpoint_sync config must be false) - test_child.expect_stdout_line_matches("best non-finalized chain root")?; - Ok(()) - }, + &full_validation_stop_regex, ) } From a0c451223f9e352bf461204931c5d6677bb59c2d Mon Sep 17 00:00:00 2001 From: Gustavo Valverde Date: Wed, 2 Mar 2022 05:00:55 -0400 Subject: [PATCH 6/6] feat(lightwalletd): add build and CI pipeline (#3657) * add(actions): lightwalletd continous integrations * refactor(actions): build lightwalletd and reuse it in zebra - Download lightwalletd source code - Create a new Dockerfile for lightwalletd - Use lightwalletd binary in Zebra's image - Create a specific step to build/update lightwalletd - Add lightwalletd integration test to the test suite - Remove lightwalletd.yml, as it was harder to control * fix(build): remove extra port being exposed * fix(lightwalletd): test should be after `--` in cargo test * revert(lint): do not lint external code as it can be confusing * fix(test): lightwalletd_integration test is not ignored * docs(docker): clarify the addition of unused args * refactor(docker): organize Dockerfiles and remove unused Fixes: #3344 * fix(actions): activate workflows on correct path changes * test * revert previous commit * feat(build): add arm64 support with cross-compilation (#3659) * feat(build): add arrm64 support * fix(build): do not install google-compute-engine in arm64 This package is not available for this platform * fix(build): do not build arm64 for tests * fix(changes): reduce changelog * Revert "feat(build): add arm64 support with cross-compilation (#3659)" This reverts commit 291e00c4050e0ad9ae3f87397bdfebb77492543a. --- .github/workflows/cd.yml | 2 +- .github/workflows/ci.patch.yml | 1 - .github/workflows/test.yml | 22 +++++- .github/workflows/zcash-lightwalletd.yml | 73 +++++++++++++++++++ .github/workflows/zcash-params.yml | 3 +- docker/{Dockerfile.build => Dockerfile} | 1 + docker/Dockerfile.test | 30 -------- docker/zcash-lightwalletd/Dockerfile | 61 ++++++++++++++++ .../Dockerfile} | 0 9 files changed, 159 insertions(+), 34 deletions(-) create mode 100644 .github/workflows/zcash-lightwalletd.yml rename docker/{Dockerfile.build => Dockerfile} (97%) delete mode 100644 docker/Dockerfile.test create mode 100644 docker/zcash-lightwalletd/Dockerfile rename docker/{Dockerfile.params => zcash-params/Dockerfile} (100%) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 77bae1bef9f..85c8f867741 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -67,7 +67,7 @@ jobs: with: target: runtime context: . - file: ./docker/Dockerfile.build + file: ./docker/Dockerfile tags: | ${{ env.GAR_BASE }}/${{ env.GITHUB_HEAD_REF_SLUG_URL || env.GITHUB_REF_SLUG_URL }}:latest ${{ env.GAR_BASE }}/${{ env.GITHUB_HEAD_REF_SLUG_URL || env.GITHUB_REF_SLUG_URL }}:${{ env.GITHUB_SHA_SHORT }} diff --git a/.github/workflows/ci.patch.yml b/.github/workflows/ci.patch.yml index 6257040e116..d5525509f7f 100644 --- a/.github/workflows/ci.patch.yml +++ b/.github/workflows/ci.patch.yml @@ -8,7 +8,6 @@ on: - '**/Cargo.toml' - '**/Cargo.lock' - '**/deny.toml' - - 'docker/**' - '.github/workflows/ci.yml' jobs: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d7c6b3672ed..53db50a2e95 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -72,7 +72,7 @@ jobs: with: target: tester context: . - file: ./docker/Dockerfile.build + file: ./docker/Dockerfile tags: | ${{ env.GAR_BASE }}/${{ env.IMAGE_NAME }}:latest ${{ env.GAR_BASE }}/${{ env.IMAGE_NAME }}:${{ env.GITHUB_EVENT_PULL_REQUEST_HEAD_SHA_SHORT || env.GITHUB_SHA_SHORT }} @@ -146,6 +146,26 @@ jobs: docker pull ${{ env.GAR_BASE }}/${{ env.IMAGE_NAME }}:${{ env.GITHUB_EVENT_PULL_REQUEST_HEAD_SHA_SHORT || env.GITHUB_SHA_SHORT }} docker run -e ZEBRA_SKIP_IPV6_TESTS --name zebrad-tests -t ${{ env.GAR_BASE }}/${{ env.IMAGE_NAME }}:${{ env.GITHUB_EVENT_PULL_REQUEST_HEAD_SHA_SHORT || env.GITHUB_SHA_SHORT }} cargo test --locked --release --features enable-sentry --test acceptance sync_large_checkpoints_ -- --ignored + test-lightwalletd-integration: + name: Test integration with lightwalletd + runs-on: ubuntu-latest + needs: build + if: ${{ github.event.inputs.regenerate-disks != 'true' }} + steps: + - uses: actions/checkout@v2.4.0 + with: + persist-credentials: false + + - name: Inject slug/short variables + uses: rlespinasse/github-slug-action@v4 + + - name: Run tests with included lightwalletd binary + run: | + docker pull ${{ env.GAR_BASE }}/zebrad-test:${{ env.GITHUB_EVENT_PULL_REQUEST_HEAD_SHA_SHORT || env.GITHUB_SHA_SHORT }} + docker run -e ZEBRA_SKIP_IPV6_TESTS -e ZEBRA_TEST_LIGHTWALLETD --name zebrad-tests -t ${{ env.GAR_BASE }}/zebrad-test:${{ env.GITHUB_EVENT_PULL_REQUEST_HEAD_SHA_SHORT || env.GITHUB_SHA_SHORT }} cargo test --locked --release --features enable-sentry --test acceptance -- lightwalletd_integration + env: + ZEBRA_TEST_LIGHTWALLETD: '1' + regenerate-stateful-disks: name: Regenerate stateful disks runs-on: ubuntu-latest diff --git a/.github/workflows/zcash-lightwalletd.yml b/.github/workflows/zcash-lightwalletd.yml new file mode 100644 index 00000000000..bb76ee76a88 --- /dev/null +++ b/.github/workflows/zcash-lightwalletd.yml @@ -0,0 +1,73 @@ +name: zcash-lightwalletd + +on: + workflow_dispatch: + push: + branches: + - 'main' + paths: + - 'zebra-rpc/**' + - 'zebrad/tests/acceptance.rs' + - 'zebrad/src/config.rs' + - 'zebrad/src/commands/start.rs' + - 'docker/zcash-lightwalletd/Dockerfile' + - '.github/workflows/zcash-lightwalletd.yml' + +env: + PROJECT_ID: ${{ secrets.GCP_PROJECT_ID }} + GAR_BASE: us-docker.pkg.dev/${{ secrets.GCP_PROJECT_ID }}/zebra + GCR_BASE: gcr.io/${{ secrets.GCP_PROJECT_ID }} + IMAGE_NAME: lightwalletd + +jobs: + build: + name: Build images + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2.4.0 + with: + repository: adityapk00/lightwalletd + ref: 'master' + persist-credentials: false + + - uses: actions/checkout@v2.4.0 + with: + path: zebra + persist-credentials: false + + - name: Inject slug/short variables + uses: rlespinasse/github-slug-action@v4 + + # Setup gcloud CLI + - name: Authenticate to Google Cloud + id: auth + uses: google-github-actions/auth@v0.6.0 + with: + credentials_json: ${{ secrets.GOOGLE_CREDENTIALS }} + + # Setup Docker Buildx to allow use of docker cache layers from GH + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Login to Google Artifact Registry + uses: docker/login-action@v1.12.0 + with: + registry: us-docker.pkg.dev + username: _json_key + password: ${{ secrets.GOOGLE_CREDENTIALS }} + + # Build and push image to Google Artifact Registry + - name: Build & push + id: docker_build + uses: docker/build-push-action@v2.9.0 + with: + target: builder + context: . + file: ./zebra/docker/zcash-lightwalletd/Dockerfile + tags: | + ${{ env.GAR_BASE }}/${{ env.IMAGE_NAME }}:latest + ${{ env.GAR_BASE }}/${{ env.IMAGE_NAME }}:${{ env.GITHUB_SHA_SHORT }} + push: true + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/.github/workflows/zcash-params.yml b/.github/workflows/zcash-params.yml index 475bda82396..129cb64a289 100644 --- a/.github/workflows/zcash-params.yml +++ b/.github/workflows/zcash-params.yml @@ -9,6 +9,7 @@ on: - 'zebra-consensus/src/primitives/groth16/params.rs' - 'zebra-consensus/src/chain.rs' - 'zebrad/src/commands/start.rs' + - 'docker/zcash-params/Dockerfile' - '.github/workflows/zcash-params.yml' env: @@ -57,7 +58,7 @@ jobs: with: target: builder context: . - file: ./docker/Dockerfile.params + file: ./docker/zcash-params/Dockerfile tags: | ${{ env.GAR_BASE }}/${{ env.IMAGE_NAME }}:latest ${{ env.GAR_BASE }}/${{ env.IMAGE_NAME }}:${{ env.GITHUB_SHA_SHORT }} diff --git a/docker/Dockerfile.build b/docker/Dockerfile similarity index 97% rename from docker/Dockerfile.build rename to docker/Dockerfile index b599474afe5..6eb413b64df 100644 --- a/docker/Dockerfile.build +++ b/docker/Dockerfile @@ -56,6 +56,7 @@ FROM builder AS tester # Pre-download Zcash Sprout and Sapling parameters # TODO: do not hardcode the user /root/ even though is a safe assumption COPY --from=us-docker.pkg.dev/zealous-zebra/zebra/zcash-params /root/.zcash-params /root/.zcash-params +COPY --from=us-docker.pkg.dev/zealous-zebra/zebra/lightwalletd /lightwalletd /usr/local/bin # Skip IPv6 tests by default, as some CI environment don't have IPv6 available ARG ZEBRA_SKIP_IPV6_TESTS=1 diff --git a/docker/Dockerfile.test b/docker/Dockerfile.test deleted file mode 100644 index b479050ba42..00000000000 --- a/docker/Dockerfile.test +++ /dev/null @@ -1,30 +0,0 @@ -FROM rust:buster - -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - make cmake g++ gcc llvm libclang-dev clang - -RUN mkdir /zebra -WORKDIR /zebra - -ARG SHORT_SHA -ENV SHORT_SHA $SHORT_SHA - -ENV RUST_BACKTRACE full -ENV CARGO_HOME /zebra/.cargo/ -# Optimize builds. In particular, regenerate-stateful-test-disks.yml was reaching the -# GitHub Actions time limit (6 hours), so we needed to make it faster. -ENV RUSTFLAGS -O - -RUN rustc -V; cargo -V; rustup -V - -EXPOSE 8233 18233 - -COPY . . - -# Pre-download Zcash Sprout and Sapling parameters -RUN cargo run --verbose --bin zebrad download - -RUN cargo test --all --no-run - -CMD cargo test --workspace --no-fail-fast -- -Zunstable-options --include-ignored diff --git a/docker/zcash-lightwalletd/Dockerfile b/docker/zcash-lightwalletd/Dockerfile new file mode 100644 index 00000000000..9dbe46f1f34 --- /dev/null +++ b/docker/zcash-lightwalletd/Dockerfile @@ -0,0 +1,61 @@ +ARG ZCASHD_CONF_PATH=/etc/zcash.conf +ARG LWD_GRPC_PORT=9067 +ARG LWD_HTTP_PORT=9068 + +## +## Build +## +FROM golang:1.17 AS build + +# Create and change to the app directory. +WORKDIR /app + +# Retrieve application dependencies. +# This allows the container build to reuse cached dependencies. +# Expecting to copy go.mod and if present go.sum. +COPY go.mod ./ +COPY go.sum ./ + +# Do not use `go get` as it updates the requirements listed in your go.mod file. +# `go mod download` does not add new requirements or update existing requirements. +RUN go mod download + +# Copy local code to the container image. +COPY . ./ + +# Build and install the binary. +RUN go build -v -o /lightwalletd + +ARG ZCASHD_CONF_PATH + +RUN set -ex; \ + { \ + echo "rpcuser=zcashrpc"; \ + echo "rpcpassword=`head /dev/urandom | tr -dc A-Za-z0-9 | head -c 13 ; echo ''`" \ + echo "rpcbind=127.0.0.1"; \ + echo "rpcport=8232"; \ + } > "${ZCASHD_CONF_PATH}" + +ENTRYPOINT ["/lightwalletd"] +CMD ["--no-tls-very-insecure", "--grpc-bind-addr=0.0.0.0:9067", "--http-bind-addr=0.0.0.0:9068", "--log-file=/dev/stdout", "--log-level=7"] + +## +## Deploy +## +FROM debian:bullseye-slim as runtime + +ARG ZCASHD_CONF_PATH +# Maintain backward compatibility with mainstream repo using this ARGs in docker-compose +ARG LWD_GRPC_PORT +ARG LWD_HTTP_PORT + +WORKDIR / + +COPY --from=build /lightwalletd /usr/local/bin +COPY --from=build $ZCASHD_CONF_PATH ./ + +EXPOSE 9067 +EXPOSE 9068 + +ENTRYPOINT ["lightwalletd"] +CMD ["--no-tls-very-insecure", "--grpc-bind-addr=0.0.0.0:9067", "--http-bind-addr=0.0.0.0:9068", "--log-file=/dev/stdout", "--log-level=7"] diff --git a/docker/Dockerfile.params b/docker/zcash-params/Dockerfile similarity index 100% rename from docker/Dockerfile.params rename to docker/zcash-params/Dockerfile