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
96// Keeping it for next HF
97// struct BambooRedelegation {
98// taraxa::addr_t validator;
99// taraxa::uint256_t amount;
100// HAS_RLP_FIELDS
101// };
102// Json::Value enc_json(const BambooRedelegation& obj);
103// void dec_json(const Json::Value& json, BambooRedelegation& obj);
104
105// struct BambooHardfork {
106// uint64_t block_num{0};
107// std::vector<BambooRedelegation> redelegations;
108
109// HAS_RLP_FIELDS
110// };
111// Json::Value enc_json(const BambooHardfork& obj);
112// void dec_json(const Json::Value& json, BambooHardfork& obj);
113
115 // disable it by default (set to max uint64)
117 std::vector<Redelegation> redelegations;
118 /*
119 * @brief key is block number at which change is applied and value is new distribution interval.
120 * Default distribution frequency is every block
121 * To change rewards distribution frequency we should add a new element in map below.
122 * For example {{101, 20}, {201, 10}} means:
123 * 1. for blocks [1,100] we are distributing rewards every block
124 * 2. for blocks [101, 200] rewards are distributed every 20 block. On blocks 120, 140, etc.
125 * 3. for blocks after 201 rewards are distributed every 10 block. On blocks 210, 220, etc.
126 */
127 using RewardsDistributionMap = std::map<uint64_t, uint32_t>;
129
130 // Magnolia hardfork:
131 // 1.fixing premature deletion of validators in dpos contract -> validator is deleted only
132 // after last delegator confirms his undelegation and:
133 // total_stake == 0, rewards_pool == 0, undelegations_count == 0.
134 // 2. changing fee rewards distribution.
135 // Rewards will be distributed to dag blocks creator commission pool, but not directly to the balance of pbft block
136 // creator.
137 // 3. Introducing slashing/jailing contract - in case someone double votes - he is jailed for N blocks and unable to
138 // participate in consensus
140
141 // disable it by default (set to max uint64)
143 // disable it by default (set to max uint64)
145
146 // Aspen hardfork implements new yield curve
148
149 bool isAspenHardforkPartOne(uint64_t block_number) const { return block_number >= aspen_hf.block_num_part_one; }
150
151 // Ficus hardfork: implementation of pillar chain
153
154 // Cornus hf - support multiple undelegations from the same validator at the same time
155 // - change of delegation locking period
156 // - change gas limit
158 bool isOnCornusHardfork(uint64_t block_number) const { return block_number >= cornus_hf.block_num; }
159
160 // Soleirolia hf - increase trx gas minimum price
161 // - limit max trx gas
163
165};
166
167Json::Value enc_json(const HardforksConfig& obj);
168void dec_json(const Json::Value& json, HardforksConfig& obj);
169} // 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:25
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:30
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: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:114
bool isOnCornusHardfork(uint64_t block_number) const
Definition hardfork.hpp:158
uint64_t fix_redelegate_block_num
Definition hardfork.hpp:116
AspenHardfork aspen_hf
Definition hardfork.hpp:147
uint64_t phalaenopsis_hf_block_num
Definition hardfork.hpp:142
std::vector< Redelegation > redelegations
Definition hardfork.hpp:117
uint64_t fix_claim_all_block_num
Definition hardfork.hpp:144
FicusHardforkConfig ficus_hf
Definition hardfork.hpp:152
MagnoliaHardfork magnolia_hf
Definition hardfork.hpp:139
CornusHardforkConfig cornus_hf
Definition hardfork.hpp:157
RewardsDistributionMap rewards_distribution_frequency
Definition hardfork.hpp:128
std::map< uint64_t, uint32_t > RewardsDistributionMap
Definition hardfork.hpp:127
bool isAspenHardforkPartOne(uint64_t block_number) const
Definition hardfork.hpp:149
SoleiroliaHardforkConfig soleirolia_hf
Definition hardfork.hpp:162