Made relay flag in version message configurable (#3416)

* relay flag in version message made configurable

* modified test classes as well

* Update configuration.md

* reverted few files and cleaned up format

* fixed mistake
This commit is contained in:
Shruthii RG 2021-07-19 20:29:43 +05:30 committed by GitHub
parent b2b2ca45db
commit 1c6d728197
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 27 additions and 11 deletions

View file

@ -16,7 +16,7 @@ class NetworkPayloadTest extends BitcoinSUnitTest {
payload.commandName must be(NetworkPayload.versionCommandName)
val ipArr = Array(173.toByte, 31.toByte, 39.toByte, 168.toByte)
val inet = InetAddress(ipArr)
val testVersionMessage = VersionMessage(TestNet3, inet, inet)
val testVersionMessage = VersionMessage(TestNet3, inet, inet, relay = false)
payload.asInstanceOf[VersionMessage].addressReceiveIpAddress must be(
testVersionMessage.addressReceiveIpAddress)
payload.asInstanceOf[VersionMessage].addressReceivePort must be(

View file

@ -26,7 +26,7 @@ class VersionMessageTest extends BitcoinSUnitTest {
val ipArr = Array(173.toByte, 31.toByte, 39.toByte, 168.toByte)
val inet = InetAddress(ipArr)
val versionMessage = VersionMessage(MainNet, inet, inet)
val versionMessage = VersionMessage(MainNet, inet, inet, relay = false)
assert(versionMessage.addressReceiveServices.nodeNone)
versionMessage.addressReceiveIpAddress must be(inet)
versionMessage.addressReceivePort must be(MainNet.port)

View file

@ -1328,6 +1328,7 @@ trait VersionMessage extends ControlPayload {
// what do these fields mean?
override def toString(): String =
s"VersionMessage($version, $services, epoch=${timestamp.toLong}, receiverServices=${addressReceiveIpAddress.bytes.toHex}, receiverAddress=${addressReceiveIpAddress.bytes.toHex}, receiverPort=$addressReceivePort), userAgent=$userAgent, startHeight=${startHeight.toInt}, relay=$relay)"
}
/** @see https://bitcoin.org/en/developer-reference#version
@ -1391,12 +1392,14 @@ object VersionMessage extends Factory[VersionMessage] {
def apply(
network: NetworkParameters,
receivingIpAddress: InetAddress,
transmittingIpAddress: InetAddress): VersionMessage = {
transmittingIpAddress: InetAddress,
relay: Boolean): VersionMessage = {
VersionMessage(network,
ProtocolVersion.userAgent,
Int32.zero,
receivingIpAddress,
transmittingIpAddress)
transmittingIpAddress,
relay)
}
def apply(
@ -1404,9 +1407,9 @@ object VersionMessage extends Factory[VersionMessage] {
userAgent: String,
startHeight: Int32,
receivingIpAddress: InetAddress,
transmittingIpAddress: InetAddress): VersionMessage = {
transmittingIpAddress: InetAddress,
relay: Boolean): VersionMessage = {
val nonce = UInt64.zero
val relay = false
VersionMessage(
version = ProtocolVersion.default,
services = ServiceIdentifier.NODE_NONE,

View file

@ -163,6 +163,9 @@ bitcoin-s {
hikari-logging = true
hikari-logging-interval = 10 minute
# whether to have p2p peers relay us unconfirmed txs
relay = false
}
proxy {

View file

@ -106,6 +106,14 @@ case class NodeAppConfig(
}
}
lazy val relay: Boolean = {
if (config.hasPath("bitcoin-s.node.relay")) {
config.getBoolean("bitcoin-s.node.relay")
} else {
false
}
}
/** Creates either a neutrino node or a spv node based on the [[NodeAppConfig]] given */
def createNode(peer: Peer)(
chainConf: ChainAppConfig,

View file

@ -64,7 +64,8 @@ case class PeerMessageSender(client: P2PClient)(implicit conf: NodeAppConfig)
val versionMsg = VersionMessage(
conf.network,
InetAddress(client.peer.socket.getAddress.getAddress),
InetAddress(local.getAddress))
InetAddress(local.getAddress),
relay = conf.relay)
logger.trace(s"Sending versionMsg=$versionMsg to peer=${client.peer}")
sendMsg(versionMsg)
}
@ -78,9 +79,10 @@ case class PeerMessageSender(client: P2PClient)(implicit conf: NodeAppConfig)
"/Bitcoin-S:0.7.0/",
Int32(height),
InetAddress(localhost.getAddress),
InetAddress(localhost.getAddress))
InetAddress(localhost.getAddress),
conf.relay)
logger.trace(s"Sending versionMsg=$versionMsg to peer=${client.peer}")
logger.debug(s"Sending versionMsg=$versionMsg to peer=${client.peer}")
sendMsg(versionMsg)
}
}
@ -148,7 +150,7 @@ case class PeerMessageSender(client: P2PClient)(implicit conf: NodeAppConfig)
def sendTransactionMessage(transaction: Transaction): Future[Unit] = {
val message = TransactionMessage(transaction)
logger.trace(s"Sending txmessage=$message to peer=${client.peer}")
logger.debug(s"Sending txmessage=$message to peer=${client.peer}")
sendMsg(message)
}
@ -159,7 +161,7 @@ case class PeerMessageSender(client: P2PClient)(implicit conf: NodeAppConfig)
val inventories =
hashes.map(hash => Inventory(typeIdentifier, hash))
val message = GetDataMessage(inventories)
logger.info(s"Sending getdata=$message to peer=${client.peer}")
logger.debug(s"Sending getdata=$message to peer=${client.peer}")
sendMsg(message)
}