use zebra_chain::{
block::Height,
parameters::{subsidy::*, Network},
transparent::{self},
};
#[cfg(test)]
mod tests;
fn funding_stream_address_index(
height: Height,
network: &Network,
receiver: FundingStreamReceiver,
) -> Option<usize> {
if receiver == FundingStreamReceiver::Deferred {
return None;
}
let funding_streams = network.funding_streams(height)?;
let num_addresses = funding_streams.recipient(receiver)?.addresses().len();
let index = 1u32
.checked_add(funding_stream_address_period(height, network))?
.checked_sub(funding_stream_address_period(
funding_streams.height_range().start,
network,
))? as usize;
assert!(index > 0 && index <= num_addresses);
Some(index - 1)
}
pub fn funding_stream_address(
height: Height,
network: &Network,
receiver: FundingStreamReceiver,
) -> Option<&transparent::Address> {
let index = funding_stream_address_index(height, network, receiver)?;
let funding_streams = network.funding_streams(height)?;
funding_streams.recipient(receiver)?.addresses().get(index)
}