netsync

package
v1.1.2 Latest Latest
Warning

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

Go to latest
Published: Sep 16, 2021 License: AGPL-3.0 Imports: 28 Imported by: 2

Documentation

Index

Constants

View Source
const (
	BlockchainChannel = byte(0x40)

	BlockRequestByte    = byte(0x10)
	BlockResponseByte   = byte(0x11)
	HeadersRequestByte  = byte(0x12)
	HeadersResponseByte = byte(0x13)
	BlocksRequestByte   = byte(0x14)
	BlocksResponseByte  = byte(0x15)
	StatusRequestByte   = byte(0x20)
	StatusResponseByte  = byte(0x21)
	NewTransactionByte  = byte(0x30)
	NewMineBlockByte    = byte(0x40)
	FilterLoadByte      = byte(0x50)
	FilterAddByte       = byte(0x51)
	FilterClearByte     = byte(0x52)
	MerkleRequestByte   = byte(0x60)
	MerkleResponseByte  = byte(0x61)
)

protocol msg byte

Variables

View Source
var (
	ErrPeerMisbehave = errors.New("peer is misbehave")
)

Functions

This section is empty.

Types

type BasePeer

type BasePeer interface {
	Addr() net.Addr
	ID() string
	RemoteAddrHost() string
	ServiceFlag() consensus.ServiceFlag
	TrafficStatus() (*flowrate.Status, *flowrate.Status)
	TrySend(byte, interface{}) bool
	IsLAN() bool
}

BasePeer is the interface for connection level peer

type BasePeerSet

type BasePeerSet interface {
	StopPeerGracefully(string)
	IsBanned(ip string, level byte, reason string) bool
}

BasePeerSet is the intergace for connection level peer manager

type BlockMessage

type BlockMessage struct {
	RawBlock []byte
}

BlockMessage response get block msg

func NewBlockMessage

func NewBlockMessage(block *types.Block) (*BlockMessage, error)

NewBlockMessage construct bock response msg

func (*BlockMessage) GetBlock

func (m *BlockMessage) GetBlock() (*types.Block, error)

GetBlock get block from msg

func (*BlockMessage) String

func (m *BlockMessage) String() string

type BlockchainMessage

type BlockchainMessage interface {
	String() string
}

BlockchainMessage is a generic message for this reactor.

func DecodeMessage

func DecodeMessage(bz []byte) (msgType byte, msg BlockchainMessage, err error)

DecodeMessage decode msg

type BlocksMessage

type BlocksMessage struct {
	RawBlocks [][]byte
}

BlocksMessage is one of the bytom msg type

func NewBlocksMessage

func NewBlocksMessage(blocks []*types.Block) (*BlocksMessage, error)

NewBlocksMessage create a new BlocksMessage

func (*BlocksMessage) GetBlocks

func (m *BlocksMessage) GetBlocks() ([]*types.Block, error)

GetBlocks returns the blocks in the msg

func (*BlocksMessage) String

func (m *BlocksMessage) String() string

type Chain

type Chain interface {
	BestBlockHeader() *types.BlockHeader
	BestBlockHeight() uint64
	CalcNextSeed(*bc.Hash) (*bc.Hash, error)
	GetBlockByHash(*bc.Hash) (*types.Block, error)
	GetBlockByHeight(uint64) (*types.Block, error)
	GetHeaderByHash(*bc.Hash) (*types.BlockHeader, error)
	GetHeaderByHeight(uint64) (*types.BlockHeader, error)
	GetTransactionStatus(*bc.Hash) (*bc.TransactionStatus, error)
	InMainChain(bc.Hash) bool
	ProcessBlock(*types.Block) (bool, error)
	ValidateTx(*types.Tx) (bool, error)
}

Chain is the interface for Bytom core

type FilterAddMessage

type FilterAddMessage struct {
	Address []byte
}

FilterAddMessage tells the receiving peer to add address to the filter.

func (*FilterAddMessage) String

func (m *FilterAddMessage) String() string

type FilterClearMessage

type FilterClearMessage struct{}

FilterClearMessage tells the receiving peer to remove a previously-set filter.

func (*FilterClearMessage) String

func (m *FilterClearMessage) String() string

type FilterLoadMessage

type FilterLoadMessage struct {
	Addresses [][]byte
}

FilterLoadMessage tells the receiving peer to filter the transactions according to address.

func (*FilterLoadMessage) String

func (m *FilterLoadMessage) String() string

type GetBlockMessage

type GetBlockMessage struct {
	Height  uint64
	RawHash [32]byte
}

GetBlockMessage request blocks from remote peers by height/hash

func (*GetBlockMessage) GetHash

func (m *GetBlockMessage) GetHash() *bc.Hash

GetHash reutrn the hash of the request

func (*GetBlockMessage) String

func (m *GetBlockMessage) String() string

type GetBlocksMessage

type GetBlocksMessage struct {
	RawBlockLocator [][32]byte
	RawStopHash     [32]byte
}

GetBlocksMessage is one of the bytom msg type

func NewGetBlocksMessage

func NewGetBlocksMessage(blockLocator []*bc.Hash, stopHash *bc.Hash) *GetBlocksMessage

NewGetBlocksMessage create a new GetBlocksMessage

func (*GetBlocksMessage) GetBlockLocator

func (m *GetBlocksMessage) GetBlockLocator() []*bc.Hash

GetBlockLocator return the locator of the msg

func (*GetBlocksMessage) GetStopHash

func (m *GetBlocksMessage) GetStopHash() *bc.Hash

GetStopHash return the stop hash of the msg

func (*GetBlocksMessage) String

func (m *GetBlocksMessage) String() string

type GetHeadersMessage

type GetHeadersMessage struct {
	RawBlockLocator [][32]byte
	RawStopHash     [32]byte
}

GetHeadersMessage is one of the bytom msg type

func NewGetHeadersMessage

func NewGetHeadersMessage(blockLocator []*bc.Hash, stopHash *bc.Hash) *GetHeadersMessage

NewGetHeadersMessage return a new GetHeadersMessage

func (*GetHeadersMessage) GetBlockLocator

func (m *GetHeadersMessage) GetBlockLocator() []*bc.Hash

GetBlockLocator return the locator of the msg

func (*GetHeadersMessage) GetStopHash

func (m *GetHeadersMessage) GetStopHash() *bc.Hash

GetStopHash return the stop hash of the msg

func (*GetHeadersMessage) String

func (m *GetHeadersMessage) String() string

type GetMerkleBlockMessage

type GetMerkleBlockMessage struct {
	Height  uint64
	RawHash [32]byte
}

GetMerkleBlockMessage request merkle blocks from remote peers by height/hash

func (*GetMerkleBlockMessage) GetHash

func (m *GetMerkleBlockMessage) GetHash() *bc.Hash

GetHash reutrn the hash of the request

func (*GetMerkleBlockMessage) String

func (m *GetMerkleBlockMessage) String() string

type HeadersMessage

type HeadersMessage struct {
	RawHeaders [][]byte
}

HeadersMessage is one of the bytom msg type

func NewHeadersMessage

func NewHeadersMessage(headers []*types.BlockHeader) (*HeadersMessage, error)

NewHeadersMessage create a new HeadersMessage

func (*HeadersMessage) GetHeaders

func (m *HeadersMessage) GetHeaders() ([]*types.BlockHeader, error)

GetHeaders return the headers in the msg

func (*HeadersMessage) String

func (m *HeadersMessage) String() string

type MerkleBlockMessage

type MerkleBlockMessage struct {
	RawBlockHeader []byte
	TxHashes       [][32]byte
	RawTxDatas     [][]byte
	StatusHashes   [][32]byte
	RawTxStatuses  [][]byte
	Flags          []byte
}

MerkleBlockMessage return the merkle block to client

func NewMerkleBlockMessage

func NewMerkleBlockMessage() *MerkleBlockMessage

NewMerkleBlockMessage construct merkle block message

func (*MerkleBlockMessage) String

func (m *MerkleBlockMessage) String() string

type MineBlockMessage

type MineBlockMessage struct {
	RawBlock []byte
}

MineBlockMessage new mined block msg

func NewMinedBlockMessage

func NewMinedBlockMessage(block *types.Block) (*MineBlockMessage, error)

NewMinedBlockMessage construct new mined block msg

func (*MineBlockMessage) GetMineBlock

func (m *MineBlockMessage) GetMineBlock() (*types.Block, error)

GetMineBlock get mine block from msg

func (*MineBlockMessage) String

func (m *MineBlockMessage) String() string

type PeerInfo

type PeerInfo struct {
	ID                  string `json:"peer_id"`
	RemoteAddr          string `json:"remote_addr"`
	Height              uint64 `json:"height"`
	Ping                string `json:"ping"`
	Duration            string `json:"duration"`
	TotalSent           int64  `json:"total_sent"`
	TotalReceived       int64  `json:"total_received"`
	AverageSentRate     int64  `json:"average_sent_rate"`
	AverageReceivedRate int64  `json:"average_received_rate"`
	CurrentSentRate     int64  `json:"current_sent_rate"`
	CurrentReceivedRate int64  `json:"current_received_rate"`
}

PeerInfo indicate peer status snap

type ProtocolReactor

type ProtocolReactor struct {
	p2p.BaseReactor
	// contains filtered or unexported fields
}

ProtocolReactor handles new coming protocol message.

func NewProtocolReactor

func NewProtocolReactor(sm *SyncManager, peers *peerSet) *ProtocolReactor

NewProtocolReactor returns the reactor of whole blockchain.

func (*ProtocolReactor) AddPeer

func (pr *ProtocolReactor) AddPeer(peer *p2p.Peer) error

AddPeer implements Reactor by sending our state to peer.

func (*ProtocolReactor) GetChannels

func (pr *ProtocolReactor) GetChannels() []*connection.ChannelDescriptor

GetChannels implements Reactor

func (*ProtocolReactor) OnStart

func (pr *ProtocolReactor) OnStart() error

OnStart implements BaseService

func (*ProtocolReactor) OnStop

func (pr *ProtocolReactor) OnStop()

OnStop implements BaseService

func (*ProtocolReactor) Receive

func (pr *ProtocolReactor) Receive(chID byte, src *p2p.Peer, msgBytes []byte)

Receive implements Reactor by handling 4 types of messages (look below).

func (*ProtocolReactor) RemovePeer

func (pr *ProtocolReactor) RemovePeer(peer *p2p.Peer, reason interface{})

RemovePeer implements Reactor by removing peer from the pool.

type StatusRequestMessage

type StatusRequestMessage struct{}

StatusRequestMessage status request msg

func (*StatusRequestMessage) String

func (m *StatusRequestMessage) String() string

type StatusResponseMessage

type StatusResponseMessage struct {
	Height      uint64
	RawHash     [32]byte
	GenesisHash [32]byte
}

StatusResponseMessage get status response msg

func NewStatusResponseMessage

func NewStatusResponseMessage(blockHeader *types.BlockHeader, hash *bc.Hash) *StatusResponseMessage

NewStatusResponseMessage construct get status response msg

func (*StatusResponseMessage) GetGenesisHash

func (m *StatusResponseMessage) GetGenesisHash() *bc.Hash

GetGenesisHash get hash from msg

func (*StatusResponseMessage) GetHash

func (m *StatusResponseMessage) GetHash() *bc.Hash

GetHash get hash from msg

func (*StatusResponseMessage) String

func (m *StatusResponseMessage) String() string

type Switch

type Switch interface {
	AddReactor(name string, reactor p2p.Reactor) p2p.Reactor
	StopPeerGracefully(string)
	NodeInfo() *p2p.NodeInfo
	Start() (bool, error)
	Stop() bool
	IsListening() bool
	DialPeerWithAddress(addr *p2p.NetAddress) error
	Peers() *p2p.PeerSet
	IsBanned(peerID string, level byte, reason string) bool
}

type SyncManager

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

SyncManager Sync Manager is responsible for the business layer information synchronization

func NewSyncManager

func NewSyncManager(config *cfg.Config, chain Chain, txPool *core.TxPool, dispatcher *event.Dispatcher) (*SyncManager, error)

CreateSyncManager create sync manager and set switch.

func (*SyncManager) BestPeer

func (sm *SyncManager) BestPeer() *PeerInfo

BestPeer return the highest p2p peerInfo

func (*SyncManager) DialPeerWithAddress

func (sm *SyncManager) DialPeerWithAddress(addr *p2p.NetAddress) error

func (*SyncManager) GetNetwork

func (sm *SyncManager) GetNetwork() string

func (*SyncManager) GetPeerInfos

func (sm *SyncManager) GetPeerInfos() []*PeerInfo

GetPeerInfos return peer info of all peers

func (*SyncManager) IsCaughtUp

func (sm *SyncManager) IsCaughtUp() bool

IsCaughtUp check wheather the peer finish the sync

func (*SyncManager) IsListening

func (sm *SyncManager) IsListening() bool

func (*SyncManager) NodeInfo

func (sm *SyncManager) NodeInfo() *p2p.NodeInfo

func (*SyncManager) PeerCount

func (sm *SyncManager) PeerCount() int

func (*SyncManager) Start

func (sm *SyncManager) Start() error

func (*SyncManager) Stop

func (sm *SyncManager) Stop()

Stop stop sync manager

func (*SyncManager) StopPeer

func (sm *SyncManager) StopPeer(peerID string) error

StopPeer try to stop peer by given ID

type TransactionMessage

type TransactionMessage struct {
	RawTx []byte
}

TransactionMessage notify new tx msg

func NewTransactionMessage

func NewTransactionMessage(tx *types.Tx) (*TransactionMessage, error)

NewTransactionMessage construct notify new tx msg

func (*TransactionMessage) GetTransaction

func (m *TransactionMessage) GetTransaction() (*types.Tx, error)

GetTransaction get tx from msg

func (*TransactionMessage) String

func (m *TransactionMessage) String() string

Jump to

Keyboard shortcuts

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