Documentation ¶
Overview ¶
package peer implements an object used to represent peers in the ipfs network.
Index ¶
- Constants
- Variables
- func IDB58Encode(id ID) string
- func IDHexEncode(id ID) string
- type AddrBook
- type AddrManager
- func (mgr *AddrManager) AddAddr(p ID, addr ma.Multiaddr, ttl time.Duration)
- func (mgr *AddrManager) AddAddrs(p ID, addrs []ma.Multiaddr, ttl time.Duration)
- func (mgr *AddrManager) Addrs(p ID) []ma.Multiaddr
- func (mgr *AddrManager) ClearAddrs(p ID)
- func (mgr *AddrManager) Peers() []ID
- func (mgr *AddrManager) SetAddr(p ID, addr ma.Multiaddr, ttl time.Duration)
- func (mgr *AddrManager) SetAddrs(p ID, addrs []ma.Multiaddr, ttl time.Duration)
- type ID
- type IDSlice
- type KeyBook
- type Metrics
- type PeerInfo
- type Peerstore
- type Set
Constants ¶
const ( // TempAddrTTL is the ttl used for a short lived address TempAddrTTL = time.Second * 10 // ProviderAddrTTL is the TTL of an address we've received from a provider. // This is also a temporary address, but lasts longer. After this expires, // the records we return will require an extra lookup. ProviderAddrTTL = time.Minute * 10 // RecentlyConnectedAddrTTL is used when we recently connected to a peer. // It means that we are reasonably certain of the peer's address. RecentlyConnectedAddrTTL = time.Minute * 10 // OwnObservedAddrTTL is used for our own external addresses observed by peers. OwnObservedAddrTTL = time.Minute * 10 // PermanentAddrTTL is the ttl for a "permanent address" (e.g. bootstrap nodes) // if we haven't shipped you an update to ipfs in 356 days // we probably arent running the same bootstrap nodes... PermanentAddrTTL = time.Hour * 24 * 356 // ConnectedAddrTTL is the ttl used for the addresses of a peer to whom // we're connected directly. This is basically permanent, as we will // clear them + re-add under a TempAddrTTL after disconnecting. ConnectedAddrTTL = PermanentAddrTTL )
const ( // AddressTTL is the expiration time of addresses. AddressTTL = time.Hour )
Variables ¶
var LatencyEWMASmoothing = 0.1
LatencyEWMASmooting governs the decay of the EWMA (the speed at which it changes). This must be a normalized (0-1) value. 1 is 100% change, 0 is no change.
Functions ¶
Types ¶
type AddrBook ¶
type AddrBook interface { // AddAddr calls AddAddrs(p, []ma.Multiaddr{addr}, ttl) AddAddr(p ID, addr ma.Multiaddr, ttl time.Duration) // AddAddrs gives AddrManager addresses to use, with a given ttl // (time-to-live), after which the address is no longer valid. // If the manager has a longer TTL, the operation is a no-op for that address AddAddrs(p ID, addrs []ma.Multiaddr, ttl time.Duration) // SetAddr calls mgr.SetAddrs(p, addr, ttl) SetAddr(p ID, addr ma.Multiaddr, ttl time.Duration) // SetAddrs sets the ttl on addresses. This clears any TTL there previously. // This is used when we receive the best estimate of the validity of an address. SetAddrs(p ID, addrs []ma.Multiaddr, ttl time.Duration) // Addresses returns all known (and valid) addresses for a given Addrs(p ID) []ma.Multiaddr // ClearAddresses removes all previously stored addresses ClearAddrs(p ID) }
AddrBook is an interface that fits the new AddrManager. I'm patching it up in here to avoid changing a ton of the codebase.
type AddrManager ¶
type AddrManager struct {
// contains filtered or unexported fields
}
AddrManager manages addresses. The zero-value is ready to be used.
func (*AddrManager) AddAddrs ¶
AddAddrs gives AddrManager addresses to use, with a given ttl (time-to-live), after which the address is no longer valid. If the manager has a longer TTL, the operation is a no-op for that address
func (*AddrManager) Addrs ¶
func (mgr *AddrManager) Addrs(p ID) []ma.Multiaddr
Addresses returns all known (and valid) addresses for a given
func (*AddrManager) ClearAddrs ¶
func (mgr *AddrManager) ClearAddrs(p ID)
ClearAddresses removes all previously stored addresses
func (*AddrManager) Peers ¶
func (mgr *AddrManager) Peers() []ID
type ID ¶
type ID string
ID represents the identity of a peer.
func IDFromBytes ¶
IDFromBytes cast a string to ID type, and validate the id to make sure it is a multihash.
func IDFromPrivateKey ¶
IDFromPrivateKey returns the Peer ID corresponding to sk
func IDFromPublicKey ¶
IDFromPublicKey returns the Peer ID corresponding to pk
func IDFromString ¶
IDFromString cast a string to ID type, and validate the id to make sure it is a multihash.
func PeerInfoIDs ¶
func (ID) MatchesPrivateKey ¶
MatchesPrivateKey tests whether this ID was derived from sk
func (ID) MatchesPublicKey ¶
MatchesPublicKey tests whether this ID was derived from pk
type KeyBook ¶
type KeyBook interface { PubKey(ID) ic.PubKey AddPubKey(ID, ic.PubKey) error PrivKey(ID) ic.PrivKey AddPrivKey(ID, ic.PrivKey) error }
KeyBook tracks the Public keys of Peers.
type Metrics ¶
type Metrics interface { // RecordLatency records a new latency measurement RecordLatency(ID, time.Duration) // LatencyEWMA returns an exponentially-weighted moving avg. // of all measurements of a peer's latency. LatencyEWMA(ID) time.Duration }
Metrics is just an object that tracks metrics across a set of peers.
func NewMetrics ¶
func NewMetrics() Metrics
type PeerInfo ¶
PeerInfo is a small struct used to pass around a peer with a set of addresses (and later, keys?). This is not meant to be a complete view of the system, but rather to model updates to the peerstore. It is used by things like the routing system.
func (*PeerInfo) MarshalJSON ¶
func (*PeerInfo) UnmarshalJSON ¶
type Peerstore ¶
type Peerstore interface { AddrBook KeyBook Metrics // Peers returns a list of all peer.IDs in this Peerstore Peers() []ID // PeerInfo returns a peer.PeerInfo struct for given peer.ID. // This is a small slice of the information Peerstore has on // that peer, useful to other services. PeerInfo(ID) PeerInfo // Get/Put is a simple registry for other peer-related key/value pairs. // if we find something we use often, it should become its own set of // methods. this is a last resort. Get(id ID, key string) (interface{}, error) Put(id ID, key string, val interface{}) error }
Peerstore provides a threadsafe store of Peer related information.
func NewPeerstore ¶
func NewPeerstore() Peerstore
NewPeerstore creates a threadsafe collection of peers.