TARAXA
hardfork.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <libdevcore/CommonJS.h>
4 
6 #include "common/types.hpp"
7 
8 namespace taraxa {
9 struct Redelegation {
14 };
15 Json::Value enc_json(const Redelegation& obj);
16 void 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 };
24 Json::Value enc_json(const MagnoliaHardfork& obj);
25 void dec_json(const Json::Value& json, MagnoliaHardfork& obj);
26 
27 struct AspenHardfork {
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 };
40 Json::Value enc_json(const AspenHardfork& obj);
41 void 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 };
72 Json::Value enc_json(const FicusHardforkConfig& obj);
73 void dec_json(const Json::Value& json, FicusHardforkConfig& obj);
74 
75 // Keeping it for next HF
76 // struct BambooRedelegation {
77 // taraxa::addr_t validator;
78 // taraxa::uint256_t amount;
79 // HAS_RLP_FIELDS
80 // };
81 // Json::Value enc_json(const BambooRedelegation& obj);
82 // void dec_json(const Json::Value& json, BambooRedelegation& obj);
83 
84 // struct BambooHardfork {
85 // uint64_t block_num{0};
86 // std::vector<BambooRedelegation> redelegations;
87 
88 // HAS_RLP_FIELDS
89 // };
90 // Json::Value enc_json(const BambooHardfork& obj);
91 // void dec_json(const Json::Value& json, BambooHardfork& obj);
92 
94  // disable it by default (set to max uint64)
95  uint64_t fix_redelegate_block_num = -1;
96  std::vector<Redelegation> redelegations;
97  /*
98  * @brief key is block number at which change is applied and value is new distribution interval.
99  * Default distribution frequency is every block
100  * To change rewards distribution frequency we should add a new element in map below.
101  * For example {{101, 20}, {201, 10}} means:
102  * 1. for blocks [1,100] we are distributing rewards every block
103  * 2. for blocks [101, 200] rewards are distributed every 20 block. On blocks 120, 140, etc.
104  * 3. for blocks after 201 rewards are distributed every 10 block. On blocks 210, 220, etc.
105  */
106  using RewardsDistributionMap = std::map<uint64_t, uint32_t>;
108 
109  // Magnolia hardfork:
110  // 1.fixing premature deletion of validators in dpos contract -> validator is deleted only
111  // after last delegator confirms his undelegation and:
112  // total_stake == 0, rewards_pool == 0, undelegations_count == 0.
113  // 2. changing fee rewards distribution.
114  // Rewards will be distributed to dag blocks creator commission pool, but not directly to the balance of pbft block
115  // creator.
116  // 3. Introducing slashing/jailing contract - in case someone double votes - he is jailed for N blocks and unable to
117  // participate in consensus
119 
120  // disable it by default (set to max uint64)
122  // disable it by default (set to max uint64)
123  uint64_t fix_claim_all_block_num = -1;
124 
125  // Aspen hardfork implements new yield curve
127 
128  bool isAspenHardforkPartOne(uint64_t block_number) const { return block_number >= aspen_hf.block_num_part_one; }
129 
130  // Ficus hardfork: implementation of pillar chain
132 
133  // Cornus hf - support multiple undelegations from the same validator at the same time
134  uint64_t cornus_hf_block_num{0};
135 
136  bool isCornusHardfork(uint64_t block_number) const { return block_number >= cornus_hf_block_num; }
137 
139 };
140 
141 Json::Value enc_json(const HardforksConfig& obj);
142 void dec_json(const Json::Value& json, HardforksConfig& obj);
143 } // namespace taraxa
Definition: FixedHash.h:35
#define HAS_RLP_FIELDS
Definition: encoding_rlp.hpp:208
Definition: config.hpp:8
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
taraxa::addr_t validator
Definition: hardfork.hpp:10
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:13
taraxa::addr_t delegator
Definition: hardfork.hpp:11
uint64_t block_num_part_two
Definition: hardfork.hpp:31
EthBlockNumber PbftPeriod
Definition: types.hpp:24
taraxa::uint256_t amount
Definition: hardfork.hpp:12
boost::multiprecision::uint256_t uint256_t
Definition: types.hpp:29
taraxa::uint256_t generated_rewards
Definition: hardfork.hpp:36
uint64_t block_num
Definition: hardfork.hpp:19
Definition: hardfork.hpp:27
Definition: hardfork.hpp:18
Definition: hardfork.hpp:9
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:93
uint64_t fix_redelegate_block_num
Definition: hardfork.hpp:95
AspenHardfork aspen_hf
Definition: hardfork.hpp:126
uint64_t phalaenopsis_hf_block_num
Definition: hardfork.hpp:121
bool isCornusHardfork(uint64_t block_number) const
Definition: hardfork.hpp:136
std::vector< Redelegation > redelegations
Definition: hardfork.hpp:96
uint64_t fix_claim_all_block_num
Definition: hardfork.hpp:123
FicusHardforkConfig ficus_hf
Definition: hardfork.hpp:131
uint64_t cornus_hf_block_num
Definition: hardfork.hpp:134
MagnoliaHardfork magnolia_hf
Definition: hardfork.hpp:118
RewardsDistributionMap rewards_distribution_frequency
Definition: hardfork.hpp:107
std::map< uint64_t, uint32_t > RewardsDistributionMap
Definition: hardfork.hpp:106
bool isAspenHardforkPartOne(uint64_t block_number) const
Definition: hardfork.hpp:128