Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions packages/zaino-state/src/backends.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,29 @@
pub mod fetch;

pub mod state;

fn latest_network_upgrade(
upgrades: &indexmap::IndexMap<
zebra_rpc::methods::ConsensusBranchIdHex,
zebra_rpc::methods::NetworkUpgradeInfo,
>,
) -> Result<&zebra_rpc::methods::NetworkUpgradeInfo, tonic::Status> {
upgrades.last().map(|(_, upgrade)| upgrade).ok_or_else(|| {
tonic::Status::failed_precondition("validator returned no network upgrade metadata")
})
}

#[cfg(test)]
mod tests {
#[test]
fn latest_network_upgrade_rejects_empty_metadata() {
let upgrades = indexmap::IndexMap::new();
let err = super::latest_network_upgrade(&upgrades).expect_err("empty upgrades must fail");

assert_eq!(err.code(), tonic::Code::FailedPrecondition);
assert_eq!(
err.message(),
"validator returned no network upgrade metadata"
);
}
}
11 changes: 4 additions & 7 deletions packages/zaino-state/src/backends/fetch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1957,15 +1957,12 @@ impl LightWalletIndexer for FetchServiceSubscriber {
)
.to_string();

let nu_info = blockchain_info
.upgrades()
.last()
.expect("Expected validator to have a consenus activated.")
.1
let latest_upgrade = super::latest_network_upgrade(blockchain_info.upgrades())
.map_err(FetchServiceError::TonicStatusError)?
.into_parts();

let nu_name = nu_info.0;
let nu_height = nu_info.1;
let nu_name = latest_upgrade.0;
let nu_height = latest_upgrade.1;

Ok(LightdInfo {
version: self.data.build_info().version(),
Expand Down
11 changes: 4 additions & 7 deletions packages/zaino-state/src/backends/state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2609,15 +2609,12 @@ impl LightWalletIndexer for StateServiceSubscriber {
)
.to_string();

let nu_info = blockchain_info
.upgrades()
.last()
.expect("Expected validator to have a consenus activated.")
.1
let latest_upgrade = super::latest_network_upgrade(blockchain_info.upgrades())
.map_err(StateServiceError::TonicStatusError)?
.into_parts();

let nu_name = nu_info.0;
let nu_height = nu_info.1;
let nu_name = latest_upgrade.0;
let nu_height = latest_upgrade.1;

Ok(LightdInfo {
version: self.data.build_info().version(),
Expand Down