mirror of
https://gitlab.com/pulsechaincom/erigon-pulse.git
synced 2024-12-22 11:41:19 +00:00
231e468e19
git-subtree-dir: erigon-lib git-subtree-mainline:3c8cbda809
git-subtree-split:93d9c9d9fe
94 lines
4.9 KiB
Go
94 lines
4.9 KiB
Go
/*
|
|
Copyright 2023 The Erigon contributors
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
package chain
|
|
|
|
import (
|
|
"github.com/ledgerwatch/erigon-lib/common"
|
|
"github.com/ledgerwatch/erigon-lib/common/hexutility"
|
|
)
|
|
|
|
// Different ways of specifying validators.
|
|
type ValidatorSetJson struct {
|
|
// A simple list of authorities.
|
|
List []common.Address `json:"list"`
|
|
// Address of a contract that indicates the list of authorities.
|
|
SafeContract *common.Address `json:"safeContract"`
|
|
// Address of a contract that indicates the list of authorities and enables reporting of their misbehaviour using transactions.
|
|
Contract *common.Address `json:"contract"`
|
|
// A map of starting blocks for each validator set.
|
|
Multi map[uint64]*ValidatorSetJson `json:"multi"`
|
|
}
|
|
|
|
// AuRaConfig is the consensus engine configs for proof-of-authority based sealing.
|
|
type AuRaConfig struct {
|
|
StepDuration *uint64 `json:"stepDuration"` // Block duration, in seconds.
|
|
Validators *ValidatorSetJson `json:"validators"` // Valid authorities
|
|
|
|
// Starting step. Determined automatically if not specified.
|
|
// To be used for testing only.
|
|
StartStep *uint64 `json:"startStep"`
|
|
ValidateScoreTransition *uint64 `json:"validateScoreTransition"` // Block at which score validation should start.
|
|
ValidateStepTransition *uint64 `json:"validateStepTransition"` // Block from which monotonic steps start.
|
|
ImmediateTransitions *bool `json:"immediateTransitions"` // Whether transitions should be immediate.
|
|
BlockReward *uint64 `json:"blockReward"` // Reward per block in wei.
|
|
// Block at which the block reward contract should start being used. This option allows one to
|
|
// add a single block reward contract transition and is compatible with the multiple address
|
|
// option `block_reward_contract_transitions` below.
|
|
BlockRewardContractTransition *uint64 `json:"blockRewardContractTransition"`
|
|
/// Block reward contract address which overrides the `block_reward` setting. This option allows
|
|
/// one to add a single block reward contract address and is compatible with the multiple
|
|
/// address option `block_reward_contract_transitions` below.
|
|
BlockRewardContractAddress *common.Address `json:"blockRewardContractAddress"`
|
|
// Block reward contract addresses with their associated starting block numbers.
|
|
//
|
|
// Setting the block reward contract overrides `block_reward`. If the single block reward
|
|
// contract address is also present then it is added into the map at the block number stored in
|
|
// `block_reward_contract_transition` or 0 if that block number is not provided. Therefore both
|
|
// a single block reward contract transition and a map of reward contract transitions can be
|
|
// used simultaneously in the same configuration. In such a case the code requires that the
|
|
// block number of the single transition is strictly less than any of the block numbers in the
|
|
// map.
|
|
BlockRewardContractTransitions map[uint]common.Address `json:"blockRewardContractTransitions"`
|
|
// Block at which maximum uncle count should be considered.
|
|
MaximumUncleCountTransition *uint64 `json:"maximumUncleCountTransition"`
|
|
// Maximum number of accepted uncles.
|
|
MaximumUncleCount *uint `json:"maximumUncleCount"`
|
|
// Strict validation of empty steps transition block.
|
|
StrictEmptyStepsTransition *uint `json:"strictEmptyStepsTransition"`
|
|
// The random number contract's address, or a map of contract transitions.
|
|
RandomnessContractAddress map[uint64]common.Address `json:"randomnessContractAddress"`
|
|
// The addresses of contracts that determine the block gas limit starting from the block number
|
|
// associated with each of those contracts.
|
|
BlockGasLimitContractTransitions map[uint64]common.Address `json:"blockGasLimitContractTransitions"`
|
|
// The block number at which the consensus engine switches from AuRa to AuRa with POSDAO
|
|
// modifications.
|
|
PosdaoTransition *uint64 `json:"PosdaoTransition"`
|
|
// Stores human-readable keys associated with addresses, like DNS information.
|
|
// This contract is primarily required to store the address of the Certifier contract.
|
|
Registrar *common.Address `json:"registrar"`
|
|
|
|
// See https://github.com/gnosischain/specs/blob/master/execution/withdrawals.md
|
|
WithdrawalContractAddress *common.Address `json:"withdrawalContractAddress"`
|
|
|
|
RewriteBytecode map[uint64]map[common.Address]hexutility.Bytes `json:"rewriteBytecode"`
|
|
}
|
|
|
|
// String implements the stringer interface, returning the consensus engine details.
|
|
func (c *AuRaConfig) String() string {
|
|
return "aura"
|
|
}
|