enr

package
v0.0.0-...-92cc422 Latest Latest
Warning

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

Go to latest
Published: Jan 21, 2019 License: GPL-3.0 Imports: 12 Imported by: 0

Documentation

Overview

包ENR实现EIP-778中定义的以太坊节点记录。节点记录保留 有关对等网络上节点的任意信息。

记录包含命名键。要在记录中存储和检索键/值,请使用条目 接口。

在将记录传输到另一个节点之前,必须对它们进行签名。解码记录验证 它的签名。创建记录时,设置所需条目,然后调用sign添加 签名。修改记录会使签名失效。

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

Index

Constants

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

Variables

This section is empty.

Functions

func IsNotFound

func IsNotFound(err error) bool

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

func RegisterIdentityScheme

func RegisterIdentityScheme(name string, scheme IdentityScheme)

RegisterIdentityScheme向全局注册表添加标识方案。

func SignV4

func SignV4(r *Record, privkey *ecdsa.PrivateKey) error

signv4使用v4方案对记录进行签名。

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
}

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

func FindIdentityScheme

func FindIdentityScheme(name string) IdentityScheme

findidentityScheme将名称解析为全局注册表中的标识方案。

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) Load

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

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

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

func (*Record) NodeAddr

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

nodeadr返回节点地址。如果记录是 未签名或使用未知的标识方案。

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(idscheme string, sig []byte) error

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

func (*Record) Signed

func (r *Record) Signed() bool

签名报告记录是否具有有效签名。

type Secp256k1

type Secp256k1 ecdsa.PublicKey

secp256k1是保存公钥的“secp256k1”密钥。

func (*Secp256k1) DecodeRLP

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

decoderlp实现rlp.decoder。

func (Secp256k1) ENRKey

func (v Secp256k1) ENRKey() string

func (Secp256k1) EncodeRLP

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

encoderlp实现rlp.encoder。

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