Documentation ¶
Index ¶
- Variables
- func SetGenesisTimestamp(ts int64)
- func Timestamp() int64
- func WithGenesisContext(ctx context.Context, g Genesis) context.Context
- type Account
- type Blockchain
- func (g *Blockchain) IsAleutian(height uint64) bool
- func (g *Blockchain) IsBering(height uint64) bool
- func (g *Blockchain) IsCook(height uint64) bool
- func (g *Blockchain) IsDardanelles(height uint64) bool
- func (g *Blockchain) IsDaytona(height uint64) bool
- func (g *Blockchain) IsEaster(height uint64) bool
- func (g *Blockchain) IsFairbank(height uint64) bool
- func (g *Blockchain) IsFbkMigration(height uint64) bool
- func (g *Blockchain) IsGreenland(height uint64) bool
- func (g *Blockchain) IsHawaii(height uint64) bool
- func (g *Blockchain) IsIceland(height uint64) bool
- func (g *Blockchain) IsJutland(height uint64) bool
- func (g *Blockchain) IsKamchatka(height uint64) bool
- func (g *Blockchain) IsLordHowe(height uint64) bool
- func (g *Blockchain) IsMidway(height uint64) bool
- func (g *Blockchain) IsNewfoundland(height uint64) bool
- func (g *Blockchain) IsOkhotsk(height uint64) bool
- func (g *Blockchain) IsPacific(height uint64) bool
- func (g *Blockchain) IsPalau(height uint64) bool
- func (g *Blockchain) IsQuebec(height uint64) bool
- func (g *Blockchain) IsRedsea(height uint64) bool
- func (g *Blockchain) IsSumatra(height uint64) bool
- func (g *Blockchain) IsToBeEnabled(height uint64) bool
- type BootstrapCandidate
- type Delegate
- type Genesis
- type Poll
- type RegistrationConsts
- type Rewarding
- func (r *Rewarding) AleutianEpochReward() *big.Int
- func (r *Rewarding) BlockReward() *big.Int
- func (r *Rewarding) DardanellesBlockReward() *big.Int
- func (r *Rewarding) EpochReward() *big.Int
- func (r *Rewarding) ExemptAddrsFromEpochReward() []address.Address
- func (r *Rewarding) FoundationBonus() *big.Int
- func (r *Rewarding) InitBalance() *big.Int
- type Staking
- type VoteWeightCalConsts
Constants ¶
This section is empty.
Variables ¶
var Default = defaultConfig()
Default contains the default genesis config
Functions ¶
func SetGenesisTimestamp ¶ added in v1.2.0
func SetGenesisTimestamp(ts int64)
SetGenesisTimestamp sets the genesis timestamp
Types ¶
type Account ¶ added in v0.5.0
type Account struct { // InitBalanceMap is the address and initial balance mapping before the first block. InitBalanceMap map[string]string `yaml:"initBalances"` // ReplayDeployerWhitelist is the whitelist address for unprotected (pre-EIP155) transaction ReplayDeployerWhitelist []string `yaml:"replayDeployerWhitelist"` }
Account contains the configs for account protocol
func (*Account) InitBalances ¶ added in v0.5.0
InitBalances returns the address that have initial balances and the corresponding amounts. The i-th amount is the i-th address' balance.
type Blockchain ¶ added in v0.5.0
type Blockchain struct { // Timestamp is the timestamp of the genesis block Timestamp int64 // BlockGasLimit is the total gas limit could be consumed in a block BlockGasLimit uint64 `yaml:"blockGasLimit"` // ActionGasLimit is the per action gas limit cap ActionGasLimit uint64 `yaml:"actionGasLimit"` // BlockInterval is the interval between two blocks BlockInterval time.Duration `yaml:"blockInterval"` // NumSubEpochs is the number of sub epochs in one epoch of block production NumSubEpochs uint64 `yaml:"numSubEpochs"` // DardanellesNumSubEpochs is the number of sub epochs starts from dardanelles height in one epoch of block production DardanellesNumSubEpochs uint64 `yaml:"dardanellesNumSubEpochs"` // NumDelegates is the number of delegates that participate into one epoch of block production NumDelegates uint64 `yaml:"numDelegates"` // NumCandidateDelegates is the number of candidate delegates, who may be selected as a delegate via roll dpos NumCandidateDelegates uint64 `yaml:"numCandidateDelegates"` // TimeBasedRotation is the flag to enable rotating delegates' time slots on a block height TimeBasedRotation bool `yaml:"timeBasedRotation"` // PacificBlockHeight is the start height of using the logic of Pacific version // TODO: PacificBlockHeight is not added into protobuf definition for backward compatibility PacificBlockHeight uint64 `yaml:"pacificHeight"` // AleutianBlockHeight is the start height of adding bloom filter of all events into block header AleutianBlockHeight uint64 `yaml:"aleutianHeight"` // BeringBlockHeight is the start height of evm upgrade BeringBlockHeight uint64 `yaml:"beringHeight"` // CookBlockHeight is the start height of native staking CookBlockHeight uint64 `yaml:"cookHeight"` // DardanellesBlockHeight is the start height of 5s block internal DardanellesBlockHeight uint64 `yaml:"dardanellesHeight"` // DaytonaBlockHeight is the height to fix low gas for read native staking contract DaytonaBlockHeight uint64 `yaml:"daytonaBlockHeight"` // EasterBlockHeight is the start height of probation for slashing EasterBlockHeight uint64 `yaml:"easterHeight"` // FbkMigrationBlockHeight is the start height for fairbank migration FbkMigrationBlockHeight uint64 `yaml:"fbkMigrationHeight"` // FairbankBlockHeight is the start height to switch to native staking V2 FairbankBlockHeight uint64 `yaml:"fairbankHeight"` // GreenlandBlockHeight is the start height of storing latest 720 block meta and rewarding/staking bucket pool GreenlandBlockHeight uint64 `yaml:"greenlandHeight"` // HawaiiBlockHeight is the start height to // 1. fix GetBlockHash in EVM // 2. add revert message to log // 3. fix change to same candidate in staking protocol // 4. fix sorted map in StateDBAdapter // 5. use pending nonce in EVM HawaiiBlockHeight uint64 `yaml:"hawaiiHeight"` // IcelandBlockHeight is the start height to support chainID opcode and EVM Istanbul IcelandBlockHeight uint64 `yaml:"icelandHeight"` // JutlandBlockHeight is the start height to // 1. report more EVM error codes // 2. enable the opCall fix JutlandBlockHeight uint64 `yaml:"jutlandHeight"` // KamchatkaBlockHeight is the start height to // 1. fix EVM snapshot order // 2. extend foundation bonus KamchatkaBlockHeight uint64 `yaml:"kamchatkaHeight"` // LordHoweBlockHeight is the start height to // 1. recover the smart contracts affected by snapshot order // 2. clear snapshots in Revert() LordHoweBlockHeight uint64 `yaml:"lordHoweHeight"` // MidwayBlockHeight is the start height to // 1. allow correct and default ChainID // 2. fix GetHashFunc in EVM // 3. correct tx/log index for transaction receipt and EVM log // 4. revert logs upon tx reversion in EVM MidwayBlockHeight uint64 `yaml:"midwayHeight"` // NewfoundlandBlockHeight is the start height to // 1. use correct chainID // 2. check legacy address // 3. enable web3 staking transaction NewfoundlandBlockHeight uint64 `yaml:"newfoundlandHeight"` // OkhotskBlockHeight is the start height to // 1. enable London EVM // 2. create zero-nonce account // 3. fix gas and nonce update // 4. fix unproductive delegates in staking protocol OkhotskBlockHeight uint64 `yaml:"okhotskHeight"` // PalauBlockHeight is the the start height to // 1. enable rewarding action via web3 // 2. broadcast node info into the p2p network PalauBlockHeight uint64 `yaml:"palauHeight"` // QuebecBlockHeight is the start height to // 1. enforce using correct chainID only // 2. enable IIP-13 liquidity staking // 3. valiate system action layout QuebecBlockHeight uint64 `yaml:"quebecHeight"` // RedseaBlockHeight is the start height to // 1. upgrade go-ethereum to Bellatrix release // 2. correct weighted votes for contract staking bucket RedseaBlockHeight uint64 `yaml:"redseaHeight"` // SumatraBlockHeight is the start height to enable Shanghai EVM SumatraBlockHeight uint64 `yaml:"sumatraHeight"` // ToBeEnabledBlockHeight is a fake height that acts as a gating factor for WIP features // upon next release, change IsToBeEnabled() to IsNextHeight() for features to be released ToBeEnabledBlockHeight uint64 `yaml:"toBeEnabledHeight"` }
Blockchain contains blockchain level configs
func (*Blockchain) IsAleutian ¶ added in v1.4.0
func (g *Blockchain) IsAleutian(height uint64) bool
IsAleutian checks whether height is equal to or larger than aleutian height
func (*Blockchain) IsBering ¶ added in v1.4.0
func (g *Blockchain) IsBering(height uint64) bool
IsBering checks whether height is equal to or larger than bering height
func (*Blockchain) IsCook ¶ added in v1.4.0
func (g *Blockchain) IsCook(height uint64) bool
IsCook checks whether height is equal to or larger than cook height
func (*Blockchain) IsDardanelles ¶ added in v1.4.0
func (g *Blockchain) IsDardanelles(height uint64) bool
IsDardanelles checks whether height is equal to or larger than dardanelles height
func (*Blockchain) IsDaytona ¶ added in v1.4.0
func (g *Blockchain) IsDaytona(height uint64) bool
IsDaytona checks whether height is equal to or larger than daytona height
func (*Blockchain) IsEaster ¶ added in v1.4.0
func (g *Blockchain) IsEaster(height uint64) bool
IsEaster checks whether height is equal to or larger than easter height
func (*Blockchain) IsFairbank ¶ added in v1.4.0
func (g *Blockchain) IsFairbank(height uint64) bool
IsFairbank checks whether height is equal to or larger than fairbank height
func (*Blockchain) IsFbkMigration ¶ added in v1.4.0
func (g *Blockchain) IsFbkMigration(height uint64) bool
IsFbkMigration checks whether height is equal to or larger than fbk migration height
func (*Blockchain) IsGreenland ¶ added in v1.4.0
func (g *Blockchain) IsGreenland(height uint64) bool
IsGreenland checks whether height is equal to or larger than greenland height
func (*Blockchain) IsHawaii ¶ added in v1.4.0
func (g *Blockchain) IsHawaii(height uint64) bool
IsHawaii checks whether height is equal to or larger than hawaii height
func (*Blockchain) IsIceland ¶ added in v1.4.0
func (g *Blockchain) IsIceland(height uint64) bool
IsIceland checks whether height is equal to or larger than iceland height
func (*Blockchain) IsJutland ¶ added in v1.4.0
func (g *Blockchain) IsJutland(height uint64) bool
IsJutland checks whether height is equal to or larger than jutland height
func (*Blockchain) IsKamchatka ¶ added in v1.5.0
func (g *Blockchain) IsKamchatka(height uint64) bool
IsKamchatka checks whether height is equal to or larger than kamchatka height
func (*Blockchain) IsLordHowe ¶ added in v1.6.0
func (g *Blockchain) IsLordHowe(height uint64) bool
IsLordHowe checks whether height is equal to or larger than lordHowe height
func (*Blockchain) IsMidway ¶ added in v1.7.0
func (g *Blockchain) IsMidway(height uint64) bool
IsMidway checks whether height is equal to or larger than midway height
func (*Blockchain) IsNewfoundland ¶ added in v1.8.0
func (g *Blockchain) IsNewfoundland(height uint64) bool
IsNewfoundland checks whether height is equal to or larger than newfoundland height
func (*Blockchain) IsOkhotsk ¶ added in v1.9.0
func (g *Blockchain) IsOkhotsk(height uint64) bool
IsOkhotsk checks whether height is equal to or larger than okhotsk height
func (*Blockchain) IsPacific ¶ added in v1.4.0
func (g *Blockchain) IsPacific(height uint64) bool
IsPacific checks whether height is equal to or larger than pacific height
func (*Blockchain) IsPalau ¶ added in v1.10.0
func (g *Blockchain) IsPalau(height uint64) bool
IsPalau checks whether height is equal to or larger than palau height
func (*Blockchain) IsQuebec ¶ added in v1.11.0
func (g *Blockchain) IsQuebec(height uint64) bool
IsQuebec checks whether height is equal to or larger than quebec height
func (*Blockchain) IsRedsea ¶ added in v1.12.0
func (g *Blockchain) IsRedsea(height uint64) bool
IsRedsea checks whether height is equal to or larger than redsea height
func (*Blockchain) IsSumatra ¶ added in v1.12.1
func (g *Blockchain) IsSumatra(height uint64) bool
IsSumatra checks whether height is equal to or larger than sumatra height
func (*Blockchain) IsToBeEnabled ¶ added in v1.6.3
func (g *Blockchain) IsToBeEnabled(height uint64) bool
IsToBeEnabled checks whether height is equal to or larger than toBeEnabled height
type BootstrapCandidate ¶ added in v0.11.0
type BootstrapCandidate struct { OwnerAddress string `yaml:"ownerAddress"` OperatorAddress string `yaml:"operatorAddress"` RewardAddress string `yaml:"rewardAddress"` Name string `yaml:"name"` SelfStakingTokens string `yaml:"selfStakingTokens"` }
BootstrapCandidate is the candidate data need to be provided to bootstrap candidate.
type Delegate ¶ added in v0.5.0
type Delegate struct { // OperatorAddrStr is the address who will operate the node OperatorAddrStr string `yaml:"operatorAddr"` // RewardAddrStr is the address who will get the reward when operator produces blocks RewardAddrStr string `yaml:"rewardAddr"` // VotesStr is the score for the operator to rank and weight for rewardee to split epoch reward VotesStr string `yaml:"votes"` }
Delegate defines a delegate with address and votes
func (*Delegate) OperatorAddr ¶ added in v0.5.0
OperatorAddr is the address of operator
func (*Delegate) RewardAddr ¶ added in v0.5.0
RewardAddr is the address of rewardee, which is allowed to be nil
type Genesis ¶ added in v0.5.0
type Genesis struct { Blockchain `yaml:"blockchain"` Account `yaml:"account"` Poll `yaml:"poll"` Rewarding `yaml:"rewarding"` Staking `yaml:"staking"` }
Genesis is the root level of genesis config. Genesis config is the network-wide blockchain config. All the nodes participating into the same network should use EXACTLY SAME genesis config.
func ExtractGenesisContext ¶ added in v1.2.1
ExtractGenesisContext extracts genesis from context if available
func MustExtractGenesisContext ¶ added in v1.2.1
MustExtractGenesisContext extracts genesis from context if available, else panic
func New ¶ added in v0.5.0
New constructs a genesis config. It loads the default values, and could be overwritten by values defined in the yaml config files
func TestDefault ¶ added in v1.10.0
func TestDefault() Genesis
TestDefault is the default genesis config for testing
type Poll ¶ added in v0.5.0
type Poll struct { // PollMode is different based on chain type or poll input data source PollMode string `yaml:"pollMode"` // EnableGravityChainVoting is a flag whether read voting from gravity chain EnableGravityChainVoting bool `yaml:"enableGravityChainVoting"` // GravityChainStartHeight is the height in gravity chain where the init poll result stored GravityChainStartHeight uint64 `yaml:"gravityChainStartHeight"` // GravityChainCeilingHeight is the height in gravity chain where the poll is no longer needed GravityChainCeilingHeight uint64 `yaml:"gravityChainCeilingHeight"` // GravityChainHeightInterval the height interval on gravity chain to pull delegate information GravityChainHeightInterval uint64 `yaml:"gravityChainHeightInterval"` // RegisterContractAddress is the address of register contract RegisterContractAddress string `yaml:"registerContractAddress"` // StakingContractAddress is the address of staking contract StakingContractAddress string `yaml:"stakingContractAddress"` // NativeStakingContractAddress is the address of native staking contract NativeStakingContractAddress string `yaml:"nativeStakingContractAddress"` // NativeStakingContractCode is the code of native staking contract NativeStakingContractCode string `yaml:"nativeStakingContractCode"` // ConsortiumCommitteeCode is the code of consortiumCommittee contract ConsortiumCommitteeContractCode string `yaml:"consortiumCommitteeContractCode"` // VoteThreshold is the vote threshold amount in decimal string format VoteThreshold string `yaml:"voteThreshold"` // ScoreThreshold is the score threshold amount in decimal string format ScoreThreshold string `yaml:"scoreThreshold"` // SelfStakingThreshold is self-staking vote threshold amount in decimal string format SelfStakingThreshold string `yaml:"selfStakingThreshold"` // Delegates is a list of delegates with votes Delegates []Delegate `yaml:"delegates"` // ProbationEpochPeriod is a duration of probation after delegate's productivity is lower than threshold ProbationEpochPeriod uint64 `yaml:"probationEpochPeriod"` // ProbationIntensityRate is a intensity rate of probation range from [0, 100], where 100 is hard-probation ProbationIntensityRate uint32 `yaml:"probationIntensityRate"` // UnproductiveDelegateMaxCacheSize is a max cache size of upd which is stored into state DB (probationEpochPeriod <= UnproductiveDelegateMaxCacheSize) UnproductiveDelegateMaxCacheSize uint64 `yaml:"unproductiveDelegateMaxCacheSize"` // SystemStakingContractAddress is the address of system staking contract SystemStakingContractAddress string `yaml:"systemStakingContractAddress"` // SystemStakingContractHeight is the height of system staking contract SystemStakingContractHeight uint64 `yaml:"systemStakingContractHeight"` // SystemSGDContractAddress is the address of system sgd contract SystemSGDContractAddress string `yaml:"systemSGDContractAddress"` // SystemSGDContractHeight is the height of system sgd contract SystemSGDContractHeight uint64 `yaml:"systemSGDContractHeight"` }
Poll contains the configs for poll protocol
type RegistrationConsts ¶ added in v0.11.0
type RegistrationConsts struct { Fee string `yaml:"fee"` MinSelfStake string `yaml:"minSelfStake"` }
RegistrationConsts contains the configs for candidate registration
type Rewarding ¶ added in v0.5.0
type Rewarding struct { // InitBalanceStr is the initial balance of the rewarding protocol in decimal string format InitBalanceStr string `yaml:"initBalance"` // BlockReward is the block reward amount in decimal string format BlockRewardStr string `yaml:"blockReward"` // DardanellesBlockReward is the block reward amount starts from dardanelles height in decimal string format DardanellesBlockRewardStr string `yaml:"dardanellesBlockReward"` // EpochReward is the epoch reward amount in decimal string format EpochRewardStr string `yaml:"epochReward"` // AleutianEpochRewardStr is the epoch reward amount in decimal string format after aleutian fork AleutianEpochRewardStr string `yaml:"aleutianEpochReward"` // NumDelegatesForEpochReward is the number of top candidates that will share a epoch reward NumDelegatesForEpochReward uint64 `yaml:"numDelegatesForEpochReward"` // ExemptAddrStrsFromEpochReward is the list of addresses in encoded string format that exempt from epoch reward ExemptAddrStrsFromEpochReward []string `yaml:"exemptAddrsFromEpochReward"` // FoundationBonusStr is the bootstrap bonus in decimal string format FoundationBonusStr string `yaml:"foundationBonus"` // NumDelegatesForFoundationBonus is the number of top candidate that will get the bootstrap bonus NumDelegatesForFoundationBonus uint64 `yaml:"numDelegatesForFoundationBonus"` // FoundationBonusLastEpoch is the last epoch number that bootstrap bonus will be granted FoundationBonusLastEpoch uint64 `yaml:"foundationBonusLastEpoch"` // FoundationBonusP2StartEpoch is the start epoch number for part 2 foundation bonus FoundationBonusP2StartEpoch uint64 `yaml:"foundationBonusP2StartEpoch"` // FoundationBonusP2EndEpoch is the end epoch number for part 2 foundation bonus FoundationBonusP2EndEpoch uint64 `yaml:"foundationBonusP2EndEpoch"` // ProductivityThreshold is the percentage number that a delegate's productivity needs to reach not to get probation ProductivityThreshold uint64 `yaml:"productivityThreshold"` }
Rewarding contains the configs for rewarding protocol
func (*Rewarding) AleutianEpochReward ¶ added in v0.7.1
AleutianEpochReward returns the epoch reward amount after Aleutian fork
func (*Rewarding) BlockReward ¶ added in v0.5.0
BlockReward returns the block reward amount
func (*Rewarding) DardanellesBlockReward ¶ added in v0.10.0
DardanellesBlockReward returns the block reward amount after dardanelles fork
func (*Rewarding) EpochReward ¶ added in v0.5.0
EpochReward returns the epoch reward amount
func (*Rewarding) ExemptAddrsFromEpochReward ¶ added in v0.5.0
ExemptAddrsFromEpochReward returns the list of addresses that exempt from epoch reward
func (*Rewarding) FoundationBonus ¶ added in v0.5.0
FoundationBonus returns the bootstrap bonus amount rewarded per epoch
func (*Rewarding) InitBalance ¶ added in v0.5.0
InitBalance returns the init balance of the rewarding fund
type Staking ¶ added in v0.11.0
type Staking struct { VoteWeightCalConsts VoteWeightCalConsts `yaml:"voteWeightCalConsts"` RegistrationConsts RegistrationConsts `yaml:"registrationConsts"` WithdrawWaitingPeriod time.Duration `yaml:"withdrawWaitingPeriod"` MinStakeAmount string `yaml:"minStakeAmount"` BootstrapCandidates []BootstrapCandidate `yaml:"bootstrapCandidates"` }
Staking contains the configs for staking protocol
type VoteWeightCalConsts ¶ added in v0.11.0
type VoteWeightCalConsts struct { DurationLg float64 `yaml:"durationLg"` AutoStake float64 `yaml:"autoStake"` SelfStake float64 `yaml:"selfStake"` }
VoteWeightCalConsts contains the configs for calculating vote weight