peer

package
v0.0.4 Latest Latest
Warning

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

Go to latest
Published: Jan 13, 2025 License: MIT Imports: 18 Imported by: 12

Documentation

Overview

Package peer 实现了用于表示 libp2p 网络中对等节点的对象

Package peer contains Protobuf and JSON serialization/deserialization methods for peer IDs.

Index

Constants

View Source
const PeerRecordEnvelopeDomain = "libp2p-peer-record"

PeerRecordEnvelopeDomain 是用于包含在 Envelope 中的 peer records 的域字符串

Variables

View Source
var (
	// ErrEmptyPeerID 表示空的对等节点 ID 错误
	ErrEmptyPeerID = errors.New("空的对等节点 ID")
	// ErrNoPublicKey 表示对等节点 ID 中未嵌入公钥的错误
	ErrNoPublicKey = errors.New("对等节点 ID 中未嵌入公钥")
)
View Source
var AdvancedEnableInlining = true

AdvancedEnableInlining 启用自动将短于 42 字节的密钥内联到对等节点 ID 中(使用"identity" multihash 函数)

警告:此标志在将来可能会设置为 false,并最终被移除,改为使用密钥本身指定的哈希函数

除非你知道自己在做什么,否则不要更改此标志

目前默认为 true 以保持向后兼容性,但在确定升级路径后可能会默认设置为 false

View Source
var ErrInvalidAddr = fmt.Errorf("无效的 p2p 多地址")

ErrInvalidAddr 表示无效的 p2p 多地址错误

View Source
var PeerRecordEnvelopePayloadType = []byte{0x03, 0x01}

PeerRecordEnvelopePayloadType 是用于在 Envelope 中标识 peer records 的类型提示 在 https://github.com/multiformats/multicodec/blob/master/table.csv 中定义,名称为 "libp2p-peer-record"

Functions

func AddrInfoToP2pAddrs

func AddrInfoToP2pAddrs(pi *AddrInfo) ([]ma.Multiaddr, error)

AddrInfoToP2pAddrs 将 AddrInfo 转换为多地址列表 参数:

  • pi: *AddrInfo 要转换的 AddrInfo 指针

返回值:

  • []ma.Multiaddr: 转换后的多地址切片
  • error: 如果转换过程中发生错误,返回相应的错误信息

func TimestampSeq

func TimestampSeq() uint64

TimestampSeq 是一个帮助函数,用于为 PeerRecord 生成基于时间戳的序列号 返回值:

  • uint64: 返回生成的序列号

func ToCid

func ToCid(id ID) cid.Cid

ToCid 将对等节点 ID 编码为公钥的 CID

如果对等节点 ID 无效(例如为空),将返回空 CID 参数:

  • id: ID 要编码的对等节点 ID

返回值:

  • cid.Cid: 编码后的 CID

Types

type AddrInfo

type AddrInfo struct {
	// ID 表示对等节点的唯一标识符
	ID ID
	// Addrs 存储对等节点的多地址列表
	Addrs []ma.Multiaddr
}

AddrInfo 是一个小型结构体,用于传递包含一组地址和对等节点ID的信息

func AddrInfoFromP2pAddr

func AddrInfoFromP2pAddr(m ma.Multiaddr) (*AddrInfo, error)

AddrInfoFromP2pAddr 将多地址转换为 AddrInfo 参数:

  • m: ma.Multiaddr 要转换的多地址

返回值:

  • *AddrInfo: 转换后的 AddrInfo 指针
  • error: 如果转换过程中发生错误,返回相应的错误信息

func AddrInfoFromString

func AddrInfoFromString(s string) (*AddrInfo, error)

AddrInfoFromString 从多地址的字符串表示构建 AddrInfo 参数:

  • s: string 多地址的字符串表示

返回值:

  • *AddrInfo: 构建的 AddrInfo 指针
  • error: 如果转换过程中发生错误,返回相应的错误信息

func AddrInfosFromP2pAddrs

func AddrInfosFromP2pAddrs(maddrs ...ma.Multiaddr) ([]AddrInfo, error)

AddrInfosFromP2pAddrs 将一组多地址转换为 AddrInfo 结构体集合 参数:

  • maddrs: 可变参数,表示要转换的多地址列表

返回值:

  • []AddrInfo: 转换后的 AddrInfo 结构体切片
  • error: 如果转换过程中发生错误,返回相应的错误信息

func (*AddrInfo) Loggable

func (pi *AddrInfo) Loggable() map[string]interface{}

Loggable 实现日志接口,返回可记录的键值对映射 返回值:

  • map[string]interface{}: 包含节点ID和地址信息的映射

func (AddrInfo) MarshalJSON

func (pi AddrInfo) MarshalJSON() (res []byte, err error)

MarshalJSON 将AddrInfo实例序列化为JSON格式 返回值:

  • []byte: 序列化后的JSON字节数组
  • error: 如果发生错误,返回错误信息

func (AddrInfo) String

func (pi AddrInfo) String() string

String 实现 fmt.Stringer 接口,返回 AddrInfo 的字符串表示 返回值:

  • string: 包含节点ID和地址列表的格式化字符串

func (*AddrInfo) UnmarshalJSON

func (pi *AddrInfo) UnmarshalJSON(b []byte) (err error)

UnmarshalJSON 从JSON数据反序列化创建AddrInfo实例 参数:

  • b: []byte JSON格式的字节数组

返回值:

  • error: 如果发生错误,返回错误信息

type ID

type ID string

ID 是 libp2p 对等节点标识

对等节点 ID 通过对节点的公钥进行哈希并将哈希输出编码为 multihash 来派生 详见 IDFromPublicKey

func AddrInfosToIDs

func AddrInfosToIDs(pis []AddrInfo) []ID

AddrInfosToIDs 从 AddrInfo 切片中提取对等节点ID列表 参数:

  • pis: []AddrInfo AddrInfo 结构体切片

返回值:

  • []ID: 按顺序提取的对等节点ID切片

func Decode

func Decode(s string) (ID, error)

Decode 接受编码的对等节点 ID 并在输入有效时返回解码后的 ID

编码的对等节点 ID 可以是密钥的 CID 或原始 multihash (identity 或 sha256-256) 参数:

  • s: string 要解码的对等节点 ID 字符串

返回值:

  • ID: 解码后的对等节点 ID
  • error: 如果发生错误,返回错误信息

func FromCid

func FromCid(c cid.Cid) (ID, error)

FromCid 将 CID 转换为对等节点 ID 参数:

  • c: cid.Cid 要转换的 CID

返回值:

  • ID: 转换后的对等节点 ID
  • error: 如果发生错误,返回错误信息

func IDFromBytes

func IDFromBytes(b []byte) (ID, error)

IDFromBytes 将字节切片转换为 ID 类型,并验证该值是否为 multihash 参数:

  • b: []byte 要转换的字节切片

返回值:

  • ID: 转换后的对等节点 ID
  • error: 如果发生错误,返回错误信息

func IDFromP2PAddr

func IDFromP2PAddr(m ma.Multiaddr) (ID, error)

IDFromP2PAddr 从 p2p 多地址中提取对等节点ID 参数:

  • m: ma.Multiaddr p2p 多地址

返回值:

  • ID: 提取的对等节点ID
  • error: 如果地址无效则返回错误

func IDFromPrivateKey

func IDFromPrivateKey(sk ic.PrivKey) (ID, error)

IDFromPrivateKey 返回与私钥 sk 对应的对等节点 ID 参数:

  • sk: ic.PrivKey 用于生成对等节点 ID 的私钥

返回值:

  • ID: 生成的对等节点 ID
  • error: 如果发生错误,返回错误信息

func IDFromPublicKey

func IDFromPublicKey(pk ic.PubKey) (ID, error)

IDFromPublicKey 返回与公钥 pk 对应的对等节点 ID 参数:

  • pk: ic.PubKey 用于生成对等节点 ID 的公钥

返回值:

  • ID: 生成的对等节点 ID
  • error: 如果发生错误,返回错误信息

func SplitAddr

func SplitAddr(m ma.Multiaddr) (transport ma.Multiaddr, id ID)

SplitAddr 将 p2p 多地址分割为传输地址和对等节点ID 参数:

  • m: ma.Multiaddr 要分割的多地址

返回值:

  • transport: ma.Multiaddr 传输地址部分,如果地址仅包含 p2p 部分则返回 nil
  • id: ID 对等节点ID,如果地址不包含 p2p 部分则返回空字符串

func (ID) ExtractPublicKey

func (id ID) ExtractPublicKey() (ic.PubKey, error)

ExtractPublicKey 尝试从 ID 中提取公钥

如果对等节点 ID 看起来有效但无法提取公钥,此方法返回 ErrNoPublicKey 返回值:

  • ic.PubKey: 提取的公钥
  • error: 如果发生错误,返回错误信息

func (ID) Loggable

func (id ID) Loggable() map[string]interface{}

Loggable 返回格式化的对等节点 ID 字符串,用于日志记录 返回值:

  • map[string]interface{}: 包含格式化后的对等节点 ID 的映射

func (ID) Marshal

func (id ID) Marshal() ([]byte, error)

Marshal 将 peer ID 序列化为字节切片 返回值:

  • []byte: 序列化后的字节切片
  • error: 如果发生错误,返回错误信息

func (ID) MarshalBinary

func (id ID) MarshalBinary() ([]byte, error)

MarshalBinary 返回 peer ID 的二进制表示 返回值:

  • []byte: peer ID 的二进制表示
  • error: 如果发生错误,返回错误信息

func (ID) MarshalJSON

func (id ID) MarshalJSON() ([]byte, error)

MarshalJSON 将 peer ID 序列化为 JSON 格式 返回值:

  • []byte: JSON 格式的字节切片
  • error: 如果发生错误,返回错误信息

func (ID) MarshalText

func (id ID) MarshalText() ([]byte, error)

MarshalText 返回 peer ID 的文本编码 返回值:

  • []byte: 文本编码的字节切片
  • error: 如果发生错误,返回错误信息

func (ID) MarshalTo

func (id ID) MarshalTo(data []byte) (n int, err error)

MarshalTo 将 peer ID 序列化并写入指定的字节切片 参数:

  • data: []byte 目标字节切片

返回值:

  • n: int 写入的字节数
  • err: error 如果发生错误,返回错误信息

func (ID) MatchesPrivateKey

func (id ID) MatchesPrivateKey(sk ic.PrivKey) bool

MatchesPrivateKey 测试此 ID 是否由私钥 sk 派生 参数:

  • sk: ic.PrivKey 要测试的私钥

返回值:

  • bool: 如果 ID 与私钥匹配返回 true,否则返回 false

func (ID) MatchesPublicKey

func (id ID) MatchesPublicKey(pk ic.PubKey) bool

MatchesPublicKey 测试此 ID 是否由公钥 pk 派生 参数:

  • pk: ic.PubKey 要测试的公钥

返回值:

  • bool: 如果 ID 与公钥匹配返回 true,否则返回 false

func (ID) ShortString

func (id ID) ShortString() string

ShortString 打印对等节点 ID 的简短形式

TODO(brian): 确保 ID 生成的正确性,并通过只暴露安全生成 ID 的函数来强制执行 这样代码库中的任何 peer.ID 类型都可以确保是正确的 返回值:

  • string: 对等节点 ID 的简短字符串表示

func (ID) Size

func (id ID) Size() int

Size 返回 peer ID 的字节大小 返回值:

  • int: peer ID 的字节长度

func (ID) String

func (id ID) String() string

String 将对等节点 ID 转换为字符串表示 返回值:

  • string: 对等节点 ID 的 base58 编码字符串

func (*ID) Unmarshal

func (id *ID) Unmarshal(data []byte) (err error)

Unmarshal 从字节切片反序列化并设置 peer ID 参数:

  • data: []byte 包含 peer ID 数据的字节切片

返回值:

  • error: 如果发生错误,返回错误信息

func (*ID) UnmarshalBinary

func (id *ID) UnmarshalBinary(data []byte) error

UnmarshalBinary 从二进制表示设置 peer ID 参数:

  • data: []byte peer ID 的二进制表示

返回值:

  • error: 如果发生错误,返回错误信息

func (*ID) UnmarshalJSON

func (id *ID) UnmarshalJSON(data []byte) (err error)

UnmarshalJSON 从 JSON 格式反序列化并设置 peer ID 参数:

  • data: []byte JSON 格式的字节切片

返回值:

  • error: 如果发生错误,返回错误信息

func (*ID) UnmarshalText

func (id *ID) UnmarshalText(data []byte) error

UnmarshalText 从文本编码恢复 peer ID 参数:

  • data: []byte peer ID 的文本编码

返回值:

  • error: 如果发生错误,返回错误信息

func (ID) Validate

func (id ID) Validate() error

Validate 检查 ID 是否为空 返回值:

  • error: 如果 ID 为空返回 ErrEmptyPeerID,否则返回 nil

type IDSlice

type IDSlice []ID

IDSlice 用于对等节点排序的切片类型

func (IDSlice) Len

func (es IDSlice) Len() int

Len 返回切片长度 返回值:

  • int: 切片中元素的数量

func (IDSlice) Less

func (es IDSlice) Less(i, j int) bool

Less 比较切片中的两个元素 参数:

  • i: int 第一个元素的索引
  • j: int 第二个元素的索引

返回值:

  • bool: 如果第一个元素小于第二个元素返回 true

func (IDSlice) String

func (es IDSlice) String() string

String 返回切片的字符串表示 返回值:

  • string: 以逗号分隔的对等节点 ID 字符串

func (IDSlice) Swap

func (es IDSlice) Swap(i, j int)

Swap 交换切片中的两个元素 参数:

  • i: int 第一个元素的索引
  • j: int 第二个元素的索引

type PeerRecord

type PeerRecord struct {
	// PeerID 是此记录所属对等节点的 ID
	PeerID ID

	// Addrs 包含此记录所属对等节点的公共地址
	Addrs []ma.Multiaddr

	// Seq 是一个单调递增的序列计数器,用于对 PeerRecords 进行时间排序
	// Seq 值之间的间隔未指定,但对于同一对等节点,较新的 PeerRecords 必须具有比较旧记录更大的 Seq 值
	Seq uint64
}

PeerRecord 包含与其他对等节点共享的广泛有用的信息 目前,PeerRecord 包含对等节点的公共监听地址,未来预计会包含其他信息

func NewPeerRecord

func NewPeerRecord() *PeerRecord

NewPeerRecord 创建一个具有基于时间戳的序列号的新 PeerRecord 返回值:

  • *PeerRecord: 返回的记录为空,应由调用者填充

func PeerRecordFromAddrInfo

func PeerRecordFromAddrInfo(info AddrInfo) *PeerRecord

PeerRecordFromAddrInfo 从 AddrInfo 结构创建 PeerRecord 参数:

  • info: AddrInfo 包含对等节点的地址信息

返回值:

  • *PeerRecord: 返回的记录将具有基于时间戳的序列号

func PeerRecordFromProtobuf

func PeerRecordFromProtobuf(msg *pb.PeerRecord) (*PeerRecord, error)

PeerRecordFromProtobuf 从 protobuf PeerRecord 结构创建 PeerRecord 参数:

  • msg: *pb.PeerRecord protobuf 消息

返回值:

  • *PeerRecord: 创建的 PeerRecord 实例
  • error: 如果发生错误,返回错误信息

func (*PeerRecord) Codec

func (r *PeerRecord) Codec() []byte

Codec 是 PeerRecord 类型的二进制标识符 返回值:

  • []byte: 对所有 PeerRecord 实例都是常量

func (*PeerRecord) Domain

func (r *PeerRecord) Domain() string

Domain 用于签名和验证包含在 Envelopes 中的 PeerRecords 返回值:

  • string: 对所有 PeerRecord 实例都是常量

func (*PeerRecord) Equal

func (r *PeerRecord) Equal(other *PeerRecord) bool

Equal 判断另一个 PeerRecord 是否与此记录相同 参数:

  • other: *PeerRecord 要比较的另一个记录

返回值:

  • bool: 如果记录相同返回 true,否则返回 false

func (*PeerRecord) MarshalRecord

func (r *PeerRecord) MarshalRecord() (res []byte, err error)

MarshalRecord 将 PeerRecord 序列化为字节切片 返回值:

  • []byte: 序列化后的数据
  • error: 如果发生错误,返回错误信息

func (*PeerRecord) ToProtobuf

func (r *PeerRecord) ToProtobuf() (*pb.PeerRecord, error)

ToProtobuf 将 PeerRecord 转换为等效的 Protocol Buffer 结构对象 返回值:

  • *pb.PeerRecord: 转换后的 protobuf 对象
  • error: 如果发生错误,返回错误信息

func (*PeerRecord) UnmarshalRecord

func (r *PeerRecord) UnmarshalRecord(bytes []byte) (err error)

UnmarshalRecord 从字节切片解析 PeerRecord 参数:

  • bytes: []byte 要解析的字节数据

返回值:

  • error: 如果发生错误,返回错误信息

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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