Documentation ¶
Index ¶
- Constants
- Variables
- func Label(e *entry) string
- func LogAddrs(nns [][]byte) string
- func NewPeerPotMap(neighbourhoodSize int, addrs [][]byte) map[string]*PeerPot
- func NotifyDepth(depth uint8, kad *Kademlia)
- func NotifyPeer(p *BzzAddr, k *Kademlia)
- type Bzz
- func (b *Bzz) APIs() []rpc.API
- func (b *Bzz) GetOrCreateHandshake(peerID enode.ID) (*HandshakeMsg, bool)
- func (b *Bzz) NodeInfo() interface{}
- func (b *Bzz) Protocols() []p2p.Protocol
- func (b *Bzz) RunProtocol(spec *protocols.Spec, run func(*BzzPeer) error) func(*p2p.Peer, p2p.MsgReadWriter) error
- func (b *Bzz) UpdateLocalAddr(byteaddr []byte) *BzzAddr
- type BzzAddr
- type BzzConfig
- type BzzPeer
- type Fetcher
- type FetcherFactory
- type HandshakeMsg
- type Health
- type Hive
- type HiveParams
- type KadParams
- type Kademlia
- func (k *Kademlia) AddrCountC() <-chan int
- func (k *Kademlia) BaseAddr() []byte
- func (k *Kademlia) EachAddr(base []byte, o int, f func(*BzzAddr, int) bool)
- func (k *Kademlia) EachConn(base []byte, o int, f func(*Peer, int) bool)
- func (k *Kademlia) Healthy(pp *PeerPot) *Health
- func (k *Kademlia) NeighbourhoodDepth() (depth int)
- func (k *Kademlia) NeighbourhoodDepthC() <-chan int
- func (k *Kademlia) Off(p *Peer)
- func (k *Kademlia) On(p *Peer) (uint8, bool)
- func (k *Kademlia) Register(peers ...*BzzAddr) error
- func (k *Kademlia) String() string
- func (k *Kademlia) SuggestPeer() (suggestedPeer *BzzAddr, saturationDepth int, changed bool)
- type Peer
- type PeerPot
- type Request
- type RequestFunc
Constants ¶
const (
DefaultNetworkID = 3
)
Variables ¶
var BzzSpec = &protocols.Spec{ Name: "bzz", Version: 8, MaxMsgSize: 10 * 1024 * 1024, Messages: []interface{}{ HandshakeMsg{}, }, }
bzzspec是通用群握手的规范
var DiscoverySpec = &protocols.Spec{
Name: "hive",
Version: 8,
MaxMsgSize: 10 * 1024 * 1024,
Messages: []interface{}{
peersMsg{},
subPeersMsg{},
},
}
discovery spec是bzz discovery子协议的规范
var Pof = pot.DefaultPof(256)
var RequestTimeout = 10 * time.Second
考虑跳过对等机的时间。 也用于流传送。
Functions ¶
func NewPeerPotMap ¶
newpeerpotmap用键创建一个pot记录的映射*bzzaddr 作为地址的十六进制表示。 使用通过的卡德米利亚的邻里大小 仅用于测试 TODO移动到单独的测试工具文件
Types ¶
type Bzz ¶
bzz是swarm协议包
func NewBzz ¶
func NewBzz(config *BzzConfig, kad *Kademlia, store state.Store, streamerSpec *protocols.Spec, streamerRun func(*BzzPeer) error) *Bzz
Newzz是Swarm协议的构造者 争论 *BZZ配置 *覆盖驱动程序 *对等存储
func (*Bzz) GetOrCreateHandshake ¶
func (b *Bzz) GetOrCreateHandshake(peerID enode.ID) (*HandshakeMsg, bool)
gethandshake返回peerid远程对等机发送的bzz handshake
func (*Bzz) RunProtocol ¶
func (b *Bzz) RunProtocol(spec *protocols.Spec, run func(*BzzPeer) error) func(*p2p.Peer, p2p.MsgReadWriter) error
runprotocol是swarm子协议的包装器 返回可分配给p2p.protocol run字段的p2p协议运行函数。 争论: *P2P协议规范 *以bzzpeer为参数运行函数 此运行函数用于在协议会话期间阻塞 返回时,会话终止,对等端断开连接。 协议等待BZZ握手被协商 bzzpeer上的覆盖地址是通过远程握手设置的。
func (*Bzz) UpdateLocalAddr ¶
updateLocalAddr更新正在运行的节点的参考底图地址
type BzzConfig ¶
type BzzConfig struct { OverlayAddr []byte //覆盖网络的基址 UnderlayAddr []byte //节点的参考底图地址 HiveParams *HiveParams NetworkID uint64 LightNode bool }
bzzconfig捕获配置单元使用的配置参数
type BzzPeer ¶
type BzzPeer struct { *protocols.Peer //表示联机对等机的连接 *BzzAddr //远程地址->实现addr interface=protocols.peer LightNode bool // contains filtered or unexported fields }
bzz peer是协议的bzz协议视图。peer(本身是p2p.peer的扩展) 实现对等接口和所有接口对等实现:addr、overlaypeer
func NewBzzPeer ¶
type Fetcher ¶
type Fetcher struct {
// contains filtered or unexported fields
}
当在本地找不到块时,将创建提取程序。它启动一次请求处理程序循环,然后 在所有活动请求完成之前保持活动状态。这可能发生: 1。或者因为块被传递 2。或者因为请求者取消/超时 获取器在完成后自行销毁。 TODO:取消终止后的所有转发请求
func NewFetcher ¶
func NewFetcher(addr storage.Address, rf RequestFunc, skipCheck bool) *Fetcher
new fetcher使用给定的请求函数为给定的块地址创建一个新的fetcher。
type FetcherFactory ¶
type FetcherFactory struct {
// contains filtered or unexported fields
}
FetcherFactory是用请求函数初始化的,可以创建Fetcher
func NewFetcherFactory ¶
func NewFetcherFactory(request RequestFunc, skipCheck bool) *FetcherFactory
NewFetcherFactory接受请求函数并跳过检查参数并创建FetcherFactory
type HandshakeMsg ¶
type Health ¶
type Health struct { KnowNN bool //节点是否知道其所有邻居 CountKnowNN int //已知邻居数量 MissingKnowNN [][]byte //我们应该知道哪些邻居,但我们不知道 ConnectNN bool //节点是否连接到其所有邻居 CountConnectNN int //连接到的邻居数量 MissingConnectNN [][]byte //我们应该和哪个邻居有联系,但我们没有 Saturated bool //我们是否与所有我们想联系的同龄人建立了联系 Hive string }
卡德米利亚的健康状况 仅用于测试
type Hive ¶
type Hive struct { *HiveParams //设置 *Kademlia //覆盖连接驱动程序 Store state.Store //存储接口,用于跨会话保存对等端 // contains filtered or unexported fields }
蜂巢管理群节点的网络连接
func NewHive ¶
func NewHive(params *HiveParams, kad *Kademlia, store state.Store) *Hive
new hive构造新的hive hiveparams:配置参数 Kademlia:使用网络拓扑的连接驱动程序 Statestore:保存会话之间的对等点
func (*Hive) NodeInfo ¶
func (h *Hive) NodeInfo() interface{}
p2p.server rpc接口使用nodeinfo函数显示 协议特定的节点信息
type HiveParams ¶
type HiveParams struct { Discovery bool //如果不想发现 PeersBroadcastSetSize uint8 //中继时要使用多少对等点 MaxPeersPerRequest uint8 //对等地址批的最大大小 KeepAliveInterval time.Duration }
hiveparams保存配置选项以进行配置
type KadParams ¶
type KadParams struct { // 可调参数 MaxProxDisplay int //表显示的行数 NeighbourhoodSize int //最近邻核最小基数 MinBinSize int //一行中的最小对等数 MaxBinSize int //修剪前一行中的最大对等数 RetryInterval int64 //对等机首次重新拨号前的初始间隔 RetryExponent int //用指数乘以重试间隔 MaxRetries int //重拨尝试的最大次数 //制裁或阻止建议同伴的职能 Reachable func(*BzzAddr) bool `json:"-"` }
kadparams保存kademlia的配置参数
type Kademlia ¶
type Kademlia struct { *KadParams //Kademlia配置参数 // contains filtered or unexported fields }
Kademlia是一个活动对等端表和一个已知对等端数据库(节点记录)
func NewKademlia ¶
newkademlia为基地址addr创建一个kademlia表 参数与参数相同 如果params为nil,则使用默认值
func (*Kademlia) AddrCountC ¶
addrCountc返回发送新的 每次更改的地址计数值。 不从返回通道接收将阻止寄存器功能 地址计数值更改时。
func (*Kademlia) EachAddr ¶
用(base,po,f)调用的eachaddr是一个迭代器,将f应用于每个已知的对等端 从底部测量,接近顺序为O或更低 如果基为零,则使用Kademlia基地址
func (*Kademlia) EachConn ¶
eachconn是一个带有args(base、po、f)的迭代器,将f应用于每个活动对等端 从基地测量,接近订单为po或更低 如果基为零,则使用Kademlia基地址
func (*Kademlia) Healthy ¶
健康报告Kademlia连接性的健康状态
peerpot参数提供了网络的全知视图 结果健康对象是 问题中的卡德米利亚(接受者)的实际组成是什么,以及 当我们考虑到我们对网络的所有了解时,应该是什么情况呢?
仅用于测试
func (*Kademlia) NeighbourhoodDepth ¶
Neighbourhooddepth返回壶的深度,请参见壶的深度
func (*Kademlia) NeighbourhoodDepthC ¶
Neighbourhooddepthc返回发送新Kademlia的频道 每一次变化的邻里深度。 不从返回通道接收将阻塞功能 当邻近深度改变时。 托多:为什么要导出它,如果应该的话;为什么我们不能有多个订户?
type Peer ¶
type Peer struct { *BzzPeer // contains filtered or unexported fields }
Peer包装BZZPeer并嵌入Kademlia覆盖连接驱动程序
func (*Peer) NotifyDepth ¶
notifydepth向接收者发送一个子程序msg,通知他们 饱和深度的变化
func (*Peer) NotifyPeer ¶
如果出现以下情况,notifypeer将通知远程节点(收件人)有关对等机的信息: 对等方的采购订单在收件人的广告深度内 或者对方比自己更接近对方 除非在连接会话期间已通知