Ecosyste.ms: Repos
An open API service providing repository metadata for many open source software ecosystems.
Package Usage: go: github.com/decred/dcrd/peer
Package peer provides a common base for creating and managing Decred network
peers.
This package builds upon the wire package, which provides the fundamental
primitives necessary to speak the Decred wire protocol, in order to simplify
the process of creating fully functional peers. In essence, it provides a
common base for creating concurrent safe fully validating nodes, Simplified
Payment Verification (SPV) nodes, proxies, etc.
A quick overview of the major features peer provides are as follows:
All peer configuration is handled with the Config struct. This allows the
caller to specify things such as the user agent name and version, the decred
network to use, which services it supports, and callbacks to invoke when decred
messages are received. See the documentation for each field of the Config
struct for more details.
A peer can either be inbound or outbound. The caller is responsible for
establishing the connection to remote peers and listening for incoming peers.
This provides high flexibility for things such as connecting via proxies, acting
as a proxy, creating bridge peers, choosing whether to listen for inbound peers,
etc.
NewOutboundPeer and NewInboundPeer functions must be followed by calling Connect
with a net.Conn instance to the peer. This will start all async I/O goroutines
and initiate the protocol negotiation process. Once finished with the peer call
Disconnect to disconnect from the peer and clean up all resources.
WaitForDisconnect can be used to block until peer disconnection and resource
cleanup has completed.
In order to do anything useful with a peer, it is necessary to react to decred
messages. This is accomplished by creating an instance of the MessageListeners
struct with the callbacks to be invoke specified and setting the Listeners field
of the Config struct specified when creating a peer to it.
For convenience, a callback hook for all of the currently supported decred
messages is exposed which receives the peer instance and the concrete message
type. In addition, a hook for OnRead is provided so even custom messages types
for which this package does not directly provide a hook, as long as they
implement the wire.Message interface, can be used. Finally, the OnWrite hook
is provided, which in conjunction with OnRead, can be used to track server-wide
byte counts.
It is often useful to use closures which encapsulate state when specifying the
callback handlers. This provides a clean method for accessing that state when
callbacks are invoked.
The QueueMessage function provides the fundamental means to send messages to the
remote peer. As the name implies, this employs a non-blocking queue. A done
channel which will be notified when the message is actually sent can optionally
be specified. There are certain message types which are better sent using other
functions which provide additional functionality.
Of special interest are inventory messages. Rather than manually sending MsgInv
messages via Queuemessage, the inventory vectors should be queued using the
QueueInventory function. It employs batching and trickling along with
intelligent known remote peer inventory detection and avoidance through the use
of a most-recently used algorithm.
In addition to the bare QueueMessage function previously described, the
PushAddrMsg, PushGetBlocksMsg, PushGetHeadersMsg, and PushRejectMsg functions
are provided as a convenience. While it is of course possible to create and
send these message manually via QueueMessage, these helper functions provided
additional useful functionality that is typically desired.
For example, the PushAddrMsg function automatically limits the addresses to the
maximum number allowed by the message and randomizes the chosen addresses when
there are too many. This allows the caller to simply provide a slice of known
addresses, such as that returned by the addrmgr package, without having to worry
about the details.
Next, the PushGetBlocksMsg and PushGetHeadersMsg functions will construct proper
messages using a block locator and ignore back to back duplicate requests.
Finally, the PushRejectMsg function can be used to easily create and send an
appropriate reject message based on the provided parameters as well as
optionally provides a flag to cause it to block until the message is actually
sent.
A snapshot of the current peer statistics can be obtained with the StatsSnapshot
function. This includes statistics such as the total number of bytes read and
written, the remote address, user agent, and negotiated protocol version.
This package provides extensive logging capabilities through the UseLogger
function which allows a slog.Logger to be specified. For example, logging at
the debug level provides summaries of every message sent and received, and
logging at the trace level provides full dumps of parsed messages as well as the
raw message bytes using a format similar to hexdump -C.
This package supports all improvement proposals supported by the wire package.
(https://godoc.org/github.com/decred/dcrd/wire#hdr-Bitcoin_Improvement_Proposals)
This example demonstrates the basic process for initializing and creating an
outbound peer. Peers negotiate by exchanging version and verack messages.
For demonstration, a simple handler for version message is attached to the
peer.
5 versions
Latest release: 12 months ago
24 dependent packages
View more package details: https://packages.ecosyste.ms/registries/proxy.golang.org/packages/github.com/decred/dcrd/peer
View more repository details: https://repos.ecosyste.ms/hosts/GitHub/repositories/decred%2Fdcrd
Dependent Repos 3
dcrnofficial/dcrnd
- v1.0.1 go.sum
Size: 26.3 MB - Last synced: 11 months ago - Pushed: over 1 year ago
jholdstock/dcrmapper
- v1.2.0 go.sum
Size: 338 KB - Last synced: about 2 months ago - Pushed: 12 months ago
levinobre/dcrd
Decred daemon in Go (golang).- v1.1.0 go.mod
- v1.0.1 go.sum
Last synced: over 1 year ago
braveheart12/Decred
- v1.1.0 go.mod
Size: 15.5 MB - Last synced: 10 months ago - Pushed: almost 5 years ago
btccom/dcrd
- v1.1.0 go.mod
- v1.0.1 go.sum
Size: 24.4 MB - Last synced: 9 months ago - Pushed: over 5 years ago
vctt94/dcr-tippin
- v0.0.0-20190306151227-8cbb5ae69df7 go.sum
Size: 1.53 MB - Last synced: 10 months ago - Pushed: almost 5 years ago
bxlkm/dcrd Fork of decred/dcrd
Decred daemon in Go (golang).- v1.1.0 go.mod
- v1.0.1 go.sum
Size: 25 MB - Last synced: 2 months ago - Pushed: over 5 years ago
AndreiPashyba/dcrd Fork of decred/dcrd
Decred daemon in Go (golang).- v1.1.0 go.mod
- v1.0.1 go.sum
Size: 24 MB - Last synced: 15 days ago - Pushed: 15 days ago