node

package
v1.1.1-0...-350dad4 Latest Latest
Warning

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

Go to latest
Published: May 1, 2024 License: MIT Imports: 27 Imported by: 0

Documentation

Overview

Package node @Description: 同步器,在完成同步之前管理所有的对端节点,进行区块数据的同步,在完成同步后才将管理权交给 manager、

Package node @Description: 连接管理器,作为一个集中化的实例管理其它 peer 传来的信息

Package node @Description: 节点发送的请求方法

Package node @Description: 节点接收到的请求回应方法

Package node @Description: 时间同步器

Index

Constants

View Source
const (
	NetworkRendezvous = "chronos"
	TxGossipTopic     = "/chronos/1.0.1/transactions"
	BlockGossipTopic  = "/chronos/1.0.1/blocks"
	ProtocolId        = protocol.ID("/chronos/1.0.0/p2p")
	TxProtocolId      = protocol.ID("/chronos/1.0.0/transaction")
)

Variables

This section is empty.

Functions

func GetLogicClock

func GetLogicClock() int64

Types

type BlockSyncer

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

func NewBlockSyncer

func NewBlockSyncer(config *BlockSyncerConfig) *BlockSyncer

NewBlockSyncer

@Description: 初始化区块同步器,manager 在启动时初始化
@param config - 同步器配置,包含了区块链实例
@return *BlockSyncer

func (*BlockSyncer) AddPeer

func (bs *BlockSyncer) AddPeer(p *Peer)

AddPeer

@Description: 添加一个对端节点
@receiver bs
@param p - 节点实例

func (*BlockSyncer) Start

func (bs *BlockSyncer) Start()

Start

@Description: 启动同步器实例
@receiver bs

type BlockSyncerConfig

type BlockSyncerConfig struct {
	Chain *core.BlockChain
}

type P2PManager

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

func GetP2PManager

func GetP2PManager() *P2PManager

GetP2PManager

@Description: 获取 Manager 实例
@return *P2PManager - Manager 实例

func NewP2PManager

func NewP2PManager(config *P2PManagerConfig) (*P2PManager, error)

func (*P2PManager) AddTransaction

func (pm *P2PManager) AddTransaction(tx *common.Transaction)

AddTransaction

@Description: 用于测试,添加交易到交易池
@receiver pm
@param tx - 交易实例

func (*P2PManager) CheckAndCreateStream

func (pm *P2PManager) CheckAndCreateStream(ctx context.Context, h host.Host,
	p peer.AddrInfo)

CheckAndCreateStream

@Description: 检查并创建数据传输流
@receiver pm
@param ctx - 处理上下文
@param h - 本地节点实例
@param p - 对端节点实例

func (*P2PManager) Discover

func (pm *P2PManager) Discover(ctx context.Context, h host.Host,
	dht *dht.IpfsDHT,
	rendezvous string)

Discover

@Description: 基于 kademlia 协议发现其他节点
@receiver pm
@param ctx - 上下文 context
@param h - 本地节点实例
@param dht - kademlia 实例
@param rendezvous - 进行节点发现的 “密语/暗号”

func (*P2PManager) GetBlockChain

func (pm *P2PManager) GetBlockChain() *core.BlockChain

GetBlockChain

@Description: 获取当前节点的区块链实例
@receiver pm
@return *core.BlockChain - 区块链实例

func (*P2PManager) GetConnectNodeInfo

func (pm *P2PManager) GetConnectNodeInfo() (string, []string)

func (*P2PManager) HandleStream

func (pm *P2PManager) HandleStream(s network.Stream)

HandleStream

@Description: 用于在收到对端连接时候处理 stream, 在这里构建 peer 用于通信
@receiver pm
@param s - 接收到新的连接请求

func (*P2PManager) NewPeer

func (pm *P2PManager) NewPeer(peerId peer.ID, s *network.Stream,
	remoteAddr string) (*Peer,
	error)

NewPeer

@Description: 创建一个新的 Peer,它基于底层发送消息的 p2p.Peer 实现
@receiver pm - Manager 实例
@param peerId - 节点的 p2p id信息
@param s - 消息读写流
@param remoteAddr - 对端的连接地址
@return *Peer - node.Peer 实例
@return error - 如果出错则返回报错

func (*P2PManager) SetSynced

func (pm *P2PManager) SetSynced()

SetSynced

@Description: 设置当前的同步器的同步状态为完成
@receiver pm

func (*P2PManager) StatusMessage

func (pm *P2PManager) StatusMessage() *p2p.SyncStatusMsg

StatusMessage 生成同步信息给对端

func (*P2PManager) Synced

func (pm *P2PManager) Synced() bool

func (*P2PManager) TransactionUDP

func (pm *P2PManager) TransactionUDP()

TransactionUDP

@Description: 从 UDP 中接收其它节点广播到该节点的交易
@receiver pm

func (*P2PManager) UDPGossipBroadcast

func (pm *P2PManager) UDPGossipBroadcast(tx *common.Transaction)

UDPGossipBroadcast

@Description: 交易的 UDP 广播方法,随机选取,邻居节点发送交易
@receiver pm
@param tx

type P2PManagerConfig

type P2PManagerConfig struct {
	TxPool       *core.TxPool     // 交易池实例
	Chain        *core.BlockChain // 区块链实例
	Genesis      bool             // 是否创世节点
	InitialDelta int64            // 初始时间偏移,仅仅用于进行时间同步测试
}

P2PManagerConfig P2PManager 的实例化配置信息

type Peer

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

func NewPeer

func NewPeer(peerId peer.ID, s *network.Stream, config PeerConfig) (*Peer, error)

NewPeer

@Description: 新建节点实例,在接收到其它节点的连接建立请求或发现节点尝试建立连接时调用
@param peerId - 对端节点的 id
@param s - 数据流
@param config - 节点配置信息
@return *Peer - 节点实例,作为 manager 和 p2p.Peer 的中间层
@return error

func (*Peer) AsyncSendNewBlock

func (p *Peer) AsyncSendNewBlock(block *common.Block)

func (*Peer) AsyncSendNewBlockHash

func (p *Peer) AsyncSendNewBlockHash(blockHash common.Hash)

func (*Peer) AsyncSendTransaction

func (p *Peer) AsyncSendTransaction(tx *common.Transaction)

func (*Peer) AsyncSendTxHash

func (p *Peer) AsyncSendTxHash(txHash common.Hash)

func (*Peer) Handle

func (p *Peer) Handle()

func (*Peer) KnownBlock

func (p *Peer) KnownBlock(blockHash string) bool

func (*Peer) KnownTransaction

func (p *Peer) KnownTransaction(txHash string) bool

func (*Peer) MarkBlock

func (p *Peer) MarkBlock(blockHash string)

func (*Peer) MarkSynced

func (p *Peer) MarkSynced() bool

func (*Peer) MarkTransaction

func (p *Peer) MarkTransaction(txHash string)

func (*Peer) SetMarkSynced

func (p *Peer) SetMarkSynced(v bool)

func (*Peer) Stopped

func (p *Peer) Stopped() bool

type PeerConfig

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

type SyncStatus

type SyncStatus int8
const (
	INITIAL    SyncStatus = 1
	SYNCED     SyncStatus = 2
	CONFIRMING SyncStatus = 3
)

type TimeSyncer

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

func NewTimeSyncer

func NewTimeSyncer(genesis bool, delta int64) *TimeSyncer

func (*TimeSyncer) GetLogicClock

func (ts *TimeSyncer) GetLogicClock() int64

GetLogicClock 计算逻辑时钟 = 物理时钟 + 网络误差

func (*TimeSyncer) ProcessSyncRequest

func (ts *TimeSyncer) ProcessSyncRequest(msg *p2p.TimeSyncMsg, p *Peer)

ProcessSyncRequest 处理时间同步请求消息

func (*TimeSyncer) ProcessSyncRespond

func (ts *TimeSyncer) ProcessSyncRespond(msg *p2p.TimeSyncMsg, p *Peer)

func (*TimeSyncer) Start

func (ts *TimeSyncer) Start()

todo: 添加上下文

Jump to

Keyboard shortcuts

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