TARAXA
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>
6 #include <libdevcrypto/Common.h>
7 
8 #include "common/types.hpp"
10 
11 namespace taraxa {
12 
21 class PbftBlock {
27  PbftPeriod period_; // Block index, PBFT head block is period 0, first PBFT block is period 1
28  uint64_t timestamp_;
31  std::vector<vote_hash_t> reward_votes_; // Cert votes in previous period
32  std::optional<PbftBlockExtraData> extra_data_;
33 
34  public:
35  PbftBlock(const blk_hash_t& prev_blk_hash, const blk_hash_t& dag_blk_hash_as_pivot, const blk_hash_t& order_hash,
36  const blk_hash_t& final_chain_hash, PbftPeriod period, const addr_t& beneficiary, const secret_t& sk,
37  std::vector<vote_hash_t>&& reward_votes, const std::optional<PbftBlockExtraData>& extra_data = {});
38  explicit PbftBlock(const dev::RLP& rlp);
39  explicit PbftBlock(const bytes& RLP);
40 
46  blk_hash_t sha3(bool include_sig) const;
47 
52  std::string getJsonStr() const;
53 
58  Json::Value getJson() const;
59 
65  void streamRLP(dev::RLPStream& strm, bool include_sig) const;
66 
72  bytes rlp(bool include_sig) const;
73 
80  static Json::Value toJson(const PbftBlock& b, const std::vector<blk_hash_t>& dag_blks);
81 
86  const auto& getBlockHash() const { return block_hash_; }
87 
92  const auto& getPrevBlockHash() const { return prev_block_hash_; }
93 
98  const auto& getPivotDagBlockHash() const { return dag_block_hash_as_pivot_; }
99 
104  const auto& getOrderHash() const { return order_hash_; }
105 
110  const auto& getFinalChainHash() const { return final_chain_hash_; }
111 
116  PbftPeriod getPeriod() const { return period_; }
117 
122  auto getTimestamp() const { return timestamp_; }
123 
128  auto getExtraData() const { return extra_data_; }
129 
134  auto getExtraDataRlp() const { return extra_data_.has_value() ? extra_data_->rlp() : bytes(); }
135 
140  const auto& getBeneficiary() const { return beneficiary_; }
141 
142  const auto& getRewardVotes() const { return reward_votes_; }
143 
144  private:
148  void calculateHash_();
149 
154  void checkUniqueRewardVotes();
155 };
156 std::ostream& operator<<(std::ostream& strm, const PbftBlock& pbft_blk);
157 
160 } // namespace taraxa
Definition: RLP.h:56
Class for writing to an RLP bytestream.
Definition: RLP.h:484
PbftPeriod getPeriod() const
Get period number.
Definition: pbft_block.hpp:116
auto getExtraData() const
Get extra data.
Definition: pbft_block.hpp:128
blk_hash_t order_hash_
Definition: pbft_block.hpp:25
bytes rlp(bool include_sig) const
Recursive Length Prefix.
Definition: pbft_block.cpp:126
const auto & getFinalChainHash() const
Get final chain hash to tie final chain to the PBFT chain.
Definition: pbft_block.hpp:110
auto getTimestamp() const
Get timestamp.
Definition: pbft_block.hpp:122
std::vector< vote_hash_t > reward_votes_
Definition: pbft_block.hpp:31
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:70
const auto & getRewardVotes() const
Definition: pbft_block.hpp:142
blk_hash_t dag_block_hash_as_pivot_
Definition: pbft_block.hpp:24
blk_hash_t final_chain_hash_
Definition: pbft_block.hpp:26
const auto & getBlockHash() const
Get PBFT block hash.
Definition: pbft_block.hpp:86
PbftBlock(const blk_hash_t &prev_blk_hash, const blk_hash_t &dag_blk_hash_as_pivot, const blk_hash_t &order_hash, const blk_hash_t &final_chain_hash, PbftPeriod period, const addr_t &beneficiary, const secret_t &sk, std::vector< vote_hash_t > &&reward_votes, const std::optional< PbftBlockExtraData > &extra_data={})
Definition: pbft_block.cpp:29
const auto & getOrderHash() const
Get DAG blocks ordering hash.
Definition: pbft_block.hpp:104
const auto & getPivotDagBlockHash() const
Get DAG anchor hash for the finalized PBFT block.
Definition: pbft_block.hpp:98
std::optional< PbftBlockExtraData > extra_data_
Definition: pbft_block.hpp:32
PbftPeriod period_
Definition: pbft_block.hpp:27
Json::Value getJson() const
Get PBFT block in JSON.
Definition: pbft_block.cpp:85
addr_t beneficiary_
Definition: pbft_block.hpp:29
sig_t signature_
Definition: pbft_block.hpp:30
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:22
uint64_t timestamp_
Definition: pbft_block.hpp:28
std::string getJsonStr() const
Get PBFT block in string.
Definition: pbft_block.cpp:83
void streamRLP(dev::RLPStream &strm, bool include_sig) const
Stream RLP uses to setup PBFT block hash.
Definition: pbft_block.cpp:106
const auto & getBeneficiary() const
Get PBFT block proposer address.
Definition: pbft_block.hpp:140
auto getExtraDataRlp() const
Get extra data rlp.
Definition: pbft_block.hpp:134
blk_hash_t sha3(bool include_sig) const
Secure Hash Algorithm 3.
Definition: pbft_block.cpp:81
blk_hash_t prev_block_hash_
Definition: pbft_block.hpp:23
const auto & getPrevBlockHash() const
Get previous PBFT block hash.
Definition: pbft_block.hpp:92
The PbftBlock class is a PBFT block class that includes PBFT block hash, previous PBFT block hash,...
Definition: pbft_block.hpp:21
std::vector<::byte > bytes
Definition: Common.h:46
Definition: config.hpp:8
std::vector< byte > bytes
Definition: types.hpp:53
EthBlockNumber PbftPeriod
Definition: types.hpp:24
std::ostream & operator<<(std::ostream &strm, NodeConfig const &conf)
Definition: config.cpp:205