chain

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 20, 2023 License: Apache-2.0 Imports: 9 Imported by: 20

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CanonicalHash

func CanonicalHash(db kv.Getter, number uint64, buf []byte) ([]byte, error)

func CurrentBlockNumber

func CurrentBlockNumber(db kv.Getter) (*uint64, error)

func HeadHeaderHash

func HeadHeaderHash(db kv.Getter) ([]byte, error)

HeadHeaderHash retrieves the hash of the current canonical head header.

func HeaderNumber

func HeaderNumber(db kv.Getter, hash []byte) (*uint64, error)

HeaderNumber returns the header number assigned to a hash.

Types

type AuRaConfig

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"`
}

AuRaConfig is the consensus engine configs for proof-of-authority based sealing.

func (*AuRaConfig) String

func (c *AuRaConfig) String() string

String implements the stringer interface, returning the consensus engine details.

type BorConfig

type BorConfig struct {
	Period                map[string]uint64 `json:"period"`                // Number of seconds between blocks to enforce
	ProducerDelay         map[string]uint64 `json:"producerDelay"`         // Number of seconds delay between two producer interval
	Sprint                map[string]uint64 `json:"sprint"`                // Epoch length to proposer
	BackupMultiplier      map[string]uint64 `json:"backupMultiplier"`      // Backup multiplier to determine the wiggle time
	ValidatorContract     string            `json:"validatorContract"`     // Validator set contract
	StateReceiverContract string            `json:"stateReceiverContract"` // State receiver contract

	OverrideStateSyncRecords map[string]int         `json:"overrideStateSyncRecords"` // override state records count
	BlockAlloc               map[string]interface{} `json:"blockAlloc"`

	CalcuttaBlock *big.Int `json:"calcuttaBlock"` // Calcutta switch block (nil = no fork, 0 = already on calcutta)
	JaipurBlock   *big.Int `json:"jaipurBlock"`   // Jaipur switch block (nil = no fork, 0 = already on jaipur)
	DelhiBlock    *big.Int `json:"delhiBlock"`    // Delhi switch block (nil = no fork, 0 = already on delhi)

	IndoreBlock                *big.Int          `json:"indoreBlock"`                // Indore switch block (nil = no fork, 0 = already on indore)
	StateSyncConfirmationDelay map[string]uint64 `json:"stateSyncConfirmationDelay"` // StateSync Confirmation Delay, in seconds, to calculate `to`
	// contains filtered or unexported fields
}

BorConfig is the consensus engine configs for Matic bor based sealing.

func (*BorConfig) CalculateBackupMultiplier

func (c *BorConfig) CalculateBackupMultiplier(number uint64) uint64

func (*BorConfig) CalculatePeriod

func (c *BorConfig) CalculatePeriod(number uint64) uint64

func (*BorConfig) CalculateProducerDelay

func (c *BorConfig) CalculateProducerDelay(number uint64) uint64

func (*BorConfig) CalculateSprint

func (c *BorConfig) CalculateSprint(number uint64) uint64

func (*BorConfig) CalculateSprintCount

func (c *BorConfig) CalculateSprintCount(from, to uint64) int

func (*BorConfig) CalculateStateSyncDelay

func (c *BorConfig) CalculateStateSyncDelay(number uint64) uint64

func (*BorConfig) IsCalcutta

func (c *BorConfig) IsCalcutta(number uint64) bool

func (*BorConfig) IsDelhi

func (c *BorConfig) IsDelhi(number uint64) bool

func (*BorConfig) IsIndore

func (c *BorConfig) IsIndore(number uint64) bool

func (*BorConfig) IsJaipur

func (c *BorConfig) IsJaipur(number uint64) bool

func (*BorConfig) IsOnCalcutta

func (c *BorConfig) IsOnCalcutta(number *big.Int) bool

func (*BorConfig) String

func (b *BorConfig) String() string

String implements the stringer interface, returning the consensus engine details.

type CliqueConfig

type CliqueConfig struct {
	Period uint64 `json:"period"` // Number of seconds between blocks to enforce
	Epoch  uint64 `json:"epoch"`  // Epoch length to reset votes and checkpoint
}

CliqueConfig is the consensus engine configs for proof-of-authority based sealing.

func (*CliqueConfig) String

func (c *CliqueConfig) String() string

String implements the stringer interface, returning the consensus engine details.

type Config

type Config struct {
	ChainName string
	ChainID   *big.Int `json:"chainId"` // chainId identifies the current chain and is used for replay protection

	Consensus ConsensusName `json:"consensus,omitempty"` // aura, ethash or clique

	// ETH mainnet upgrades
	// See https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades
	HomesteadBlock        *big.Int `json:"homesteadBlock,omitempty"`
	DAOForkBlock          *big.Int `json:"daoForkBlock,omitempty"`
	TangerineWhistleBlock *big.Int `json:"eip150Block,omitempty"`
	SpuriousDragonBlock   *big.Int `json:"eip155Block,omitempty"`
	ByzantiumBlock        *big.Int `json:"byzantiumBlock,omitempty"`
	ConstantinopleBlock   *big.Int `json:"constantinopleBlock,omitempty"`
	PetersburgBlock       *big.Int `json:"petersburgBlock,omitempty"`
	IstanbulBlock         *big.Int `json:"istanbulBlock,omitempty"`
	MuirGlacierBlock      *big.Int `json:"muirGlacierBlock,omitempty"`
	BerlinBlock           *big.Int `json:"berlinBlock,omitempty"`
	LondonBlock           *big.Int `json:"londonBlock,omitempty"`
	ArrowGlacierBlock     *big.Int `json:"arrowGlacierBlock,omitempty"`
	GrayGlacierBlock      *big.Int `json:"grayGlacierBlock,omitempty"`

	// EIP-3675: Upgrade consensus to Proof-of-Stake (a.k.a. "Paris", "The Merge")
	TerminalTotalDifficulty       *big.Int `json:"terminalTotalDifficulty,omitempty"`       // The merge happens when terminal total difficulty is reached
	TerminalTotalDifficultyPassed bool     `json:"terminalTotalDifficultyPassed,omitempty"` // Disable PoW sync for networks that have already passed through the Merge
	MergeNetsplitBlock            *big.Int `json:"mergeNetsplitBlock,omitempty"`            // Virtual fork after The Merge to use as a network splitter; see FORK_NEXT_VALUE in EIP-3675

	// Mainnet fork scheduling switched from block numbers to timestamps after The Merge
	ShanghaiTime *big.Int `json:"shanghaiTime,omitempty"`
	CancunTime   *big.Int `json:"cancunTime,omitempty"`
	PragueTime   *big.Int `json:"pragueTime,omitempty"`

	Eip1559FeeCollector           *common.Address `json:"eip1559FeeCollector,omitempty"`           // (Optional) Address where burnt EIP-1559 fees go to
	Eip1559FeeCollectorTransition *big.Int        `json:"eip1559FeeCollectorTransition,omitempty"` // (Optional) Block from which burnt EIP-1559 fees go to the Eip1559FeeCollector

	// Various consensus engines
	Ethash *EthashConfig `json:"ethash,omitempty"`
	Clique *CliqueConfig `json:"clique,omitempty"`
	Aura   *AuRaConfig   `json:"aura,omitempty"`
	Bor    *BorConfig    `json:"bor,omitempty"`
}

Config is the core config which determines the blockchain settings.

Config is stored in the database on a per block basis. This means that any network, identified by its genesis block, can have its own set of configuration options.

func GetConfig

func GetConfig(db kv.Getter, buf []byte) (*Config, error)

GetConfig retrieves the consensus settings based on the given genesis hash.

func (*Config) CheckCompatible

func (c *Config) CheckCompatible(newcfg *Config, height uint64) *ConfigCompatError

CheckCompatible checks whether scheduled fork transitions have been imported with a mismatching chain configuration.

func (*Config) CheckConfigForkOrder

func (c *Config) CheckConfigForkOrder() error

CheckConfigForkOrder checks that we don't "skip" any forks

func (*Config) IsArrowGlacier

func (c *Config) IsArrowGlacier(num uint64) bool

IsArrowGlacier returns whether num is either equal to the Arrow Glacier (EIP-4345) fork block or greater.

func (*Config) IsBerlin

func (c *Config) IsBerlin(num uint64) bool

IsBerlin returns whether num is either equal to the Berlin fork block or greater.

func (*Config) IsByzantium

func (c *Config) IsByzantium(num uint64) bool

IsByzantium returns whether num is either equal to the Byzantium fork block or greater.

func (*Config) IsCancun

func (c *Config) IsCancun(time uint64) bool

IsCancun returns whether time is either equal to the Cancun fork time or greater.

func (*Config) IsConstantinople

func (c *Config) IsConstantinople(num uint64) bool

IsConstantinople returns whether num is either equal to the Constantinople fork block or greater.

func (*Config) IsDAOFork

func (c *Config) IsDAOFork(num uint64) bool

IsDAOFork returns whether num is either equal to the DAO fork block or greater.

func (*Config) IsEip1559FeeCollector

func (c *Config) IsEip1559FeeCollector(num uint64) bool

func (*Config) IsGrayGlacier

func (c *Config) IsGrayGlacier(num uint64) bool

IsGrayGlacier returns whether num is either equal to the Gray Glacier (EIP-5133) fork block or greater.

func (*Config) IsHomestead

func (c *Config) IsHomestead(num uint64) bool

IsHomestead returns whether num is either equal to the homestead block or greater.

func (*Config) IsIstanbul

func (c *Config) IsIstanbul(num uint64) bool

IsIstanbul returns whether num is either equal to the Istanbul fork block or greater.

func (*Config) IsLondon

func (c *Config) IsLondon(num uint64) bool

IsLondon returns whether num is either equal to the London fork block or greater.

func (*Config) IsMuirGlacier

func (c *Config) IsMuirGlacier(num uint64) bool

IsMuirGlacier returns whether num is either equal to the Muir Glacier (EIP-2384) fork block or greater.

func (*Config) IsPetersburg

func (c *Config) IsPetersburg(num uint64) bool

IsPetersburg returns whether num is either - equal to or greater than the PetersburgBlock fork block, - OR is nil, and Constantinople is active

func (*Config) IsPrague

func (c *Config) IsPrague(time uint64) bool

IsPrague returns whether time is either equal to the Prague fork time or greater.

func (*Config) IsShanghai

func (c *Config) IsShanghai(time uint64) bool

IsShanghai returns whether time is either equal to the Shanghai fork time or greater.

func (*Config) IsSpuriousDragon

func (c *Config) IsSpuriousDragon(num uint64) bool

IsSpuriousDragon returns whether num is either equal to the Spurious Dragon fork block or greater.

func (*Config) IsTangerineWhistle

func (c *Config) IsTangerineWhistle(num uint64) bool

IsTangerineWhistle returns whether num is either equal to the Tangerine Whistle (EIP150) fork block or greater.

func (*Config) Rules

func (c *Config) Rules(num uint64, time uint64) *Rules

Rules ensures c's ChainID is not nil and returns a new Rules instance

func (*Config) String

func (c *Config) String() string

type ConfigCompatError

type ConfigCompatError struct {
	What string
	// block numbers of the stored and new configurations
	StoredConfig, NewConfig *big.Int
	// the block number to which the local chain must be rewound to correct the error
	RewindTo uint64
}

ConfigCompatError is raised if the locally-stored blockchain is initialised with a ChainConfig that would alter the past.

func (*ConfigCompatError) Error

func (err *ConfigCompatError) Error() string

type ConsensusName

type ConsensusName string
const (
	AuRaConsensus   ConsensusName = "aura"
	EtHashConsensus ConsensusName = "ethash"
	CliqueConsensus ConsensusName = "clique"
	BorConsensus    ConsensusName = "bor"
)

type EthashConfig

type EthashConfig struct{}

EthashConfig is the consensus engine configs for proof-of-work based sealing.

func (*EthashConfig) String

func (c *EthashConfig) String() string

String implements the stringer interface, returning the consensus engine details.

type Rules

type Rules struct {
	ChainID                                                 *big.Int
	IsHomestead, IsTangerineWhistle, IsSpuriousDragon       bool
	IsByzantium, IsConstantinople, IsPetersburg, IsIstanbul bool
	IsBerlin, IsLondon, IsShanghai, IsCancun, IsPrague      bool
	IsEip1559FeeCollector, IsAura                           bool
}

Rules is syntactic sugar over Config. It can be used for functions that do not have or require information about the block.

Rules is a one time interface meaning that it shouldn't be used in between transition phases.

type ValidatorSetJson

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"`
}

Different ways of specifying validators.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL