Help us shape the future of Go! Take the 2026 Go Developer Survey

node

package
v1.10.2 Latest Latest
Warning

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

Go to latest
Published: Jan 29, 2021 License: MIT Imports: 70 Imported by: 0

README

Node struct is the core entity that represents a network node participating in the Harmony protocol.

A node is the main message handler to all kinds of protocol messages such as consensus message, block sync, transactions etc. A node contains all the necessary references to other objects (e.g. blockchain object and consensus object) to handle the incoming messages.

Documentation

Index

Constants

View Source
const (
	// NumTryBroadCast is the number of times trying to broadcast
	NumTryBroadCast = 3
	// MsgChanBuffer is the buffer of consensus message handlers.
	MsgChanBuffer = 1024
)
View Source
const (
	SleepPeriod           = 20 * time.Millisecond
	IncomingReceiptsLimit = 6000 // 2000 * (numShards - 1)
)

Constants of proposing a new block

View Source
const (
	SyncFrequency = 60
)

Constants related to doing syncing.

View Source
const (

	//SyncIDLength is the length of bytes for syncID
	SyncIDLength = 20
)

Variables

This section is empty.

Functions

func AddNodeAddressesToGenesisAlloc

func AddNodeAddressesToGenesisAlloc(genesisAlloc core.GenesisAlloc)

AddNodeAddressesToGenesisAlloc adds to the genesis block allocation the accounts used for network validators/nodes, including the account used by the nodes of the initial beacon chain and later new nodes.

func GenerateRandomString

func GenerateRandomString(n int) string

GenerateRandomString generates a random string with given length

Types

type DNSSyncingPeerProvider

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

DNSSyncingPeerProvider uses the given DNS zone to resolve syncing peers.

func NewDNSSyncingPeerProvider

func NewDNSSyncingPeerProvider(zone, port string) *DNSSyncingPeerProvider

NewDNSSyncingPeerProvider returns a provider that uses given DNS name and port number to resolve syncing peers.

func (*DNSSyncingPeerProvider) SyncingPeers

func (p *DNSSyncingPeerProvider) SyncingPeers(shardID uint32) (peers []p2p.Peer, err error)

SyncingPeers resolves DNS name into peers and returns them.

type LegacySyncingPeerProvider

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

LegacySyncingPeerProvider uses neighbor lists stored in a Node to serve syncing peer list query.

func NewLegacySyncingPeerProvider

func NewLegacySyncingPeerProvider(node *Node) *LegacySyncingPeerProvider

NewLegacySyncingPeerProvider creates and returns a new node-based syncing peer provider.

func (*LegacySyncingPeerProvider) SyncingPeers

func (p *LegacySyncingPeerProvider) SyncingPeers(shardID uint32) (peers []p2p.Peer, err error)

SyncingPeers returns peers stored in neighbor maps in the node structure.

type LocalSyncingPeerProvider

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

LocalSyncingPeerProvider uses localnet deployment convention to synthesize syncing peers.

func NewLocalSyncingPeerProvider

func NewLocalSyncingPeerProvider(
	basePort, selfPort uint16, numShards, shardSize uint32,
) *LocalSyncingPeerProvider

NewLocalSyncingPeerProvider returns a provider that synthesizes syncing peers given the network configuration

func (*LocalSyncingPeerProvider) SyncingPeers

func (p *LocalSyncingPeerProvider) SyncingPeers(shardID uint32) (peers []p2p.Peer, err error)

SyncingPeers returns local syncing peers using the sharding configuration.

type Node

type Node struct {
	Consensus             *consensus.Consensus // Consensus object containing all Consensus related data (e.g. committee members, signatures, commits)
	BlockChannel          chan *types.Block    // The channel to send newly proposed blocks
	ConfirmedBlockChannel chan *types.Block    // The channel to send confirmed blocks
	BeaconBlockChannel    chan *types.Block    // The channel to send beacon blocks for non-beaconchain nodes

	SelfPeer p2p.Peer
	// TODO: Neighbors should store only neighbor nodes in the same shard
	Neighbors sync.Map // All the neighbor nodes, key is the sha256 of Peer IP/Port, value is the p2p.Peer

	// BeaconNeighbors store only neighbor nodes in the beacon chain shard
	BeaconNeighbors      sync.Map // All the neighbor nodes, key is the sha256 of Peer IP/Port, value is the p2p.Peer
	TxPool               *core.TxPool
	CxPool               *core.CxPool // pool for missing cross shard receipts resend
	Worker, BeaconWorker *worker.Worker

	SyncingPeerProvider SyncingPeerProvider

	ContractDeployerCurrentNonce uint64 // The nonce of the deployer contract at current block
	ContractAddresses            []common.Address

	// node configuration, including group ID, shard ID, etc
	NodeConfig *nodeconfig.ConfigType

	// KeysToAddrs holds the addresses of bls keys run by the node
	KeysToAddrs map[string]common.Address

	// TransactionErrorSink contains error messages for any failed transaction, in memory only
	TransactionErrorSink *types.TransactionErrorSink
	// BroadcastInvalidTx flag is considered when adding pending tx to tx-pool
	BroadcastInvalidTx bool
	// InSync flag indicates the node is in-sync or not
	IsInSync *abool.AtomicBool

	Metrics metrics.Registry
	// contains filtered or unexported fields
}

Node represents a protocol-participating node in the network

func New

func New(
	host p2p.Host,
	consensusObj *consensus.Consensus,
	chainDBFactory shardchain.DBFactory,
	blacklist map[common.Address]struct{},
	isArchival map[uint32]bool,
) *Node

New creates a new node.

func (*Node) APIs

func (node *Node) APIs(harmony *hmy.Harmony) []rpc.API

APIs return the collection of local RPC services. NOTE, some of these services probably need to be moved to somewhere else.

func (*Node) AddBeaconPeer

func (node *Node) AddBeaconPeer(p *p2p.Peer) bool

AddBeaconPeer adds beacon chain neighbors nodes Return false means new neighbor peer was added Return true means redundant neighbor peer wasn't added

func (*Node) AddNewBlockForExplorer

func (node *Node) AddNewBlockForExplorer(block *types.Block)

AddNewBlockForExplorer add new block for explorer.

func (*Node) AddPeers

func (node *Node) AddPeers(peers []*p2p.Peer) int

AddPeers adds neighbors nodes

func (*Node) AddPendingReceipts

func (node *Node) AddPendingReceipts(receipts *types.CXReceiptsProof)

AddPendingReceipts adds one receipt message to pending list.

func (*Node) AddPendingStakingTransaction

func (node *Node) AddPendingStakingTransaction(
	newStakingTx *staking.StakingTransaction,
) error

AddPendingStakingTransaction staking transactions

func (*Node) AddPendingTransaction

func (node *Node) AddPendingTransaction(newTx *types.Transaction) error

AddPendingTransaction adds one new transaction to the pending transaction list. This is only called from SDK.

func (*Node) Beaconchain

func (node *Node) Beaconchain() *core.BlockChain

Beaconchain returns the beaconchain from node.

func (*Node) Blockchain

func (node *Node) Blockchain() *core.BlockChain

Blockchain returns the blockchain for the node's current shard.

func (*Node) BootstrapConsensus added in v1.10.0

func (node *Node) BootstrapConsensus() error

BootstrapConsensus is the a goroutine to check number of peers and start the consensus

func (*Node) BroadcastCXReceipts

func (node *Node) BroadcastCXReceipts(newBlock *types.Block)

BroadcastCXReceipts broadcasts cross shard receipts to correspoding destination shards

func (*Node) BroadcastCXReceiptsWithShardID

func (node *Node) BroadcastCXReceiptsWithShardID(block *types.Block, commitSig []byte, commitBitmap []byte, toShardID uint32)

BroadcastCXReceiptsWithShardID broadcasts cross shard receipts to given ToShardID

func (node *Node) BroadcastCrossLink()

BroadcastCrossLink is called by consensus leader to send the new header as cross link to beacon chain.

func (*Node) BroadcastMissingCXReceipts

func (node *Node) BroadcastMissingCXReceipts()

BroadcastMissingCXReceipts broadcasts missing cross shard receipts per request

func (*Node) BroadcastNewBlock

func (node *Node) BroadcastNewBlock(newBlock *types.Block)

BroadcastNewBlock is called by consensus leader to sync new blocks with other clients/nodes. NOTE: For now, just send to the client (basically not broadcasting) TODO (lc): broadcast the new blocks to new nodes doing state sync

func (*Node) BroadcastSlash added in v1.3.0

func (node *Node) BroadcastSlash(witness *slash.Record)

BroadcastSlash ..

func (*Node) CalculateResponse

func (node *Node) CalculateResponse(request *downloader_pb.DownloaderRequest, incomingPeer string) (*downloader_pb.DownloaderResponse, error)

CalculateResponse implements DownloadInterface on Node object.

func (*Node) DoBeaconSyncing

func (node *Node) DoBeaconSyncing()

DoBeaconSyncing update received beaconchain blocks and downloads missing beacon chain blocks

func (*Node) DoSyncWithoutConsensus

func (node *Node) DoSyncWithoutConsensus()

DoSyncWithoutConsensus gets sync-ed to blockchain without joining consensus

func (*Node) DoSyncing

func (node *Node) DoSyncing(bc *core.BlockChain, worker *worker.Worker, willJoinConsensus bool)

DoSyncing keep the node in sync with other peers, willJoinConsensus means the node will try to join consensus after catch up

func (*Node) GetAddressForBLSKey added in v1.3.8

func (node *Node) GetAddressForBLSKey(blskey *bls_core.PublicKey, epoch *big.Int) common.Address

GetAddressForBLSKey retrieves the ECDSA address associated with bls key for epoch

func (*Node) GetAddresses added in v1.3.8

func (node *Node) GetAddresses(epoch *big.Int) map[string]common.Address

GetAddresses retrieves all ECDSA addresses of the bls keys for epoch

func (*Node) GetConsensusBlockNum added in v1.10.0

func (node *Node) GetConsensusBlockNum() uint64

GetConsensusBlockNum returns the current block number of the consensus

func (*Node) GetConsensusCurViewID added in v1.10.0

func (node *Node) GetConsensusCurViewID() uint64

GetConsensusCurViewID returns the current view ID

func (*Node) GetConsensusInternal added in v1.10.0

func (node *Node) GetConsensusInternal() rpc_common.ConsensusInternal

GetConsensusInternal returns consensus internal data

func (*Node) GetConsensusMode added in v1.10.0

func (node *Node) GetConsensusMode() string

GetConsensusMode returns the current consensus mode

func (*Node) GetConsensusPhase added in v1.10.0

func (node *Node) GetConsensusPhase() string

GetConsensusPhase returns the current consensus phase

func (*Node) GetConsensusViewChangingID added in v1.10.0

func (node *Node) GetConsensusViewChangingID() uint64

GetConsensusViewChangingID returns the view changing ID

func (*Node) GetMaxPeerHeight added in v1.10.0

func (node *Node) GetMaxPeerHeight() uint64

GetMaxPeerHeight ...

func (*Node) GetNodeBootTime added in v1.3.8

func (node *Node) GetNodeBootTime() int64

GetNodeBootTime ..

func (*Node) GetStakingTransactionsCount added in v1.3.8

func (node *Node) GetStakingTransactionsCount(address, txType string) (uint64, error)

GetStakingTransactionsCount returns the number of staking transactions hashes of address for input type.

func (*Node) GetStakingTransactionsHistory added in v1.3.7

func (node *Node) GetStakingTransactionsHistory(address, txType, order string) ([]common.Hash, error)

GetStakingTransactionsHistory returns list of staking transactions hashes of address.

func (*Node) GetSyncID

func (node *Node) GetSyncID() [SyncIDLength]byte

GetSyncID returns the syncID of this node

func (*Node) GetTransactionsCount added in v1.3.8

func (node *Node) GetTransactionsCount(address, txType string) (uint64, error)

GetTransactionsCount returns the number of regular transactions hashes of address for input type.

func (*Node) GetTransactionsHistory

func (node *Node) GetTransactionsHistory(address, txType, order string) ([]common.Hash, error)

GetTransactionsHistory returns list of transactions hashes of address.

func (*Node) HandleNodeMessage added in v1.10.0

func (node *Node) HandleNodeMessage(
	ctx context.Context,
	msgPayload []byte,
	actionType proto_node.MessageType,
) error

HandleNodeMessage parses the message and dispatch the actions.

func (*Node) InitConsensusWithValidators added in v1.3.0

func (node *Node) InitConsensusWithValidators() (err error)

InitConsensusWithValidators initialize shard state from latest epoch and update committee pub keys for consensus

func (*Node) InitSyncingServer

func (node *Node) InitSyncingServer()

InitSyncingServer starts downloader server.

func (*Node) IsCurrentlyLeader

func (node *Node) IsCurrentlyLeader() bool

IsCurrentlyLeader exposes if node is currently the leader node

func (*Node) IsOutOfSync added in v1.10.0

func (node *Node) IsOutOfSync(bc *core.BlockChain) bool

IsOutOfSync ...

func (*Node) IsSameHeight

func (node *Node) IsSameHeight() (uint64, bool)

IsSameHeight tells whether node is at same bc height as a peer

func (*Node) ListBlockedPeer added in v1.10.0

func (node *Node) ListBlockedPeer() []peer.ID

ListBlockedPeer return list of blocked peers

func (*Node) ListPeer added in v1.10.0

func (node *Node) ListPeer(topic string) []peer.ID

ListPeer return list of peers for a certain topic

func (*Node) ListTopic added in v1.10.0

func (node *Node) ListTopic() []string

ListTopic return list of topics the node subscribed

func (*Node) PeerConnectivity added in v1.3.11

func (node *Node) PeerConnectivity() (int, int, int)

PeerConnectivity ..

func (*Node) PendingCXReceipts added in v1.1.1

func (node *Node) PendingCXReceipts() []*types.CXReceiptsProof

PendingCXReceipts returns node.pendingCXReceiptsProof

func (*Node) PostConsensusProcessing

func (node *Node) PostConsensusProcessing(newBlock *types.Block) error

PostConsensusProcessing is called by consensus participants, after consensus is done, to: 1. add the new block to blockchain 2. [leader] send new block to the client 3. [leader] send cross shard tx receipts to destination shard

func (*Node) ProcessCrossLinkMessage added in v1.3.0

func (node *Node) ProcessCrossLinkMessage(msgPayload []byte)

ProcessCrossLinkMessage verify and process Node/CrossLink message into crosslink when it's valid

func (*Node) ProcessReceiptMessage

func (node *Node) ProcessReceiptMessage(msgPayload []byte)

ProcessReceiptMessage store the receipts and merkle proof in local data store

func (*Node) ProposeNewBlock added in v1.10.0

func (node *Node) ProposeNewBlock(commitSigs chan []byte) (*types.Block, error)

ProposeNewBlock proposes a new block...

func (*Node) ReportPlainErrorSink added in v1.3.11

func (node *Node) ReportPlainErrorSink() types.TransactionErrorReports

ReportPlainErrorSink is the report of failed transactions this node has (held in memory only)

func (*Node) ReportStakingErrorSink added in v1.3.11

func (node *Node) ReportStakingErrorSink() types.TransactionErrorReports

ReportStakingErrorSink is the report of failed staking transactions this node has (held in memory only)

func (*Node) RunServices

func (node *Node) RunServices()

RunServices runs registered services.

func (*Node) SendNewBlockToUnsync

func (node *Node) SendNewBlockToUnsync()

SendNewBlockToUnsync send latest verified block to unsync, registered nodes

func (*Node) ServiceManager

func (node *Node) ServiceManager() *service.Manager

ServiceManager ...

func (*Node) ServiceManagerSetup

func (node *Node) ServiceManagerSetup()

ServiceManagerSetup setups service store.

func (*Node) SetupGenesisBlock

func (node *Node) SetupGenesisBlock(db ethdb.Database, shardID uint32, myShardState *shard.State)

SetupGenesisBlock sets up a genesis blockchain.

func (*Node) ShutDown added in v1.2.4

func (node *Node) ShutDown()

ShutDown gracefully shut down the node server and dump the in-memory blockchain state into DB.

func (*Node) Start added in v1.3.8

func (node *Node) Start() error

Start kicks off the node message handling

func (*Node) StartPrometheus added in v1.10.0

func (node *Node) StartPrometheus(cfg prometheus.Config) error

StartPrometheus start promtheus metrics service

func (*Node) StartRPC

func (node *Node) StartRPC() error

StartRPC start RPC service

func (*Node) StartRosetta added in v1.10.0

func (node *Node) StartRosetta() error

StartRosetta start rosetta service

func (*Node) StartSyncingServer

func (node *Node) StartSyncingServer()

StartSyncingServer starts syncing server.

func (*Node) StopPrometheus added in v1.10.0

func (node *Node) StopPrometheus() error

StopPrometheus stop prometheus metrics service

func (*Node) StopRPC added in v1.10.0

func (node *Node) StopRPC() error

StopRPC stop RPC service

func (*Node) StopRosetta added in v1.10.0

func (node *Node) StopRosetta() error

StopRosetta stops rosetta service

func (*Node) StopServices

func (node *Node) StopServices()

StopServices runs registered services.

func (*Node) SupportBeaconSyncing

func (node *Node) SupportBeaconSyncing()

SupportBeaconSyncing sync with beacon chain for archival node in beacon chan or non-beacon node

func (*Node) SupportSyncing

func (node *Node) SupportSyncing()

SupportSyncing keeps sleeping until it's doing consensus or it's a leader.

func (node *Node) VerifyBlockCrossLinks(block *types.Block) error

VerifyBlockCrossLinks verifies the cross links of the block

func (node *Node) VerifyCrossLink(cl types.CrossLink) error

VerifyCrossLink verifies the header is valid

func (*Node) VerifyNewBlock

func (node *Node) VerifyNewBlock(newBlock *types.Block) error

VerifyNewBlock is called by consensus participants to verify the block (account model) they are running consensus on

func (*Node) WaitForConsensusReadyV2

func (node *Node) WaitForConsensusReadyV2(readySignal chan consensus.ProposalType, commitSigsChan chan []byte, stopChan chan struct{}, stoppedChan chan struct{})

WaitForConsensusReadyV2 listen for the readiness signal from consensus and generate new block for consensus. only leader will receive the ready signal

type SyncingPeerProvider

type SyncingPeerProvider interface {
	SyncingPeers(shardID uint32) (peers []p2p.Peer, err error)
}

SyncingPeerProvider is an interface for getting the peers in the given shard.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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