Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
..
Failed to load latest commit information.
testdata wire: Add large tx deserialize benchmark. (#678) Apr 25, 2016
README.md wire: update compact filter messages to match wire.Message interface May 23, 2018
bench_test.go BIP0143+txscript: add segwit sighash, signing, and HashCache integration Aug 14, 2017
blockheader.go wire: typo in BlockHeader PrevBlock comment Feb 13, 2018
blockheader_test.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
common.go btcd/multi: fix a number of typos in comments. Jan 26, 2018
common_test.go chainhash: Abstract hash logic to new package. (#729) Aug 8, 2016
doc.go wire: implement feefilter message (bip0133) Oct 17, 2016
error.go Relicense to the btcsuite developers. May 1, 2015
fakemessage_test.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
fixedIO_test.go multi: Simplify code per gosimple linter. Mar 22, 2017
invvect.go BIP0144+wire: introduce new segregated witness inventory types Aug 14, 2017
invvect_test.go chainhash: Abstract hash logic to new package. (#729) Aug 8, 2016
message.go wire: Define CFCheckpt message. May 23, 2018
message_test.go wire: remove instances of the extended gcs filter Jul 6, 2018
msgaddr.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgaddr_test.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgalert.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgalert_test.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgblock.go BIP0144+wire: implement witness encoding/decoding for transactions Aug 14, 2017
msgblock_test.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgcfcheckpt.go wire/msgcfcheckpt: add sanity check for cf checkpoint parsing Aug 24, 2018
msgcfheaders.go multi: fix linter warnings May 23, 2018
msgcfilter.go wire: remove the extended filter Jul 6, 2018
msgfeefilter.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgfeefilter_test.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgfilteradd.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgfilteradd_test.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgfilterclear.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgfilterclear_test.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgfilterload.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgfilterload_test.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msggetaddr.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msggetaddr_test.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msggetblocks.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msggetblocks_test.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msggetcfcheckpt.go multi: fix linter warnings May 23, 2018
msggetcfheaders.go multi: fix linter warnings May 23, 2018
msggetcfilters.go multi: fix linter warnings May 23, 2018
msggetdata.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msggetdata_test.go btcd/multi: fix a number of typos in comments. Jan 26, 2018
msggetheaders.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msggetheaders_test.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgheaders.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgheaders_test.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msginv.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msginv_test.go btcd/multi: fix a number of typos in comments. Jan 26, 2018
msgmempool.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgmempool_test.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgmerkleblock.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgmerkleblock_test.go btcd/multi: fix a number of typos in comments. Jan 26, 2018
msgnotfound.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgnotfound_test.go btcd/multi: fix a number of typos in comments. Jan 26, 2018
msgping.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgping_test.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgpong.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgpong_test.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgreject.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgreject_test.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgsendheaders.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgsendheaders_test.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgtx.go multi: Rework utxoset/view to use outpoints. May 27, 2018
msgtx_test.go BIP0144+wire: implement witness encoding/decoding for transactions Aug 14, 2017
msgverack.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgverack_test.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgversion.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
msgversion_test.go BIP0144+wire: add a MessageEncoding variant for serialization/deseria… Aug 14, 2017
netaddress.go wire: Treat NetAddress more like immutable Dec 6, 2016
netaddress_test.go wire: Change NewNetAddress to accept a *net.TCPConn. Nov 4, 2016
protocol.go wire: update service bits for xthin, bit 5, cfilters, and segwit2x May 23, 2018
protocol_test.go wire: update service bits for xthin, bit 5, cfilters, and segwit2x May 23, 2018

README.md

wire

Build Status ISC License GoDoc

Package wire implements the bitcoin wire protocol. A comprehensive suite of tests with 100% test coverage is provided to ensure proper functionality.

There is an associated blog post about the release of this package here.

This package has intentionally been designed so it can be used as a standalone package for any projects needing to interface with bitcoin peers at the wire protocol level.

Installation and Updating

$ go get -u github.com/btcsuite/btcd/wire

Bitcoin Message Overview

The bitcoin protocol consists of exchanging messages between peers. Each message is preceded by a header which identifies information about it such as which bitcoin network it is a part of, its type, how big it is, and a checksum to verify validity. All encoding and decoding of message headers is handled by this package.

To accomplish this, there is a generic interface for bitcoin messages named Message which allows messages of any type to be read, written, or passed around through channels, functions, etc. In addition, concrete implementations of most of the currently supported bitcoin messages are provided. For these supported messages, all of the details of marshalling and unmarshalling to and from the wire using bitcoin encoding are handled so the caller doesn't have to concern themselves with the specifics.

Reading Messages Example

In order to unmarshal bitcoin messages from the wire, use the ReadMessage function. It accepts any io.Reader, but typically this will be a net.Conn to a remote node running a bitcoin peer. Example syntax is:

	// Use the most recent protocol version supported by the package and the
	// main bitcoin network.
	pver := wire.ProtocolVersion
	btcnet := wire.MainNet

	// Reads and validates the next bitcoin message from conn using the
	// protocol version pver and the bitcoin network btcnet.  The returns
	// are a wire.Message, a []byte which contains the unmarshalled
	// raw payload, and a possible error.
	msg, rawPayload, err := wire.ReadMessage(conn, pver, btcnet)
	if err != nil {
		// Log and handle the error
	}

See the package documentation for details on determining the message type.

Writing Messages Example

In order to marshal bitcoin messages to the wire, use the WriteMessage function. It accepts any io.Writer, but typically this will be a net.Conn to a remote node running a bitcoin peer. Example syntax to request addresses from a remote peer is:

	// Use the most recent protocol version supported by the package and the
	// main bitcoin network.
	pver := wire.ProtocolVersion
	btcnet := wire.MainNet

	// Create a new getaddr bitcoin message.
	msg := wire.NewMsgGetAddr()

	// Writes a bitcoin message msg to conn using the protocol version
	// pver, and the bitcoin network btcnet.  The return is a possible
	// error.
	err := wire.WriteMessage(conn, msg, pver, btcnet)
	if err != nil {
		// Log and handle the error
	}

GPG Verification Key

All official release tags are signed by Conformal so users can ensure the code has not been tampered with and is coming from the btcsuite developers. To verify the signature perform the following:

  • Download the public key from the Conformal website at https://opensource.conformal.com/GIT-GPG-KEY-conformal.txt

  • Import the public key into your GPG keyring:

    gpg --import GIT-GPG-KEY-conformal.txt
  • Verify the release tag with the following command where TAG_NAME is a placeholder for the specific tag:

    git tag -v TAG_NAME

License

Package wire is licensed under the copyfree ISC License.