diff --git a/api/src/public.rs b/api/src/public.rs index d5888e4fd4a..5d69e8a5023 100644 --- a/api/src/public.rs +++ b/api/src/public.rs @@ -9,8 +9,8 @@ use futures::{stream::FuturesUnordered, StreamExt}; use jsonrpc_core::BoxFuture; use models::address::{AddressHashMap, AddressHashSet}; use models::api::{ - APIConfig, AddressInfo, BlockInfo, BlockInfoContent, BlockSummary, EndorsementInfo, NodeStatus, - OperationInfo, TimeInterval, + APIConfig, AddressInfo, BlockInfo, BlockInfoContent, BlockSummary, EndorsementInfo, + IndexedSlot, NodeStatus, OperationInfo, TimeInterval, }; use models::clique::Clique; use models::crypto::PubkeySig; @@ -415,7 +415,19 @@ impl Endpoints for API { .filter(|(_, (ad, _))| *ad == address) .map(|(slot, _)| *slot) .collect(), - endorsement_draws: Default::default(), // TODO: update wait for !238 + endorsement_draws: next_draws + .iter() + .map(|(slot, (_, addrs))| { + addrs.iter().enumerate().filter_map(|(index, ad)| { + if *ad == address { + Some(IndexedSlot { slot: *slot, index }) + } else { + None + } + }) + }) + .flatten() + .collect(), blocks_created: blocks.remove(&address).ok_or(ApiError::NotFound)?, involved_in_endorsements: Default::default(), // TODO: update wait for !238 involved_in_operations: operations diff --git a/models/src/api.rs b/models/src/api.rs index 5a8c27d06ce..746e9ac9632 100644 --- a/models/src/api.rs +++ b/models/src/api.rs @@ -156,7 +156,7 @@ pub struct AddressInfo { pub ledger_info: LedgerInfo, pub rolls: RollsInfo, pub block_draws: HashSet, - pub endorsement_draws: HashMap, // u64 is the index + pub endorsement_draws: HashSet, pub blocks_created: BlockHashSet, pub involved_in_endorsements: EndorsementHashSet, pub involved_in_operations: OperationHashSet, @@ -181,8 +181,7 @@ impl std::fmt::Display for AddressInfo { "Endorsement draws: {}", self.endorsement_draws .iter() - .map(|(slot, idx)| format!(" {}: index {}", slot, idx)) - .fold("\n".to_string(), |acc, s| format!("{}{}", acc, s)) + .fold("\n".to_string(), |acc, s| format!("{} {}", acc, s)) )?; writeln!( f, @@ -238,6 +237,19 @@ impl AddressInfo { } } +/// When an address is drawn to create an endorsement it is selected for a specific index +#[derive(Debug, Deserialize, Serialize, Hash, PartialEq, Eq)] +pub struct IndexedSlot { + pub slot: Slot, + pub index: usize, +} + +impl std::fmt::Display for IndexedSlot { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + writeln!(f, "Slot: {}, Index: {}", self.slot, self.index) + } +} + pub struct CompactAddressInfo { pub address: Address, pub thread: u8,