56 std::future<std::shared_ptr<const FinalizationResult>>
finalize(
PeriodData&& period_data,
57 std::vector<h256>&& finalized_dag_blk_hashes,
58 std::shared_ptr<DagBlock>&& anchor =
nullptr);
66 std::shared_ptr<const BlockHeader>
blockHeader(std::optional<EthBlockNumber> n = {})
const;
80 std::optional<EthBlockNumber>
blockNumber(h256
const& h)
const;
88 std::optional<h256>
blockHash(std::optional<EthBlockNumber> n = {})
const;
109 std::shared_ptr<const TransactionHashes>
transactionHashes(std::optional<EthBlockNumber> n = {})
const;
132 std::optional<trx_hash_t> trx_hash = {})
const;
137 return (*blk_trxs)[position];
139 return db_->getTransaction(blk_n, position);
165 std::optional<state_api::Account>
getAccount(
addr_t const& addr, std::optional<EthBlockNumber> blk_n = {})
const;
190 state_api::ExecutionResult
call(state_api::EVMTransaction
const& trx, std::optional<EthBlockNumber> blk_n = {})
const;
199 std::string
trace(std::vector<state_api::EVMTransaction> state_trxs, std::vector<state_api::EVMTransaction> trxs,
200 EthBlockNumber blk_n, std::optional<state_api::Tracing> params = {})
const;
280 std::shared_ptr<const FinalizationResult>
finalize_(PeriodData&& new_blk,
281 std::vector<h256>&& finalized_dag_blk_hashes,
282 std::shared_ptr<DagBlock>&& anchor);
288 std::shared_ptr<TransactionHashes>
getTransactionHashes(std::optional<EthBlockNumber> n = {})
const;
311 std::shared_ptr<BlockHeader>
appendBlock(
Batch& batch, std::shared_ptr<BlockHeader> header,
316 std::shared_ptr<DbStorage>
db_;
Definition FixedHash.h:35
std::optional< Value > getFromCache(uint64_t block_num) const
Definition cache.hpp:125
class that is managing rewards stats processing and hardforks(intervals changes) So intermediate bloc...
Definition rewards_stats.hpp:13
std::string trace(std::vector< state_api::EVMTransaction > state_trxs, std::vector< state_api::EVMTransaction > trxs, EthBlockNumber blk_n, std::optional< state_api::Tracing > params={}) const
Trace execution of a new message call immediately without creating a transactions on the block chain....
Definition final_chain.cpp:488
logger::Logger logger_
Definition final_chain.hpp:349
MapByBlockCache< addr_t, uint64_t > dpos_vote_count_cache_
Definition final_chain.hpp:338
const uint64_t kBlockGasLimit
Definition final_chain.hpp:317
ValueByBlockCache< std::shared_ptr< const BlockHeader > > block_headers_cache_
Definition final_chain.hpp:331
SharedTransaction makeBridgeFinalizationTransaction()
Definition final_chain.cpp:129
std::optional< EthBlockNumber > blockNumber(h256 const &h) const
Method to get block number by hash.
Definition final_chain.cpp:382
std::shared_ptr< DbStorage > db_
Definition final_chain.hpp:316
h256 getAccountStorage(addr_t const &addr, u256 const &key, std::optional< EthBlockNumber > blk_n={}) const
Returns the value from a storage position at a given address.
Definition final_chain.cpp:464
FinalChain & operator=(FinalChain &&)=delete
std::atomic< uint64_t > num_executed_dag_blk_
Definition final_chain.hpp:326
EthBlockNumber delegation_delay_
Definition final_chain.hpp:329
std::shared_ptr< BlockHeader > makeGenesisHeader(std::string &&raw_header) const
Definition final_chain.cpp:586
static state_api::EVMTransaction toEvmTransaction(const SharedTransaction &trx)
Definition final_chain.cpp:647
void prune(EthBlockNumber blk_n)
Prune state db for all blocks older than blk_n.
Definition final_chain.cpp:289
SharedTransactionReceipts getBlockReceipts(std::optional< EthBlockNumber > n={}) const
Definition final_chain.cpp:426
decltype(block_finalized_emitter_) ::Subscriber const & block_finalized_
Definition final_chain.hpp:34
void stop()
Definition final_chain.cpp:113
void waitForFinalized()
Wait until next block is finalized.
Definition final_chain.cpp:533
h256 getBridgeEpoch(EthBlockNumber blk_num) const
Definition final_chain.cpp:551
uint256_t dposTotalAmountDelegated(EthBlockNumber blk_num) const
Definition final_chain.cpp:525
const SharedTransactions getTransactions(std::optional< EthBlockNumber > n={}) const
Definition final_chain.cpp:579
decltype(block_applying_emitter_) ::Subscriber const & block_applying_
Definition final_chain.hpp:35
std::shared_ptr< const BlockHeader > blockHeader(std::optional< EthBlockNumber > n={}) const
Method to get block header by block number.
Definition final_chain.cpp:390
static void appendEvmTransactions(std::vector< state_api::EVMTransaction > &evm_trxs, const SharedTransactions &trxs)
Definition final_chain.cpp:654
std::optional< h256 > blockHash(std::optional< EthBlockNumber > n={}) const
Method to get block hash by block number.
Definition final_chain.cpp:386
ValueByBlockCache< uint64_t > total_vote_count_cache_
Definition final_chain.hpp:337
FinalChain & operator=(const FinalChain &)=delete
std::optional< TransactionReceipt > transactionReceipt(EthBlockNumber blk_n, uint64_t position, std::optional< trx_hash_t > trx_hash={}) const
Method to get transaction receipt by block number and position.
Definition final_chain.cpp:401
std::optional< h256 > getBlockHash(EthBlockNumber n) const
Definition final_chain.cpp:635
std::atomic< uint64_t > num_executed_trx_
Definition final_chain.hpp:327
std::shared_ptr< const TransactionHashes > transactionHashes(std::optional< EthBlockNumber > n={}) const
Method to get all transaction hashes from the block.
Definition final_chain.cpp:434
FinalChain(const FinalChain &)=delete
std::shared_ptr< TransactionHashes > getTransactionHashes(std::optional< EthBlockNumber > n={}) const
Definition final_chain.cpp:567
state_api::ExecutionResult call(state_api::EVMTransaction const &trx, std::optional< EthBlockNumber > blk_n={}) const
Executes a new message call immediately without creating a transaction on the block chain....
Definition final_chain.cpp:472
ValueByBlockCache< SharedTransactionReceipts > block_receipts_cache_
Definition final_chain.hpp:341
std::future< std::shared_ptr< const FinalizationResult > > finalize(PeriodData &&period_data, std::vector< h256 > &&finalized_dag_blk_hashes, std::shared_ptr< DagBlock > &&anchor=nullptr)
Method which finalizes a block and executes it in EVM.
Definition final_chain.cpp:115
std::atomic< EthBlockNumber > last_block_number_
Definition final_chain.hpp:346
std::vector< SharedTransaction > makeSystemTransactions(PbftPeriod blk_num)
Definition final_chain.cpp:148
std::optional< state_api::Account > getAccount(addr_t const &addr, std::optional< EthBlockNumber > blk_n={}) const
Method to get account information.
Definition final_chain.cpp:454
std::vector< state_api::ValidatorStake > dposValidatorsTotalStakes(EthBlockNumber blk_num) const
Definition final_chain.cpp:521
const SharedTransactions transactions(std::optional< EthBlockNumber > n={}) const
Method to get all transactions from the block.
Definition final_chain.cpp:438
std::condition_variable finalized_cv_
Definition final_chain.hpp:343
std::optional< TransactionLocation > transactionLocation(h256 const &trx_hash) const
Method to get transaction location by hash.
Definition final_chain.cpp:397
uint64_t dposYield(EthBlockNumber blk_num) const
Definition final_chain.cpp:538
const uint32_t kMaxLevelsPerPeriod
Definition final_chain.hpp:320
util::EventEmitter< uint64_t > const block_applying_emitter_
Definition final_chain.hpp:31
bool dposIsEligible(EthBlockNumber blk_num, addr_t const &addr) const
method to check if address have enough votes to participate in consensus
Definition final_chain.cpp:513
std::shared_ptr< Transaction > transaction(EthBlockNumber blk_n, uint32_t position) const
Definition final_chain.hpp:134
uint64_t dposEligibleVoteCount(EthBlockNumber blk_num, addr_t const &addr) const
total count of eligible votes account has in DPOS precompiled contract
Definition final_chain.cpp:509
uint64_t transactionCount(std::optional< EthBlockNumber > n={}) const
Method to get transactions count in block.
Definition final_chain.cpp:430
MapByBlockCache< addr_t, std::optional< const state_api::Account > > accounts_cache_
Definition final_chain.hpp:335
BlocksBlooms blockBlooms(const h256 &chunk_id) const
Definition final_chain.cpp:660
bool isNeedToFinalize(EthBlockNumber blk_num) const
Definition final_chain.cpp:138
std::vector< state_api::ValidatorVoteCount > dposValidatorsVoteCounts(EthBlockNumber blk_num) const
Definition final_chain.cpp:529
uint64_t dposEligibleTotalVoteCount(EthBlockNumber blk_num) const
total count of eligible votes are in DPOS precompiled contract
Definition final_chain.cpp:505
std::shared_ptr< const FinalizationResult > finalize_(PeriodData &&new_blk, std::vector< h256 > &&finalized_dag_blk_hashes, std::shared_ptr< DagBlock > &&anchor)
Definition final_chain.cpp:166
const bool kLightNode
Definition final_chain.hpp:319
ValueByBlockCache< const SharedTransactions > transactions_cache_
Definition final_chain.hpp:333
ValueByBlockCache< std::optional< const h256 > > block_hashes_cache_
Definition final_chain.hpp:332
h256 getBridgeRoot(EthBlockNumber blk_num) const
Definition final_chain.cpp:542
bytes getCode(addr_t const &addr, std::optional< EthBlockNumber > blk_n={}) const
Returns code at a given address.
Definition final_chain.cpp:468
void updateStateConfig(const state_api::Config &new_config)
Needed if we are changing params with hardfork and it affects Go part of code. For example DPOS contr...
Definition final_chain.cpp:459
const FullNodeConfig & kConfig
Definition final_chain.hpp:348
StateAPI state_api_
Definition final_chain.hpp:318
FinalChain(FinalChain &&)=delete
rewards::Stats rewards_
Definition final_chain.hpp:321
std::pair< val_t, bool > getBalance(addr_t const &addr) const
Definition final_chain.cpp:560
SharedTransactionReceipts blockReceipts(std::optional< EthBlockNumber > n={}) const
Definition final_chain.cpp:419
util::EventEmitter< std::shared_ptr< FinalizationResult > > const block_finalized_emitter_
Definition final_chain.hpp:30
std::shared_ptr< BlockHeader > appendBlock(Batch &batch, const PbftBlock &pbft_blk, const h256 &state_root, u256 total_reward, const SharedTransactions &transactions={}, const TransactionReceipts &receipts={})
Definition final_chain.cpp:315
u256 dposTotalSupply(EthBlockNumber blk_num) const
Definition final_chain.cpp:540
MapByBlockCache< addr_t, uint64_t > dpos_is_eligible_cache_
Definition final_chain.hpp:339
vrf_wrapper::vrf_pk_t dposGetVrfKey(EthBlockNumber blk_n, const addr_t &addr) const
Get the vrf key object from DPOS state.
Definition final_chain.cpp:517
std::vector< EthBlockNumber > withBlockBloom(LogBloom const &b, EthBlockNumber from, EthBlockNumber to) const
Method used to search for contract logs with bloom filter.
Definition final_chain.cpp:442
std::shared_ptr< const BlockHeader > getBlockHeader(EthBlockNumber n) const
Definition final_chain.cpp:603
boost::asio::thread_pool executor_thread_
Definition final_chain.hpp:324
std::optional< h256 > finalChainHash(EthBlockNumber n) const
Method to get the final chain hash by block number.
Definition final_chain.cpp:618
EthBlockNumber lastBlockNumber() const
Method to get last block number(chain size)
Definition final_chain.cpp:380
EthBlockNumber lastIfAbsent(const std::optional< EthBlockNumber > &client_blk_n) const
Definition final_chain.cpp:643
EthBlockNumber delegationDelay() const
Definition final_chain.cpp:127
ValueByBlockCache< std::shared_ptr< const TransactionHashes > > transaction_hashes_cache_
Definition final_chain.hpp:334
std::mutex finalized_mtx_
Definition final_chain.hpp:344
static h256 blockBloomsChunkId(EthBlockNumber level, EthBlockNumber index)
Definition final_chain.cpp:667
std::pair< h256, LogBloom > processReceipts(Batch &batch, EthBlockNumber blk_n, const TransactionReceipts &receipts)
main responsibility is blocks execution in EVM, getting data from EVM state
Definition final_chain.hpp:28
Definition state_api.hpp:20
std::array< LogBloom, c_bloomIndexSize > BlocksBlooms
Definition data.hpp:73
The PbftBlock class is a PBFT block class that includes PBFT block hash, previous PBFT block hash,...
Definition pbft_block.hpp:22
PeriodData class is for block execution, that includes PBFT block, certify votes, DAG blocks,...
Definition period_data.hpp:26
boost::multiprecision::number< boost::multiprecision::cpp_int_backend< 256, 256, boost::multiprecision::unsigned_magnitude, boost::multiprecision::unchecked, void > > u256
Definition Common.h:98
FixedHash< 32 > h256
Definition FixedHash.h:453
Definition app_base.hpp:22
std::shared_ptr< spdlog::logger > Logger
Definition logging.hpp:12
dev::FixedHash< crypto_vrf_PUBLICKEYBYTES > vrf_pk_t
Definition vrf_wrapper.hpp:11
rocksdb::WriteBatch Batch
Definition storage.hpp:70
std::shared_ptr< Transaction > SharedTransaction
Definition transaction.hpp:84
uint64_t EthBlockNumber
Definition types.hpp:24
std::shared_ptr< std::vector< TransactionReceipt > > SharedTransactionReceipts
Definition receipt.hpp:54
std::vector< TransactionReceipt > TransactionReceipts
Definition receipt.hpp:35
std::vector< byte > bytes
Definition types.hpp:53
EthBlockNumber PbftPeriod
Definition types.hpp:25
std::vector< SharedTransaction > SharedTransactions
Definition transaction.hpp:86
boost::multiprecision::uint256_t uint256_t
Definition types.hpp:30
dev::h2048 LogBloom
Definition receipt.hpp:8
uint160_hash_t addr_t
Definition types.hpp:40
Definition state_config.hpp:59