mirror of
https://github.com/bitcoin-s/bitcoin-s.git
synced 2025-03-03 10:46:42 +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.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 {
|
||||
|
|
|
@ -1257,14 +1257,25 @@ object VersionMessage extends Factory[VersionMessage] {
|
|||
network: NetworkParameters,
|
||||
receivingIpAddress: InetAddress,
|
||||
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 userAgent = ProtocolVersion.userAgent
|
||||
val startHeight = Int32.zero
|
||||
val relay = false
|
||||
VersionMessage(
|
||||
version = ProtocolVersion.default,
|
||||
services = ServiceIdentifier.NODE_NONE,
|
||||
timestamp = Int64(java.time.Instant.now.toEpochMilli),
|
||||
timestamp = Int64(java.time.Instant.now.getEpochSecond),
|
||||
addressReceiveServices = ServiceIdentifier.NODE_NONE,
|
||||
addressReceiveIpAddress = receivingIpAddress,
|
||||
addressReceivePort = network.port,
|
||||
|
|
|
@ -10,7 +10,6 @@ import org.bitcoins.chain.models.{
|
|||
CompactFilterHeaderDAO
|
||||
}
|
||||
import org.bitcoins.core.p2p.{NetworkMessage, _}
|
||||
import org.bitcoins.node.{NodeCallbacks, P2PLogger}
|
||||
import org.bitcoins.node.config.NodeAppConfig
|
||||
import org.bitcoins.node.models.Peer
|
||||
import org.bitcoins.node.networking.P2PClient
|
||||
|
@ -20,6 +19,7 @@ import org.bitcoins.node.networking.peer.PeerMessageReceiverState.{
|
|||
Normal,
|
||||
Preconnection
|
||||
}
|
||||
import org.bitcoins.node.{NodeCallbacks, P2PLogger}
|
||||
|
||||
import scala.concurrent.Future
|
||||
|
||||
|
@ -60,7 +60,7 @@ class PeerMessageReceiver(
|
|||
|
||||
val peerMsgSender = PeerMessageSender(client)
|
||||
|
||||
peerMsgSender.sendVersionMessage()
|
||||
peerMsgSender.sendVersionMessage(dataMessageHandler.chainApi)
|
||||
|
||||
val newRecv = toState(newState)
|
||||
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
package org.bitcoins.node.networking.peer
|
||||
|
||||
import java.net.InetAddress
|
||||
|
||||
import akka.actor.ActorRef
|
||||
import akka.io.Tcp
|
||||
import akka.util.Timeout
|
||||
import org.bitcoins.chain.api.ChainApi
|
||||
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.util.FutureUtil
|
||||
import org.bitcoins.crypto.{
|
||||
|
@ -66,6 +69,22 @@ case class PeerMessageSender(client: P2PClient)(implicit conf: NodeAppConfig)
|
|||
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] = {
|
||||
val verackMsg = VerAckMessage
|
||||
sendMsg(verackMsg)
|
||||
|
|
Loading…
Add table
Reference in a new issue