enr

package
v0.0.0-...-f8b7a73 Latest Latest
Warning

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

Go to latest
Published: Mar 16, 2019 License: GPL-3.0 Imports: 7 Imported by: 0

Documentation

Overview

包ENR实现EIP-778中定义的以太坊节点记录。节点记录保留 有关对等网络上节点的任意信息。节点信息是 存储在键/值对中。要在记录中存储和检索键/值,请使用条目 接口。

签名处理

在将记录传输到另一个节点之前,必须对它们进行签名。

解码记录不会检查其签名。使用来自的记录的代码 不受信任的源必须始终验证两件事:记录使用标识方案 被认为是安全的,并且根据声明的方案签名是有效的。

创建记录时,请设置所需条目并使用由提供的签名功能 要添加签名的标识方案。修改记录会使签名失效。

ENR包支持“secp256k1 keccak”身份方案。

Index

Constants

View Source
const IDv4 = ID("v4") //默认标识方案
View Source
const SizeLimit = 300 //节点记录的最大编码大小(字节)

Variables

View Source
var (
	ErrInvalidSig = errors.New("invalid signature on node record")
)

Functions

func IsNotFound

func IsNotFound(err error) bool

IsNotFound报告给定的错误是否意味着键/值对 记录中缺少。

Types

type Entry

type Entry interface {
	ENRKey() string
}

条目由已知的节点记录条目类型实现。

要定义要包含在节点记录中的新条目, 创建满足此接口的Go类型。类型应该 如果需要对值进行额外检查,还可以实现rlp.decoder。

func WithEntry

func WithEntry(k string, v interface{}) Entry

WithEntry用键名包装任何值。它可用于设置和加载任意值 在记录中。值v必须由rlp支持。要在加载时使用WithEntry,值 必须是指针。

type ID

type ID string

ID是“ID”键,它保存标识方案的名称。

func (ID) ENRKey

func (v ID) ENRKey() string

type IP

type IP net.IP

IP是“IP”密钥,它保存节点的IP地址。

func (*IP) DecodeRLP

func (v *IP) DecodeRLP(s *rlp.Stream) error

decoderlp实现rlp.decoder。

func (IP) ENRKey

func (v IP) ENRKey() string

func (IP) EncodeRLP

func (v IP) EncodeRLP(w io.Writer) error

encoderlp实现rlp.encoder。

type IdentityScheme

type IdentityScheme interface {
	Verify(r *Record, sig []byte) error
	NodeAddr(r *Record) []byte
}

标识方案能够验证记录签名和 派生节点地址。

type KeyError

type KeyError struct {
	Key string
	Err error
}

keyError是一个与键相关的错误。

func (*KeyError) Error

func (err *KeyError) Error() string

错误实现错误。

type Record

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

记录表示节点记录。零值是一个空记录。

func (*Record) AppendElements

func (r *Record) AppendElements(list []interface{}) []interface{}

AppendElements将序列号和条目追加到给定切片。

func (*Record) DecodeRLP

func (r *Record) DecodeRLP(s *rlp.Stream) error

decoderlp实现rlp.decoder。解码验证签名。

func (Record) EncodeRLP

func (r Record) EncodeRLP(w io.Writer) error

encoderlp实现rlp.encoder。编码失败,如果 记录未签名。

func (*Record) IdentityScheme

func (r *Record) IdentityScheme() string

IdentityScheme返回记录中标识方案的名称。

func (*Record) Load

func (r *Record) Load(e Entry) error

LOAD检索键/值对的值。给定的项必须是指针,并且将 设置为记录中条目的值。

加载返回的错误被包装在keyError中。您可以区分解码错误 使用isNotFound函数来消除丢失的键。

func (*Record) Seq

func (r *Record) Seq() uint64

seq返回序列号。

func (*Record) Set

func (r *Record) Set(e Entry)

set添加或更新记录中的给定项。如果值不能 编码的。如果记录已签名,则set将递增序列号并使其失效。 序列号。

func (*Record) SetSeq

func (r *Record) SetSeq(s uint64)

setseq更新记录序列号。这将使记录上的任何签名失效。 通常不需要调用setseq,因为在签名记录中设置了任何键 增加序列号。

func (*Record) SetSig

func (r *Record) SetSig(s IdentityScheme, sig []byte) error

setsig设置记录签名。如果编码的记录较大,则返回错误 大于大小限制或根据传递的方案签名无效。

也可以使用setsig通过传递nil方案显式删除签名。 签名。

当方案或签名(但不是两者)都为零时,setsig会恐慌。

func (*Record) VerifySignature

func (r *Record) VerifySignature(s IdentityScheme) error

VerifySignature检查记录是否使用给定的标识方案签名。

type SchemeMap

type SchemeMap map[string]IdentityScheme

schememap是命名标识方案的注册表。

func (SchemeMap) NodeAddr

func (m SchemeMap) NodeAddr(r *Record) []byte

func (SchemeMap) Verify

func (m SchemeMap) Verify(r *Record, sig []byte) error

type TCP

type TCP uint16

tcp是“tcp”密钥,它保存节点的tcp端口。

func (TCP) ENRKey

func (v TCP) ENRKey() string

type UDP

type UDP uint16

udp是“udp”密钥,它保存节点的udp端口。

func (UDP) ENRKey

func (v UDP) ENRKey() string

Jump to

Keyboard shortcuts

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