Class VersionMessage
A VersionMessage holds information exchanged during connection setup with another peer. Most of the fields are not particularly interesting. The subVer field, since BIP 14, acts as a User-Agent string would. You can and should append to or change the subVer for your own software so other implementations can identify it, and you can look at the subVer field received from other nodes to see what they are running.
After creating yourself a VersionMessage, you can pass it to PeerGroup.setVersionMessage(VersionMessage)
to ensure it will be used for each new connection.
Instances of this class are not safe for use by multiple threads.
-
Field Summary
Modifier and TypeFieldDescriptionlong
How many blocks are in the chain, according to the other side.static final String
The version of this library release, as a string.int
The version number of the protocol spoken.The network address of the node emitting this message.static final String
The value that is prepended to the subVer field of this application.long
Flags defining what optional services are supported.static final int
A service bit used by Bitcoin-ABC to announce Bitcoin Cash nodes.static final int
A service bit that denotes whether the peer supports BIP37 bloom filters or not.static final int
A service bit that denotes whether the peer supports the getutxos message or not.static final int
A service bit that denotes whether the peer has a full copy of the block chain or not.static final int
A service bit that denotes whether the peer has at least the last two days worth of blockchain (BIP159).static final int
Indicates that a node can be asked for blocks and transactions including witness data.The network address of the node receiving this message.boolean
Whether or not to relay tx invs before a filter is received.User-Agent as defined in BIP 14.long
What the other side believes the current time to be, in seconds.Fields inherited from class org.bitcoinj.core.Message
cursor, length, MAX_SIZE, offset, params, payload, recached, serializer, UNKNOWN_LENGTH
-
Constructor Summary
ConstructorDescriptionVersionMessage
(NetworkParameters params, byte[] payload) VersionMessage
(NetworkParameters params, int newBestHeight) -
Method Summary
Modifier and TypeMethodDescriptionvoid
appendToSubVer
(String name, String version, String comments) Appends the given user-agent information to the subVer field.void
Serializes this message to the provided stream.boolean
boolean
Returns true if the version message indicates the sender has a full copy of the block chain, or false if it's running in client mode (only has the headers).int
hashCode()
boolean
Returns true if the peer has at least the last two days worth of blockchain (BIP159).boolean
Returns true if the peer supports bloom filtering according to BIP37 and BIP111.boolean
Returns true if the protocol version and service bits both indicate support for the getutxos message.boolean
Returns true if the clientVersion field isNetworkParameters.ProtocolVersion.PONG
or higher.boolean
Returns true if a peer can be asked for blocks and transactions including witness data.protected void
parse()
toString()
static String
toStringServices
(long services) Methods inherited from class org.bitcoinj.core.Message
adjustLength, bitcoinSerialize, bitcoinSerialize, getHash, getMessageSize, getParams, hasMoreBytes, isCached, isRecached, readByte, readByteArray, readBytes, readHash, readInt64, readStr, readUint32, readUint64, readVarInt, readVarInt, setSerializer, unCache, unsafeBitcoinSerialize
-
Field Details
-
BITCOINJ_VERSION
The version of this library release, as a string.- See Also:
-
LIBRARY_SUBVER
The value that is prepended to the subVer field of this application.- See Also:
-
NODE_NETWORK
public static final int NODE_NETWORKA service bit that denotes whether the peer has a full copy of the block chain or not.- See Also:
-
NODE_GETUTXOS
public static final int NODE_GETUTXOSA service bit that denotes whether the peer supports the getutxos message or not.- See Also:
-
NODE_BLOOM
public static final int NODE_BLOOMA service bit that denotes whether the peer supports BIP37 bloom filters or not. The service bit is defined in BIP111.- See Also:
-
NODE_WITNESS
public static final int NODE_WITNESSIndicates that a node can be asked for blocks and transactions including witness data.- See Also:
-
NODE_NETWORK_LIMITED
public static final int NODE_NETWORK_LIMITEDA service bit that denotes whether the peer has at least the last two days worth of blockchain (BIP159).- See Also:
-
NODE_BITCOIN_CASH
public static final int NODE_BITCOIN_CASHA service bit used by Bitcoin-ABC to announce Bitcoin Cash nodes.- See Also:
-
clientVersion
public int clientVersionThe version number of the protocol spoken. -
localServices
public long localServicesFlags defining what optional services are supported. -
time
public long timeWhat the other side believes the current time to be, in seconds. -
receivingAddr
The network address of the node receiving this message. -
fromAddr
The network address of the node emitting this message. Not used. -
subVer
User-Agent as defined in BIP 14. Bitcoin Core sets it to something like "/Satoshi:0.9.1/". -
bestHeight
public long bestHeightHow many blocks are in the chain, according to the other side. -
relayTxesBeforeFilter
public boolean relayTxesBeforeFilterWhether or not to relay tx invs before a filter is received. See BIP 37.
-
-
Constructor Details
-
VersionMessage
- Throws:
ProtocolException
-
VersionMessage
-
-
Method Details
-
parse
- Specified by:
parse
in classMessage
- Throws:
ProtocolException
-
bitcoinSerializeToStream
Description copied from class:Message
Serializes this message to the provided stream. If you just want the raw bytes use bitcoinSerialize().- Overrides:
bitcoinSerializeToStream
in classMessage
- Throws:
IOException
-
equals
-
hashCode
public int hashCode() -
toString
-
duplicate
-
appendToSubVer
Appends the given user-agent information to the subVer field. The subVer is composed of a series of name:version pairs separated by slashes in the form of a path. For example a typical subVer field for bitcoinj users might look like "/bitcoinj:0.13/MultiBit:1.2/" where libraries come further to the left.
There can be as many components as you feel a need for, and the version string can be anything, but it is recommended to use A.B.C where A = major, B = minor and C = revision for software releases, and dates for auto-generated source repository snapshots. A valid subVer begins and ends with a slash, therefore name and version are not allowed to contain such characters.
Anything put in the "comments" field will appear in brackets and may be used for platform info, or anything else. For example, calling
appendToSubVer("MultiBit", "1.0", "Windows")
will result in a subVer being set of "/bitcoinj:1.0/MultiBit:1.0(Windows)/". Therefore the / ( and ) characters are reserved in all these components. If you don't want to add a comment (recommended), pass null.See BIP 14 for more information.
- Parameters:
comments
- Optional (can be null) platform or other node specific information.- Throws:
IllegalArgumentException
- if name, version or comments contains invalid characters.
-
isPingPongSupported
public boolean isPingPongSupported()Returns true if the clientVersion field isNetworkParameters.ProtocolVersion.PONG
or higher. If it is thenPeer.ping()
is usable. -
isBloomFilteringSupported
public boolean isBloomFilteringSupported()Returns true if the peer supports bloom filtering according to BIP37 and BIP111. -
isGetUTXOsSupported
public boolean isGetUTXOsSupported()Returns true if the protocol version and service bits both indicate support for the getutxos message. -
isWitnessSupported
public boolean isWitnessSupported()Returns true if a peer can be asked for blocks and transactions including witness data. -
hasBlockChain
public boolean hasBlockChain()Returns true if the version message indicates the sender has a full copy of the block chain, or false if it's running in client mode (only has the headers). -
hasLimitedBlockChain
public boolean hasLimitedBlockChain()Returns true if the peer has at least the last two days worth of blockchain (BIP159). -
toStringServices
-