Class VersionMessage
- java.lang.Object
-
- org.bitcoinj.core.BaseMessage
-
- org.bitcoinj.core.VersionMessage
-
- All Implemented Interfaces:
Message
public class VersionMessage extends BaseMessage
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
Fields Modifier and Type Field Description long
bestHeight
How many blocks are in the chain, according to the other side.static java.lang.String
BITCOINJ_VERSION
The version of this library release, as a string.int
clientVersion
The version number of the protocol spoken.static java.lang.String
LIBRARY_SUBVER
The value that is prepended to the subVer field of this application.Services
localServices
Flags defining what optional services are supported.java.net.InetSocketAddress
receivingAddr
The network address of the receiving node as perceived by the transmitting nodeServices
receivingServices
The services supported by the receiving node as perceived by the transmitting node.boolean
relayTxesBeforeFilter
Whether or not to relay tx invs before a filter is received.java.lang.String
subVer
User-Agent as defined in BIP 14.java.time.Instant
time
What the other side believes the current time to be.
-
Constructor Summary
Constructors Constructor Description VersionMessage(NetworkParameters params, int bestHeight)
Construct own version message from givenNetworkParameters
and our best height of the chain.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description void
appendToSubVer(java.lang.String name, java.lang.String version, java.lang.String comments)
Appends the given user-agent information to the subVer field.void
bitcoinSerializeToStream(java.io.OutputStream buf)
Serializes this message to the provided stream.int
clientVersion()
Gets the client version.VersionMessage
duplicate()
boolean
equals(java.lang.Object o)
int
hashCode()
boolean
isPingPongSupported()
static VersionMessage
read(java.nio.ByteBuffer payload)
Deserialize this message from a given payload.Services
services()
Get the service bitfield that represents the node services being provided.java.lang.String
toString()
-
Methods inherited from class org.bitcoinj.core.BaseMessage
messageSize, serialize
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.bitcoinj.core.Message
bitcoinSerialize, getMessageSize, unsafeBitcoinSerialize
-
-
-
-
Field Detail
-
BITCOINJ_VERSION
public static final java.lang.String BITCOINJ_VERSION
The version of this library release, as a string.- See Also:
- Constant Field Values
-
LIBRARY_SUBVER
public static final java.lang.String LIBRARY_SUBVER
The value that is prepended to the subVer field of this application.- See Also:
- Constant Field Values
-
clientVersion
public int clientVersion
The version number of the protocol spoken.
-
localServices
public Services localServices
Flags defining what optional services are supported.
-
time
public java.time.Instant time
What the other side believes the current time to be.
-
receivingServices
public Services receivingServices
The services supported by the receiving node as perceived by the transmitting node.
-
receivingAddr
public java.net.InetSocketAddress receivingAddr
The network address of the receiving node as perceived by the transmitting node
-
subVer
public java.lang.String subVer
User-Agent as defined in BIP 14. Bitcoin Core sets it to something like "/Satoshi:0.9.1/".
-
bestHeight
public long bestHeight
How many blocks are in the chain, according to the other side.
-
relayTxesBeforeFilter
public boolean relayTxesBeforeFilter
Whether or not to relay tx invs before a filter is received. See BIP 37.
-
-
Constructor Detail
-
VersionMessage
public VersionMessage(NetworkParameters params, int bestHeight)
Construct own version message from givenNetworkParameters
and our best height of the chain.- Parameters:
params
- network parameters to construct own version message frombestHeight
- our best height to announce
-
-
Method Detail
-
read
public static VersionMessage read(java.nio.ByteBuffer payload) throws java.nio.BufferUnderflowException, ProtocolException
Deserialize this message from a given payload.- Parameters:
payload
- payload to deserialize from- Returns:
- read message
- Throws:
java.nio.BufferUnderflowException
- if the read message extends beyond the remaining bytes of the payloadProtocolException
-
clientVersion
public int clientVersion()
Gets the client version.- Returns:
- client version
-
services
public Services services()
Get the service bitfield that represents the node services being provided.- Returns:
- service bitfield
-
bitcoinSerializeToStream
public void bitcoinSerializeToStream(java.io.OutputStream buf) throws java.io.IOException
Description copied from class:BaseMessage
Serializes this message to the provided stream. If you just want the raw bytes use bitcoinSerialize().- Specified by:
bitcoinSerializeToStream
in classBaseMessage
- Throws:
java.io.IOException
-
equals
public boolean equals(java.lang.Object o)
- Overrides:
equals
in classjava.lang.Object
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
duplicate
public VersionMessage duplicate()
-
appendToSubVer
public void appendToSubVer(java.lang.String name, java.lang.String version, @Nullable java.lang.String comments)
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:
java.lang.IllegalArgumentException
- if name, version or comments contains invalid characters.
-
isPingPongSupported
@Deprecated public boolean isPingPongSupported()
-
-