|
Electroneum
|
#include <blockchain.h>
Classes | |
| struct | block_extended_info |
| container for passing a block and metadata about it on the blockchain More... | |
| struct | transaction_chain_entry |
| Now-defunct (TODO: remove) struct from in-memory blockchain. More... | |
Public Member Functions | |
| Blockchain (tx_memory_pool &tx_pool) | |
| Blockchain constructor. More... | |
| ~Blockchain () | |
| Blockchain destructor. More... | |
| bool | init (BlockchainDB *db, const network_type nettype=MAINNET, bool offline=false, const cryptonote::test_options *test_options=NULL, difficulty_type fixed_difficulty=0, const GetCheckpointsCallback &get_checkpoints=nullptr, bool ignore_bsig=false, bool fallback_to_pow=false) |
| Initialize the Blockchain state. More... | |
| bool | init (BlockchainDB *db, HardFork *&hf, const network_type nettype=MAINNET, bool offline=false) |
| Initialize the Blockchain state. More... | |
| bool | deinit () |
| Uninitializes the blockchain state. More... | |
| void | set_checkpoints (checkpoints &&chk_pts) |
| assign a set of blockchain checkpoint hashes More... | |
| bool | get_blocks (uint64_t start_offset, size_t count, std::vector< std::pair< cryptonote::blobdata, block >> &blocks, std::vector< cryptonote::blobdata > &txs) const |
| get blocks and transactions from blocks based on start height and count More... | |
| bool | get_blocks (uint64_t start_offset, size_t count, std::vector< std::pair< cryptonote::blobdata, block >> &blocks) const |
| get blocks from blocks based on start height and count More... | |
| bool | get_alternative_blocks (std::vector< block > &blocks) const |
| compiles a list of all blocks stored as alternative chains More... | |
| size_t | get_alternative_blocks_count () const |
| returns the number of alternative blocks stored More... | |
| crypto::hash | get_block_id_by_height (uint64_t height) const |
| gets a block's hash given a height More... | |
| bool | get_block_by_hash (const crypto::hash &h, block &blk, bool *orphan=NULL) const |
| gets the block with a given hash More... | |
| bool | prepare_handle_incoming_blocks (const std::vector< block_complete_entry > &blocks_entry, std::vector< block > &blocks) |
| performs some preprocessing on a group of incoming blocks to speed up verification More... | |
| bool | cleanup_handle_incoming_blocks (bool force_sync=false) |
| incoming blocks post-processing, cleanup, and disk sync More... | |
| bool | have_tx (const crypto::hash &id) const |
| search the blockchain for a transaction by hash More... | |
| bool | key_images_already_spent (const transaction &tx) const |
| check if any key image in a transaction has already been spent More... | |
| bool | utxo_nonexistence_from_output (const txin_to_key_public &public_output) const |
| check if a single utxo in a transaction has already been spent using the hash and out index (v3 tx onwards) More... | |
| bool | utxo_nonexistent (const transaction &tx) const |
| check if any utxo in a transaction has already been spent using the tx (v3 tx onwards) More... | |
| bool | have_tx_keyimg_as_spent (const crypto::key_image &key_im) const |
| check if a key image is already spent on the blockchain More... | |
| uint64_t | get_current_blockchain_height () const |
| get the current height of the blockchain More... | |
| crypto::hash | get_tail_id () const |
| get the hash of the most recent block on the blockchain More... | |
| crypto::hash | get_tail_id (uint64_t &height) const |
| get the height and hash of the most recent block on the blockchain More... | |
| difficulty_type | get_difficulty_for_next_block () |
| returns the difficulty target the next block to be added must meet More... | |
| void | normalize_v7_difficulties () |
| Normalize the cumulative difficulty for V7 blocks, fixing the differing difficulty among nodes. More... | |
| bool | add_new_block (const block &bl_, block_verification_context &bvc) |
| adds a block to the blockchain More... | |
| bool | reset_and_set_genesis_block (const block &b) |
| clears the blockchain and starts a new one More... | |
| bool | create_block_template (block &b, const account_public_address &miner_address, difficulty_type &di, uint64_t &height, uint64_t &expected_reward, const blobdata &ex_nonce) |
| creates a new block to mine against More... | |
| bool | create_block_template (block &b, const crypto::hash *from_block, const account_public_address &miner_address, difficulty_type &di, uint64_t &height, uint64_t &expected_reward, const blobdata &ex_nonce) |
| bool | have_block (const crypto::hash &id) const |
| checks if a block is known about with a given hash More... | |
| size_t | get_total_transactions () const |
| gets the total number of transactions on the main chain More... | |
| bool | get_short_chain_history (std::list< crypto::hash > &ids) const |
| gets the hashes for a subset of the blockchain More... | |
| bool | find_blockchain_supplement (const std::list< crypto::hash > &qblock_ids, std::vector< crypto::hash > &hashes, uint64_t &start_height, uint64_t ¤t_height, bool clip_pruned) const |
| get recent block hashes for a foreign chain More... | |
| bool | find_blockchain_supplement (const std::list< crypto::hash > &qblock_ids, NOTIFY_RESPONSE_CHAIN_ENTRY::request &resp) const |
| get recent block hashes for a foreign chain More... | |
| bool | find_blockchain_supplement (const std::list< crypto::hash > &qblock_ids, uint64_t &starter_offset) const |
| find the most recent common point between ours and a foreign chain More... | |
| bool | find_blockchain_supplement (const uint64_t req_start_block, const std::list< crypto::hash > &qblock_ids, std::vector< std::pair< std::pair< cryptonote::blobdata, crypto::hash >, std::vector< std::pair< crypto::hash, cryptonote::blobdata > > > > &blocks, uint64_t &total_height, uint64_t &start_height, bool pruned, bool get_miner_tx_hash, size_t max_count) const |
| get recent blocks for a foreign chain More... | |
| bool | handle_get_objects (NOTIFY_REQUEST_GET_OBJECTS::request &arg, NOTIFY_RESPONSE_GET_OBJECTS::request &rsp) |
| retrieves a set of blocks and their transactions, and possibly other transactions More... | |
| uint64_t | get_num_mature_outputs (uint64_t amount) const |
| get number of outputs of an amount past the minimum spendable age More... | |
| crypto::public_key | get_output_key (uint64_t amount, uint64_t global_index) const |
| get the public key for an output More... | |
| bool | get_outs (const COMMAND_RPC_GET_OUTPUTS_BIN::request &req, COMMAND_RPC_GET_OUTPUTS_BIN::response &res) const |
| gets specific outputs to mix with More... | |
| void | get_output_key_mask_unlocked (const uint64_t &amount, const uint64_t &index, crypto::public_key &key, rct::key &mask, bool &unlocked) const |
| gets an output's key and unlocked state More... | |
| bool | get_output_distribution (uint64_t amount, uint64_t from_height, uint64_t to_height, uint64_t &start_height, std::vector< uint64_t > &distribution, uint64_t &base) const |
| gets per block distribution of outputs of a given amount More... | |
| bool | get_tx_outputs_gindexs (const crypto::hash &tx_id, std::vector< uint64_t > &indexs) const |
| gets the global indices for outputs from a given transaction More... | |
| bool | get_tx_outputs_gindexs (const crypto::hash &tx_id, size_t n_txes, std::vector< std::vector< uint64_t >> &indexs) const |
| bool | store_blockchain () |
| stores the blockchain More... | |
| bool | check_tx_inputs (transaction &tx, uint64_t &pmax_used_block_height, crypto::hash &max_used_block_id, tx_verification_context &tvc, bool kept_by_block=false) |
| validates a transaction's inputs More... | |
| uint64_t | get_dynamic_base_fee_estimate (uint64_t grace_blocks) const |
| get dynamic per kB or byte fee estimate for the next few blocks More... | |
| bool | check_fee (size_t tx_weight, uint64_t fee) const |
| validate a transaction's fee More... | |
| bool | check_tx_outputs (const transaction &tx, tx_verification_context &tvc) |
| check that a transaction's outputs conform to current standards More... | |
| uint64_t | get_current_cumulative_block_weight_limit () const |
| gets the block weight limit based on recent blocks More... | |
| uint64_t | get_next_long_term_block_weight (uint64_t block_weight) const |
| gets the long term block weight for a new block More... | |
| uint64_t | get_current_cumulative_block_weight_median () const |
| gets the block weight median based on recent blocks (same window as for the limit) More... | |
| difficulty_type | block_difficulty (uint64_t i) const |
| gets the difficulty of the block with a given height More... | |
| template<class t_ids_container , class t_blocks_container , class t_missed_container > | |
| bool | get_blocks (const t_ids_container &block_ids, t_blocks_container &blocks, t_missed_container &missed_bs) const |
| gets blocks based on a list of block hashes More... | |
| template<class t_ids_container , class t_tx_container , class t_missed_container > | |
| bool | get_transactions_blobs (const t_ids_container &txs_ids, t_tx_container &txs, t_missed_container &missed_txs, bool pruned=false) const |
| gets transactions based on a list of transaction hashes More... | |
| template<class t_ids_container , class t_tx_container , class t_missed_container > | |
| bool | get_split_transactions_blobs (const t_ids_container &txs_ids, t_tx_container &txs, t_missed_container &missed_txs) const |
| template<class t_ids_container , class t_tx_container , class t_missed_container > | |
| bool | get_transactions (const t_ids_container &txs_ids, t_tx_container &txs, t_missed_container &missed_txs) const |
| void | check_against_checkpoints (const checkpoints &points, bool enforce) |
| check the blockchain against a set of checkpoints More... | |
| void | set_enforce_dns_checkpoints (bool enforce) |
| configure whether or not to enforce DNS-based checkpoints More... | |
| bool | update_checkpoints (const std::string &file_path, bool check_dns) |
| loads new checkpoints from a file and optionally from DNS More... | |
| void | set_user_options (uint64_t maxthreads, bool sync_on_blocks, uint64_t sync_threshold, blockchain_db_sync_mode sync_mode, bool fast_sync, std::string validator_key) |
| Update the validators public key by fetching data from electroneum's endpoint. More... | |
| void | set_block_notify (const std::shared_ptr< tools::Notify > ¬ify) |
| sets a block notify object to call for every new block More... | |
| void | set_reorg_notify (const std::shared_ptr< tools::Notify > ¬ify) |
| sets a reorg notify object to call for every reorg More... | |
| void | safesyncmode (const bool onoff) |
| Put DB in safe sync mode. More... | |
| void | set_show_time_stats (bool stats) |
| set whether or not to show/print time statistics More... | |
| HardFork::State | get_hard_fork_state () const |
| gets the hardfork voting state object More... | |
| uint8_t | get_current_hard_fork_version () const |
| gets the current hardfork version in use/voted for More... | |
| uint8_t | get_ideal_hard_fork_version () const |
| returns the newest hardfork version known to the blockchain More... | |
| uint8_t | get_next_hard_fork_version () const |
| returns the next hardfork version More... | |
| uint8_t | get_ideal_hard_fork_version (uint64_t height) const |
| returns the newest hardfork version voted to be enabled as of a certain height More... | |
| uint8_t | get_hard_fork_version (uint64_t height) const |
| returns the actual hardfork version for a given block height More... | |
| uint64_t | get_earliest_ideal_height_for_version (uint8_t version) const |
| returns the earliest block a given version may activate More... | |
| bool | get_hard_fork_voting_info (uint8_t version, uint32_t &window, uint32_t &votes, uint32_t &threshold, uint64_t &earliest_height, uint8_t &voting) const |
| get information about hardfork voting for a version More... | |
| uint64_t | get_difficulty_target () const |
| get difficulty target based on chain and hardfork version More... | |
| bool | flush_txes_from_pool (const std::vector< crypto::hash > &txids) |
| remove transactions from the transaction pool (if present) More... | |
| std::map< uint64_t, std::tuple< uint64_t, uint64_t, uint64_t > > | get_output_histogram (const std::vector< uint64_t > &amounts, bool unlocked, uint64_t recent_cutoff, uint64_t min_count=0) const |
| return a histogram of outputs on the blockchain More... | |
| bool | for_all_key_images (std::function< bool(const crypto::key_image &)>) const |
| perform a check on all key images in the blockchain More... | |
| bool | for_blocks_range (const uint64_t &h1, const uint64_t &h2, std::function< bool(uint64_t, const crypto::hash &, const block &)>) const |
| perform a check on all blocks in the blockchain in the given range More... | |
| bool | for_all_transactions (std::function< bool(const crypto::hash &, const cryptonote::transaction &)>, bool pruned) const |
| perform a check on all transactions in the blockchain More... | |
| bool | for_all_outputs (std::function< bool(uint64_t amount, const crypto::hash &tx_hash, uint64_t height, size_t tx_idx)>) const |
| perform a check on all outputs in the blockchain More... | |
| bool | for_all_outputs (uint64_t amount, std::function< bool(uint64_t height)>) const |
| perform a check on all outputs of a given amount in the blockchain More... | |
| const BlockchainDB & | get_db () const |
| get a reference to the BlockchainDB in use by Blockchain More... | |
| BlockchainDB & | get_db () |
| get a reference to the BlockchainDB in use by Blockchain More... | |
| void | output_scan_worker (const uint64_t amount, const std::vector< uint64_t > &offsets, std::vector< output_data_t > &outputs) const |
| get a number of outputs of a specific amount More... | |
| void | block_longhash_worker (uint64_t height, const epee::span< const block > &blocks, std::unordered_map< crypto::hash, crypto::hash > &map) const |
| computes the "short" and "long" hashes for a set of blocks More... | |
| std::list< std::pair< block_extended_info, std::vector< crypto::hash > > > | get_alternative_chains () const |
| returns a set of known alternate chains More... | |
| void | add_txpool_tx (const crypto::hash &txid, const cryptonote::blobdata &blob, const txpool_tx_meta_t &meta) |
| void | update_txpool_tx (const crypto::hash &txid, const txpool_tx_meta_t &meta) |
| void | remove_txpool_tx (const crypto::hash &txid) |
| uint64_t | get_txpool_tx_count (bool include_unrelayed_txes=true) const |
| bool | get_txpool_tx_meta (const crypto::hash &txid, txpool_tx_meta_t &meta) const |
| bool | get_txpool_tx_blob (const crypto::hash &txid, cryptonote::blobdata &bd) const |
| cryptonote::blobdata | get_txpool_tx_blob (const crypto::hash &txid) const |
| bool | for_all_txpool_txes (std::function< bool(const crypto::hash &, const txpool_tx_meta_t &, const cryptonote::blobdata *)>, bool include_blob=false, bool include_unrelayed_txes=true) const |
| uint32_t | get_mempool_tx_livetime () const |
| bool | is_within_compiled_block_hash_area (uint64_t height) const |
| bool | is_within_compiled_block_hash_area () const |
| uint32_t | get_blockchain_pruning_seed () const |
| bool | prune_blockchain (uint32_t pruning_seed=0) |
| bool | update_blockchain_pruning () |
| bool | check_blockchain_pruning () |
| void | lock () |
| void | unlock () |
| void | cancel () |
| void | on_new_tx_from_block (const cryptonote::transaction &tx) |
| called when we see a tx originating from a block More... | |
| std::vector< time_t > | get_last_block_timestamps (unsigned int blocks) const |
| returns the timestamps of the last N blocks More... | |
| void | pop_blocks (uint64_t nblocks) |
| removes blocks from the top of the blockchain More... | |
| void | sign_block (block &b, std::string privateKey) |
| Digitally sign the block. More... | |
| bool | verify_block_signature (const block &b) |
| Verify block's digital signature. More... | |
| void | set_validator_key (std::string key) |
| set validator key More... | |
| void | set_validators_list_instance (std::unique_ptr< electroneum::basic::Validators > &v) |
| electroneum::basic::Validator | get_validator_by_height (uint64_t height) |
| network_type | get_nettype () const |
| get blockchain nettype More... | |
Static Public Member Functions | |
| static uint64_t | get_fee_quantization_mask () |
| get fee quantization mask More... | |
| static uint64_t | get_dynamic_base_fee (uint64_t block_reward, size_t median_block_weight, uint8_t version) |
| get dynamic per kB or byte fee for a given block weight More... | |
| static const std::vector< HardFork::Params > & | get_hard_fork_heights (network_type nettype) |
| gets the hardfork heights of given network More... | |
Definition at line 97 of file blockchain.h.
| Blockchain::Blockchain | ( | tx_memory_pool & | tx_pool | ) |
Blockchain constructor.
| tx_pool | a reference to the transaction pool to be kept by the Blockchain |
Definition at line 146 of file blockchain.cpp.
| Blockchain::~Blockchain | ( | ) |
Blockchain destructor.
Definition at line 161 of file blockchain.cpp.

| bool Blockchain::add_new_block | ( | const block & | bl_, |
| block_verification_context & | bvc | ||
| ) |
adds a block to the blockchain
Adds a new block to the blockchain. If the block's parent is not the current top of the blockchain, the block may be added to an alternate chain. If the block does not belong, is already in the blockchain or an alternate chain, or is invalid, return false.
| bl_ | the block to be added |
| bvc | metadata about the block addition's success/failure |
Definition at line 4196 of file blockchain.cpp.


| void Blockchain::add_txpool_tx | ( | const crypto::hash & | txid, |
| const cryptonote::blobdata & | blob, | ||
| const txpool_tx_meta_t & | meta | ||
| ) |
Definition at line 4768 of file blockchain.cpp.

| difficulty_type Blockchain::block_difficulty | ( | uint64_t | i | ) | const |
gets the difficulty of the block with a given height
| i | the height |
Definition at line 2403 of file blockchain.cpp.

| void Blockchain::block_longhash_worker | ( | uint64_t | height, |
| const epee::span< const block > & | blocks, | ||
| std::unordered_map< crypto::hash, crypto::hash > & | map | ||
| ) | const |
computes the "short" and "long" hashes for a set of blocks
| height | the height of the first block |
| blocks | the blocks to be hashed |
| map | return-by-reference the hashes for each block |
Definition at line 4313 of file blockchain.cpp.


| void Blockchain::cancel | ( | ) |
| void Blockchain::check_against_checkpoints | ( | const checkpoints & | points, |
| bool | enforce | ||
| ) |
check the blockchain against a set of checkpoints
If a block fails a checkpoint and enforce is enabled, the blockchain will be rolled back to two blocks prior to that block. If enforce is disabled, as is currently the default case with DNS-based checkpoints, an error will be printed to the user but no other action will be taken.
| points | the checkpoints to check against |
| enforce | whether or not to take action on failure |
Definition at line 4229 of file blockchain.cpp.


| bool Blockchain::check_blockchain_pruning | ( | ) |
Definition at line 4091 of file blockchain.cpp.


validate a transaction's fee
This function validates the fee is enough for the transaction. This is based on the weight of the transaction, and, after a height threshold, on the average weight of transaction in a past window
| tx_weight | the transaction weight |
| fee | the fee |
Definition at line 3385 of file blockchain.cpp.


| bool Blockchain::check_tx_inputs | ( | transaction & | tx, |
| uint64_t & | pmax_used_block_height, | ||
| crypto::hash & | max_used_block_id, | ||
| tx_verification_context & | tvc, | ||
| bool | kept_by_block = false |
||
| ) |
validates a transaction's inputs
validates a transaction's inputs as correctly used and not previously spent. also returns the hash and height of the most recent block which contains an output that was used as an input to the transaction. The transaction's rct signatures, if any, are expanded.
| tx | the transaction to validate |
| pmax_used_block_height | return-by-reference block height of most recent input |
| max_used_block_id | return-by-reference block hash of most recent input |
| tvc | returned information about tx verification |
| kept_by_block | whether or not the transaction is from a previously-verified block |
Definition at line 2869 of file blockchain.cpp.

| bool Blockchain::check_tx_outputs | ( | const transaction & | tx, |
| tx_verification_context & | tvc | ||
| ) |
check that a transaction's outputs conform to current standards
This function checks, for example at the time of this writing, that each output is of the form a * 10^b (phrased differently, that if written out would have only one non-zero digit in base 10).
| tx | the transaction to check the outputs of |
| tvc | returned info about tx verification |
Definition at line 2901 of file blockchain.cpp.


incoming blocks post-processing, cleanup, and disk sync
| force_sync | if true, and Blockchain is handling syncing to disk, always sync |
Definition at line 4332 of file blockchain.cpp.


| bool Blockchain::create_block_template | ( | block & | b, |
| const account_public_address & | miner_address, | ||
| difficulty_type & | di, | ||
| uint64_t & | height, | ||
| uint64_t & | expected_reward, | ||
| const blobdata & | ex_nonce | ||
| ) |
creates a new block to mine against
| b | return-by-reference block to be filled in |
| from_block | optional block hash to start mining from (main chain tip if NULL) |
| miner_address | address new coins for the block will go to |
| di | return-by-reference tells the miner what the difficulty target is |
| height | return-by-reference tells the miner what height it's mining against |
| expected_reward | return-by-reference the total reward awarded to the miner finding this block, including transaction fees |
| ex_nonce | extra data to be added to the miner transaction's extra |
Definition at line 1838 of file blockchain.cpp.

| bool Blockchain::create_block_template | ( | block & | b, |
| const crypto::hash * | from_block, | ||
| const account_public_address & | miner_address, | ||
| difficulty_type & | di, | ||
| uint64_t & | height, | ||
| uint64_t & | expected_reward, | ||
| const blobdata & | ex_nonce | ||
| ) |
Definition at line 1583 of file blockchain.cpp.

| bool Blockchain::deinit | ( | ) |
Uninitializes the blockchain state.
Saves to disk any state that needs to be maintained
Definition at line 660 of file blockchain.cpp.


| bool Blockchain::find_blockchain_supplement | ( | const std::list< crypto::hash > & | qblock_ids, |
| std::vector< crypto::hash > & | hashes, | ||
| uint64_t & | start_height, | ||
| uint64_t & | current_height, | ||
| bool | clip_pruned | ||
| ) | const |
get recent block hashes for a foreign chain
Find the split point between us and foreign blockchain and return (by reference) the most recent common block hash along with up to BLOCKS_IDS_SYNCHRONIZING_DEFAULT_COUNT additional (more recent) hashes.
| qblock_ids | the foreign chain's "short history" (see get_short_chain_history) |
| hashes | the hashes to be returned, return-by-reference |
| start_height | the start height, return-by-reference |
| current_height | the current blockchain height, return-by-reference |
| clip_pruned | whether to constrain results to unpruned data |
Definition at line 2568 of file blockchain.cpp.


| bool Blockchain::find_blockchain_supplement | ( | const std::list< crypto::hash > & | qblock_ids, |
| NOTIFY_RESPONSE_CHAIN_ENTRY::request & | resp | ||
| ) | const |
get recent block hashes for a foreign chain
Find the split point between us and foreign blockchain and return (by reference) the most recent common block hash along with up to BLOCKS_IDS_SYNCHRONIZING_DEFAULT_COUNT additional (more recent) hashes.
| qblock_ids | the foreign chain's "short history" (see get_short_chain_history) |
| resp | return-by-reference the split height and subsequent blocks' hashes |
Definition at line 2598 of file blockchain.cpp.

| bool Blockchain::find_blockchain_supplement | ( | const std::list< crypto::hash > & | qblock_ids, |
| uint64_t & | starter_offset | ||
| ) | const |
find the most recent common point between ours and a foreign chain
This function takes a list of block hashes from another node on the network to find where the split point is between us and them. This is used to see what to send another node that needs to sync.
| qblock_ids | the foreign chain's "short history" (see get_short_chain_history) |
| starter_offset | return-by-reference the most recent common block's height |
Definition at line 2348 of file blockchain.cpp.

| bool Blockchain::find_blockchain_supplement | ( | const uint64_t | req_start_block, |
| const std::list< crypto::hash > & | qblock_ids, | ||
| std::vector< std::pair< std::pair< cryptonote::blobdata, crypto::hash >, std::vector< std::pair< crypto::hash, cryptonote::blobdata > > > > & | blocks, | ||
| uint64_t & | total_height, | ||
| uint64_t & | start_height, | ||
| bool | pruned, | ||
| bool | get_miner_tx_hash, | ||
| size_t | max_count | ||
| ) | const |
get recent blocks for a foreign chain
This function gets recent blocks relative to a foreign chain, starting either at a requested height or whatever height is the most recent ours and the foreign chain have in common.
| req_start_block | if non-zero, specifies a start point (otherwise find most recent commonality) |
| qblock_ids | the foreign chain's "short history" (see get_short_chain_history) |
| blocks | return-by-reference the blocks and their transactions |
| total_height | return-by-reference our current blockchain height |
| start_height | return-by-reference the height of the first block returned |
| pruned | whether to return full or pruned tx blobs |
| max_count | the max number of blocks to get |
Definition at line 2618 of file blockchain.cpp.

| bool Blockchain::flush_txes_from_pool | ( | const std::vector< crypto::hash > & | txids | ) |
remove transactions from the transaction pool (if present)
| txids | a list of hashes of transactions to be removed |
Definition at line 3657 of file blockchain.cpp.


| bool Blockchain::for_all_key_images | ( | std::function< bool(const crypto::key_image &)> | f | ) | const |
perform a check on all key images in the blockchain
| std::function | the check to perform, pass/fail |
Definition at line 5041 of file blockchain.cpp.

| bool Blockchain::for_all_outputs | ( | std::function< bool(uint64_t amount, const crypto::hash &tx_hash, uint64_t height, size_t tx_idx)> | f | ) | const |
perform a check on all outputs in the blockchain
| std::function | the check to perform, pass/fail |
Definition at line 5056 of file blockchain.cpp.

perform a check on all outputs of a given amount in the blockchain
| amount | the amount to iterate through |
| std::function | the check to perform, pass/fail |
Definition at line 5061 of file blockchain.cpp.

| bool Blockchain::for_all_transactions | ( | std::function< bool(const crypto::hash &, const cryptonote::transaction &)> | f, |
| bool | pruned | ||
| ) | const |
perform a check on all transactions in the blockchain
| std::function | the check to perform, pass/fail |
| bool | pruned whether to return pruned txes only |
Definition at line 5051 of file blockchain.cpp.


| bool Blockchain::for_all_txpool_txes | ( | std::function< bool(const crypto::hash &, const txpool_tx_meta_t &, const cryptonote::blobdata *)> | f, |
| bool | include_blob = false, |
||
| bool | include_unrelayed_txes = true |
||
| ) | const |
Definition at line 4803 of file blockchain.cpp.


| bool Blockchain::for_blocks_range | ( | const uint64_t & | h1, |
| const uint64_t & | h2, | ||
| std::function< bool(uint64_t, const crypto::hash &, const block &)> | f | ||
| ) | const |
perform a check on all blocks in the blockchain in the given range
| h1 | the start height |
| h2 | the end height |
| std::function | the check to perform, pass/fail |
Definition at line 5046 of file blockchain.cpp.


compiles a list of all blocks stored as alternative chains
| blocks | return-by-reference container to put result blocks in |
Definition at line 2193 of file blockchain.cpp.

| size_t Blockchain::get_alternative_blocks_count | ( | ) | const |
returns the number of alternative blocks stored
Definition at line 2206 of file blockchain.cpp.

| std::list< std::pair< Blockchain::block_extended_info, std::vector< crypto::hash > > > Blockchain::get_alternative_chains | ( | ) | const |
returns a set of known alternate chains
Definition at line 4900 of file blockchain.cpp.
| bool Blockchain::get_block_by_hash | ( | const crypto::hash & | h, |
| block & | blk, | ||
| bool * | orphan = NULL |
||
| ) | const |
gets the block with a given hash
| h | the hash to look for |
| blk | return-by-reference variable to put result block in |
| orphan | if non-NULL, will be set to true if not in the main chain, false otherwise |
Definition at line 928 of file blockchain.cpp.


| crypto::hash Blockchain::get_block_id_by_height | ( | uint64_t | height | ) | const |
gets a block's hash given a height
| height | the height of the block |
Definition at line 901 of file blockchain.cpp.


|
inline |
Definition at line 1017 of file blockchain.h.


| bool Blockchain::get_blocks | ( | uint64_t | start_offset, |
| size_t | count, | ||
| std::vector< std::pair< cryptonote::blobdata, block >> & | blocks, | ||
| std::vector< cryptonote::blobdata > & | txs | ||
| ) | const |
get blocks and transactions from blocks based on start height and count
| start_offset | the height on the blockchain to start at |
| count | the number of blocks to get, if there are as many after start_offset |
| blocks | return-by-reference container to put result blocks in |
| txs | return-by-reference container to put result transactions in |
Definition at line 2096 of file blockchain.cpp.


| bool Blockchain::get_blocks | ( | uint64_t | start_offset, |
| size_t | count, | ||
| std::vector< std::pair< cryptonote::blobdata, block >> & | blocks | ||
| ) | const |
get blocks from blocks based on start height and count
| start_offset | the height on the blockchain to start at |
| count | the number of blocks to get, if there are as many after start_offset |
| blocks | return-by-reference container to put result blocks in |
Definition at line 2118 of file blockchain.cpp.

| bool Blockchain::get_blocks | ( | const t_ids_container & | block_ids, |
| t_blocks_container & | blocks, | ||
| t_missed_container & | missed_bs | ||
| ) | const |
gets blocks based on a list of block hashes
| t_ids_container | a standard-iterable container |
| t_blocks_container | a standard-iterable container |
| t_missed_container | a standard-iterable container |
| block_ids | a container of block hashes for which to get the corresponding blocks |
| blocks | return-by-reference a container to store result blocks in |
| missed_bs | return-by-reference a container to store missed blocks in |
Definition at line 2427 of file blockchain.cpp.

| uint64_t Blockchain::get_current_blockchain_height | ( | ) | const |
get the current height of the blockchain
Definition at line 322 of file blockchain.cpp.


| uint64_t Blockchain::get_current_cumulative_block_weight_limit | ( | ) | const |
gets the block weight limit based on recent blocks
Definition at line 1560 of file blockchain.cpp.

| uint64_t Blockchain::get_current_cumulative_block_weight_median | ( | ) | const |
gets the block weight median based on recent blocks (same window as for the limit)
Definition at line 1566 of file blockchain.cpp.

|
inline |
gets the current hardfork version in use/voted for
Definition at line 825 of file blockchain.h.


|
inline |
get a reference to the BlockchainDB in use by Blockchain
Definition at line 963 of file blockchain.h.

|
inline |
get a reference to the BlockchainDB in use by Blockchain
Definition at line 973 of file blockchain.h.
| difficulty_type Blockchain::get_difficulty_for_next_block | ( | ) |
returns the difficulty target the next block to be added must meet
Definition at line 971 of file blockchain.cpp.


| uint64_t Blockchain::get_difficulty_target | ( | ) | const |
get difficulty target based on chain and hardfork version
Definition at line 4890 of file blockchain.cpp.


|
static |
get dynamic per kB or byte fee for a given block weight
The dynamic fee is based on the block weight in a past window, and the current block reward. It is expressed by kB before v8, and per byte from v8.
| block_reward | the current block reward |
| median_block_weight | the median block weight in the past window |
| version | hard fork version for rules and constants to use |
Definition at line 3347 of file blockchain.cpp.


get dynamic per kB or byte fee estimate for the next few blocks
The dynamic fee is based on the block weight in a past window, and the current block reward. It is expressed by kB before v8, and per byte from v8. This function calculates an estimate for a dynamic fee which will be valid for the next grace_blocks
| grace_blocks | number of blocks we want the fee to be valid for |
Definition at line 3446 of file blockchain.cpp.


|
inline |
returns the earliest block a given version may activate
Definition at line 865 of file blockchain.h.


|
static |
get fee quantization mask
The dynamic fee may be quantized, to mask out the last decimal places
Definition at line 3334 of file blockchain.cpp.

|
static |
gets the hardfork heights of given network
Definition at line 4852 of file blockchain.cpp.
| HardFork::State Blockchain::get_hard_fork_state | ( | ) | const |
gets the hardfork voting state object
Definition at line 4847 of file blockchain.cpp.


returns the actual hardfork version for a given block height
| height | the height for which to check version info |
Definition at line 858 of file blockchain.h.


| bool Blockchain::get_hard_fork_voting_info | ( | uint8_t | version, |
| uint32_t & | window, | ||
| uint32_t & | votes, | ||
| uint32_t & | threshold, | ||
| uint64_t & | earliest_height, | ||
| uint8_t & | voting | ||
| ) | const |
get information about hardfork voting for a version
| version | the version in question |
| window | the size of the voting window |
| votes | the number of votes to enable <version> |
| threshold | the number of votes required to enable <version> |
| earliest_height | the earliest height at which <version> is allowed |
| voting | which version this node is voting for/using |
Definition at line 4885 of file blockchain.cpp.


|
inline |
returns the newest hardfork version known to the blockchain
Definition at line 832 of file blockchain.h.


returns the newest hardfork version voted to be enabled as of a certain height
| height | the height for which to check version info |
Definition at line 849 of file blockchain.h.

| std::vector< time_t > Blockchain::get_last_block_timestamps | ( | unsigned int | blocks | ) | const |
returns the timestamps of the last N blocks
Definition at line 1084 of file blockchain.cpp.

| uint32_t Blockchain::get_mempool_tx_livetime | ( | ) | const |
Definition at line 4808 of file blockchain.cpp.

|
inline |
get blockchain nettype
Definition at line 1073 of file blockchain.h.

|
inline |
returns the next hardfork version
Definition at line 839 of file blockchain.h.


gets the long term block weight for a new block
Definition at line 4100 of file blockchain.cpp.


get number of outputs of an amount past the minimum spendable age
| amount | the output amount |
Definition at line 2215 of file blockchain.cpp.

| bool Blockchain::get_output_distribution | ( | uint64_t | amount, |
| uint64_t | from_height, | ||
| uint64_t | to_height, | ||
| uint64_t & | start_height, | ||
| std::vector< uint64_t > & | distribution, | ||
| uint64_t & | base | ||
| ) | const |
gets per block distribution of outputs of a given amount
| amount | the amount to get a ditribution for |
| from_height | the height before which we do not care about the data |
| to_height | the height after which we do not care about the data |
| return-by-reference | start_height the height of the first rct output |
| return-by-reference | distribution the start offset of the first rct output in this block (same as previous if none) |
| return-by-reference | base how many outputs of that amount are before the stated distribution |
Definition at line 2293 of file blockchain.cpp.

| std::map< uint64_t, std::tuple< uint64_t, uint64_t, uint64_t > > Blockchain::get_output_histogram | ( | const std::vector< uint64_t > & | amounts, |
| bool | unlocked, | ||
| uint64_t | recent_cutoff, | ||
| uint64_t | min_count = 0 |
||
| ) | const |
return a histogram of outputs on the blockchain
| amounts | optional set of amounts to lookup |
| unlocked | whether to restrict instances to unlocked ones |
| recent_cutoff | timestamp to consider outputs as recent |
| min_count | return only amounts with at least that many instances |
Definition at line 4895 of file blockchain.cpp.


| crypto::public_key Blockchain::get_output_key | ( | uint64_t | amount, |
| uint64_t | global_index | ||
| ) | const |
get the public key for an output
| amount | the output amount |
| global_index | the output amount-global index |
Definition at line 2233 of file blockchain.cpp.

| void Blockchain::get_output_key_mask_unlocked | ( | const uint64_t & | amount, |
| const uint64_t & | index, | ||
| crypto::public_key & | key, | ||
| rct::key & | mask, | ||
| bool & | unlocked | ||
| ) | const |
gets an output's key and unlocked state
| amount | in - the output amount |
| index | in - the output global amount index |
| mask | out - the output's RingCT mask |
| key | out - the output's key |
| unlocked | out - the output's unlocked state |
Definition at line 2284 of file blockchain.cpp.


| bool Blockchain::get_outs | ( | const COMMAND_RPC_GET_OUTPUTS_BIN::request & | req, |
| COMMAND_RPC_GET_OUTPUTS_BIN::response & | res | ||
| ) | const |
gets specific outputs to mix with
This function takes an RPC request for outputs to mix with and creates an RPC response with the resultant output indices.
Outputs to mix with are specified in the request.
| req | the outputs to return |
| res | return-by-reference the resultant output indices and keys |
Definition at line 2240 of file blockchain.cpp.


| bool Blockchain::get_short_chain_history | ( | std::list< crypto::hash > & | ids | ) | const |
gets the hashes for a subset of the blockchain
puts into list <ids> a list of hashes representing certain blocks from the blockchain in reverse chronological order
the blocks chosen, at the time of this writing, are: the most recent 11 powers of 2 less recent from there, so 13, 17, 25, etc...
| ids | return-by-reference list to put the resulting hashes in |
Definition at line 859 of file blockchain.cpp.


| template bool cryptonote::Blockchain::get_split_transactions_blobs | ( | const t_ids_container & | txs_ids, |
| t_tx_container & | txs, | ||
| t_missed_container & | missed_txs | ||
| ) | const |
Definition at line 2500 of file blockchain.cpp.


| crypto::hash Blockchain::get_tail_id | ( | ) | const |
get the hash of the most recent block on the blockchain
Definition at line 837 of file blockchain.cpp.


| crypto::hash Blockchain::get_tail_id | ( | uint64_t & | height | ) | const |
get the height and hash of the most recent block on the blockchain
| height | return-by-reference variable to store the height in |
Definition at line 830 of file blockchain.cpp.

| size_t Blockchain::get_total_transactions | ( | ) | const |
gets the total number of transactions on the main chain
Definition at line 2721 of file blockchain.cpp.


| template bool cryptonote::Blockchain::get_transactions | ( | const t_ids_container & | txs_ids, |
| t_tx_container & | txs, | ||
| t_missed_container & | missed_txs | ||
| ) | const |
Definition at line 2534 of file blockchain.cpp.


| template bool cryptonote::Blockchain::get_transactions_blobs | ( | const t_ids_container & | txs_ids, |
| t_tx_container & | txs, | ||
| t_missed_container & | missed_txs, | ||
| bool | pruned = false |
||
| ) | const |
gets transactions based on a list of transaction hashes
| t_ids_container | a standard-iterable container |
| t_tx_container | a standard-iterable container |
| t_missed_container | a standard-iterable container |
| txs_ids | a container of hashes for which to get the corresponding transactions |
| txs | return-by-reference a container to store result transactions in |
| missed_txs | return-by-reference a container to store missed transactions in |
| pruned | whether to return full or pruned blobs |
Definition at line 2462 of file blockchain.cpp.


| bool Blockchain::get_tx_outputs_gindexs | ( | const crypto::hash & | tx_id, |
| std::vector< uint64_t > & | indexs | ||
| ) | const |
gets the global indices for outputs from a given transaction
This function gets the global indices for all outputs belonging to a specific transaction.
| tx_id | the hash of the transaction to fetch indices for |
| indexs | return-by-reference the global indices for the transaction's outputs |
| n_txes | how many txes in a row to get results for |
Definition at line 2822 of file blockchain.cpp.


| bool Blockchain::get_tx_outputs_gindexs | ( | const crypto::hash & | tx_id, |
| size_t | n_txes, | ||
| std::vector< std::vector< uint64_t >> & | indexs | ||
| ) | const |
Definition at line 2801 of file blockchain.cpp.

| bool Blockchain::get_txpool_tx_blob | ( | const crypto::hash & | txid, |
| cryptonote::blobdata & | bd | ||
| ) | const |
Definition at line 4793 of file blockchain.cpp.


| cryptonote::blobdata Blockchain::get_txpool_tx_blob | ( | const crypto::hash & | txid | ) | const |
Definition at line 4798 of file blockchain.cpp.

Definition at line 4783 of file blockchain.cpp.


| bool Blockchain::get_txpool_tx_meta | ( | const crypto::hash & | txid, |
| txpool_tx_meta_t & | meta | ||
| ) | const |
Definition at line 4788 of file blockchain.cpp.


| electroneum::basic::Validator Blockchain::get_validator_by_height | ( | uint64_t | height | ) |
Definition at line 5085 of file blockchain.cpp.

| bool Blockchain::handle_get_objects | ( | NOTIFY_REQUEST_GET_OBJECTS::request & | arg, |
| NOTIFY_RESPONSE_GET_OBJECTS::request & | rsp | ||
| ) |
retrieves a set of blocks and their transactions, and possibly other transactions
the request object encapsulates a list of block hashes and a (possibly empty) list of transaction hashes. for each block hash, the block is fetched along with all of that block's transactions. Any transactions requested separately are fetched afterwards.
| arg | the request |
| rsp | return-by-reference the response to fill in |
Definition at line 2146 of file blockchain.cpp.


| bool Blockchain::have_block | ( | const crypto::hash & | id | ) | const |
checks if a block is known about with a given hash
This function checks the main chain, alternate chains, and invalid blocks for a block with the given hash
| id | the hash to search for |
Definition at line 2688 of file blockchain.cpp.


| bool Blockchain::have_tx | ( | const crypto::hash & | id | ) | const |
search the blockchain for a transaction by hash
| id | the hash to search for |
Definition at line 167 of file blockchain.cpp.


| bool Blockchain::have_tx_keyimg_as_spent | ( | const crypto::key_image & | key_im | ) | const |
check if a key image is already spent on the blockchain
Whenever a transaction output is used as an input for another transaction (a true input, not just one of a mixing set), a key image is generated and stored in the transaction in order to prevent double spending. If this key image is seen again, the transaction using it is rejected.
| key_im | the key image to search for |
Definition at line 177 of file blockchain.cpp.


| bool Blockchain::init | ( | BlockchainDB * | db, |
| const network_type | nettype = MAINNET, |
||
| bool | offline = false, |
||
| const cryptonote::test_options * | test_options = NULL, |
||
| difficulty_type | fixed_difficulty = 0, |
||
| const GetCheckpointsCallback & | get_checkpoints = nullptr, |
||
| bool | ignore_bsig = false, |
||
| bool | fallback_to_pow = false |
||
| ) |
Initialize the Blockchain state.
| db | a pointer to the backing store to use for the blockchain |
| nettype | network type |
| offline | true if running offline, else false |
| test_options | test parameters |
| fixed_difficulty | fixed difficulty for testing purposes; 0 means disabled |
| get_checkpoints | if set, will be called to get checkpoints data |
Definition at line 334 of file blockchain.cpp.


| bool Blockchain::init | ( | BlockchainDB * | db, |
| HardFork *& | hf, | ||
| const network_type | nettype = MAINNET, |
||
| bool | offline = false |
||
| ) |
Initialize the Blockchain state.
| db | a pointer to the backing store to use for the blockchain |
| hf | a structure containing hardfork information |
| nettype | network type |
| offline | true if running offline, else false |
Definition at line 620 of file blockchain.cpp.

Definition at line 5022 of file blockchain.cpp.
|
inline |
Definition at line 1016 of file blockchain.h.


| bool Blockchain::key_images_already_spent | ( | const transaction & | tx | ) | const |
check if any key image in a transaction has already been spent
| tx | the transaction to check |
Definition at line 2958 of file blockchain.cpp.

| void Blockchain::lock | ( | void | ) |
| void Blockchain::normalize_v7_difficulties | ( | ) |
Normalize the cumulative difficulty for V7 blocks, fixing the differing difficulty among nodes.
Definition at line 1098 of file blockchain.cpp.

| void Blockchain::on_new_tx_from_block | ( | const cryptonote::transaction & | tx | ) |
called when we see a tx originating from a block
Used for handling txes from historical blocks in a fast way
Definition at line 2843 of file blockchain.cpp.


| void Blockchain::output_scan_worker | ( | const uint64_t | amount, |
| const std::vector< uint64_t > & | offsets, | ||
| std::vector< output_data_t > & | outputs | ||
| ) | const |
get a number of outputs of a specific amount
| amount | the amount |
| offsets | the indices (indexed to the amount) of the outputs |
| outputs | return-by-reference the outputs collected |
Definition at line 4396 of file blockchain.cpp.


| void Blockchain::pop_blocks | ( | uint64_t | nblocks | ) |
removes blocks from the top of the blockchain
| nblocks | number of blocks to be removed |
Definition at line 700 of file blockchain.cpp.

| bool Blockchain::prepare_handle_incoming_blocks | ( | const std::vector< block_complete_entry > & | blocks_entry, |
| std::vector< block > & | blocks | ||
| ) |
performs some preprocessing on a group of incoming blocks to speed up verification
| blocks_entry | a list of incoming blocks |
| blocks | the parsed blocks |
Definition at line 4419 of file blockchain.cpp.


Definition at line 4073 of file blockchain.cpp.


| void Blockchain::remove_txpool_tx | ( | const crypto::hash & | txid | ) |
Definition at line 4778 of file blockchain.cpp.


clears the blockchain and starts a new one
| b | the first block in the new chain (the genesis block) |
Definition at line 812 of file blockchain.cpp.


| void Blockchain::safesyncmode | ( | const bool | onoff | ) |
Put DB in safe sync mode.
Definition at line 4835 of file blockchain.cpp.


|
inline |
sets a block notify object to call for every new block
| notify | the notify object to call at every new block |
Definition at line 785 of file blockchain.h.
|
inline |
assign a set of blockchain checkpoint hashes
| chk_pts | the set of checkpoints to assign |
Definition at line 175 of file blockchain.h.

| void Blockchain::set_enforce_dns_checkpoints | ( | bool | enforce | ) |
configure whether or not to enforce DNS-based checkpoints
| enforce | the new enforcement setting |
Definition at line 4307 of file blockchain.cpp.

|
inline |
sets a reorg notify object to call for every reorg
| notify | the notify object to call at every reorg |
Definition at line 792 of file blockchain.h.
|
inline |
set whether or not to show/print time statistics
| stats | the new time stats setting |
Definition at line 804 of file blockchain.h.
| void Blockchain::set_user_options | ( | uint64_t | maxthreads, |
| bool | sync_on_blocks, | ||
| uint64_t | sync_threshold, | ||
| blockchain_db_sync_mode | sync_mode, | ||
| bool | fast_sync, | ||
| std::string | validator_key | ||
| ) |
Update the validators public key by fetching data from electroneum's endpoint.
| maxthreads | max number of threads when preparing blocks for addition |
| sync_on_blocks | whether to sync based on blocks or bytes |
| sync_threshold | number of blocks/bytes to cache before syncing to database |
| sync_mode | the blockchain_db_sync_mode to use |
| fast_sync | sync using built-in block hashes as trusted |
Definition at line 4817 of file blockchain.cpp.
|
inline |
set validator key
Definition at line 1064 of file blockchain.h.

|
inline |
Definition at line 1066 of file blockchain.h.
| void Blockchain::sign_block | ( | block & | b, |
| std::string | privateKey | ||
| ) |
Digitally sign the block.
| b | the block to be digitally signed |
| privateKey | key to generate the signature |
Definition at line 1811 of file blockchain.cpp.


| bool Blockchain::store_blockchain | ( | ) |
stores the blockchain
If Blockchain is handling storing of the blockchain (rather than BlockchainDB), this initiates a blockchain save.
Definition at line 630 of file blockchain.cpp.


| void Blockchain::unlock | ( | void | ) |
| bool Blockchain::update_blockchain_pruning | ( | ) |
Definition at line 4082 of file blockchain.cpp.


loads new checkpoints from a file and optionally from DNS
| file_path | the path of the file to look for and load checkpoints from |
| check_dns | whether or not to check for new DNS-based checkpoints |
Definition at line 4272 of file blockchain.cpp.


| void Blockchain::update_txpool_tx | ( | const crypto::hash & | txid, |
| const txpool_tx_meta_t & | meta | ||
| ) |
Definition at line 4773 of file blockchain.cpp.


| bool Blockchain::utxo_nonexistence_from_output | ( | const txin_to_key_public & | public_output | ) | const |
check if a single utxo in a transaction has already been spent using the hash and out index (v3 tx onwards)
| public_output | the output to check |
Definition at line 2993 of file blockchain.cpp.


| bool Blockchain::utxo_nonexistent | ( | const transaction & | tx | ) | const |
check if any utxo in a transaction has already been spent using the tx (v3 tx onwards)
| tx | the transaction to check |
Definition at line 2975 of file blockchain.cpp.

Verify block's digital signature.
| b | block to be verified |
Definition at line 1823 of file blockchain.cpp.
