• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

tari-project / tari / 25915272455

15 May 2026 11:24AM UTC coverage: 60.448% (-0.7%) from 61.187%
25915272455

push

github

SWvheerden
chore: new release v5.3.1-pre.3

70503 of 116635 relevant lines covered (60.45%)

222843.18 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

60.47
/base_layer/node_components/src/blocks/historical_block.rs
1
//  Copyright 2021, The Tari Project
2
//
3
//  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
4
//  following conditions are met:
5
//
6
//  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
7
//  disclaimer.
8
//
9
//  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
10
//  following disclaimer in the documentation and/or other materials provided with the distribution.
11
//
12
//  3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote
13
//  products derived from this software without specific prior written permission.
14
//
15
//  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
16
//  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17
//  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
18
//  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
19
//  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
20
//  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
21
//  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
22

23
use std::{fmt, fmt::Display, sync::Arc};
24

25
use tari_common_types::types::HashOutput;
26

27
use crate::blocks::{Block, BlockHeader, BlockHeaderAccumulatedData, ChainBlock, error::BlockError};
28

29
/// The representation of a historical block in the blockchain. It is essentially identical to a protocol-defined
30
/// block but contains some extra metadata that clients such as Block Explorers will find interesting.
31
#[derive(Debug, Clone, PartialEq)]
32
pub struct HistoricalBlock {
33
    /// The number of blocks that have been mined since this block, including this one. The current tip will have one
34
    /// confirmation.
35
    confirmations: u64,
36
    /// The underlying block
37
    block: Block,
38
    /// Accumulated data in the block header
39
    accumulated_data: BlockHeaderAccumulatedData,
40
}
41

42
impl HistoricalBlock {
43
    pub fn new(block: Block, confirmations: u64, accumulated_data: BlockHeaderAccumulatedData) -> Self {
156✔
44
        HistoricalBlock {
156✔
45
            confirmations,
156✔
46
            block,
156✔
47
            accumulated_data,
156✔
48
        }
156✔
49
    }
156✔
50

51
    pub fn confirmations(&self) -> u64 {
1✔
52
        self.confirmations
1✔
53
    }
1✔
54

55
    pub fn header(&self) -> &BlockHeader {
17✔
56
        &self.block.header
17✔
57
    }
17✔
58

59
    /// Returns a reference to the block of the HistoricalBlock
60
    pub fn block(&self) -> &Block {
873✔
61
        &self.block
873✔
62
    }
873✔
63

64
    pub fn into_block(self) -> Block {
47✔
65
        self.block
47✔
66
    }
47✔
67

68
    pub fn accumulated_data(&self) -> &BlockHeaderAccumulatedData {
×
69
        &self.accumulated_data
×
70
    }
×
71

72
    pub fn hash(&self) -> &HashOutput {
×
73
        &self.accumulated_data.hash
×
74
    }
×
75

76
    pub fn try_into_chain_block(self) -> Result<ChainBlock, BlockError> {
47✔
77
        let chain_block = ChainBlock::try_construct(Arc::new(self.block), self.accumulated_data).ok_or_else(|| {
47✔
78
            BlockError::ChainBlockInvariantError(
×
79
                "Unable to construct ChainBlock because of a hash mismatch".to_string(),
×
80
            )
×
81
        })?;
×
82

83
        Ok(chain_block)
47✔
84
    }
47✔
85

86
    pub fn dissolve(self) -> (Block, BlockHeaderAccumulatedData, u64) {
×
87
        (self.block, self.accumulated_data, self.confirmations)
×
88
    }
×
89
}
90

91
impl Display for HistoricalBlock {
92
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
×
93
        writeln!(f, "{}", self.block())?;
×
94
        Ok(())
×
95
    }
×
96
}
97

98
impl From<HistoricalBlock> for Block {
99
    fn from(block: HistoricalBlock) -> Self {
1✔
100
        block.block
1✔
101
    }
1✔
102
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc