From 42baa54a4c48d1961d61af401a24f382a5ed3487 Mon Sep 17 00:00:00 2001 From: teor Date: Mon, 6 Feb 2023 08:03:44 +1000 Subject: [PATCH] Fix off-by-one error in confirmations --- zebra-rpc/src/methods.rs | 4 +++- .../get_block_verbose_hash_verbosity_1@mainnet_10.snap | 2 +- .../get_block_verbose_hash_verbosity_1@testnet_10.snap | 2 +- .../get_block_verbose_hash_verbosity_default@mainnet_10.snap | 2 +- .../get_block_verbose_hash_verbosity_default@testnet_10.snap | 2 +- zebra-rpc/src/methods/tests/vectors.rs | 4 ++-- 6 files changed, 9 insertions(+), 7 deletions(-) diff --git a/zebra-rpc/src/methods.rs b/zebra-rpc/src/methods.rs index d061bb3a6f7..9f736d56088 100644 --- a/zebra-rpc/src/methods.rs +++ b/zebra-rpc/src/methods.rs @@ -677,7 +677,9 @@ where })?; match response { - zebra_state::ReadResponse::Depth(Some(depth)) => Some(depth.into()), + // Confirmations are one more than the depth. + // Depth is limited by height, so it will never overflow an i64. + zebra_state::ReadResponse::Depth(Some(depth)) => Some(i64::from(depth) + 1), zebra_state::ReadResponse::Depth(None) => { Some(NOT_IN_BEST_CHAIN_CONFIRMATIONS) } diff --git a/zebra-rpc/src/methods/tests/snapshots/get_block_verbose_hash_verbosity_1@mainnet_10.snap b/zebra-rpc/src/methods/tests/snapshots/get_block_verbose_hash_verbosity_1@mainnet_10.snap index bc9d6b14e8a..d4d6b540a83 100644 --- a/zebra-rpc/src/methods/tests/snapshots/get_block_verbose_hash_verbosity_1@mainnet_10.snap +++ b/zebra-rpc/src/methods/tests/snapshots/get_block_verbose_hash_verbosity_1@mainnet_10.snap @@ -4,7 +4,7 @@ expression: block --- { "hash": "0007bc227e1c57a4a70e237cad00e7b7ce565155ab49166bc57397a26d339283", - "confirmations": 9, + "confirmations": 10, "tx": [ "851bf6fbf7a976327817c738c489d7fa657752445430922d94c983c0b9ed4609" ] diff --git a/zebra-rpc/src/methods/tests/snapshots/get_block_verbose_hash_verbosity_1@testnet_10.snap b/zebra-rpc/src/methods/tests/snapshots/get_block_verbose_hash_verbosity_1@testnet_10.snap index 2285ae4c46f..393f918ebef 100644 --- a/zebra-rpc/src/methods/tests/snapshots/get_block_verbose_hash_verbosity_1@testnet_10.snap +++ b/zebra-rpc/src/methods/tests/snapshots/get_block_verbose_hash_verbosity_1@testnet_10.snap @@ -4,7 +4,7 @@ expression: block --- { "hash": "025579869bcf52a989337342f5f57a84f3a28b968f7d6a8307902b065a668d23", - "confirmations": 9, + "confirmations": 10, "tx": [ "f37e9f691fffb635de0999491d906ee85ba40cd36dae9f6e5911a8277d7c5f75" ] diff --git a/zebra-rpc/src/methods/tests/snapshots/get_block_verbose_hash_verbosity_default@mainnet_10.snap b/zebra-rpc/src/methods/tests/snapshots/get_block_verbose_hash_verbosity_default@mainnet_10.snap index bc9d6b14e8a..d4d6b540a83 100644 --- a/zebra-rpc/src/methods/tests/snapshots/get_block_verbose_hash_verbosity_default@mainnet_10.snap +++ b/zebra-rpc/src/methods/tests/snapshots/get_block_verbose_hash_verbosity_default@mainnet_10.snap @@ -4,7 +4,7 @@ expression: block --- { "hash": "0007bc227e1c57a4a70e237cad00e7b7ce565155ab49166bc57397a26d339283", - "confirmations": 9, + "confirmations": 10, "tx": [ "851bf6fbf7a976327817c738c489d7fa657752445430922d94c983c0b9ed4609" ] diff --git a/zebra-rpc/src/methods/tests/snapshots/get_block_verbose_hash_verbosity_default@testnet_10.snap b/zebra-rpc/src/methods/tests/snapshots/get_block_verbose_hash_verbosity_default@testnet_10.snap index 2285ae4c46f..393f918ebef 100644 --- a/zebra-rpc/src/methods/tests/snapshots/get_block_verbose_hash_verbosity_default@testnet_10.snap +++ b/zebra-rpc/src/methods/tests/snapshots/get_block_verbose_hash_verbosity_default@testnet_10.snap @@ -4,7 +4,7 @@ expression: block --- { "hash": "025579869bcf52a989337342f5f57a84f3a28b968f7d6a8307902b065a668d23", - "confirmations": 9, + "confirmations": 10, "tx": [ "f37e9f691fffb635de0999491d906ee85ba40cd36dae9f6e5911a8277d7c5f75" ] diff --git a/zebra-rpc/src/methods/tests/vectors.rs b/zebra-rpc/src/methods/tests/vectors.rs index 4f3f45277c2..4e08242ab5b 100644 --- a/zebra-rpc/src/methods/tests/vectors.rs +++ b/zebra-rpc/src/methods/tests/vectors.rs @@ -151,7 +151,7 @@ async fn rpc_getblock() { get_block, GetBlock::Object { hash: Some(GetBlockHash(block.hash())), - confirmations: Some((blocks.len() - i - 1).try_into().expect("valid i64")), + confirmations: Some((blocks.len() - i).try_into().expect("valid i64")), height: None, tx: block .transactions @@ -195,7 +195,7 @@ async fn rpc_getblock() { get_block, GetBlock::Object { hash: Some(GetBlockHash(block.hash())), - confirmations: Some((blocks.len() - i - 1).try_into().expect("valid i64")), + confirmations: Some((blocks.len() - i).try_into().expect("valid i64")), height: None, tx: block .transactions