dht

package module
v0.0.2 Latest Latest
Warning

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

Go to latest
Published: Jan 13, 2025 License: MIT Imports: 59 Imported by: 1

Documentation

Index

Constants

View Source
const DefaultPrefix protocol.ID = amino.ProtocolPrefix

DefaultPrefix 是默认附加到所有 DHT 协议的应用程序特定前缀

Variables

View Source
var (
	// ProtocolDHT 默认的DHT协议
	// 参数:
	//   - protocol.ID DHT协议标识符
	ProtocolDHT protocol.ID = amino.ProtocolID

	// DefaultProtocols DHT支持的默认协议列表
	// 参数:
	//   - []protocol.ID 协议标识符列表
	DefaultProtocols = amino.Protocols
)
View Source
var DefaultBootstrapPeers []multiaddr.Multiaddr

DefaultBootstrapPeers 是 libp2p 提供的一组公共 DHT 引导节点

View Source
var ErrNoPeersQueried = errors.New("failed to query any peers")

ErrNoPeersQueried 表示未能连接到任何节点

View Source
var ErrReadTimeout = net.ErrReadTimeout

ErrReadTimeout 在超时期间内未读取到消息时发生的错误

View Source
var LookupEventBufferSize = 16

LookupEventBufferSize 是要缓冲的事件数量

Functions

func GetDefaultBootstrapPeerAddrInfos

func GetDefaultBootstrapPeerAddrInfos() []peer.AddrInfo

GetDefaultBootstrapPeerAddrInfos 返回默认引导节点的 peer.AddrInfos,以便我们可以通过将这些传递给 BootstrapPeers(...) 选项来初始化 DHT 返回值:

  • []peer.AddrInfo 引导节点地址信息列表

func NewRTPeerDiversityFilter

func NewRTPeerDiversityFilter(h host.Host, maxPerCpl, maxForTable int) *rtPeerIPGroupFilter

NewRTPeerDiversityFilter 构造一个用于路由表的对等节点IP组过滤器 参数:

  • h: host.Host libp2p主机实例
  • maxPerCpl: int 每个CPL允许的最大IP组数
  • maxForTable: int 路由表允许的最大IP组数

返回值:

  • *rtPeerIPGroupFilter 新创建的过滤器实例

func PrivateQueryFilter

func PrivateQueryFilter(_ interface{}, ai peer.AddrInfo) bool

PrivateQueryFilter 目前不限制我们愿意从本地 DHT 查询的对等节点 参数:

  • _: interface{} 接口
  • ai: peer.AddrInfo 对等节点地址信息

返回值:

  • bool 是否允许查询

func PrivateRoutingTableFilter

func PrivateRoutingTableFilter(dht interface{}, p peer.ID) bool

PrivateRoutingTableFilter 如果与该对等节点的连接表明它在私有网络上,则允许将该对等节点添加到路由表中 参数:

  • dht: interface{} DHT 接口
  • p: peer.ID 对等节点 ID

返回值:

  • bool 是否允许添加到路由表

func PublicQueryFilter

func PublicQueryFilter(_ interface{}, ai peer.AddrInfo) bool

PublicQueryFilter 如果对等节点被认为是可公开访问的,则返回 true 参数:

  • _: interface{} 接口
  • ai: peer.AddrInfo 对等节点地址信息

返回值:

  • bool 是否可公开访问

func PublicRoutingTableFilter

func PublicRoutingTableFilter(dht interface{}, p peer.ID) bool

PublicRoutingTableFilter 如果与该对等节点的连接表明它在公共网络上,则允许将该对等节点添加到路由表中 参数:

  • dht: interface{} DHT 接口
  • p: peer.ID 对等节点 ID

返回值:

  • bool 是否允许添加到路由表

func PublishLookupEvent

func PublishLookupEvent(ctx context.Context, ev *LookupEvent)

PublishLookupEvent 将查询事件发布到与给定上下文关联的查询事件通道(如果有) 参数:

  • ctx: context.Context 上下文
  • ev: *LookupEvent 要发布的事件

返回值:

func Quorum

func Quorum(n int) routing.Option

Quorum 设置DHT查询需要从多少个对等节点获取值后才返回最佳值 当值为0时,表示DHT查询应该完整执行而不是提前返回 默认值: 0

参数:

  • n: int 需要查询的对等节点数量

返回值:

  • routing.Option 路由选项

func RegisterForLookupEvents

func RegisterForLookupEvents(ctx context.Context) (context.Context, <-chan *LookupEvent)

RegisterForLookupEvents 使用给定上下文注册查找事件通道 返回的上下文可以传递给DHT查询以在返回的通道上接收查找事件

当调用者不再对查询事件感兴趣时,必须取消传入的上下文 参数:

  • ctx: context.Context 上下文

返回值:

  • context.Context 包含事件通道的上下文
  • <-chan *LookupEvent 查找事件通道

Types

type IpfsDHT

type IpfsDHT struct {
	Validator record.Validator // 验证器
	// contains filtered or unexported fields
}

IpfsDHT 是一个带有S/Kademlia修改的Kademlia实现。 它用于实现基本的路由模块。

func New

func New(ctx context.Context, h host.Host, options ...Option) (*IpfsDHT, error)

New 使用指定的主机和选项创建一个新的DHT。 请注意,连接到DHT对等节点并不一定意味着它也在DHT路由表中。 如果路由表有超过"minRTRefreshThreshold"个对等节点,我们只在成功从对等节点获得查询响应或它向我们发送查询时才将其视为路由表候选者。

参数:

  • ctx: context.Context 上下文
  • h: host.Host 主机
  • options: ...Option 选项

返回值:

  • *IpfsDHT DHT实例
  • error 错误信息

func NewDHT

func NewDHT(ctx context.Context, h host.Host, dstore ds.Batching) *IpfsDHT

NewDHT 使用给定的对等节点作为"本地"主机创建一个新的DHT对象。 使用此函数初始化的IpfsDHT将响应DHT请求,而使用NewDHTClient初始化的IpfsDHT则不会。

参数:

  • ctx: context.Context 上下文
  • h: host.Host 主机
  • dstore: ds.Batching 数据存储

返回值:

  • *IpfsDHT DHT实例

func NewDHTClient

func NewDHTClient(ctx context.Context, h host.Host, dstore ds.Batching) *IpfsDHT

NewDHTClient 使用给定的对等节点作为"本地"主机创建一个新的DHT对象。 使用此函数初始化的IpfsDHT客户端将不会响应DHT请求。如果需要对等节点响应DHT请求,请使用NewDHT。

参数:

  • ctx: context.Context 上下文
  • h: host.Host 主机
  • dstore: ds.Batching 数据存储

返回值:

  • *IpfsDHT DHT实例

func (*IpfsDHT) Bootstrap

func (dht *IpfsDHT) Bootstrap(ctx context.Context) (err error)

Bootstrap 告诉 DHT 进入满足 IpfsRouter 接口的引导状态 参数:

  • ctx: context.Context 上下文

返回值:

  • error 错误信息

func (*IpfsDHT) Close

func (dht *IpfsDHT) Close() error

Close 调用Process Close 返回值:

  • error 错误信息

func (*IpfsDHT) Context

func (dht *IpfsDHT) Context() context.Context

Context 返回DHT的上下文 返回值:

  • context.Context DHT上下文

func (*IpfsDHT) FindLocal

func (dht *IpfsDHT) FindLocal(ctx context.Context, id peer.ID) peer.AddrInfo

FindLocal 查找连接到此DHT的具有给定ID的对等节点,并返回对等节点及其所在的表 参数:

  • ctx: context.Context 上下文
  • id: peer.ID 对等节点ID

返回值:

  • peer.AddrInfo 对等节点地址信息

func (*IpfsDHT) FindPeer

func (dht *IpfsDHT) FindPeer(ctx context.Context, id peer.ID) (pi peer.AddrInfo, err error)

FindPeer 搜索具有给定ID的对等节点 参数:

  • ctx: context.Context 上下文
  • id: peer.ID 对等节点ID

返回值:

  • peer.AddrInfo 对等节点信息
  • error 错误信息

func (*IpfsDHT) FindProviders

func (dht *IpfsDHT) FindProviders(ctx context.Context, c cid.Cid) ([]peer.AddrInfo, error)

FindProviders 搜索直到上下文过期 参数:

  • ctx: context.Context 上下文
  • c: cid.Cid CID

返回值:

  • []peer.AddrInfo 提供者信息列表
  • error 错误信息

func (*IpfsDHT) FindProvidersAsync

func (dht *IpfsDHT) FindProvidersAsync(ctx context.Context, key cid.Cid, count int) (ch <-chan peer.AddrInfo)

FindProvidersAsync 与FindProviders相同,但返回一个通道 一旦找到对等节点就会在通道上返回,甚至在搜索查询完成之前 如果count为零,则查询将运行直到完成。注意:不从返回的通道读取可能会阻塞查询的进度 参数:

  • ctx: context.Context 上下文
  • key: cid.Cid CID
  • count: int 需要的提供者数量

返回值:

  • <-chan peer.AddrInfo 提供者信息通道

func (*IpfsDHT) ForceRefresh

func (dht *IpfsDHT) ForceRefresh() <-chan error

ForceRefresh 类似于 RefreshRoutingTable,但强制 DHT 刷新路由表中的所有桶,而不考虑它们上次刷新的时间

返回的通道将阻塞直到刷新完成,然后产生错误并关闭。该通道是带缓冲的,可以安全地忽略 返回值:

  • <-chan error 错误通道

func (*IpfsDHT) GetClosestPeers

func (dht *IpfsDHT) GetClosestPeers(ctx context.Context, key string) ([]peer.ID, error)

GetClosestPeers 执行 Kademlia '节点查找'操作 返回一个包含距离给定key最近的K个节点的通道

参数:

  • ctx: context.Context 上下文
  • key: string 查找的键值

返回值:

  • []peer.ID 最近的K个节点ID
  • error 错误信息

如果上下文被取消,该函数将返回上下文错误以及目前找到的最近的K个节点

func (*IpfsDHT) GetPublicKey

func (dht *IpfsDHT) GetPublicKey(ctx context.Context, p peer.ID) (ci.PubKey, error)

GetPublicKey 根据对等节点ID获取公钥 如果公钥内联在对等节点ID中,则直接提取;否则向节点本身或DHT查询 参数:

  • ctx: context.Context 上下文
  • p: peer.ID 对等节点ID

返回值:

  • ci.PubKey 公钥
  • error 错误信息

func (*IpfsDHT) GetRoutingTableDiversityStats

func (dht *IpfsDHT) GetRoutingTableDiversityStats() []peerdiversity.CplDiversityStats

GetRoutingTableDiversityStats 返回路由表的多样性统计信息。

返回值:

  • []peerdiversity.CplDiversityStats 多样性统计信息

func (*IpfsDHT) GetValue

func (dht *IpfsDHT) GetValue(ctx context.Context, key string, opts ...routing.Option) (result []byte, err error)

GetValue 搜索给定Key对应的值 参数:

  • ctx: context.Context 上下文
  • key: string 键
  • opts: ...routing.Option 路由选项

返回值:

  • []byte 查找到的值
  • error 错误信息

func (*IpfsDHT) Host

func (dht *IpfsDHT) Host() host.Host

Host 返回此DHT正在使用的libp2p主机 返回值:

  • host.Host libp2p主机

func (*IpfsDHT) Mode

func (dht *IpfsDHT) Mode() ModeOpt

Mode 允许检查DHT的操作模式

返回值:

  • ModeOpt 模式选项

func (*IpfsDHT) NetworkSize

func (dht *IpfsDHT) NetworkSize() (int32, error)

NetworkSize 返回DHT网络大小的最新估计 实验性:我们不保证此方法将继续存在于代码库中。使用时风险自负 返回值:

  • int32 网络大小
  • error 错误信息

func (*IpfsDHT) PeerID

func (dht *IpfsDHT) PeerID() peer.ID

PeerID 返回DHT节点的对等节点ID 返回值:

  • peer.ID 对等节点ID

func (*IpfsDHT) PeerKey

func (dht *IpfsDHT) PeerKey() []byte

PeerKey 返回从DHT节点的对等节点ID转换而来的DHT键 返回值:

  • []byte DHT键

func (*IpfsDHT) Ping

func (dht *IpfsDHT) Ping(ctx context.Context, p peer.ID) error

Ping 向指定的对等节点发送ping消息并等待响应 参数:

  • ctx: context.Context 上下文
  • p: peer.ID 对等节点ID

返回值:

  • error 错误信息

func (*IpfsDHT) Provide

func (dht *IpfsDHT) Provide(ctx context.Context, key cid.Cid, brdcst bool) (err error)

Provide 使此节点宣布它可以为给定的键提供值 参数:

  • ctx: context.Context 上下文
  • key: cid.Cid CID
  • brdcst: bool 是否广播

返回值:

  • error 错误信息

func (*IpfsDHT) ProviderStore

func (dht *IpfsDHT) ProviderStore() providers.ProviderStore

ProviderStore 返回用于存储和检索提供者记录的提供者存储对象。

返回值:

  • providers.ProviderStore 提供者存储

func (*IpfsDHT) PutValue

func (dht *IpfsDHT) PutValue(ctx context.Context, key string, value []byte, opts ...routing.Option) (err error)

PutValue 为给定的Key添加对应的值,这是DHT的顶层"存储"操作 参数:

  • ctx: context.Context 上下文
  • key: string 键
  • value: []byte 值
  • opts: ...routing.Option 路由选项

返回值:

  • error 错误信息

func (*IpfsDHT) RefreshRoutingTable

func (dht *IpfsDHT) RefreshRoutingTable() <-chan error

RefreshRoutingTable 告诉 DHT 刷新其路由表

返回的通道将阻塞直到刷新完成,然后产生错误并关闭。该通道是带缓冲的,可以安全地忽略 返回值:

  • <-chan error 错误通道

func (*IpfsDHT) RoutingTable

func (dht *IpfsDHT) RoutingTable() *kb.RoutingTable

RoutingTable 返回DHT的路由表 返回值:

  • *kb.RoutingTable 路由表

func (*IpfsDHT) SearchValue

func (dht *IpfsDHT) SearchValue(ctx context.Context, key string, opts ...routing.Option) (ch <-chan []byte, err error)

SearchValue 搜索给定Key对应的值并流式返回结果 参数:

  • ctx: context.Context 上下文
  • key: string 键
  • opts: ...routing.Option 路由选项

返回值:

  • <-chan []byte 结果通道
  • error 错误信息

type KeyKadID

type KeyKadID struct {
	Key string
	Kad kbucket.ID
}

KeyKadID 包含字符串和二进制形式的Kademlia键

func NewKeyKadID

func NewKeyKadID(k string) *KeyKadID

NewKeyKadID 从字符串Kademlia ID创建KeyKadID 参数:

  • k: string Kademlia ID字符串

返回值:

  • *KeyKadID 创建的KeyKadID对象

type LookupEvent

type LookupEvent struct {
	// Node 执行查找的节点ID
	Node *PeerKadID
	// ID 查找实例的唯一标识符
	ID uuid.UUID
	// Key 用作查找目标的Kademlia键
	Key *KeyKadID
	// Request 如果不为nil,描述与传出查询请求相关的状态更新事件
	Request *LookupUpdateEvent
	// Response 如果不为nil,描述与传出查询响应相关的状态更新事件
	Response *LookupUpdateEvent
	// Terminate 如果不为nil,描述终止事件
	Terminate *LookupTerminateEvent
}

LookupEvent 在DHT查找过程中发生的每个重要事件时发出 LookupEvent支持JSON序列化,因为它的所有字段都支持递归序列化

func NewLookupEvent

func NewLookupEvent(
	node peer.ID,
	id uuid.UUID,
	key string,
	request *LookupUpdateEvent,
	response *LookupUpdateEvent,
	terminate *LookupTerminateEvent,
) *LookupEvent

NewLookupEvent 创建一个LookupEvent,自动将节点libp2p ID转换为PeerKadID,将字符串Kademlia键转换为KeyKadID 参数:

  • node: peer.ID 节点ID
  • id: uuid.UUID 查找实例的唯一标识符
  • key: string Kademlia键
  • request: *LookupUpdateEvent 请求更新事件
  • response: *LookupUpdateEvent 响应更新事件
  • terminate: *LookupTerminateEvent 终止事件

返回值:

  • *LookupEvent 创建的查找事件对象

type LookupTerminateEvent

type LookupTerminateEvent struct {
	// Reason 是查找终止的原因
	Reason LookupTerminationReason
}

LookupTerminateEvent 描述查找终止事件

func NewLookupTerminateEvent

func NewLookupTerminateEvent(reason LookupTerminationReason) *LookupTerminateEvent

NewLookupTerminateEvent 使用给定原因创建新的查找终止事件 参数:

  • reason: LookupTerminationReason 终止原因

返回值:

  • *LookupTerminateEvent 创建的查找终止事件对象

type LookupTerminationReason

type LookupTerminationReason int

LookupTerminationReason 捕获终止查找的原因

const (
	// LookupStopped 表示查找被用户的stopFn中止
	LookupStopped LookupTerminationReason = iota
	// LookupCancelled 表示查找被上下文中止
	LookupCancelled
	// LookupStarvation 表示由于缺少未查询的节点而终止查找
	LookupStarvation
	// LookupCompleted 表示查找成功终止,达到Kademlia结束条件
	LookupCompleted
)

func (LookupTerminationReason) MarshalJSON

func (r LookupTerminationReason) MarshalJSON() ([]byte, error)

MarshalJSON 返回查找终止原因的JSON编码 参数:

返回值:

  • []byte JSON编码的字节数组
  • error 错误信息

func (LookupTerminationReason) String

func (r LookupTerminationReason) String() string

String 返回终止原因的字符串表示 参数:

返回值:

  • string 终止原因的字符串表示

type LookupUpdateEvent

type LookupUpdateEvent struct {
	// Cause 是导致更新事件的节点(通过响应或无响应)
	// 如果Cause为nil,这是查找中由种子引起的第一个更新事件
	Cause *PeerKadID
	// Source 是告知我们此更新中节点ID的节点
	Source *PeerKadID
	// Heard 是一组节点,其在查找的节点集中的状态被设置为"已听到"
	Heard []*PeerKadID
	// Waiting 是一组节点,其在查找的节点集中的状态被设置为"等待中"
	Waiting []*PeerKadID
	// Queried 是一组节点,其在查找的节点集中的状态被设置为"已查询"
	Queried []*PeerKadID
	// Unreachable 是一组节点,其在查找的节点集中的状态被设置为"不可达"
	Unreachable []*PeerKadID
}

LookupUpdateEvent 描述查找状态更新事件

func NewLookupUpdateEvent

func NewLookupUpdateEvent(
	cause peer.ID,
	source peer.ID,
	heard []peer.ID,
	waiting []peer.ID,
	queried []peer.ID,
	unreachable []peer.ID,
) *LookupUpdateEvent

NewLookupUpdateEvent 创建新的查找更新事件,自动将传入的节点ID转换为PeerKadID 参数:

  • cause: peer.ID 导致更新的节点ID
  • source: peer.ID 信息来源节点ID
  • heard: []peer.ID 已听到的节点ID列表
  • waiting: []peer.ID 等待中的节点ID列表
  • queried: []peer.ID 已查询的节点ID列表
  • unreachable: []peer.ID 不可达的节点ID列表

返回值:

  • *LookupUpdateEvent 创建的查找更新事件对象

type ModeOpt

type ModeOpt = dhtcfg.ModeOpt

ModeOpt 描述 DHT 应该以什么模式运行

const (
	// ModeAuto 利用事件总线上发送的 EvtLocalReachabilityChanged 事件,根据网络条件动态地在客户端和服务器模式之间切换 DHT
	ModeAuto ModeOpt = iota
	// ModeClient 将 DHT 作为客户端运行,它不能响应传入的查询
	ModeClient
	// ModeServer 将 DHT 作为服务器运行,它既可以发送查询也可以响应查询
	ModeServer
	// ModeAutoServer 与 ModeAuto 的运行方式相同,但在可达性未知时作为服务器运行
	ModeAutoServer
)

type Option

type Option = dhtcfg.Option

func AddressFilter

func AddressFilter(f func([]ma.Multiaddr) []ma.Multiaddr) Option

AddressFilter 允许配置地址过滤函数 在将地址添加到 peerstore 之前运行此函数 它最适合用于避免添加 localhost / 本地地址

参数:

  • f: func([]ma.Multiaddr) []ma.Multiaddr 地址过滤函数

返回值:

  • Option 配置选项

func BootstrapPeers

func BootstrapPeers(bootstrappers ...peer.AddrInfo) Option

BootstrapPeers 配置引导节点,如果路由表变空,我们将连接这些节点以播种和刷新路由表

参数:

  • bootstrappers: ...peer.AddrInfo 引导节点信息

返回值:

  • Option 配置选项

func BootstrapPeersFunc

func BootstrapPeersFunc(getBootstrapPeers func() []peer.AddrInfo) Option

BootstrapPeersFunc 配置返回引导节点的函数,如果路由表变空,我们将连接这些节点以播种和刷新路由表

参数:

  • getBootstrapPeers: func() []peer.AddrInfo 获取引导节点的函数

返回值:

  • Option 配置选项

func BucketSize

func BucketSize(bucketSize int) Option

BucketSize 配置路由表的桶大小(Kademlia 论文中的 k) 默认值为 amino.DefaultBucketSize

参数:

  • bucketSize: int 桶大小

返回值:

  • Option 配置选项

func Concurrency

func Concurrency(alpha int) Option

Concurrency 配置给定查询路径的并发请求数(Kademlia 论文中的 alpha) 默认值为 amino.DefaultConcurrency

参数:

  • alpha: int 并发数

返回值:

  • Option 配置选项

func Datastore

func Datastore(ds ds.Batching) Option

Datastore 配置 DHT 使用指定的数据存储 默认使用内存中的(临时)映射

参数:

  • ds: ds.Batching 数据存储

返回值:

  • Option 配置选项

func DisableAutoRefresh

func DisableAutoRefresh() Option

DisableAutoRefresh 完全禁用 DHT 路由表上的"自动刷新" 这意味着我们既不会定期刷新路由表,也不会在路由表大小低于最小阈值时刷新

返回值:

  • Option 配置选项

func DisableProviders

func DisableProviders() Option

DisableProviders 禁用存储和检索提供者记录 默认启用 警告: 除非您使用分叉的 DHT(即私有网络和/或使用 Protocols 选项的不同 DHT 协议),否则不要更改此设置

返回值:

  • Option 配置选项

func DisableValues

func DisableValues() Option

DisableValues 禁用存储和检索值记录(包括公钥) 默认启用 警告: 除非您使用分叉的 DHT(即私有网络和/或使用 Protocols 选项的不同 DHT 协议),否则不要更改此设置

返回值:

  • Option 配置选项

func EnableOptimisticProvide

func EnableOptimisticProvide() Option

EnableOptimisticProvide 启用跳过提供过程最后跳数的优化 这通过使用网络大小估算器(使用查询的键空间密度)在最有可能找到最后一跳时乐观地发送 ADD_PROVIDER 请求来工作 它还将在返回后在后台异步运行一些 ADD_PROVIDER 请求 如果某些阈值数量的 RPC 已成功,这允许乐观地更早返回 后台/正在进行的查询数量可以通过 OptimisticProvideJobsPoolSize 选项配置

实验性: 这是一个实验性选项,可能在将来被删除。使用风险自负

返回值:

  • Option 配置选项

func LookupCheckConcurrency

func LookupCheckConcurrency(n int) Option

LookupCheckConcurrency 配置在将新节点添加到路由表之前,可用于执行查找检查操作的最大 goroutine 数量

参数:

  • n: int goroutine 数量

返回值:

  • Option 配置选项

func MaxRecordAge

func MaxRecordAge(maxAge time.Duration) Option

MaxRecordAge 指定任何节点从接收记录("PutValue record")时起保留记录的最长时间 这不适用于记录可能包含的任何其他形式的有效性 例如,记录可能包含一个 EOL 为 2020 年(未来的一个很好的时间)的 ipns 条目 要使该记录继续存在,必须以比每个"MaxRecordAge"更频繁的频率重新广播

参数:

  • maxAge: time.Duration 最大记录年龄

返回值:

  • Option 配置选项

func Mode

func Mode(m ModeOpt) Option

Mode 配置 DHT 运行的模式(Client、Server、Auto) 默认为 ModeAuto

参数:

  • m: ModeOpt 运行模式

返回值:

  • Option 配置选项

func NamespacedValidator

func NamespacedValidator(ns string, v record.Validator) Option

NamespacedValidator 在命名空间 ns 下添加验证器 如果 DHT 没有使用 record.NamespacedValidator 作为其验证器,此选项将失败(默认使用一个,但可以使用 Validator 选项覆盖) 在不更改 Validator 的情况下添加命名空间验证器将导致在默认公钥和 IPNS 验证器之外添加新的验证器 除非先设置了新的 Validator,否则不能在此处覆盖"pk"和"ipns"命名空间

示例: 给定一个注册为 NamespacedValidator("ipns", myValidator) 的验证器,所有以 /ipns/ 开头的键的记录都将使用 myValidator 进行验证

参数:

  • ns: string 命名空间
  • v: record.Validator 验证器

返回值:

  • Option 配置选项

func OptimisticProvideJobsPoolSize

func OptimisticProvideJobsPoolSize(size int) Option

OptimisticProvideJobsPoolSize 允许配置正在进行的 ADD_PROVIDER RPC 的异步性限制 将其设置为 optProvReturnRatio * BucketSize 的倍数是有意义的。查看 EnableOptimisticProvide 的描述了解更多详情

实验性: 这是一个实验性选项,可能在将来被删除。使用风险自负

参数:

  • size: int 池大小

返回值:

  • Option 配置选项

func ProtocolExtension

func ProtocolExtension(ext protocol.ID) Option

ProtocolExtension 向 DHT 协议添加应用程序特定协议 例如,使用 /ipfs/lan/kad/1.0.0 而不是 /ipfs/kad/1.0.0。扩展应采用 /lan 的形式

参数:

  • ext: protocol.ID 协议扩展

返回值:

  • Option 配置选项

func ProtocolPrefix

func ProtocolPrefix(prefix protocol.ID) Option

ProtocolPrefix 设置要附加到所有 DHT 协议的应用程序特定前缀 例如,使用 /myapp/kad/1.0.0 而不是 /ipfs/kad/1.0.0。前缀应采用 /myapp 的形式 默认为 amino.ProtocolPrefix

参数:

  • prefix: protocol.ID 协议前缀

返回值:

  • Option 配置选项

func ProviderStore

func ProviderStore(ps providers.ProviderStore) Option

ProviderStore 设置提供者存储管理器 参数:

  • ps: providers.ProviderStore 提供者存储

返回值:

  • Option 配置选项

func QueryFilter

func QueryFilter(filter QueryFilterFunc) Option

QueryFilter 设置一个函数,该函数批准在查询中可以拨号的对等点

参数:

  • filter: QueryFilterFunc 查询过滤函数

返回值:

  • Option 配置选项

func Resiliency

func Resiliency(beta int) Option

Resiliency 配置给定查询路径完成所需的最接近目标的对等点数量 默认值为 amino.DefaultResiliency

参数:

  • beta: int 弹性值

返回值:

  • Option 配置选项

func RoutingTableFilter

func RoutingTableFilter(filter RouteTableFilterFunc) Option

RoutingTableFilter 设置一个函数,该函数批准哪些对等点可以添加到路由表中 主机应该已经至少与正在考虑的对等点建立了一个连接

参数:

  • filter: RouteTableFilterFunc 路由表过滤函数

返回值:

  • Option 配置选项

func RoutingTableLatencyTolerance

func RoutingTableLatencyTolerance(latency time.Duration) Option

RoutingTableLatencyTolerance 设置路由表集群中对等点的最大可接受延迟 参数:

  • latency: time.Duration 延迟时间

返回值:

  • Option 配置选项

func RoutingTablePeerDiversityFilter

func RoutingTablePeerDiversityFilter(pg peerdiversity.PeerIPGroupFilter) Option

RoutingTablePeerDiversityFilter 配置用于构建路由表多样性过滤器的 PeerIPGroupFilter 实现 请参阅 peerdiversity.PeerIPGroupFilter 和 peerdiversity.Filter 的文档了解更多详情

参数:

  • pg: peerdiversity.PeerIPGroupFilter 对等点IP组过滤器

返回值:

  • Option 配置选项

func RoutingTableRefreshPeriod

func RoutingTableRefreshPeriod(period time.Duration) Option

RoutingTableRefreshPeriod 设置刷新路由表中桶的周期。DHT 将通过以下方式每个周期刷新桶: 1. 首先搜索附近的对等点以确定我们应该尝试填充多少个桶 2. 然后在上次刷新期间未查询的每个桶中搜索随机键

参数:

  • period: time.Duration 刷新周期

返回值:

  • Option 配置选项

func RoutingTableRefreshQueryTimeout

func RoutingTableRefreshQueryTimeout(timeout time.Duration) Option

RoutingTableRefreshQueryTimeout 设置路由表刷新查询的超时时间 参数:

  • timeout: time.Duration 超时时间

返回值:

  • Option 配置选项

func V1ProtocolOverride

func V1ProtocolOverride(proto protocol.ID) Option

V1ProtocolOverride 用另一个协议覆盖 /kad/1.0.0 使用的 protocolID 这是一个高级功能,只应用于处理尚未使用 /app/kad/1.0.0 形式的 protocolID 的遗留网络 此选项将覆盖并忽略 ProtocolPrefix 和 ProtocolExtension 选项

参数:

  • proto: protocol.ID 协议ID

返回值:

  • Option 配置选项

func Validator

func Validator(v record.Validator) Option

Validator 配置 DHT 使用指定的验证器 默认使用可以验证公钥(在"pk"命名空间下)和 IPNS 记录(在"ipns"命名空间下)的命名空间验证器 设置验证器意味着用户想要控制验证器,因此不会添加默认的公钥和 IPNS 验证器

参数:

  • v: record.Validator 验证器

返回值:

  • Option 配置选项

func WithCustomMessageSender

func WithCustomMessageSender(messageSenderBuilder func(h host.Host, protos []protocol.ID) pb.MessageSenderWithDisconnect) Option

WithCustomMessageSender 配置 IpfsDHT 的 pb.MessageSender 使用 pb.MessageSender 的自定义实现

参数:

  • messageSenderBuilder: func(h host.Host, protos []protocol.ID) pb.MessageSenderWithDisconnect 消息发送器构建函数

返回值:

  • Option 配置选项

type PeerKadID

type PeerKadID struct {
	Peer peer.ID
	Kad  kbucket.ID
}

PeerKadID 包含libp2p节点ID和二进制Kademlia ID

func NewPeerKadID

func NewPeerKadID(p peer.ID) *PeerKadID

NewPeerKadID 从libp2p节点ID创建PeerKadID 参数:

  • p: peer.ID libp2p节点ID

返回值:

  • *PeerKadID 创建的PeerKadID对象

func NewPeerKadIDSlice

func NewPeerKadIDSlice(p []peer.ID) []*PeerKadID

NewPeerKadIDSlice 从libp2p节点ID切片创建PeerKadID切片 参数:

  • p: []peer.ID libp2p节点ID切片

返回值:

  • []*PeerKadID PeerKadID对象切片

func OptPeerKadID

func OptPeerKadID(p peer.ID) *PeerKadID

OptPeerKadID 如果传入的节点ID为默认值则返回nil,否则返回PeerKadID指针 参数:

  • p: peer.ID libp2p节点ID

返回值:

  • *PeerKadID PeerKadID对象指针或nil

type QueryFilterFunc

type QueryFilterFunc = dhtcfg.QueryFilterFunc

QueryFilterFunc 是在查询时考虑要拨号的对等节点时应用的过滤器

type RouteTableFilterFunc

type RouteTableFilterFunc = dhtcfg.RouteTableFilterFunc

RouteTableFilterFunc 是在考虑要保留在本地路由表中的连接时应用的过滤器

Directories

Path Synopsis
amino 包提供了 [Amino DHT] 的协议参数和建议默认值。
amino 包提供了 [Amino DHT] 的协议参数和建议默认值。
Package dual provides an implementation of a split or "dual" dht, where two parallel instances are maintained for the global internet and the local LAN respectively.
Package dual provides an implementation of a split or "dual" dht, where two parallel instances are maintained for the global internet and the local LAN respectively.
tracing
tracing 为 routing.Routing API 提供高级方法追踪。
tracing 为 routing.Routing API 提供高级方法追踪。
net
pb
kbucket 包实现了 kademlia 'k-bucket' 路由表
kbucket 包实现了 kademlia 'k-bucket' 路由表
generate command
pb
tracing 为 routing.Routing API 提供高级方法追踪。
tracing 为 routing.Routing API 提供高级方法追踪。
xor
kademlia
kademlia 包提供 Kademlia 路由相关功能
kademlia 包提供 Kademlia 路由相关功能
key

Jump to

Keyboard shortcuts

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