diff --git a/zebra-test/src/vectors/block.rs b/zebra-test/src/vectors/block.rs index b72f2af8..d5b9dc75 100644 --- a/zebra-test/src/vectors/block.rs +++ b/zebra-test/src/vectors/block.rs @@ -862,6 +862,10 @@ lazy_static! { pub static ref SAPLING_FINAL_ROOT_TESTNET_1599199_BYTES: [u8; 32] = <[u8; 32]>::from_hex("4de75d10def701ad22ecc17517a3adc8789ea8c214ac5bfc917b8924377e6c89") .expect("final root bytes are in valid hex representation").rev(); + + // Sapling note commitment tree. + pub static ref SAPLING_TREESTATE_MAINNET_419201_STRING: String = + String::from(include_str!("sapling-treestate-main-0-419-201.txt")); } #[cfg(test)] diff --git a/zebra-test/src/vectors/sapling-treestate-main-0-419-201.txt b/zebra-test/src/vectors/sapling-treestate-main-0-419-201.txt new file mode 100644 index 00000000..c6cd1b53 --- /dev/null +++ b/zebra-test/src/vectors/sapling-treestate-main-0-419-201.txt @@ -0,0 +1 @@ +019eb30778ddeea84c72e69e07a1689f3c8def3dc0a1939f0edcbe47279069d9310002000150715810d52caf35471d10feb487213fbd95ff209122225b7b65d27a7fb1a44d \ No newline at end of file diff --git a/zebrad/tests/common/lightwalletd/wallet_grpc_test.rs b/zebrad/tests/common/lightwalletd/wallet_grpc_test.rs index 8ed2f5c7..6eb8ab66 100644 --- a/zebrad/tests/common/lightwalletd/wallet_grpc_test.rs +++ b/zebrad/tests/common/lightwalletd/wallet_grpc_test.rs @@ -1,17 +1,19 @@ -//! Test all grpc calls a wallet connected to a lightwalletd instance backed by zebra can do. +//! Test all gRPC calls a wallet connected to a lightwalletd instance backed by +//! zebra can do. //! -//! This test requires a cached chain state that is partially synchronized, i.e., it should be a -//! few blocks below the network chain tip height. It also requires a lightwalletd data dir in sync -//! with the cached chain state. +//! This test requires a cached chain state that is partially synchronized, +//! i.e., it should be a few blocks below the network chain tip height. It also +//! requires a lightwalletd data dir in sync with the cached chain state. //! -//! Current coverage of all available rpc methods according to `CompactTxStreamer`: +//! Current coverage of all available rpc methods according to +//! `CompactTxStreamer`: //! //! - `GetLatestBlock`: Covered. //! - `GetBlock`: Covered. //! - `GetBlockRange`: Covered. //! //! - `GetTransaction`: Covered. -//! - `SendTransaction`: Not covered and it will never will, it has its own test. +//! - `SendTransaction`: Not covered and it will never be, it has its own test. //! //! - `GetTaddressTxids`: Covered. //! - `GetTaddressBalance`: Covered. @@ -20,13 +22,14 @@ //! - `GetMempoolTx`: Not covered. //! - `GetMempoolStream`: Not covered. //! -//! - `GetTreeState`: Not covered, Need #3990 +//! - `GetTreeState`: Covered. //! -//! - `GetAddressUtxos` -= Covered. +//! - `GetAddressUtxos`: Covered. //! - `GetAddressUtxosStream`: Covered. //! //! - `GetLightdInfo`: Covered. -//! - `Ping`: Not covered and it will never will, ping is only used for testing purposes. +//! - `Ping`: Not covered and it will never be. `Ping` is only used for testing +//! purposes. use color_eyre::eyre::Result; @@ -256,17 +259,33 @@ pub async fn run() -> Result<()> { // TODO: Create call and checks for `GetMempoolTx` and `GetMempoolTxStream`? - // TODO: Activate after #3990 is merged - // Currently, this call fails as the method is not available - /* - // Call `GetTreeState` for block 1. - let tree_state = rpc_client.get_tree_state(BlockId { - height: 1, - hash: vec![] - }).await?.into_inner(); + let sapling_treestate_init_height = sapling_activation_height + 1; - dbg!(tree_state); - */ + // Call `GetTreeState`. + let treestate = rpc_client + .get_tree_state(BlockId { + height: sapling_treestate_init_height, + hash: vec![], + }) + .await? + .into_inner(); + + // Check that the network is correct. + assert_eq!(treestate.network, "main"); + // Check that the height is correct. + assert_eq!(treestate.height, sapling_treestate_init_height); + // Check that the hash is correct. + assert_eq!( + treestate.hash, + "00000000014d117faa2ea701b24261d364a6c6a62e5bc4bc27335eb9b3c1e2a8" + ); + // Check that the time is correct. + assert_eq!(treestate.time, 1540779438); + // Check that the note commitment tree is correct. + assert_eq!( + treestate.tree, + *zebra_test::vectors::SAPLING_TREESTATE_MAINNET_419201_STRING + ); // Call `GetAddressUtxos` with the ZF funding stream address that will always have utxos let utxos = rpc_client