TARAXA
Loading...
Searching...
No Matches
hardfork.hpp
Go to the documentation of this file.
1#pragma once
2
4
6#include "common/types.hpp"
7
8namespace taraxa {
15Json::Value enc_json(const Redelegation& obj);
16void dec_json(const Json::Value& json, Redelegation& obj);
17
19 uint64_t block_num = -1;
20 uint64_t jail_time = 0; // number of blocks
21
23};
24Json::Value enc_json(const MagnoliaHardfork& obj);
25void dec_json(const Json::Value& json, MagnoliaHardfork& obj);
26
28 // Part 1 prepares db data that are required for part 2 to be functional
29 uint64_t block_num_part_one{0};
30 // Part 2 implements new yield curve
31 uint64_t block_num_part_two{0};
32
33 taraxa::uint256_t max_supply{"0x26C62AD77DC602DAE0000000"}; // 12 Billion
34 // total generated rewards from block 1 to block_num
35 // It is partially estimated for blocks between the aspen hf release block and actual aspen hf block_num
37
39};
40Json::Value enc_json(const AspenHardfork& obj);
41void dec_json(const Json::Value& json, AspenHardfork& obj);
42
44 uint64_t block_num{10};
45 uint64_t pillar_blocks_interval{10}; // [periods] how often is the new pillar block created
46 taraxa::addr_t bridge_contract_address; // [address] of the bridge contract
47
48 bool isFicusHardfork(taraxa::PbftPeriod period) const;
49
55 bool isPillarBlockPeriod(taraxa::PbftPeriod period, bool skip_first_pillar_block = false) const;
56
62
67
68 void validate(uint32_t delegation_delay) const;
69
71};
72Json::Value enc_json(const FicusHardforkConfig& obj);
73void dec_json(const Json::Value& json, FicusHardforkConfig& obj);
74
76 uint64_t block_num = -1;
77 uint32_t delegation_locking_period = 5; // number of blocks
78 uint64_t dag_gas_limit = 0;
79 uint64_t pbft_gas_limit = 0;
80
82};
83Json::Value enc_json(const CornusHardforkConfig& obj);
84void dec_json(const Json::Value& json, CornusHardforkConfig& obj);
85
87 uint64_t block_num = -1;
88 uint64_t trx_min_gas_price = 1; // [wei]
89 uint64_t trx_max_gas_limit = 31500000;
90
92};
93Json::Value enc_json(const SoleiroliaHardforkConfig& obj);
94void dec_json(const Json::Value& json, SoleiroliaHardforkConfig& obj);
95
97 uint64_t block_num = 0;
98 uint32_t lambda_min = 500; // [ms] - valid only for round 1
99 uint32_t lambda_max = 1500; // [ms] - valid only for round 1
100 uint32_t lambda_default = 2000; // [ms] - used in all rounds > 1
101 uint32_t lambda_change_interval = 10; // [number of blocks]
102 uint32_t lambda_change = 10; // [ms]
104 4000; // [ms] - how long it takes to propagate block in good network conditions, used in round 1
106 17000; // [ms] - how long it takes to propagate block in good network conditions, used in rounds > 1
107
108 bool isDynamicLambdaChangeInterval(uint64_t block_number) const {
109 return block_number > block_num && block_number % lambda_change_interval == 0;
110 }
111
113};
114Json::Value enc_json(const CactiHardforkConfig& obj);
115void dec_json(const Json::Value& json, CactiHardforkConfig& obj);
116
117// Keeping it for next HF
118// struct BambooRedelegation {
119// taraxa::addr_t validator;
120// taraxa::uint256_t amount;
121// HAS_RLP_FIELDS
122// };
123// Json::Value enc_json(const BambooRedelegation& obj);
124// void dec_json(const Json::Value& json, BambooRedelegation& obj);
125
126// struct BambooHardfork {
127// uint64_t block_num{0};
128// std::vector<BambooRedelegation> redelegations;
129
130// HAS_RLP_FIELDS
131// };
132// Json::Value enc_json(const BambooHardfork& obj);
133// void dec_json(const Json::Value& json, BambooHardfork& obj);
134
136 // disable it by default (set to max uint64)
138 std::vector<Redelegation> redelegations;
139 /*
140 * @brief key is block number at which change is applied and value is new distribution interval.
141 * Default distribution frequency is every block
142 * To change rewards distribution frequency we should add a new element in map below.
143 * For example {{101, 20}, {201, 10}} means:
144 * 1. for blocks [1,100] we are distributing rewards every block
145 * 2. for blocks [101, 200] rewards are distributed every 20 block. On blocks 120, 140, etc.
146 * 3. for blocks after 201 rewards are distributed every 10 block. On blocks 210, 220, etc.
147 */
148 using RewardsDistributionMap = std::map<uint64_t, uint32_t>;
150
151 // Magnolia hardfork:
152 // 1.fixing premature deletion of validators in dpos contract -> validator is deleted only
153 // after last delegator confirms his undelegation and:
154 // total_stake == 0, rewards_pool == 0, undelegations_count == 0.
155 // 2. changing fee rewards distribution.
156 // Rewards will be distributed to dag blocks creator commission pool, but not directly to the balance of pbft block
157 // creator.
158 // 3. Introducing slashing/jailing contract - in case someone double votes - he is jailed for N blocks and unable to
159 // participate in consensus
161
162 // disable it by default (set to max uint64)
164 // disable it by default (set to max uint64)
166
167 // Aspen hardfork implements new yield curve
169
170 bool isAspenHardforkPartOne(uint64_t block_number) const { return block_number >= aspen_hf.block_num_part_one; }
171
172 // Ficus hardfork: implementation of pillar chain
174
175 // Cornus hf - support multiple undelegations from the same validator at the same time
176 // - change of delegation locking period
177 // - change gas limit
179 bool isOnCornusHardfork(uint64_t block_number) const { return block_number >= cornus_hf.block_num; }
180
181 // Soleirolia hf - increase trx gas minimum price
182 // - limit max trx gas
184
185 // Cacti hardfork
187 bool isOnCactiHardfork(uint64_t block_number) const { return block_number >= cacti_hf.block_num; }
188
190};
191
192Json::Value enc_json(const HardforksConfig& obj);
193void dec_json(const Json::Value& json, HardforksConfig& obj);
194} // namespace taraxa
Definition FixedHash.h:35
#define HAS_RLP_FIELDS
Definition encoding_rlp.hpp:208
Definition app.hpp:16
uint64_t jail_time
Definition hardfork.hpp:20
uint64_t block_num_part_one
Definition hardfork.hpp:29
taraxa::uint256_t max_supply
Definition hardfork.hpp:33
uint64_t dag_gas_limit
Definition hardfork.hpp:78
taraxa::addr_t validator
Definition hardfork.hpp:10
uint32_t delegation_locking_period
Definition hardfork.hpp:77
Json::Value enc_json(const DagBlockProposerConfig &obj)
Definition dag_config.cpp:16
void dec_json(Json::Value const &json, DBConfig &db_config)
Definition config.cpp:12
taraxa::addr_t delegator
Definition hardfork.hpp:11
uint64_t block_num_part_two
Definition hardfork.hpp:31
uint64_t block_num
Definition hardfork.hpp:87
EthBlockNumber PbftPeriod
Definition types.hpp:24
taraxa::uint256_t amount
Definition hardfork.hpp:12
uint64_t block_num
Definition hardfork.hpp:76
boost::multiprecision::uint256_t uint256_t
Definition types.hpp:29
uint64_t trx_max_gas_limit
Definition hardfork.hpp:89
uint64_t trx_min_gas_price
Definition hardfork.hpp:88
uint64_t pbft_gas_limit
Definition hardfork.hpp:79
taraxa::uint256_t generated_rewards
Definition hardfork.hpp:36
uint64_t block_num
Definition hardfork.hpp:19
Definition hardfork.hpp:27
Definition hardfork.hpp:75
Definition hardfork.hpp:18
Definition hardfork.hpp:9
Definition hardfork.hpp:86
Definition hardfork.hpp:96
uint32_t block_propagation_max
Definition hardfork.hpp:105
bool isDynamicLambdaChangeInterval(uint64_t block_number) const
Definition hardfork.hpp:108
uint32_t lambda_min
Definition hardfork.hpp:98
uint32_t lambda_max
Definition hardfork.hpp:99
uint32_t lambda_default
Definition hardfork.hpp:100
uint32_t lambda_change
Definition hardfork.hpp:102
uint64_t block_num
Definition hardfork.hpp:97
uint32_t block_propagation_min
Definition hardfork.hpp:103
uint32_t lambda_change_interval
Definition hardfork.hpp:101
Definition hardfork.hpp:43
taraxa::addr_t bridge_contract_address
Definition hardfork.hpp:46
bool isPillarBlockPeriod(taraxa::PbftPeriod period, bool skip_first_pillar_block=false) const
Definition hardfork.cpp:56
uint64_t pillar_blocks_interval
Definition hardfork.hpp:45
bool isPbftWithPillarBlockPeriod(taraxa::PbftPeriod period) const
Definition hardfork.cpp:62
bool isFicusHardfork(taraxa::PbftPeriod period) const
Definition hardfork.cpp:54
void validate(uint32_t delegation_delay) const
Definition hardfork.cpp:72
uint64_t block_num
Definition hardfork.hpp:44
taraxa::PbftPeriod firstPillarBlockPeriod() const
Definition hardfork.cpp:68
Definition hardfork.hpp:135
bool isOnCornusHardfork(uint64_t block_number) const
Definition hardfork.hpp:179
uint64_t fix_redelegate_block_num
Definition hardfork.hpp:137
AspenHardfork aspen_hf
Definition hardfork.hpp:168
uint64_t phalaenopsis_hf_block_num
Definition hardfork.hpp:163
std::vector< Redelegation > redelegations
Definition hardfork.hpp:138
uint64_t fix_claim_all_block_num
Definition hardfork.hpp:165
FicusHardforkConfig ficus_hf
Definition hardfork.hpp:173
CactiHardforkConfig cacti_hf
Definition hardfork.hpp:186
MagnoliaHardfork magnolia_hf
Definition hardfork.hpp:160
CornusHardforkConfig cornus_hf
Definition hardfork.hpp:178
bool isOnCactiHardfork(uint64_t block_number) const
Definition hardfork.hpp:187
RewardsDistributionMap rewards_distribution_frequency
Definition hardfork.hpp:149
std::map< uint64_t, uint32_t > RewardsDistributionMap
Definition hardfork.hpp:148
bool isAspenHardforkPartOne(uint64_t block_number) const
Definition hardfork.hpp:170
SoleiroliaHardforkConfig soleirolia_hf
Definition hardfork.hpp:183