Documentation
¶
Overview ¶
Package peer 实现了用于表示 dep2p 网络中对等节点的对象
Package peer contains Protobuf and JSON serialization/deserialization methods for peer IDs.
Index ¶
- Constants
- Variables
- func AddrInfoToP2pAddrs(pi *AddrInfo) ([]ma.Multiaddr, error)
- func TimestampSeq() uint64
- func ToCid(id ID) cid.Cid
- type AddrInfo
- type ID
- func AddrInfosToIDs(pis []AddrInfo) []ID
- func Decode(s string) (ID, error)
- func FromCid(c cid.Cid) (ID, error)
- func IDFromBytes(b []byte) (ID, error)
- func IDFromP2PAddr(m ma.Multiaddr) (ID, error)
- func IDFromPrivateKey(sk ic.PrivKey) (ID, error)
- func IDFromPublicKey(pk ic.PubKey) (ID, error)
- func SplitAddr(m ma.Multiaddr) (transport ma.Multiaddr, id ID)
- func (id ID) ExtractPublicKey() (ic.PubKey, error)
- func (id ID) Loggable() map[string]interface{}
- func (id ID) Marshal() ([]byte, error)
- func (id ID) MarshalBinary() ([]byte, error)
- func (id ID) MarshalJSON() ([]byte, error)
- func (id ID) MarshalText() ([]byte, error)
- func (id ID) MarshalTo(data []byte) (n int, err error)
- func (id ID) MatchesPrivateKey(sk ic.PrivKey) bool
- func (id ID) MatchesPublicKey(pk ic.PubKey) bool
- func (id ID) ShortString() string
- func (id ID) Size() int
- func (id ID) String() string
- func (id *ID) Unmarshal(data []byte) (err error)
- func (id *ID) UnmarshalBinary(data []byte) error
- func (id *ID) UnmarshalJSON(data []byte) (err error)
- func (id *ID) UnmarshalText(data []byte) error
- func (id ID) Validate() error
- type IDSlice
- type PeerRecord
- func (r *PeerRecord) Codec() []byte
- func (r *PeerRecord) Domain() string
- func (r *PeerRecord) Equal(other *PeerRecord) bool
- func (r *PeerRecord) MarshalRecord() (res []byte, err error)
- func (r *PeerRecord) ToProtobuf() (*pb.PeerRecord, error)
- func (r *PeerRecord) UnmarshalRecord(bytes []byte) (err error)
Constants ¶
const PeerRecordEnvelopeDomain = "dep2p-peer-record"
PeerRecordEnvelopeDomain 是用于包含在 Envelope 中的 peer records 的域字符串
Variables ¶
var ( // ErrEmptyPeerID 表示空的对等节点 ID 错误 ErrEmptyPeerID = errors.New("空的对等节点 ID") // ErrNoPublicKey 表示对等节点 ID 中未嵌入公钥的错误 ErrNoPublicKey = errors.New("对等节点 ID 中未嵌入公钥") )
var AdvancedEnableInlining = true
AdvancedEnableInlining 启用自动将短于 42 字节的密钥内联到对等节点 ID 中(使用"identity" multihash 函数)
警告:此标志在将来可能会设置为 false,并最终被移除,改为使用密钥本身指定的哈希函数
除非你知道自己在做什么,否则不要更改此标志
目前默认为 true 以保持向后兼容性,但在确定升级路径后可能会默认设置为 false
var ErrInvalidAddr = fmt.Errorf("无效的 p2p 多地址")
ErrInvalidAddr 表示无效的 p2p 多地址错误
var PeerRecordEnvelopePayloadType = []byte{0x03, 0x01}
PeerRecordEnvelopePayloadType 是用于在 Envelope 中标识 peer records 的类型提示 在 https://github.com/multiformats/multicodec/blob/master/table.csv 中定义,名称为 "dep2p-peer-record"
Functions ¶
func AddrInfoToP2pAddrs ¶
AddrInfoToP2pAddrs 将 AddrInfo 转换为多地址列表 参数:
- pi: *AddrInfo 要转换的 AddrInfo 指针
返回值:
- []ma.Multiaddr: 转换后的多地址切片
- error: 如果转换过程中发生错误,返回相应的错误信息
func TimestampSeq ¶
func TimestampSeq() uint64
TimestampSeq 是一个帮助函数,用于为 PeerRecord 生成基于时间戳的序列号 返回值:
- uint64: 返回生成的序列号
Types ¶
type AddrInfo ¶
AddrInfo 是一个小型结构体,用于传递包含一组地址和对等节点ID的信息
func AddrInfoFromP2pAddr ¶
AddrInfoFromP2pAddr 将多地址转换为 AddrInfo 参数:
- m: ma.Multiaddr 要转换的多地址
返回值:
- *AddrInfo: 转换后的 AddrInfo 指针
- error: 如果转换过程中发生错误,返回相应的错误信息
func AddrInfoFromString ¶
AddrInfoFromString 从多地址的字符串表示构建 AddrInfo 参数:
- s: string 多地址的字符串表示
返回值:
- *AddrInfo: 构建的 AddrInfo 指针
- error: 如果转换过程中发生错误,返回相应的错误信息
func AddrInfosFromP2pAddrs ¶
AddrInfosFromP2pAddrs 将一组多地址转换为 AddrInfo 结构体集合 参数:
- maddrs: 可变参数,表示要转换的多地址列表
返回值:
- []AddrInfo: 转换后的 AddrInfo 结构体切片
- error: 如果转换过程中发生错误,返回相应的错误信息
func (AddrInfo) MarshalJSON ¶
MarshalJSON 将AddrInfo实例序列化为JSON格式 返回值:
- []byte: 序列化后的JSON字节数组
- error: 如果发生错误,返回错误信息
func (AddrInfo) String ¶
String 实现 fmt.Stringer 接口,返回 AddrInfo 的字符串表示 返回值:
- string: 包含节点ID和地址列表的格式化字符串
func (*AddrInfo) UnmarshalJSON ¶
UnmarshalJSON 从JSON数据反序列化创建AddrInfo实例 参数:
- b: []byte JSON格式的字节数组
返回值:
- error: 如果发生错误,返回错误信息
type ID ¶
type ID string
ID 是 dep2p 对等节点标识
对等节点 ID 通过对节点的公钥进行哈希并将哈希输出编码为 multihash 来派生 详见 IDFromPublicKey
func AddrInfosToIDs ¶
AddrInfosToIDs 从 AddrInfo 切片中提取对等节点ID列表 参数:
- pis: []AddrInfo AddrInfo 结构体切片
返回值:
- []ID: 按顺序提取的对等节点ID切片
func Decode ¶
Decode 接受编码的对等节点 ID 并在输入有效时返回解码后的 ID
编码的对等节点 ID 可以是密钥的 CID 或原始 multihash (identity 或 sha256-256) 参数:
- s: string 要解码的对等节点 ID 字符串
返回值:
- ID: 解码后的对等节点 ID
- error: 如果发生错误,返回错误信息
func FromCid ¶
FromCid 将 CID 转换为对等节点 ID 参数:
- c: cid.Cid 要转换的 CID
返回值:
- ID: 转换后的对等节点 ID
- error: 如果发生错误,返回错误信息
func IDFromBytes ¶
IDFromBytes 将字节切片转换为 ID 类型,并验证该值是否为 multihash 参数:
- b: []byte 要转换的字节切片
返回值:
- ID: 转换后的对等节点 ID
- error: 如果发生错误,返回错误信息
func IDFromP2PAddr ¶
IDFromP2PAddr 从 p2p 多地址中提取对等节点ID 参数:
- m: ma.Multiaddr p2p 多地址
返回值:
- ID: 提取的对等节点ID
- error: 如果地址无效则返回错误
func IDFromPrivateKey ¶
IDFromPrivateKey 返回与私钥 sk 对应的对等节点 ID 参数:
- sk: ic.PrivKey 用于生成对等节点 ID 的私钥
返回值:
- ID: 生成的对等节点 ID
- error: 如果发生错误,返回错误信息
func IDFromPublicKey ¶
IDFromPublicKey 返回与公钥 pk 对应的对等节点 ID 参数:
- pk: ic.PubKey 用于生成对等节点 ID 的公钥
返回值:
- ID: 生成的对等节点 ID
- error: 如果发生错误,返回错误信息
func SplitAddr ¶
SplitAddr 将 p2p 多地址分割为传输地址和对等节点ID 参数:
- m: ma.Multiaddr 要分割的多地址
返回值:
- transport: ma.Multiaddr 传输地址部分,如果地址仅包含 p2p 部分则返回 nil
- id: ID 对等节点ID,如果地址不包含 p2p 部分则返回空字符串
func (ID) ExtractPublicKey ¶
ExtractPublicKey 尝试从 ID 中提取公钥
如果对等节点 ID 看起来有效但无法提取公钥,此方法返回 ErrNoPublicKey 返回值:
- ic.PubKey: 提取的公钥
- error: 如果发生错误,返回错误信息
func (ID) Loggable ¶
Loggable 返回格式化的对等节点 ID 字符串,用于日志记录 返回值:
- map[string]interface{}: 包含格式化后的对等节点 ID 的映射
func (ID) MarshalBinary ¶
MarshalBinary 返回 peer ID 的二进制表示 返回值:
- []byte: peer ID 的二进制表示
- error: 如果发生错误,返回错误信息
func (ID) MarshalJSON ¶
MarshalJSON 将 peer ID 序列化为 JSON 格式 返回值:
- []byte: JSON 格式的字节切片
- error: 如果发生错误,返回错误信息
func (ID) MarshalTo ¶
MarshalTo 将 peer ID 序列化并写入指定的字节切片 参数:
- data: []byte 目标字节切片
返回值:
- n: int 写入的字节数
- err: error 如果发生错误,返回错误信息
func (ID) MatchesPrivateKey ¶
MatchesPrivateKey 测试此 ID 是否由私钥 sk 派生 参数:
- sk: ic.PrivKey 要测试的私钥
返回值:
- bool: 如果 ID 与私钥匹配返回 true,否则返回 false
func (ID) MatchesPublicKey ¶
MatchesPublicKey 测试此 ID 是否由公钥 pk 派生 参数:
- pk: ic.PubKey 要测试的公钥
返回值:
- bool: 如果 ID 与公钥匹配返回 true,否则返回 false
func (ID) ShortString ¶
ShortString 打印对等节点 ID 的简短形式
TODO(brian): 确保 ID 生成的正确性,并通过只暴露安全生成 ID 的函数来强制执行 这样代码库中的任何 peer.ID 类型都可以确保是正确的 返回值:
- string: 对等节点 ID 的简短字符串表示
func (*ID) Unmarshal ¶
Unmarshal 从字节切片反序列化并设置 peer ID 参数:
- data: []byte 包含 peer ID 数据的字节切片
返回值:
- error: 如果发生错误,返回错误信息
func (*ID) UnmarshalBinary ¶
UnmarshalBinary 从二进制表示设置 peer ID 参数:
- data: []byte peer ID 的二进制表示
返回值:
- error: 如果发生错误,返回错误信息
func (*ID) UnmarshalJSON ¶
UnmarshalJSON 从 JSON 格式反序列化并设置 peer ID 参数:
- data: []byte JSON 格式的字节切片
返回值:
- error: 如果发生错误,返回错误信息
func (*ID) UnmarshalText ¶
UnmarshalText 从文本编码恢复 peer ID 参数:
- data: []byte peer ID 的文本编码
返回值:
- error: 如果发生错误,返回错误信息
type IDSlice ¶
type IDSlice []ID
IDSlice 用于对等节点排序的切片类型
func (IDSlice) Less ¶
Less 比较切片中的两个元素 参数:
- i: int 第一个元素的索引
- j: int 第二个元素的索引
返回值:
- bool: 如果第一个元素小于第二个元素返回 true
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: 如果发生错误,返回错误信息