TARAXA
Loading...
Searching...
No Matches
pbft_block.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <libdevcore/Common.h>
4#include <libdevcore/RLP.h>
5#include <libdevcore/SHA3.h>
7
9#include "common/types.hpp"
11
12namespace taraxa {
13
22class PbftBlock {
23 public:
24 PbftBlock() = default;
25 PbftBlock(const blk_hash_t& prev_blk_hash, const blk_hash_t& dag_blk_hash_as_pivot, const blk_hash_t& order_hash,
26 const blk_hash_t& final_chain_hash, PbftPeriod period, const addr_t& beneficiary, const secret_t& sk,
27 std::vector<vote_hash_t>&& reward_votes, const std::optional<PbftBlockExtraData>& extra_data = {});
28 explicit PbftBlock(const dev::RLP& rlp);
29 explicit PbftBlock(const bytes& RLP);
30
36 blk_hash_t sha3(bool include_sig) const;
37
42 std::string getJsonStr() const;
43
48 Json::Value getJson() const;
49
55 void streamRLP(dev::RLPStream& strm, bool include_sig) const;
56
62 bytes rlp(bool include_sig) const;
63
70 static Json::Value toJson(const PbftBlock& b, const std::vector<blk_hash_t>& dag_blks);
71
76 const auto& getBlockHash() const { return block_hash_; }
77
82 const auto& getPrevBlockHash() const { return prev_block_hash_; }
83
88 const auto& getPivotDagBlockHash() const { return dag_block_hash_as_pivot_; }
89
94 const auto& getOrderHash() const { return order_hash_; }
95
100 const auto& getFinalChainHash() const { return final_chain_hash_; }
101
106 PbftPeriod getPeriod() const { return period_; }
107
112 auto getTimestamp() const { return timestamp_; }
113
118 auto getExtraData() const { return extra_data_; }
119
124 auto getExtraDataRlp() const { return extra_data_.has_value() ? extra_data_->rlp() : bytes(); }
125
130 const auto& getBeneficiary() const { return beneficiary_; }
131
132 const auto& getRewardVotes() const { return reward_votes_; }
133
135
136 private:
140 void calculateHash_();
141
147
148 private:
154 PbftPeriod period_; // Block index, PBFT head block is period 0, first PBFT block is period 1
155 uint64_t timestamp_;
158 std::vector<vote_hash_t> reward_votes_; // Cert votes in previous period
159 std::optional<PbftBlockExtraData> extra_data_;
160};
161std::ostream& operator<<(std::ostream& strm, const PbftBlock& pbft_blk);
162
165} // namespace taraxa
Definition RLP.h:56
Class for writing to an RLP bytestream.
Definition RLP.h:484
#define HAS_RLP_FIELDS
Definition encoding_rlp.hpp:208
PbftPeriod getPeriod() const
Get period number.
Definition pbft_block.hpp:106
auto getExtraData() const
Get extra data.
Definition pbft_block.hpp:118
blk_hash_t order_hash_
Definition pbft_block.hpp:152
auto getTimestamp() const
Get timestamp.
Definition pbft_block.hpp:112
std::vector< vote_hash_t > reward_votes_
Definition pbft_block.hpp:158
PbftBlock()=default
void calculateHash_()
Set PBFT block hash and block proposer address.
Definition pbft_block.cpp:58
void checkUniqueRewardVotes()
Check if all rewards votes are unique.
Definition pbft_block.cpp:71
blk_hash_t dag_block_hash_as_pivot_
Definition pbft_block.hpp:151
blk_hash_t final_chain_hash_
Definition pbft_block.hpp:153
const auto & getOrderHash() const
Get DAG blocks ordering hash.
Definition pbft_block.hpp:94
std::optional< PbftBlockExtraData > extra_data_
Definition pbft_block.hpp:159
PbftPeriod period_
Definition pbft_block.hpp:154
Json::Value getJson() const
Get PBFT block in JSON.
Definition pbft_block.cpp:86
addr_t beneficiary_
Definition pbft_block.hpp:156
const auto & getPrevBlockHash() const
Get previous PBFT block hash.
Definition pbft_block.hpp:82
sig_t signature_
Definition pbft_block.hpp:157
static Json::Value toJson(const PbftBlock &b, const std::vector< blk_hash_t > &dag_blks)
Get PBFT block with DAG blocks in JSON.
Definition pbft_block.cpp:47
blk_hash_t block_hash_
Definition pbft_block.hpp:149
uint64_t timestamp_
Definition pbft_block.hpp:155
const auto & getFinalChainHash() const
Get final chain hash to tie final chain to the PBFT chain.
Definition pbft_block.hpp:100
std::string getJsonStr() const
Get PBFT block in string.
Definition pbft_block.cpp:84
void streamRLP(dev::RLPStream &strm, bool include_sig) const
Stream RLP uses to setup PBFT block hash.
Definition pbft_block.cpp:107
bytes rlp(bool include_sig) const
Recursive Length Prefix.
Definition pbft_block.cpp:127
const auto & getPivotDagBlockHash() const
Get DAG anchor hash for the finalized PBFT block.
Definition pbft_block.hpp:88
auto getExtraDataRlp() const
Get extra data rlp.
Definition pbft_block.hpp:124
blk_hash_t sha3(bool include_sig) const
Secure Hash Algorithm 3.
Definition pbft_block.cpp:82
blk_hash_t prev_block_hash_
Definition pbft_block.hpp:150
const auto & getBeneficiary() const
Get PBFT block proposer address.
Definition pbft_block.hpp:130
const auto & getBlockHash() const
Get PBFT block hash.
Definition pbft_block.hpp:76
const auto & getRewardVotes() const
Definition pbft_block.hpp:132
The PbftBlock class is a PBFT block class that includes PBFT block hash, previous PBFT block hash,...
Definition pbft_block.hpp:22
Definition app.hpp:16
std::vector< byte > bytes
Definition types.hpp:53
EthBlockNumber PbftPeriod
Definition types.hpp:25
std::ostream & operator<<(std::ostream &strm, const FullNodeConfig &conf)
Definition config.cpp:188