ipns

package
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: 25 Imported by: 0

Documentation

Index

Constants

View Source
const (

	// DefaultRecordLifetime IPNS记录在ValidityType为0时的有效期
	// 此默认值旨在匹配Amino DHT的记录过期窗口
	DefaultRecordLifetime = 48 * time.Hour

	// DefaultRecordTTL 指定记录在再次检查更新之前可以从缓存返回的时间
	// 此TTL的功能类似于DNS记录的TTL,这里的默认值是在更快的更新和利用各种类型的缓存之间的权衡
	DefaultRecordTTL = 1 * time.Hour
)
View Source
const MaxRecordSize int = 10 << (10 * 1)

MaxRecordSize 是IPNS记录的大小限制

View Source
const (
	// NamespacePrefix 是 IPNS 命名空间的前缀
	NamespacePrefix = "/ipns/"
)

Variables

View Source
var ErrDataMissing = errors.New("记录缺少dag-cbor数据字段")

ErrDataMissing 当IPNS[记录]缺少数据字段时返回此错误

View Source
var ErrExpiredRecord = errors.New("记录已过期")

ErrExpiredRecord 当IPNS[记录]因过期而无效时返回此错误

View Source
var ErrInvalidName = errors.New("名称无效")

ErrInvalidName 当IPNS[名称]无效时返回此错误

View Source
var ErrInvalidPath = errors.New("值不是有效的内容路径")

ErrInvalidPath 当IPNS[记录]具有无效路径时返回此错误

View Source
var ErrInvalidPublicKey = errors.New("公钥无效")

ErrInvalidPublicKey 当IPNS[记录]具有无效的公钥时返回此错误

View Source
var ErrInvalidRecord = errors.New("记录格式错误")

ErrInvalidRecord 当IPNS[记录]格式错误时返回此错误

View Source
var ErrInvalidValidity = errors.New("记录包含无效的有效性")

ErrInvalidValidity 当IPNS[记录]具有已知的有效性类型但值无效时返回此错误

View Source
var ErrPublicKeyMismatch = errors.New("记录公钥与预期的公钥不匹配")

ErrPublicKeyMismatch 当IPNS[记录]中嵌入的公钥与预期的公钥不匹配时返回此错误

View Source
var ErrPublicKeyNotFound = errors.New("找不到公钥")

ErrPublicKeyNotFound 当找不到公钥时返回此错误

View Source
var ErrRecordSize = errors.New("记录超过允许的大小限制")

ErrRecordSize 当IPNS[记录]超过最大大小时返回此错误

View Source
var ErrSignature = errors.New("签名验证失败")

ErrSignature 当IPNS[记录]签名验证失败时返回此错误

View Source
var ErrUnrecognizedValidity = errors.New("记录包含无法识别的有效性类型")

ErrUnrecognizedValidity 当IPNS[记录]包含未知的有效性类型时返回此错误

Functions

func ExtractPublicKey

func ExtractPublicKey(rec *Record, name Name) (ic.PubKey, error)

ExtractPublicKey 从 IPNS 记录中提取与给定名称匹配的公钥(如果可能)。

参数:

  • rec: *Record IPNS 记录
  • name: Name 名称

返回值:

  • ic.PubKey: 提取的公钥
  • error: 错误信息

func MarshalRecord

func MarshalRecord(rec *Record) ([]byte, error)

MarshalRecord 将给定的 IPNS 记录编码为 Protobuf 序列化格式。

参数:

  • rec: *Record 要序列化的记录

返回值:

  • []byte: 序列化后的数据
  • error: 错误信息

func Validate

func Validate(rec *Record, pk ic.PubKey) error

Validate 根据给定的公钥验证 IPNS Record,遵循 Record 验证规范 参数:

  • rec: *Record IPNS记录
  • pk: ic.PubKey 公钥

返回值:

  • error 错误信息

func ValidateWithName

func ValidateWithName(rec *Record, name Name) error

ValidateWithName 使用给定的 Name 验证 IPNS Record 参数:

  • rec: *Record IPNS记录
  • name: Name IPNS名称

返回值:

  • error 错误信息

Types

type Name

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

Name 表示根据 IPNS 名称规范序列化的公钥的多重哈希值

参考: - 多重哈希: https://multiformats.io/multihash/ - IPNS 名称: https://specs.ipfs.tech/ipns/ipns-record/#ipns-name

func NameFromCid

func NameFromCid(c cid.Cid) (Name, error)

NameFromCid 从给定的 CID 创建 IPNS 名称

参数:

  • c: cid.Cid 内容标识符

返回值:

  • Name IPNS 名称对象
  • error 错误信息

func NameFromPeer

func NameFromPeer(pid peer.ID) Name

NameFromPeer 从给定的对等节点 ID 创建 IPNS 名称

参数:

  • pid: peer.ID 对等节点 ID

返回值:

  • Name IPNS 名称对象

func NameFromRoutingKey

func NameFromRoutingKey(data []byte) (Name, error)

NameFromRoutingKey 从给定的路由键表示形式创建 IPNS 名称。更多信息请参见 Name.RoutingKey

参数:

  • data: []byte 路由键数据

返回值:

  • Name IPNS 名称对象
  • error 错误信息

func NameFromString

func NameFromString(str string) (Name, error)

NameFromString 从给定的字符串表示形式创建 IPNS 名称

参数:

  • str: string IPNS 名称的字符串表示

返回值:

  • Name IPNS 名称对象
  • error 错误信息

func (Name) AsPath

func (n Name) AsPath() path.Path

AsPath 将 IPNS 名称转换为以 path.IPNSNamespace 为前缀的路径

返回值:

  • path.Path IPNS 路径

func (Name) Cid

func (n Name) Cid() cid.Cid

Cid 将 IPNS 名称编码为公钥的 CID 如果 IPNS 名称无效(例如为空),将返回未定义的 CID

返回值:

  • cid.Cid 内容标识符

func (Name) Equal

func (n Name) Equal(other Name) bool

Equal 返回两个记录是否相等

参数:

  • other: Name 另一个 IPNS 名称

返回值:

  • bool 是否相等

func (Name) MarshalJSON

func (n Name) MarshalJSON() ([]byte, error)

MarshalJSON 实现 json.Marshaler 接口 IPNS 名称将使用 Name.String 序列化为字符串

返回值:

  • []byte JSON 数据
  • error 错误信息

func (Name) Peer

func (n Name) Peer() peer.ID

Peer 将 IPNS 名称转换为对等节点 ID

返回值:

  • peer.ID 对等节点 ID

func (Name) RoutingKey

func (n Name) RoutingKey() []byte

RoutingKey 返回给定 IPNS 名称的二进制路由键。注意,此函数仅用于路由目的。 此函数的输出是二进制的,不可读。如需人类可读的字符串,请参见 Name.Key。

返回值:

  • []byte 路由键数据

func (Name) String

func (n Name) String() string

String 返回人类可读的 IPNS 名称,使用 libp2p-key 多重编解码器 (0x72) 和不区分大小写的 Base36 编码为 CIDv1

返回值:

  • string IPNS 名称的字符串表示

func (*Name) UnmarshalJSON

func (n *Name) UnmarshalJSON(b []byte) error

UnmarshalJSON 实现 json.Unmarshaler 接口。IPNS 名称将通过 NameFromString 从字符串解析

参数:

  • b: []byte JSON 数据

返回值:

  • error 错误信息

type Option

type Option func(*options)

func WithPublicKey

func WithPublicKey(embedded bool) Option

WithPublicKey 设置是否嵌入公钥。

参数:

  • embedded: bool 是否嵌入

返回值:

  • Option: 选项函数

func WithV1Compatibility

func WithV1Compatibility(compatible bool) Option

WithV1Compatibility 设置是否兼容 V1 版本。

参数:

  • compatible: bool 是否兼容

返回值:

  • Option: 选项函数

type Record

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

Record 表示一个 IPNS 记录。

func NewRecord

func NewRecord(sk ic.PrivKey, value path.Path, seq uint64, eol time.Time, ttl time.Duration, opts ...Option) (*Record, error)

NewRecord 创建一个新的 IPNS 记录并使用给定的私钥签名。 默认情况下,我们会为那些对等点 ID 不编码公钥的密钥类型(如 RSA 和 ECDSA)嵌入公钥。这可以通过 WithPublicKey 选项更改。 此外,默认情况下会创建兼容 V1 的记录。

参数:

  • sk: ic.PrivKey 私钥
  • value: path.Path 路径值
  • seq: uint64 序列号
  • eol: time.Time 过期时间
  • ttl: time.Duration 生存时间
  • opts: ...Option 选项列表

返回值:

  • *Record: 创建的记录
  • error: 错误信息

func UnmarshalRecord

func UnmarshalRecord(data []byte) (*Record, error)

UnmarshalRecord 将 Protobuf 序列化的 IPNS 记录解析为可用的 Record 结构体。 请注意,此函数不执行记录的完整验证。要进行验证请使用 Validate。

参数:

  • data: []byte 序列化的记录数据

返回值:

  • *Record: 解析后的记录
  • error: 错误信息

func (*Record) PubKey

func (rec *Record) PubKey() (ic.PubKey, error)

PubKey 返回记录的公钥。

返回值:

  • ic.PubKey: 公钥
  • error: 错误信息

func (*Record) Sequence

func (rec *Record) Sequence() (uint64, error)

Sequence 返回记录的序列号。

返回值:

  • uint64: 序列号
  • error: 错误信息

func (*Record) TTL

func (rec *Record) TTL() (time.Duration, error)

TTL 返回记录的生存时间。

返回值:

  • time.Duration: 生存时间
  • error: 错误信息

func (*Record) Validity

func (rec *Record) Validity() (time.Time, error)

Validity 返回 IPNS 记录的有效期。如果记录的有效性类型不是 EOL,此函数返回 ErrUnrecognizedValidity。 否则,如果无法解析 EOL,则返回错误。

返回值:

  • time.Time: 有效期时间
  • error: 错误信息

func (*Record) ValidityType

func (rec *Record) ValidityType() (ValidityType, error)

ValidityType 返回记录的有效性类型。

返回值:

  • ValidityType: 有效性类型
  • error: 错误信息

func (*Record) Value

func (rec *Record) Value() (path.Path, error)

Value 返回此 IPNS 记录中嵌入的 path.Path。 如果路径无效,将返回 ErrInvalidPath。

返回值:

  • path.Path: 记录中的路径
  • error: 错误信息

type Validator

type Validator struct {
	// KeyBook 如果非空,用于查找验证 IPNS 记录的密钥
	KeyBook peerstore.KeyBook
}

Validator 是一个满足 Libp2p record.Validator 接口的 IPNS 记录验证器

func (Validator) Select

func (v Validator) Select(k string, vals [][]byte) (int, error)

Select 通过检查序列号最高和有效期最新来选择最佳记录 如果任何记录解析失败,此函数将返回错误 此函数不验证记录。调用者负责使用 Validate 确保记录有效 参数:

  • k: string 键
  • vals: [][]byte 记录值列表

返回值:

  • int 选中的记录索引
  • error 错误信息

func (Validator) Validate

func (v Validator) Validate(key string, value []byte) error

Validate 验证 IPNS 记录 参数:

  • key: string 路由键
  • value: []byte 记录值

返回值:

  • error 错误信息

type ValidityType

type ValidityType int64
const ValidityEOL ValidityType = 0

ValidityEOL 表示"此记录在{Validity}之前有效"。这是目前唯一支持的有效性类型。

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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