Documentation ¶
Overview ¶
Package enr implements Ethereum Node Records as defined in EIP-778. A node record holds arbitrary information about a node on the peer-to-peer network.
Records contain named keys. To store and retrieve key/values in a record, use the Entry interface.
Records must be signed before transmitting them to another node. Decoding a record verifies its signature. When creating a record, set the entries you want, then call Sign to add the signature. Modifying a record invalidates the signature.
Package enr supports the "secp256k1-keccak" identity scheme.
Index ¶
- Constants
- func IsNotFound(err error) bool
- type DiscPort
- type Entry
- type ID
- type IP4
- type IP6
- type KeyError
- type Record
- func (r *Record) DecodeRLP(s *rlp.Stream) error
- func (r Record) EncodeRLP(w io.Writer) error
- func (r *Record) Load(e Entry) error
- func (r *Record) NodeAddr() []byte
- func (r *Record) Seq() uint64
- func (r *Record) Set(e Entry)
- func (r *Record) SetSeq(s uint64)
- func (r *Record) Sign(privkey *ecdsa.PrivateKey) error
- func (r *Record) Signed() bool
- type Secp256k1
Constants ¶
const ID_SECP256k1_KECCAK = ID("secp256k1-keccak") // the default identity scheme
const SizeLimit = 300 // maximum encoded size of a node record in bytes
Variables ¶
This section is empty.
Functions ¶
func IsNotFound ¶
IsNotFound reports whether the given error means that a key/value pair is missing from a record.
Types ¶
type DiscPort ¶ added in v1.8.0
type DiscPort uint16
DiscPort is the "discv5" key, which holds the UDP port for discovery v5.
type Entry ¶
type Entry interface {
ENRKey() string
}
Entry is implemented by known node record entry types.
To define a new entry that is to be included in a node record, create a Go type that satisfies this interface. The type should also implement rlp.Decoder if additional checks are needed on the value.
type IP4 ¶ added in v1.8.0
IP4 is the "ip4" key, which holds a 4-byte IPv4 address.
type IP6 ¶ added in v1.8.0
IP6 is the "ip6" key, which holds a 16-byte IPv6 address.
type Record ¶
type Record struct {
// contains filtered or unexported fields
}
Record represents a node record. The zero value is an empty record.
func (Record) EncodeRLP ¶
EncodeRLP implements rlp.Encoder. Encoding fails if the record is unsigned.
func (*Record) Load ¶
Load retrieves the value of a key/value pair. The given Entry must be a pointer and will be set to the value of the entry in the record.
Errors returned by Load are wrapped in KeyError. You can distinguish decoding errors from missing keys using the IsNotFound function.
func (*Record) NodeAddr ¶ added in v1.8.0
NodeAddr returns the node address. The return value will be nil if the record is unsigned.
func (*Record) Set ¶
Set adds or updates the given entry in the record. It panics if the value can't be encoded.
func (*Record) SetSeq ¶
SetSeq updates the record sequence number. This invalidates any signature on the record. Calling SetSeq is usually not required because signing the redord increments the sequence number.
func (*Record) Sign ¶ added in v1.8.0
func (r *Record) Sign(privkey *ecdsa.PrivateKey) error
Sign signs the record with the given private key. It updates the record's identity scheme, public key and increments the sequence number. Sign returns an error if the encoded record is larger than the size limit.