refactor: Use Arc<Block> in BlockVerifier
Arc is a bit more flexible when using futures. And improve the documentation for coinbase_is_first_check. Closes #627.
This commit is contained in:
parent
30effa6a46
commit
6f064e0154
|
@ -53,8 +53,15 @@ pub(crate) fn node_time_check(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Check that there is exactly one coinbase transaction in `Block`, and that
|
||||||
|
/// the coinbase transaction is the first transaction in the block.
|
||||||
|
///
|
||||||
|
/// "The first (and only the first) transaction in a block is a coinbase
|
||||||
|
/// transaction, which collects and spends any miner subsidy and transaction
|
||||||
|
/// fees paid by transactions included in this block."[S 3.10][3.10]
|
||||||
|
///
|
||||||
/// [3.10]: https://zips.z.cash/protocol/protocol.pdf#coinbasetransactions
|
/// [3.10]: https://zips.z.cash/protocol/protocol.pdf#coinbasetransactions
|
||||||
pub(crate) fn coinbase_check(block: &Block) -> Result<(), Error> {
|
pub(crate) fn coinbase_is_first_check(block: Arc<Block>) -> Result<(), Error> {
|
||||||
if block.coinbase_height().is_some() {
|
if block.coinbase_height().is_some() {
|
||||||
// No coinbase inputs in additional transactions allowed
|
// No coinbase inputs in additional transactions allowed
|
||||||
if block
|
if block
|
||||||
|
@ -116,7 +123,7 @@ where
|
||||||
let now = Utc::now();
|
let now = Utc::now();
|
||||||
node_time_check(block.header.time, now)?;
|
node_time_check(block.header.time, now)?;
|
||||||
block.header.is_equihash_solution_valid()?;
|
block.header.is_equihash_solution_valid()?;
|
||||||
coinbase_check(block.as_ref())?;
|
coinbase_is_first_check(block.clone())?;
|
||||||
|
|
||||||
// `Tower::Buffer` requires a 1:1 relationship between `poll()`s
|
// `Tower::Buffer` requires a 1:1 relationship between `poll()`s
|
||||||
// and `call()`s, because it reserves a buffer slot in each
|
// and `call()`s, because it reserves a buffer slot in each
|
||||||
|
|
Loading…
Reference in New Issue