mirror of
https://github.com/bitcoin-s/bitcoin-s.git
synced 2025-03-03 18:47:38 +01:00
Send correct version message on node start up (#1793)
This commit is contained in:
parent
8c9c95bca8
commit
4932315cbc
4 changed files with 38 additions and 7 deletions
|
@ -35,7 +35,8 @@ class VersionMessageTest extends BitcoinSUnitTest {
|
||||||
|
|
||||||
versionMessage.nonce must be(UInt64.zero)
|
versionMessage.nonce must be(UInt64.zero)
|
||||||
versionMessage.startHeight must be(Int32.zero)
|
versionMessage.startHeight must be(Int32.zero)
|
||||||
versionMessage.timestamp.toLong must be(Instant.now().toEpochMilli +- 1000)
|
versionMessage.timestamp.toLong must be(
|
||||||
|
Instant.now().getEpochSecond +- 1000)
|
||||||
}
|
}
|
||||||
|
|
||||||
it must "correctly deduce service flags" in {
|
it must "correctly deduce service flags" in {
|
||||||
|
|
|
@ -1257,14 +1257,25 @@ object VersionMessage extends Factory[VersionMessage] {
|
||||||
network: NetworkParameters,
|
network: NetworkParameters,
|
||||||
receivingIpAddress: InetAddress,
|
receivingIpAddress: InetAddress,
|
||||||
transmittingIpAddress: InetAddress): VersionMessage = {
|
transmittingIpAddress: InetAddress): VersionMessage = {
|
||||||
|
VersionMessage(network,
|
||||||
|
ProtocolVersion.userAgent,
|
||||||
|
Int32.zero,
|
||||||
|
receivingIpAddress,
|
||||||
|
transmittingIpAddress)
|
||||||
|
}
|
||||||
|
|
||||||
|
def apply(
|
||||||
|
network: NetworkParameters,
|
||||||
|
userAgent: String,
|
||||||
|
startHeight: Int32,
|
||||||
|
receivingIpAddress: InetAddress,
|
||||||
|
transmittingIpAddress: InetAddress): VersionMessage = {
|
||||||
val nonce = UInt64.zero
|
val nonce = UInt64.zero
|
||||||
val userAgent = ProtocolVersion.userAgent
|
|
||||||
val startHeight = Int32.zero
|
|
||||||
val relay = false
|
val relay = false
|
||||||
VersionMessage(
|
VersionMessage(
|
||||||
version = ProtocolVersion.default,
|
version = ProtocolVersion.default,
|
||||||
services = ServiceIdentifier.NODE_NONE,
|
services = ServiceIdentifier.NODE_NONE,
|
||||||
timestamp = Int64(java.time.Instant.now.toEpochMilli),
|
timestamp = Int64(java.time.Instant.now.getEpochSecond),
|
||||||
addressReceiveServices = ServiceIdentifier.NODE_NONE,
|
addressReceiveServices = ServiceIdentifier.NODE_NONE,
|
||||||
addressReceiveIpAddress = receivingIpAddress,
|
addressReceiveIpAddress = receivingIpAddress,
|
||||||
addressReceivePort = network.port,
|
addressReceivePort = network.port,
|
||||||
|
|
|
@ -10,7 +10,6 @@ import org.bitcoins.chain.models.{
|
||||||
CompactFilterHeaderDAO
|
CompactFilterHeaderDAO
|
||||||
}
|
}
|
||||||
import org.bitcoins.core.p2p.{NetworkMessage, _}
|
import org.bitcoins.core.p2p.{NetworkMessage, _}
|
||||||
import org.bitcoins.node.{NodeCallbacks, P2PLogger}
|
|
||||||
import org.bitcoins.node.config.NodeAppConfig
|
import org.bitcoins.node.config.NodeAppConfig
|
||||||
import org.bitcoins.node.models.Peer
|
import org.bitcoins.node.models.Peer
|
||||||
import org.bitcoins.node.networking.P2PClient
|
import org.bitcoins.node.networking.P2PClient
|
||||||
|
@ -20,6 +19,7 @@ import org.bitcoins.node.networking.peer.PeerMessageReceiverState.{
|
||||||
Normal,
|
Normal,
|
||||||
Preconnection
|
Preconnection
|
||||||
}
|
}
|
||||||
|
import org.bitcoins.node.{NodeCallbacks, P2PLogger}
|
||||||
|
|
||||||
import scala.concurrent.Future
|
import scala.concurrent.Future
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ class PeerMessageReceiver(
|
||||||
|
|
||||||
val peerMsgSender = PeerMessageSender(client)
|
val peerMsgSender = PeerMessageSender(client)
|
||||||
|
|
||||||
peerMsgSender.sendVersionMessage()
|
peerMsgSender.sendVersionMessage(dataMessageHandler.chainApi)
|
||||||
|
|
||||||
val newRecv = toState(newState)
|
val newRecv = toState(newState)
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
package org.bitcoins.node.networking.peer
|
package org.bitcoins.node.networking.peer
|
||||||
|
|
||||||
|
import java.net.InetAddress
|
||||||
|
|
||||||
import akka.actor.ActorRef
|
import akka.actor.ActorRef
|
||||||
import akka.io.Tcp
|
import akka.io.Tcp
|
||||||
import akka.util.Timeout
|
import akka.util.Timeout
|
||||||
import org.bitcoins.chain.api.ChainApi
|
import org.bitcoins.chain.api.ChainApi
|
||||||
import org.bitcoins.core.bloom.BloomFilter
|
import org.bitcoins.core.bloom.BloomFilter
|
||||||
import org.bitcoins.core.p2p.{NetworkMessage, _}
|
import org.bitcoins.core.number.Int32
|
||||||
|
import org.bitcoins.core.p2p._
|
||||||
import org.bitcoins.core.protocol.transaction.Transaction
|
import org.bitcoins.core.protocol.transaction.Transaction
|
||||||
import org.bitcoins.core.util.FutureUtil
|
import org.bitcoins.core.util.FutureUtil
|
||||||
import org.bitcoins.crypto.{
|
import org.bitcoins.crypto.{
|
||||||
|
@ -66,6 +69,22 @@ case class PeerMessageSender(client: P2PClient)(implicit conf: NodeAppConfig)
|
||||||
sendMsg(versionMsg)
|
sendMsg(versionMsg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def sendVersionMessage(chainApi: ChainApi)(implicit
|
||||||
|
ec: ExecutionContext): Future[Unit] = {
|
||||||
|
chainApi.getBestHashBlockHeight().flatMap { height =>
|
||||||
|
val transmittingIpAddress = InetAddress.getLocalHost
|
||||||
|
val receivingIpAddress = client.peer.socket.getAddress
|
||||||
|
val versionMsg = VersionMessage(conf.network,
|
||||||
|
"/Bitcoin-S:0.3.0/",
|
||||||
|
Int32(height),
|
||||||
|
receivingIpAddress,
|
||||||
|
transmittingIpAddress)
|
||||||
|
|
||||||
|
logger.trace(s"Sending versionMsg=$versionMsg to peer=${client.peer}")
|
||||||
|
sendMsg(versionMsg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
def sendVerackMessage(): Future[Unit] = {
|
def sendVerackMessage(): Future[Unit] = {
|
||||||
val verackMsg = VerAckMessage
|
val verackMsg = VerAckMessage
|
||||||
sendMsg(verackMsg)
|
sendMsg(verackMsg)
|
||||||
|
|
Loading…
Add table
Reference in a new issue