From 73cf28b2a8f6c34b95090513874cde377003b609 Mon Sep 17 00:00:00 2001 From: mfrankovi Date: Thu, 28 Nov 2024 11:58:40 +0100 Subject: [PATCH] chore: increase gas limit --- .../config_jsons/default/default_genesis.json | 6 ++- .../config_jsons/devnet/devnet_genesis.json | 6 ++- .../config_jsons/mainnet/mainnet_genesis.json | 6 ++- .../config_jsons/testnet/testnet_genesis.json | 10 ++-- libraries/config/include/config/config.hpp | 2 + libraries/config/include/config/hardfork.hpp | 16 +++++-- libraries/config/src/config.cpp | 3 ++ libraries/config/src/hardfork.cpp | 22 +++++++-- .../consensus/include/dag/dag_manager.hpp | 1 + .../consensus/src/dag/dag_block_proposer.cpp | 6 +-- .../consensus/src/dag/dag_manager.cpp | 7 +-- tests/rewards_stats_test.cpp | 46 +++++++++++++------ 12 files changed, 99 insertions(+), 32 deletions(-) diff --git a/libraries/cli/include/cli/config_jsons/default/default_genesis.json b/libraries/cli/include/cli/config_jsons/default/default_genesis.json index 4afcf79004..b56c69c31d 100644 --- a/libraries/cli/include/cli/config_jsons/default/default_genesis.json +++ b/libraries/cli/include/cli/config_jsons/default/default_genesis.json @@ -120,6 +120,10 @@ "pillar_blocks_interval": 10, "bridge_contract_address": "0xcAF2b453FE8382a4B8110356DF0508f6d71F22BF" }, - "cornus_hf_block_num": 100 + "cornus_hf": { + "block_num": 100, + "dag_gas_limit": "0x1908B100", + "pbft_gas_limit": "0x7d2b7500" + } } } \ No newline at end of file diff --git a/libraries/cli/include/cli/config_jsons/devnet/devnet_genesis.json b/libraries/cli/include/cli/config_jsons/devnet/devnet_genesis.json index d4afa4865c..c89fa91300 100644 --- a/libraries/cli/include/cli/config_jsons/devnet/devnet_genesis.json +++ b/libraries/cli/include/cli/config_jsons/devnet/devnet_genesis.json @@ -285,6 +285,10 @@ "pillar_blocks_interval": 10, "bridge_contract_address": "0xcAF2b453FE8382a4B8110356DF0508f6d71F22BF" }, - "cornus_hf_block_num": 0 + "cornus_hf": { + "block_num": 0, + "dag_gas_limit": "0x1908B100", + "pbft_gas_limit": "0x7d2b7500" + } } } \ No newline at end of file diff --git a/libraries/cli/include/cli/config_jsons/mainnet/mainnet_genesis.json b/libraries/cli/include/cli/config_jsons/mainnet/mainnet_genesis.json index 801a7f781b..d5abb3ffa6 100644 --- a/libraries/cli/include/cli/config_jsons/mainnet/mainnet_genesis.json +++ b/libraries/cli/include/cli/config_jsons/mainnet/mainnet_genesis.json @@ -1654,6 +1654,10 @@ "pillar_blocks_interval": 4000, "bridge_contract_address": "0xe126E0BaeAE904b8Cfd619Be1A8667A173b763a1" }, - "cornus_hf_block_num": -1 + "cornus_hf": { + "block_num": -1, + "dag_gas_limit": "0x1908B100", + "pbft_gas_limit": "0x7d2b7500" + } } } \ No newline at end of file diff --git a/libraries/cli/include/cli/config_jsons/testnet/testnet_genesis.json b/libraries/cli/include/cli/config_jsons/testnet/testnet_genesis.json index 658bc22702..3cff3a0d87 100644 --- a/libraries/cli/include/cli/config_jsons/testnet/testnet_genesis.json +++ b/libraries/cli/include/cli/config_jsons/testnet/testnet_genesis.json @@ -105,13 +105,13 @@ "dag_blocks_size": "0x32", "ghost_path_move_back": "0x0", "lambda_ms": "0x5DC", - "gas_limit": "0x7d2b7500" + "gas_limit": "0x12C684C0" }, "dag": { "block_proposer": { "shard": 1 }, - "gas_limit": "0x1908B100" + "gas_limit": "0x1E0A6E0" }, "sortition": { "changes_count_for_average": 10, @@ -154,6 +154,10 @@ "pillar_blocks_interval": 1000, "bridge_contract_address": "0xcAF2b453FE8382a4B8110356DF0508f6d71F22BF" }, - "cornus_hf_block_num": 1668000 + "cornus_hf": { + "block_num": 1668000, + "dag_gas_limit": "0x1908B100", + "pbft_gas_limit": "0x7d2b7500" + } } } \ No newline at end of file diff --git a/libraries/config/include/config/config.hpp b/libraries/config/include/config/config.hpp index 477c29019d..c5fa6e0b79 100644 --- a/libraries/config/include/config/config.hpp +++ b/libraries/config/include/config/config.hpp @@ -58,6 +58,8 @@ struct FullNodeConfig { bool enable_test_rpc = false; bool enable_debug = false; uint32_t final_chain_cache_in_blocks = 5; + uint64_t propose_dag_gas_limit = 0x1E0A6E0; + uint64_t propose_pbft_gas_limit = 0x12C684C0; // config values that limits transactions pool uint32_t transactions_pool_size = kDefaultTransactionPoolSize; diff --git a/libraries/config/include/config/hardfork.hpp b/libraries/config/include/config/hardfork.hpp index a591ee860e..1b0fb18b65 100644 --- a/libraries/config/include/config/hardfork.hpp +++ b/libraries/config/include/config/hardfork.hpp @@ -72,6 +72,16 @@ struct FicusHardforkConfig { Json::Value enc_json(const FicusHardforkConfig& obj); void dec_json(const Json::Value& json, FicusHardforkConfig& obj); +struct CornusHardforkConfig { + uint64_t block_num = -1; + uint64_t dag_gas_limit = 0; + uint64_t pbft_gas_limit = 0; + + HAS_RLP_FIELDS +}; +Json::Value enc_json(const CornusHardforkConfig& obj); +void dec_json(const Json::Value& json, CornusHardforkConfig& obj); + // Keeping it for next HF // struct BambooRedelegation { // taraxa::addr_t validator; @@ -130,10 +140,10 @@ struct HardforksConfig { // Ficus hardfork: implementation of pillar chain FicusHardforkConfig ficus_hf; - // Cornus hf - support multiple undelegations from the same validator at the same time - uint64_t cornus_hf_block_num{0}; + // Cornus hardfork + CornusHardforkConfig cornus_hf; - bool isCornusHardfork(uint64_t block_number) const { return block_number >= cornus_hf_block_num; } + bool isCornusHardfork(uint64_t block_number) const { return block_number >= cornus_hf.block_num; } HAS_RLP_FIELDS }; diff --git a/libraries/config/src/config.cpp b/libraries/config/src/config.cpp index 9e9bffdd19..4bc344585e 100644 --- a/libraries/config/src/config.cpp +++ b/libraries/config/src/config.cpp @@ -108,6 +108,9 @@ FullNodeConfig::FullNodeConfig(const Json::Value &string_or_object, const Json:: genesis = GenesisConfig(); } + propose_dag_gas_limit = getConfigDataAsUInt(root, {"propose_dag_gas_limit"}, true, propose_dag_gas_limit); + propose_pbft_gas_limit = getConfigDataAsUInt(root, {"propose_pbft_gas_limit"}, true, propose_pbft_gas_limit); + is_light_node = getConfigDataAsBoolean(root, {"is_light_node"}, true, is_light_node); const auto min_light_node_history = (genesis.state.dpos.blocks_per_year * kDefaultLightNodeHistoryDays) / 365; light_node_history = getConfigDataAsUInt(root, {"light_node_history"}, true, min_light_node_history); diff --git a/libraries/config/src/hardfork.cpp b/libraries/config/src/hardfork.cpp index dd0c85d5b8..bda7bb43e2 100644 --- a/libraries/config/src/hardfork.cpp +++ b/libraries/config/src/hardfork.cpp @@ -104,6 +104,21 @@ void dec_json(const Json::Value& json, FicusHardforkConfig& obj) { RLP_FIELDS_DEFINE(FicusHardforkConfig, block_num, pillar_blocks_interval, bridge_contract_address) +Json::Value enc_json(const CornusHardforkConfig& obj) { + Json::Value json(Json::objectValue); + json["block_num"] = dev::toJS(obj.block_num); + json["dag_gas_limit"] = dev::toJS(obj.dag_gas_limit); + json["pbft_gas_limit"] = dev::toJS(obj.pbft_gas_limit); + return json; +} + +void dec_json(const Json::Value& json, CornusHardforkConfig& obj) { + obj.block_num = json["block_num"].isUInt64() ? dev::getUInt(json["block_num"]) : uint64_t(-1); + obj.dag_gas_limit = dev::getUInt(json["dag_gas_limit"]); + obj.pbft_gas_limit = dev::getUInt(json["pbft_gas_limit"]); +} +RLP_FIELDS_DEFINE(CornusHardforkConfig, block_num, dag_gas_limit, pbft_gas_limit) + // Json::Value enc_json(const BambooRedelegation& obj) { // Json::Value json(Json::objectValue); // json["validator"] = dev::toJS(obj.validator); @@ -158,7 +173,7 @@ Json::Value enc_json(const HardforksConfig& obj) { json["aspen_hf"] = enc_json(obj.aspen_hf); json["ficus_hf"] = enc_json(obj.ficus_hf); // json["bamboo_hf"] = enc_json(obj.bamboo_hf); - json["cornus_hf_block_num"] = dev::toJS(obj.cornus_hf_block_num); + json["cornus_hf"] = enc_json(obj.cornus_hf); return json; } @@ -190,10 +205,9 @@ void dec_json(const Json::Value& json, HardforksConfig& obj) { dec_json(json["aspen_hf"], obj.aspen_hf); dec_json(json["ficus_hf"], obj.ficus_hf); // dec_json(json["bamboo_hf"], obj.bamboo_hf); - obj.cornus_hf_block_num = - json["cornus_hf_block_num"].isUInt64() ? dev::getUInt(json["cornus_hf_block_num"]) : uint64_t(-1); + dec_json(json["cornus_hf"], obj.cornus_hf); } RLP_FIELDS_DEFINE(HardforksConfig, fix_redelegate_block_num, redelegations, rewards_distribution_frequency, magnolia_hf, - phalaenopsis_hf_block_num, fix_claim_all_block_num, aspen_hf, ficus_hf, cornus_hf_block_num) + phalaenopsis_hf_block_num, fix_claim_all_block_num, aspen_hf, ficus_hf, cornus_hf) } // namespace taraxa \ No newline at end of file diff --git a/libraries/core_libs/consensus/include/dag/dag_manager.hpp b/libraries/core_libs/consensus/include/dag/dag_manager.hpp index a2e077576a..ff3e3885ec 100644 --- a/libraries/core_libs/consensus/include/dag/dag_manager.hpp +++ b/libraries/core_libs/consensus/include/dag/dag_manager.hpp @@ -280,6 +280,7 @@ class DagManager : public std::enable_shared_from_this { ExpirationCacheMap> seen_blocks_; std::shared_ptr final_chain_; const uint64_t kPbftGasLimit; + const uint64_t kDagGasLimit; const HardforksConfig kHardforks; const uint64_t kValidatorMaxVote; diff --git a/libraries/core_libs/consensus/src/dag/dag_block_proposer.cpp b/libraries/core_libs/consensus/src/dag/dag_block_proposer.cpp index 510778868a..13e23503a7 100644 --- a/libraries/core_libs/consensus/src/dag/dag_block_proposer.cpp +++ b/libraries/core_libs/consensus/src/dag/dag_block_proposer.cpp @@ -26,8 +26,8 @@ DagBlockProposer::DagBlockProposer(const FullNodeConfig& config, std::shared_ptr node_sk_(config.node_secret), vrf_sk_(config.vrf_secret), vrf_pk_(vrf_wrapper::getVrfPublicKey(vrf_sk_)), - kPbftGasLimit(config.genesis.pbft.gas_limit), - kDagGasLimit(config.genesis.dag.gas_limit), + kPbftGasLimit(std::min(config.genesis.pbft.gas_limit, config.propose_pbft_gas_limit)), + kDagGasLimit(std::min(config.genesis.dag.gas_limit, config.propose_dag_gas_limit)), kHardforks(config.genesis.state.hardforks), kValidatorMaxVote(config.genesis.state.dpos.validator_maximum_stake / config.genesis.state.dpos.vote_eligibility_balance_step) { @@ -117,7 +117,7 @@ bool DagBlockProposer::proposeDagBlock() { } } - auto [transactions, estimations] = getShardedTrxs(*proposal_period, dag_mgr_->getDagConfig().gas_limit); + auto [transactions, estimations] = getShardedTrxs(*proposal_period, kDagGasLimit); if (transactions.empty()) { last_propose_level_ = propose_level; num_tries_ = 0; diff --git a/libraries/core_libs/consensus/src/dag/dag_manager.cpp b/libraries/core_libs/consensus/src/dag/dag_manager.cpp index 301ee7c885..79608046a6 100644 --- a/libraries/core_libs/consensus/src/dag/dag_manager.cpp +++ b/libraries/core_libs/consensus/src/dag/dag_manager.cpp @@ -36,6 +36,7 @@ DagManager::DagManager(const FullNodeConfig &config, addr_t node_addr, std::shar seen_blocks_(cache_max_size_, cache_delete_step_), final_chain_(std::move(final_chain)), kPbftGasLimit(config.genesis.pbft.gas_limit), + kDagGasLimit(config.genesis.dag.gas_limit), kHardforks(config.genesis.state.hardforks), kValidatorMaxVote(config.genesis.state.dpos.validator_maximum_stake / config.genesis.state.dpos.vote_eligibility_balance_step) { @@ -715,14 +716,14 @@ std::pair DagManager::ver return {VerifyBlockReturnType::IncorrectTransactionsEstimation, {}}; } - if (total_block_weight > getDagConfig().gas_limit) { - LOG(log_er_) << "BlockTooBig. DAG block " << blk->getHash() << " gas_limit: " << getDagConfig().gas_limit + if (total_block_weight > kDagGasLimit) { + LOG(log_er_) << "BlockTooBig. DAG block " << blk->getHash() << " gas_limit: " << kDagGasLimit << " total_block_weight " << total_block_weight << " current period " << final_chain_->lastBlockNumber(); return {VerifyBlockReturnType::BlockTooBig, {}}; } - if ((blk->getTips().size() + 1) > kPbftGasLimit / getDagConfig().gas_limit) { + if ((blk->getTips().size() + 1) > kPbftGasLimit / kDagGasLimit) { for (const auto &t : blk->getTips()) { const auto tip_blk = getDagBlock(t); if (tip_blk == nullptr) { diff --git a/tests/rewards_stats_test.cpp b/tests/rewards_stats_test.cpp index 9b2e9d4272..d11b6d240f 100644 --- a/tests/rewards_stats_test.cpp +++ b/tests/rewards_stats_test.cpp @@ -20,11 +20,17 @@ struct RewardsStatsTest : NodesTest {}; class TestableRewardsStats : public rewards::Stats { public: TestableRewardsStats(const HardforksConfig::RewardsDistributionMap& rdm, std::shared_ptr db) - : rewards::Stats( - 100, - HardforksConfig{ - 0, {}, rdm, MagnoliaHardfork{0, 0}, 0, 0, AspenHardfork{0, 0}, FicusHardforkConfig{0, 0, {}}}, - db, [](auto) { return 100; }) {} + : rewards::Stats(100, + HardforksConfig{0, + {}, + rdm, + MagnoliaHardfork{0, 0}, + 0, + 0, + AspenHardfork{0, 0}, + FicusHardforkConfig{0, 0, {}}, + CornusHardforkConfig{0, 0, 0}}, + db, [](auto) { return 100; }) {} auto getStats() { return blocks_stats_; } }; @@ -242,14 +248,28 @@ TEST_F(RewardsStatsTest, dagBlockRewards) { hfc.aspen_hf.block_num_part_two = 4; // Create two reward stats to test before and after aspen hardfork part 1 - rewards::Stats pre_aspen_reward_stats( - 100, - HardforksConfig{0, {}, {}, MagnoliaHardfork{0, 0}, 0, 0, AspenHardfork{6, 999}, FicusHardforkConfig{0, 0, {}}}, - db, [](auto) { return 100; }); - rewards::Stats post_aspen_reward_stats( - 100, - HardforksConfig{0, {}, {}, MagnoliaHardfork{0, 0}, 0, 0, AspenHardfork{4, 999}, FicusHardforkConfig{0, 0, {}}}, - db, [](auto) { return 100; }); + rewards::Stats pre_aspen_reward_stats(100, + HardforksConfig{0, + {}, + {}, + MagnoliaHardfork{0, 0}, + 0, + 0, + AspenHardfork{6, 999}, + FicusHardforkConfig{0, 0, {}}, + CornusHardforkConfig{0, 0, 0}}, + db, [](auto) { return 100; }); + rewards::Stats post_aspen_reward_stats(100, + HardforksConfig{0, + {}, + {}, + MagnoliaHardfork{0, 0}, + 0, + 0, + AspenHardfork{4, 999}, + FicusHardforkConfig{0, 0, {}}, + CornusHardforkConfig{0, 0, 0}}, + db, [](auto) { return 100; }); // Create pbft block with 5 dag blocks auto dag_key1 = dev::KeyPair::create();