backend

package
v1.12.1 Latest Latest
Warning

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

Go to latest
Published: Feb 1, 2024 License: GPL-3.0 Imports: 42 Imported by: 6

Documentation

Overview

Package backend defines backend struct which implements Backend interface of Istanbul consensus engine. backend struct works as a backbone of the consensus engine having Istanbul core, required objects to get information for making a consensus, recent messages and a broadcaster to send its message to peer nodes.

Source Files

Implementation of Backend interface and APIs are included in this package

  • `api.go`: Implements APIs which provide the states of Istanbul
  • `backend.go`: Defines backend struct which implements Backend interface working as a backbone of the consensus engine
  • `engine.go`: Implements various backend methods especially for verifying and building header information
  • `handler.go`: Implements backend methods for handling messages and broadcaster
  • `snapshot.go`: Defines snapshot struct which handles votes from nodes and makes governance changes

Index

Constants

View Source
const (
	IstanbulMsg = 0x11
)

Variables

View Source
var (

	// TODO-Klaytn-Istanbul: define Versions and Lengths with correct values.
	IstanbulProtocol = consensus.Protocol{
		Name:     "istanbul",
		Versions: []uint{65, 64},
		Lengths:  []uint64{23, 21},
	}
)

Functions

func New

func New(opts *BackendOpts) consensus.Istanbul

func RebalanceTreasury added in v1.10.2

func RebalanceTreasury(state *state.StateDB, chain consensus.ChainReader, header *types.Header, c bind.ContractCaller) (*kip103result, error)

RebalanceTreasury reads data from a contract, validates stored values, and executes treasury rebalancing (KIP-103). It can change the global state by removing old treasury balances and allocating new treasury balances. The new allocation can be larger than the removed amount, and the difference between two amounts will be burnt.

func RecoverCommittedSeals added in v1.12.1

func RecoverCommittedSeals(extra *types.IstanbulExtra, headerHash common.Hash) ([]common.Address, error)

Types

type API

type API struct {
	// contains filtered or unexported fields
}

API is a user facing RPC API to dump Istanbul state

func (*API) Candidates

func (api *API) Candidates() map[common.Address]bool

Candidates returns the current candidates the node tries to uphold and vote on.

func (*API) Discard

func (api *API) Discard(address common.Address)

Discard drops a currently running candidate, stopping the validator from casting further votes (either for or against).

func (*API) GetDemoteValidators added in v1.9.0

func (api *API) GetDemoteValidators(number *rpc.BlockNumber) ([]common.Address, error)

GetDemotedValidators retrieves the list of authorized, but demoted validators with the given block number.

func (*API) GetDemotedValidatorsAtHash added in v1.7.0

func (api *API) GetDemotedValidatorsAtHash(hash common.Hash) ([]common.Address, error)

GetDemotedValidatorsAtHash retrieves the list of authorized, but demoted validators with the given block hash.

func (*API) GetSnapshot

func (api *API) GetSnapshot(number *rpc.BlockNumber) (*Snapshot, error)

GetSnapshot retrieves the state snapshot at a given block.

func (*API) GetSnapshotAtHash

func (api *API) GetSnapshotAtHash(hash common.Hash) (*Snapshot, error)

GetSnapshotAtHash retrieves the state snapshot at a given block.

func (*API) GetTimeout added in v1.3.0

func (api *API) GetTimeout() uint64

func (*API) GetValidators

func (api *API) GetValidators(number *rpc.BlockNumber) ([]common.Address, error)

GetValidators retrieves the list of authorized validators with the given block number.

func (*API) GetValidatorsAtHash

func (api *API) GetValidatorsAtHash(hash common.Hash) ([]common.Address, error)

GetValidatorsAtHash retrieves the list of authorized validators with the given block hash.

func (*API) Propose

func (api *API) Propose(address common.Address, auth bool)

Propose injects a new authorization candidate that the validator will attempt to push through.

type APIExtension

type APIExtension struct {
	// contains filtered or unexported fields
}

API extended by Klaytn developers

func (*APIExtension) GetBlockWithConsensusInfoByHash

func (api *APIExtension) GetBlockWithConsensusInfoByHash(blockHash common.Hash) (map[string]interface{}, error)

func (*APIExtension) GetBlockWithConsensusInfoByNumber

func (api *APIExtension) GetBlockWithConsensusInfoByNumber(number *rpc.BlockNumber) (map[string]interface{}, error)

TODO-Klaytn: This API functions should be managed with API functions with namespace "klay"

func (*APIExtension) GetBlockWithConsensusInfoByNumberRange

func (api *APIExtension) GetBlockWithConsensusInfoByNumberRange(start *rpc.BlockNumber, end *rpc.BlockNumber) (map[string]interface{}, error)

func (*APIExtension) GetCommittee

func (api *APIExtension) GetCommittee(number *rpc.BlockNumber) ([]common.Address, error)

func (*APIExtension) GetCommitteeSize

func (api *APIExtension) GetCommitteeSize(number *rpc.BlockNumber) (int, error)

func (*APIExtension) GetCouncil

func (api *APIExtension) GetCouncil(number *rpc.BlockNumber) ([]common.Address, error)

GetCouncil retrieves the list of authorized validators at the specified block.

func (*APIExtension) GetCouncilSize

func (api *APIExtension) GetCouncilSize(number *rpc.BlockNumber) (int, error)

type BackendOpts added in v1.12.0

type BackendOpts struct {
	IstanbulConfig    *istanbul.Config // Istanbul consensus core config
	Rewardbase        common.Address
	PrivateKey        *ecdsa.PrivateKey // Consensus message signing key
	BlsSecretKey      bls.SecretKey     // Randao signing key. Required since Randao fork
	DB                database.DBManager
	Governance        governance.Engine // Governance parameter provider
	BlsPubkeyProvider BlsPubkeyProvider // If not nil, override the default BLS public key provider
	NodeType          common.ConnType
}

type BlsPubkeyProvider added in v1.12.0

type BlsPubkeyProvider interface {
	// num should be the header number of the block to be verified.
	// Thus, since the state of num does not exist, the state of num-1 must be used.
	GetBlsPubkey(chain consensus.ChainReader, proposer common.Address, num *big.Int) (bls.PublicKey, error)
	ResetBlsCache()
}

For testing without KIP-113 contract setup

type ChainBlsPubkeyProvider added in v1.12.0

type ChainBlsPubkeyProvider struct {
	// contains filtered or unexported fields
}

func (*ChainBlsPubkeyProvider) GetBlsPubkey added in v1.12.0

func (p *ChainBlsPubkeyProvider) GetBlsPubkey(chain consensus.ChainReader, proposer common.Address, num *big.Int) (bls.PublicKey, error)

The default implementation for BlsPubkeyFunc. Queries KIP-113 contract and verifies the PoP.

func (*ChainBlsPubkeyProvider) ResetBlsCache added in v1.12.0

func (p *ChainBlsPubkeyProvider) ResetBlsCache()

type Kip103ContractCaller added in v1.10.2

type Kip103ContractCaller struct {
	// contains filtered or unexported fields
}

Kip103ContractCaller is an implementation of contractCaller only for KIP-103. The caller interacts with a KIP-103 contract on a read only basis.

func (*Kip103ContractCaller) CallContract added in v1.10.2

func (caller *Kip103ContractCaller) CallContract(ctx context.Context, call klaytn.CallMsg, blockNumber *big.Int) ([]byte, error)

func (*Kip103ContractCaller) CodeAt added in v1.10.2

func (caller *Kip103ContractCaller) CodeAt(ctx context.Context, contract common.Address, blockNumber *big.Int) ([]byte, error)

type Snapshot

type Snapshot struct {
	Epoch         uint64                // The number of blocks after which to checkpoint and reset the pending votes
	Number        uint64                // Block number where the snapshot was created
	Hash          common.Hash           // Block hash where the snapshot was created
	ValSet        istanbul.ValidatorSet // Set of authorized validators at this moment
	Policy        uint64
	CommitteeSize uint64
	Votes         []governance.GovernanceVote      // List of votes cast in chronological order
	Tally         []governance.GovernanceTallyItem // Current vote tally to avoid recalculating
}

Snapshot is the state of the authorization voting at a given point in time.

func (*Snapshot) MarshalJSON

func (s *Snapshot) MarshalJSON() ([]byte, error)

Marshal to a json byte array

func (*Snapshot) UnmarshalJSON

func (s *Snapshot) UnmarshalJSON(b []byte) error

Unmarshal from a json byte array

Jump to

Keyboard shortcuts

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