From 0b885cd658f3c3fd0eb0b67e1cd356bb0c724728 Mon Sep 17 00:00:00 2001 From: Torkel Rogstad Date: Thu, 6 Jun 2019 16:13:32 +0200 Subject: [PATCH] Reshuffle package location of P2P messages (#495) * Reshuffle package location of P2P messages Previously the companion objects for P2P messages and the actual messages were in different pacakges. This made them more awkward to use than necessary. We also clean up some Scaladocs in this commit. * Move all P2P messages to core --- .../core/p2p}/FilterAddMessageSpec.scala | 2 +- .../core/p2p}/FilterLoadMessageSpec.scala | 2 +- .../core/p2p}/GetDataMessageSpec.scala | 6 +- .../core/p2p}/GetHeadersMessageSpec.scala | 3 +- .../core/p2p}/HeadersMessageSpec.scala | 2 +- .../core/p2p}/InventoryMessageSpec.scala | 5 +- .../bitcoins/core/p2p}/InventorySpec.scala | 5 +- .../core/p2p}/MerkleBlockMessageSpec.scala | 2 +- .../core/p2p}/NetworkHeaderTest.scala | 3 +- .../core/p2p}/NetworkMessageTest.scala | 5 +- .../core/p2p}/NetworkPayloadTest.scala | 3 +- .../bitcoins/core/p2p}/PingMessageSpec.scala | 2 +- .../bitcoins/core/p2p}/PongMessageSpec.scala | 2 +- .../core/p2p}/ProtocolVersionTest.scala | 2 +- .../core/p2p}/RejectMessageSpec.scala | 2 +- .../core/p2p}/TransactionMessageSpec.scala | 2 +- .../core/p2p}/TypeIdentifierTest.scala | 8 +- .../core/p2p}/VersionMessageSpec.scala | 3 +- .../core/p2p}/VersionMessageTest.scala | 4 +- .../RawNetworkHeaderSerializerTest.scala | 4 +- .../RawAddrMessageSerializerTest.scala | 5 +- .../RawFilterAddMessageSerializerTest.scala | 5 +- .../RawFilterLoadMessageSerializerTest.scala | 2 +- .../RawGetBlocksMessageSerializerTest.scala | 7 +- .../RawGetDataMessageSerializerTest.scala | 6 +- .../RawGetHeadersMessageSerializerTest.scala | 4 +- .../RawHeadersMessageSerializerTest.scala | 2 +- .../RawInventoryMessageSerializerTest.scala | 2 +- .../RawInventorySerializerTest.scala | 4 +- .../RawMerkleBlockMessageSerializerTest.scala | 5 +- .../RawNetworkIpAddressSerializerTest.scala | 8 +- .../RawNotFoundMessageSerializerTest.scala | 5 +- .../RawPingMessageSerializerTest.scala | 4 +- .../RawRejectMessageSerializerTest.scala | 2 +- .../RawServiceIdentifierSerializerTest.scala | 5 +- .../RawTransactionMessageSerializerTest.scala | 5 +- .../RawTypeIdentifierSerializerTest.scala | 8 +- .../RawVersionMessageSerializerTest.scala | 19 +- .../org/bitcoins/core/p2p}/Inventory.scala | 13 +- .../bitcoins/core/p2p}/NetworkHeader.scala | 19 +- .../bitcoins/core/p2p}/NetworkIpAddress.scala | 43 +- .../bitcoins/core/p2p}/NetworkMessage.scala | 9 +- .../bitcoins/core/p2p}/NetworkPayload.scala | 576 ++++++++++++++++-- .../bitcoins/core/p2p}/ProtocolVersion.scala | 45 +- .../core/p2p}/ServiceIdentifier.scala | 7 +- .../bitcoins/core/p2p}/TypeIdentifier.scala | 9 +- .../RawNetworkIpAddressSerializer.scala | 11 +- .../RawVersionMessageSerializer.scala | 17 +- .../p2p}/RawNetworkMessageSerializer.scala | 11 +- .../headers/RawNetworkHeaderSerializer.scala | 7 +- .../messages}/RawAddrMessageSerializer.scala | 9 +- .../messages}/RawBlockMessageSerializer.scala | 10 +- .../RawFeeFilterMessageSerializer.scala | 10 +- .../RawFilterAddMessageSerializer.scala | 10 +- .../RawFilterLoadMessageSerializer.scala | 8 +- .../RawGetBlocksMessageSerializer.scala | 12 +- .../RawGetDataMessageSerializer.scala | 9 +- .../RawGetHeadersMessageSerializer.scala | 12 +- .../RawHeadersMessageSerializer.scala | 10 +- .../RawInventoryMessageSerializer.scala | 13 +- .../messages}/RawInventorySerializer.scala | 11 +- .../RawMerkleBlockMessageSerializer.scala | 9 +- .../RawNetworkIpAddressSerializer.scala | 40 ++ .../RawNotFoundMessageSerializer.scala | 10 +- .../messages}/RawPingMessageSerializer.scala | 11 +- .../messages}/RawPongMessageSerializer.scala | 11 +- .../RawRejectMessageSerializer.scala | 11 +- .../RawServiceIdentifierSerializer.scala | 8 +- .../RawTransactionMessageSerializer.scala | 9 +- .../RawTypeIdentifierSerializer.scala | 4 +- .../RawVersionMessageSerializer.scala | 102 ++++ .../node/networking/BlockActorTest.scala | 4 +- .../node/networking/PaymentActorTest.scala | 8 +- .../sync/BlockHeaderSyncActorTest.scala | 2 +- .../node/util/BitcoinSpvNodeUtilTest.scala | 12 +- .../main/scala/org/bitcoins/node/Main.scala | 2 +- .../bitcoins/node/constant/Constants.scala | 9 +- .../node/messages/control/AddrMessage.scala | 33 - .../messages/control/FeeFilterMessage.scala | 28 - .../messages/control/FilterAddMessage.scala | 29 - .../messages/control/FilterLoadMessage.scala | 58 -- .../node/messages/control/PingMessage.scala | 18 - .../node/messages/control/PongMessage.scala | 22 - .../node/messages/control/RejectMessage.scala | 48 -- .../messages/control/VersionMessage.scala | 120 ---- .../node/messages/data/BlockMessage.scala | 22 - .../node/messages/data/GetBlocksMessage.scala | 47 -- .../node/messages/data/GetDataMessage.scala | 37 -- .../messages/data/GetHeadersMessage.scala | 67 -- .../node/messages/data/HeadersMessage.scala | 33 - .../node/messages/data/InventoryMessage.scala | 36 -- .../messages/data/MerkleBlockMessage.scala | 26 - .../node/messages/data/NotFoundMessage.scala | 30 - .../messages/data/TransactionMessage.scala | 26 - .../scala/org/bitcoins/node/models/Peer.scala | 2 +- .../bitcoins/node/networking/BlockActor.scala | 5 +- .../org/bitcoins/node/networking/Client.scala | 6 +- .../node/networking/PaymentActor.scala | 6 +- .../peer/ControlMessageHandler.scala | 2 +- .../networking/peer/DataMessageHandler.scala | 2 +- .../networking/peer/PeerMessageReceiver.scala | 11 +- .../peer/PeerMessageReceiverState.scala | 4 +- .../networking/peer/PeerMessageSender.scala | 7 +- .../node/util/BitcoinSpvNodeUtil.scala | 33 +- .../testkit/gen/ControlMessageGenerator.scala | 16 +- .../testkit/gen/DataMessageGenerator.scala | 27 +- .../bitcoins/testkit/node/NodeTestUtil.scala | 7 +- .../bitcoins/testkit/node/NodeUnitTest.scala | 15 +- 108 files changed, 893 insertions(+), 1228 deletions(-) rename {node-test/src/test/scala/org/bitcoins/node/messages/control => core-test/src/test/scala/org/bitcoins/core/p2p}/FilterAddMessageSpec.scala (90%) rename {node-test/src/test/scala/org/bitcoins/node/messages/control => core-test/src/test/scala/org/bitcoins/core/p2p}/FilterLoadMessageSpec.scala (89%) rename {node-test/src/test/scala/org/bitcoins/node/messages/data => core-test/src/test/scala/org/bitcoins/core/p2p}/GetDataMessageSpec.scala (73%) rename {node-test/src/test/scala/org/bitcoins/node/messages/data => core-test/src/test/scala/org/bitcoins/core/p2p}/GetHeadersMessageSpec.scala (80%) rename {node-test/src/test/scala/org/bitcoins/node/messages/data => core-test/src/test/scala/org/bitcoins/core/p2p}/HeadersMessageSpec.scala (89%) rename {node-test/src/test/scala/org/bitcoins/node/messages/data => core-test/src/test/scala/org/bitcoins/core/p2p}/InventoryMessageSpec.scala (81%) rename {node-test/src/test/scala/org/bitcoins/node/messages/data => core-test/src/test/scala/org/bitcoins/core/p2p}/InventorySpec.scala (79%) rename {node-test/src/test/scala/org/bitcoins/node/messages/data => core-test/src/test/scala/org/bitcoins/core/p2p}/MerkleBlockMessageSpec.scala (90%) rename {node-test/src/test/scala/org/bitcoins/node/headers => core-test/src/test/scala/org/bitcoins/core/p2p}/NetworkHeaderTest.scala (93%) rename {node-test/src/test/scala/org/bitcoins/node => core-test/src/test/scala/org/bitcoins/core/p2p}/NetworkMessageTest.scala (84%) rename {node-test/src/test/scala/org/bitcoins/node/messages => core-test/src/test/scala/org/bitcoins/core/p2p}/NetworkPayloadTest.scala (89%) rename {node-test/src/test/scala/org/bitcoins/node/messages/control => core-test/src/test/scala/org/bitcoins/core/p2p}/PingMessageSpec.scala (88%) rename {node-test/src/test/scala/org/bitcoins/node/messages/control => core-test/src/test/scala/org/bitcoins/core/p2p}/PongMessageSpec.scala (88%) rename {node-test/src/test/scala/org/bitcoins/node/versions => core-test/src/test/scala/org/bitcoins/core/p2p}/ProtocolVersionTest.scala (88%) rename {node-test/src/test/scala/org/bitcoins/node/messages/control => core-test/src/test/scala/org/bitcoins/core/p2p}/RejectMessageSpec.scala (88%) rename {node-test/src/test/scala/org/bitcoins/node/messages/data => core-test/src/test/scala/org/bitcoins/core/p2p}/TransactionMessageSpec.scala (89%) rename {node-test/src/test/scala/org/bitcoins/node/messages => core-test/src/test/scala/org/bitcoins/core/p2p}/TypeIdentifierTest.scala (74%) rename {node-test/src/test/scala/org/bitcoins/node/messages/control => core-test/src/test/scala/org/bitcoins/core/p2p}/VersionMessageSpec.scala (80%) rename {node-test/src/test/scala/org/bitcoins/node/messages/control => core-test/src/test/scala/org/bitcoins/core/p2p}/VersionMessageTest.scala (95%) rename {node-test/src/test/scala/org/bitcoins/node/serializers => core-test/src/test/scala/org/bitcoins/core/serializers/p2p}/headers/RawNetworkHeaderSerializerTest.scala (94%) rename {node-test/src/test/scala/org/bitcoins/node/serializers/messages/control => core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages}/RawAddrMessageSerializerTest.scala (90%) rename {node-test/src/test/scala/org/bitcoins/node/serializers/messages/control => core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages}/RawFilterAddMessageSerializerTest.scala (89%) rename {node-test/src/test/scala/org/bitcoins/node/serializers/messages/control => core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages}/RawFilterLoadMessageSerializerTest.scala (95%) rename {node-test/src/test/scala/org/bitcoins/node/serializers/messages/data => core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages}/RawGetBlocksMessageSerializerTest.scala (86%) rename {node-test/src/test/scala/org/bitcoins/node/serializers/messages/data => core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages}/RawGetDataMessageSerializerTest.scala (89%) rename {node-test/src/test/scala/org/bitcoins/node/serializers/messages/data => core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages}/RawGetHeadersMessageSerializerTest.scala (91%) rename {node-test/src/test/scala/org/bitcoins/node/serializers/messages/data => core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages}/RawHeadersMessageSerializerTest.scala (98%) rename {node-test/src/test/scala/org/bitcoins/node/serializers/messages/data => core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages}/RawInventoryMessageSerializerTest.scala (95%) rename {node-test/src/test/scala/org/bitcoins/node/serializers/messages/data => core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages}/RawInventorySerializerTest.scala (90%) rename {node-test/src/test/scala/org/bitcoins/node/serializers/messages/data => core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages}/RawMerkleBlockMessageSerializerTest.scala (95%) rename {node-test/src/test/scala/org/bitcoins/node/serializers/messages/control => core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages}/RawNetworkIpAddressSerializerTest.scala (82%) rename {node-test/src/test/scala/org/bitcoins/node/serializers/messages/data => core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages}/RawNotFoundMessageSerializerTest.scala (92%) rename {node-test/src/test/scala/org/bitcoins/node/serializers/messages/control => core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages}/RawPingMessageSerializerTest.scala (83%) rename {node-test/src/test/scala/org/bitcoins/node/serializers/messages/control => core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages}/RawRejectMessageSerializerTest.scala (95%) rename {node-test/src/test/scala/org/bitcoins/node/serializers/messages/control => core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages}/RawServiceIdentifierSerializerTest.scala (82%) rename {node-test/src/test/scala/org/bitcoins/node/serializers/messages/data => core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages}/RawTransactionMessageSerializerTest.scala (89%) rename {node-test/src/test/scala/org/bitcoins/node/serializers => core-test/src/test/scala/org/bitcoins/core/serializers/p2p}/messages/RawTypeIdentifierSerializerTest.scala (86%) rename {node-test/src/test/scala/org/bitcoins/node/serializers/messages/control => core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages}/RawVersionMessageSerializerTest.scala (91%) rename {node/src/main/scala/org/bitcoins/node/messages/data => core/src/main/scala/org/bitcoins/core/p2p}/Inventory.scala (72%) rename {node/src/main/scala/org/bitcoins/node/headers => core/src/main/scala/org/bitcoins/core/p2p}/NetworkHeader.scala (86%) rename {node/src/main/scala/org/bitcoins/node/util => core/src/main/scala/org/bitcoins/core/p2p}/NetworkIpAddress.scala (70%) rename {node/src/main/scala/org/bitcoins/node => core/src/main/scala/org/bitcoins/core/p2p}/NetworkMessage.scala (82%) rename {node/src/main/scala/org/bitcoins/node/messages => core/src/main/scala/org/bitcoins/core/p2p}/NetworkPayload.scala (58%) rename {node/src/main/scala/org/bitcoins/node/versions => core/src/main/scala/org/bitcoins/core/p2p}/ProtocolVersion.scala (75%) rename {node/src/main/scala/org/bitcoins/node/messages/control => core/src/main/scala/org/bitcoins/core/p2p}/ServiceIdentifier.scala (87%) rename {node/src/main/scala/org/bitcoins/node/messages => core/src/main/scala/org/bitcoins/core/p2p}/TypeIdentifier.scala (82%) rename {node/src/main/scala/org/bitcoins/node/serializers/messages/control => core/src/main/scala/org/bitcoins/core/p2p/serializers/messages}/RawNetworkIpAddressSerializer.scala (74%) rename {node/src/main/scala/org/bitcoins/node/serializers/messages/control => core/src/main/scala/org/bitcoins/core/p2p/serializers/messages}/RawVersionMessageSerializer.scala (82%) rename {node/src/main/scala/org/bitcoins/node/serializers => core/src/main/scala/org/bitcoins/core/serializers/p2p}/RawNetworkMessageSerializer.scala (67%) rename {node/src/main/scala/org/bitcoins/node/serializers => core/src/main/scala/org/bitcoins/core/serializers/p2p}/headers/RawNetworkHeaderSerializer.scala (89%) rename {node/src/main/scala/org/bitcoins/node/serializers/messages/control => core/src/main/scala/org/bitcoins/core/serializers/p2p/messages}/RawAddrMessageSerializer.scala (87%) rename {node/src/main/scala/org/bitcoins/node/serializers/messages/data => core/src/main/scala/org/bitcoins/core/serializers/p2p/messages}/RawBlockMessageSerializer.scala (62%) rename {node/src/main/scala/org/bitcoins/node/serializers/messages/control => core/src/main/scala/org/bitcoins/core/serializers/p2p/messages}/RawFeeFilterMessageSerializer.scala (70%) rename {node/src/main/scala/org/bitcoins/node/serializers/messages/control => core/src/main/scala/org/bitcoins/core/serializers/p2p/messages}/RawFilterAddMessageSerializer.scala (67%) rename {node/src/main/scala/org/bitcoins/node/serializers/messages/control => core/src/main/scala/org/bitcoins/core/serializers/p2p/messages}/RawFilterLoadMessageSerializer.scala (72%) rename {node/src/main/scala/org/bitcoins/node/serializers/messages/data => core/src/main/scala/org/bitcoins/core/serializers/p2p/messages}/RawGetBlocksMessageSerializer.scala (84%) rename {node/src/main/scala/org/bitcoins/node/serializers/messages/data => core/src/main/scala/org/bitcoins/core/serializers/p2p/messages}/RawGetDataMessageSerializer.scala (69%) rename {node/src/main/scala/org/bitcoins/node/serializers/messages/data => core/src/main/scala/org/bitcoins/core/serializers/p2p/messages}/RawGetHeadersMessageSerializer.scala (83%) rename {node/src/main/scala/org/bitcoins/node/serializers/messages/data => core/src/main/scala/org/bitcoins/core/serializers/p2p/messages}/RawHeadersMessageSerializer.scala (86%) rename {node/src/main/scala/org/bitcoins/node/serializers/messages/data => core/src/main/scala/org/bitcoins/core/serializers/p2p/messages}/RawInventoryMessageSerializer.scala (84%) rename {node/src/main/scala/org/bitcoins/node/serializers/messages/data => core/src/main/scala/org/bitcoins/core/serializers/p2p/messages}/RawInventorySerializer.scala (65%) rename {node/src/main/scala/org/bitcoins/node/serializers/messages/data => core/src/main/scala/org/bitcoins/core/serializers/p2p/messages}/RawMerkleBlockMessageSerializer.scala (70%) create mode 100644 core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawNetworkIpAddressSerializer.scala rename {node/src/main/scala/org/bitcoins/node/serializers/messages/data => core/src/main/scala/org/bitcoins/core/serializers/p2p/messages}/RawNotFoundMessageSerializer.scala (75%) rename {node/src/main/scala/org/bitcoins/node/serializers/messages/control => core/src/main/scala/org/bitcoins/core/serializers/p2p/messages}/RawPingMessageSerializer.scala (59%) rename {node/src/main/scala/org/bitcoins/node/serializers/messages/control => core/src/main/scala/org/bitcoins/core/serializers/p2p/messages}/RawPongMessageSerializer.scala (61%) rename {node/src/main/scala/org/bitcoins/node/serializers/messages/control => core/src/main/scala/org/bitcoins/core/serializers/p2p/messages}/RawRejectMessageSerializer.scala (84%) rename {node/src/main/scala/org/bitcoins/node/serializers/messages/control => core/src/main/scala/org/bitcoins/core/serializers/p2p/messages}/RawServiceIdentifierSerializer.scala (74%) rename {node/src/main/scala/org/bitcoins/node/serializers/messages/data => core/src/main/scala/org/bitcoins/core/serializers/p2p/messages}/RawTransactionMessageSerializer.scala (69%) rename {node/src/main/scala/org/bitcoins/node/serializers => core/src/main/scala/org/bitcoins/core/serializers/p2p}/messages/RawTypeIdentifierSerializer.scala (87%) create mode 100644 core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawVersionMessageSerializer.scala delete mode 100644 node/src/main/scala/org/bitcoins/node/messages/control/AddrMessage.scala delete mode 100644 node/src/main/scala/org/bitcoins/node/messages/control/FeeFilterMessage.scala delete mode 100644 node/src/main/scala/org/bitcoins/node/messages/control/FilterAddMessage.scala delete mode 100644 node/src/main/scala/org/bitcoins/node/messages/control/FilterLoadMessage.scala delete mode 100644 node/src/main/scala/org/bitcoins/node/messages/control/PingMessage.scala delete mode 100644 node/src/main/scala/org/bitcoins/node/messages/control/PongMessage.scala delete mode 100644 node/src/main/scala/org/bitcoins/node/messages/control/RejectMessage.scala delete mode 100644 node/src/main/scala/org/bitcoins/node/messages/control/VersionMessage.scala delete mode 100644 node/src/main/scala/org/bitcoins/node/messages/data/BlockMessage.scala delete mode 100644 node/src/main/scala/org/bitcoins/node/messages/data/GetBlocksMessage.scala delete mode 100644 node/src/main/scala/org/bitcoins/node/messages/data/GetDataMessage.scala delete mode 100644 node/src/main/scala/org/bitcoins/node/messages/data/GetHeadersMessage.scala delete mode 100644 node/src/main/scala/org/bitcoins/node/messages/data/HeadersMessage.scala delete mode 100644 node/src/main/scala/org/bitcoins/node/messages/data/InventoryMessage.scala delete mode 100644 node/src/main/scala/org/bitcoins/node/messages/data/MerkleBlockMessage.scala delete mode 100644 node/src/main/scala/org/bitcoins/node/messages/data/NotFoundMessage.scala delete mode 100644 node/src/main/scala/org/bitcoins/node/messages/data/TransactionMessage.scala diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/control/FilterAddMessageSpec.scala b/core-test/src/test/scala/org/bitcoins/core/p2p/FilterAddMessageSpec.scala similarity index 90% rename from node-test/src/test/scala/org/bitcoins/node/messages/control/FilterAddMessageSpec.scala rename to core-test/src/test/scala/org/bitcoins/core/p2p/FilterAddMessageSpec.scala index c050439d8b..439bf56e96 100644 --- a/node-test/src/test/scala/org/bitcoins/node/messages/control/FilterAddMessageSpec.scala +++ b/core-test/src/test/scala/org/bitcoins/core/p2p/FilterAddMessageSpec.scala @@ -1,4 +1,4 @@ -package org.bitcoins.node.messages.control +package org.bitcoins.core.p2p import org.bitcoins.testkit.gen.ControlMessageGenerator import org.bitcoins.testkit.util.BitcoinSUnitTest diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/control/FilterLoadMessageSpec.scala b/core-test/src/test/scala/org/bitcoins/core/p2p/FilterLoadMessageSpec.scala similarity index 89% rename from node-test/src/test/scala/org/bitcoins/node/messages/control/FilterLoadMessageSpec.scala rename to core-test/src/test/scala/org/bitcoins/core/p2p/FilterLoadMessageSpec.scala index 343e3355ba..386582a454 100644 --- a/node-test/src/test/scala/org/bitcoins/node/messages/control/FilterLoadMessageSpec.scala +++ b/core-test/src/test/scala/org/bitcoins/core/p2p/FilterLoadMessageSpec.scala @@ -1,4 +1,4 @@ -package org.bitcoins.node.messages.control +package org.bitcoins.core.p2p import org.bitcoins.testkit.gen.ControlMessageGenerator import org.bitcoins.testkit.util.BitcoinSUnitTest diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/data/GetDataMessageSpec.scala b/core-test/src/test/scala/org/bitcoins/core/p2p/GetDataMessageSpec.scala similarity index 73% rename from node-test/src/test/scala/org/bitcoins/node/messages/data/GetDataMessageSpec.scala rename to core-test/src/test/scala/org/bitcoins/core/p2p/GetDataMessageSpec.scala index 3c6d804276..b595e86da3 100644 --- a/node-test/src/test/scala/org/bitcoins/node/messages/data/GetDataMessageSpec.scala +++ b/core-test/src/test/scala/org/bitcoins/core/p2p/GetDataMessageSpec.scala @@ -1,12 +1,8 @@ -package org.bitcoins.node.messages.data +package org.bitcoins.core.p2p import org.bitcoins.testkit.gen.DataMessageGenerator import org.bitcoins.testkit.util.BitcoinSUnitTest -import org.scalacheck.{Prop, Properties} -/** - * Created by chris on 7/8/16. - */ class GetDataMessageSpec extends BitcoinSUnitTest { it must "have serialization symmetry" in { diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/data/GetHeadersMessageSpec.scala b/core-test/src/test/scala/org/bitcoins/core/p2p/GetHeadersMessageSpec.scala similarity index 80% rename from node-test/src/test/scala/org/bitcoins/node/messages/data/GetHeadersMessageSpec.scala rename to core-test/src/test/scala/org/bitcoins/core/p2p/GetHeadersMessageSpec.scala index 93cda5d5e3..6598ef10fe 100644 --- a/node-test/src/test/scala/org/bitcoins/node/messages/data/GetHeadersMessageSpec.scala +++ b/core-test/src/test/scala/org/bitcoins/core/p2p/GetHeadersMessageSpec.scala @@ -1,6 +1,5 @@ -package org.bitcoins.node.messages.data +package org.bitcoins.core.p2p -import org.bitcoins.core.util.BitcoinSLogger import org.bitcoins.testkit.gen.DataMessageGenerator import org.bitcoins.testkit.util.BitcoinSUnitTest diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/data/HeadersMessageSpec.scala b/core-test/src/test/scala/org/bitcoins/core/p2p/HeadersMessageSpec.scala similarity index 89% rename from node-test/src/test/scala/org/bitcoins/node/messages/data/HeadersMessageSpec.scala rename to core-test/src/test/scala/org/bitcoins/core/p2p/HeadersMessageSpec.scala index c41014329b..98f1b2fcde 100644 --- a/node-test/src/test/scala/org/bitcoins/node/messages/data/HeadersMessageSpec.scala +++ b/core-test/src/test/scala/org/bitcoins/core/p2p/HeadersMessageSpec.scala @@ -1,4 +1,4 @@ -package org.bitcoins.node.messages.data +package org.bitcoins.core.p2p import org.bitcoins.testkit.gen.DataMessageGenerator import org.bitcoins.testkit.util.BitcoinSUnitTest diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/data/InventoryMessageSpec.scala b/core-test/src/test/scala/org/bitcoins/core/p2p/InventoryMessageSpec.scala similarity index 81% rename from node-test/src/test/scala/org/bitcoins/node/messages/data/InventoryMessageSpec.scala rename to core-test/src/test/scala/org/bitcoins/core/p2p/InventoryMessageSpec.scala index 76936e78a3..a4645815cd 100644 --- a/node-test/src/test/scala/org/bitcoins/node/messages/data/InventoryMessageSpec.scala +++ b/core-test/src/test/scala/org/bitcoins/core/p2p/InventoryMessageSpec.scala @@ -1,11 +1,8 @@ -package org.bitcoins.node.messages.data +package org.bitcoins.core.p2p import org.bitcoins.testkit.gen.DataMessageGenerator import org.bitcoins.testkit.util.BitcoinSUnitTest -/** - * Created by chris on 7/8/16. - */ class InventoryMessageSpec extends BitcoinSUnitTest { it must " have serialization symmetry" in { diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/data/InventorySpec.scala b/core-test/src/test/scala/org/bitcoins/core/p2p/InventorySpec.scala similarity index 79% rename from node-test/src/test/scala/org/bitcoins/node/messages/data/InventorySpec.scala rename to core-test/src/test/scala/org/bitcoins/core/p2p/InventorySpec.scala index 757c68b60c..7c38049b1c 100644 --- a/node-test/src/test/scala/org/bitcoins/node/messages/data/InventorySpec.scala +++ b/core-test/src/test/scala/org/bitcoins/core/p2p/InventorySpec.scala @@ -1,11 +1,8 @@ -package org.bitcoins.node.messages.data +package org.bitcoins.core.p2p import org.bitcoins.testkit.gen.DataMessageGenerator import org.bitcoins.testkit.util.BitcoinSUnitTest -/** - * Created by chris on 7/8/16. - */ class InventorySpec extends BitcoinSUnitTest { it must "have serialization symmetry" in { diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/data/MerkleBlockMessageSpec.scala b/core-test/src/test/scala/org/bitcoins/core/p2p/MerkleBlockMessageSpec.scala similarity index 90% rename from node-test/src/test/scala/org/bitcoins/node/messages/data/MerkleBlockMessageSpec.scala rename to core-test/src/test/scala/org/bitcoins/core/p2p/MerkleBlockMessageSpec.scala index 971b08c560..ddf16e582b 100644 --- a/node-test/src/test/scala/org/bitcoins/node/messages/data/MerkleBlockMessageSpec.scala +++ b/core-test/src/test/scala/org/bitcoins/core/p2p/MerkleBlockMessageSpec.scala @@ -1,4 +1,4 @@ -package org.bitcoins.node.messages.data +package org.bitcoins.core.p2p import org.bitcoins.testkit.gen.DataMessageGenerator import org.bitcoins.testkit.util.BitcoinSUnitTest diff --git a/node-test/src/test/scala/org/bitcoins/node/headers/NetworkHeaderTest.scala b/core-test/src/test/scala/org/bitcoins/core/p2p/NetworkHeaderTest.scala similarity index 93% rename from node-test/src/test/scala/org/bitcoins/node/headers/NetworkHeaderTest.scala rename to core-test/src/test/scala/org/bitcoins/core/p2p/NetworkHeaderTest.scala index c1b4c8451c..6daa53d0c5 100644 --- a/node-test/src/test/scala/org/bitcoins/node/headers/NetworkHeaderTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/p2p/NetworkHeaderTest.scala @@ -1,9 +1,8 @@ -package org.bitcoins.node.headers +package org.bitcoins.core.p2p import org.bitcoins.core.config.TestNet3 import org.bitcoins.core.number.UInt32 import org.bitcoins.core.util.{BitcoinSUtil, CryptoUtil} -import org.bitcoins.node.messages.VerAckMessage import org.bitcoins.testkit.node.NodeTestUtil import org.scalatest.{FlatSpec, MustMatchers} diff --git a/node-test/src/test/scala/org/bitcoins/node/NetworkMessageTest.scala b/core-test/src/test/scala/org/bitcoins/core/p2p/NetworkMessageTest.scala similarity index 84% rename from node-test/src/test/scala/org/bitcoins/node/NetworkMessageTest.scala rename to core-test/src/test/scala/org/bitcoins/core/p2p/NetworkMessageTest.scala index 85e521f981..ac5cd25cc6 100644 --- a/node-test/src/test/scala/org/bitcoins/node/NetworkMessageTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/p2p/NetworkMessageTest.scala @@ -1,11 +1,8 @@ -package org.bitcoins.node +package org.bitcoins.core.p2p import org.bitcoins.testkit.node.NodeTestUtil import org.bitcoins.testkit.util.BitcoinSUnitTest -/** - * Created by chris on 6/28/16. - */ class NetworkMessageTest extends BitcoinSUnitTest { "NetworkMessage" must "be able to serialize then deserialize a message and get the original hex back" in { diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/NetworkPayloadTest.scala b/core-test/src/test/scala/org/bitcoins/core/p2p/NetworkPayloadTest.scala similarity index 89% rename from node-test/src/test/scala/org/bitcoins/node/messages/NetworkPayloadTest.scala rename to core-test/src/test/scala/org/bitcoins/core/p2p/NetworkPayloadTest.scala index f5ffad6141..59b823114f 100644 --- a/node-test/src/test/scala/org/bitcoins/node/messages/NetworkPayloadTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/p2p/NetworkPayloadTest.scala @@ -1,6 +1,5 @@ -package org.bitcoins.node.messages +package org.bitcoins.core.p2p -import org.bitcoins.node.headers.NetworkHeader import org.bitcoins.testkit.node.NodeTestUtil import org.bitcoins.testkit.util.BitcoinSUnitTest diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/control/PingMessageSpec.scala b/core-test/src/test/scala/org/bitcoins/core/p2p/PingMessageSpec.scala similarity index 88% rename from node-test/src/test/scala/org/bitcoins/node/messages/control/PingMessageSpec.scala rename to core-test/src/test/scala/org/bitcoins/core/p2p/PingMessageSpec.scala index 80b41acd59..7ad0564618 100644 --- a/node-test/src/test/scala/org/bitcoins/node/messages/control/PingMessageSpec.scala +++ b/core-test/src/test/scala/org/bitcoins/core/p2p/PingMessageSpec.scala @@ -1,4 +1,4 @@ -package org.bitcoins.node.messages.control +package org.bitcoins.core.p2p import org.bitcoins.testkit.gen.ControlMessageGenerator import org.bitcoins.testkit.util.BitcoinSUnitTest diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/control/PongMessageSpec.scala b/core-test/src/test/scala/org/bitcoins/core/p2p/PongMessageSpec.scala similarity index 88% rename from node-test/src/test/scala/org/bitcoins/node/messages/control/PongMessageSpec.scala rename to core-test/src/test/scala/org/bitcoins/core/p2p/PongMessageSpec.scala index 8264456424..2130c4c6ce 100644 --- a/node-test/src/test/scala/org/bitcoins/node/messages/control/PongMessageSpec.scala +++ b/core-test/src/test/scala/org/bitcoins/core/p2p/PongMessageSpec.scala @@ -1,4 +1,4 @@ -package org.bitcoins.node.messages.control +package org.bitcoins.core.p2p import org.bitcoins.testkit.gen.ControlMessageGenerator import org.bitcoins.testkit.util.BitcoinSUnitTest diff --git a/node-test/src/test/scala/org/bitcoins/node/versions/ProtocolVersionTest.scala b/core-test/src/test/scala/org/bitcoins/core/p2p/ProtocolVersionTest.scala similarity index 88% rename from node-test/src/test/scala/org/bitcoins/node/versions/ProtocolVersionTest.scala rename to core-test/src/test/scala/org/bitcoins/core/p2p/ProtocolVersionTest.scala index 18aaaa15b2..5775ba0832 100644 --- a/node-test/src/test/scala/org/bitcoins/node/versions/ProtocolVersionTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/p2p/ProtocolVersionTest.scala @@ -1,4 +1,4 @@ -package org.bitcoins.node.versions +package org.bitcoins.core.p2p import org.bitcoins.testkit.util.BitcoinSUnitTest diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/control/RejectMessageSpec.scala b/core-test/src/test/scala/org/bitcoins/core/p2p/RejectMessageSpec.scala similarity index 88% rename from node-test/src/test/scala/org/bitcoins/node/messages/control/RejectMessageSpec.scala rename to core-test/src/test/scala/org/bitcoins/core/p2p/RejectMessageSpec.scala index cd08cc3b9e..b30a65f598 100644 --- a/node-test/src/test/scala/org/bitcoins/node/messages/control/RejectMessageSpec.scala +++ b/core-test/src/test/scala/org/bitcoins/core/p2p/RejectMessageSpec.scala @@ -1,4 +1,4 @@ -package org.bitcoins.node.messages.control +package org.bitcoins.core.p2p import org.bitcoins.testkit.gen.ControlMessageGenerator import org.bitcoins.testkit.util.BitcoinSUnitTest diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/data/TransactionMessageSpec.scala b/core-test/src/test/scala/org/bitcoins/core/p2p/TransactionMessageSpec.scala similarity index 89% rename from node-test/src/test/scala/org/bitcoins/node/messages/data/TransactionMessageSpec.scala rename to core-test/src/test/scala/org/bitcoins/core/p2p/TransactionMessageSpec.scala index 1867fe6dcd..efa333d6e7 100644 --- a/node-test/src/test/scala/org/bitcoins/node/messages/data/TransactionMessageSpec.scala +++ b/core-test/src/test/scala/org/bitcoins/core/p2p/TransactionMessageSpec.scala @@ -1,4 +1,4 @@ -package org.bitcoins.node.messages.data +package org.bitcoins.core.p2p import org.bitcoins.testkit.gen.DataMessageGenerator import org.bitcoins.testkit.util.BitcoinSUnitTest diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/TypeIdentifierTest.scala b/core-test/src/test/scala/org/bitcoins/core/p2p/TypeIdentifierTest.scala similarity index 74% rename from node-test/src/test/scala/org/bitcoins/node/messages/TypeIdentifierTest.scala rename to core-test/src/test/scala/org/bitcoins/core/p2p/TypeIdentifierTest.scala index 7855a15122..c338e8795f 100644 --- a/node-test/src/test/scala/org/bitcoins/node/messages/TypeIdentifierTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/p2p/TypeIdentifierTest.scala @@ -1,10 +1,6 @@ -package org.bitcoins.node.messages +package org.bitcoins.core.p2p -import org.bitcoins.node.messages.TypeIdentifier.{ - MsgBlock, - MsgFilteredBlock, - MsgTx -} +import org.bitcoins.core.p2p.TypeIdentifier.{MsgBlock, MsgFilteredBlock, MsgTx} import org.bitcoins.testkit.util.BitcoinSUnitTest class TypeIdentifierTest extends BitcoinSUnitTest { diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/control/VersionMessageSpec.scala b/core-test/src/test/scala/org/bitcoins/core/p2p/VersionMessageSpec.scala similarity index 80% rename from node-test/src/test/scala/org/bitcoins/node/messages/control/VersionMessageSpec.scala rename to core-test/src/test/scala/org/bitcoins/core/p2p/VersionMessageSpec.scala index 5845f9bff4..812ee0b566 100644 --- a/node-test/src/test/scala/org/bitcoins/node/messages/control/VersionMessageSpec.scala +++ b/core-test/src/test/scala/org/bitcoins/core/p2p/VersionMessageSpec.scala @@ -1,6 +1,5 @@ -package org.bitcoins.node.messages.control +package org.bitcoins.core.p2p -import org.bitcoins.core.util.BitcoinSLogger import org.bitcoins.testkit.gen.ControlMessageGenerator import org.bitcoins.testkit.util.BitcoinSUnitTest diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/control/VersionMessageTest.scala b/core-test/src/test/scala/org/bitcoins/core/p2p/VersionMessageTest.scala similarity index 95% rename from node-test/src/test/scala/org/bitcoins/node/messages/control/VersionMessageTest.scala rename to core-test/src/test/scala/org/bitcoins/core/p2p/VersionMessageTest.scala index ab99c8a44a..311ce8f4c7 100644 --- a/node-test/src/test/scala/org/bitcoins/node/messages/control/VersionMessageTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/p2p/VersionMessageTest.scala @@ -1,10 +1,10 @@ -package org.bitcoins.node.messages.control +package org.bitcoins.core.p2p import java.net.InetAddress -import org.bitcoins.testkit.util.BitcoinSUnitTest import org.bitcoins.core.config.MainNet import org.bitcoins.core.number.{Int32, UInt64} +import org.bitcoins.testkit.util.BitcoinSUnitTest import org.joda.time.DateTime class VersionMessageTest extends BitcoinSUnitTest { diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/headers/RawNetworkHeaderSerializerTest.scala b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/headers/RawNetworkHeaderSerializerTest.scala similarity index 94% rename from node-test/src/test/scala/org/bitcoins/node/serializers/headers/RawNetworkHeaderSerializerTest.scala rename to core-test/src/test/scala/org/bitcoins/core/serializers/p2p/headers/RawNetworkHeaderSerializerTest.scala index b1b19bc3ad..b6f2d81d0e 100644 --- a/node-test/src/test/scala/org/bitcoins/node/serializers/headers/RawNetworkHeaderSerializerTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/headers/RawNetworkHeaderSerializerTest.scala @@ -1,8 +1,8 @@ -package org.bitcoins.node.serializers.headers +package org.bitcoins.core.serializers.p2p.headers import org.bitcoins.core.number.UInt32 import org.bitcoins.core.util.BitcoinSUtil -import org.bitcoins.node.messages.NetworkPayload +import org.bitcoins.core.p2p.NetworkPayload import org.bitcoins.testkit.node.NodeTestUtil import org.bitcoins.testkit.util.BitcoinSUnitTest diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawAddrMessageSerializerTest.scala b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawAddrMessageSerializerTest.scala similarity index 90% rename from node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawAddrMessageSerializerTest.scala rename to core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawAddrMessageSerializerTest.scala index 5b64274458..32effbab62 100644 --- a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawAddrMessageSerializerTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawAddrMessageSerializerTest.scala @@ -1,12 +1,9 @@ -package org.bitcoins.node.serializers.messages.control +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.number.UInt64 import org.bitcoins.core.protocol.CompactSizeUInt import org.scalatest.{FlatSpec, MustMatchers} -/** - * Created by chris on 6/3/16. - */ class RawAddrMessageSerializerTest extends FlatSpec with MustMatchers { //from this bitcoin developer guide example diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawFilterAddMessageSerializerTest.scala b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawFilterAddMessageSerializerTest.scala similarity index 89% rename from node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawFilterAddMessageSerializerTest.scala rename to core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawFilterAddMessageSerializerTest.scala index e67665eb86..5ecd2a1da1 100644 --- a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawFilterAddMessageSerializerTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawFilterAddMessageSerializerTest.scala @@ -1,11 +1,8 @@ -package org.bitcoins.node.serializers.messages.control +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.util.BitcoinSUtil import org.scalatest.{FlatSpec, MustMatchers} -/** - * Created by chris on 8/26/16. - */ class RawFilterAddMessageSerializerTest extends FlatSpec with MustMatchers { //https://bitcoin.org/en/developer-reference#filteradd diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawFilterLoadMessageSerializerTest.scala b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawFilterLoadMessageSerializerTest.scala similarity index 95% rename from node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawFilterLoadMessageSerializerTest.scala rename to core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawFilterLoadMessageSerializerTest.scala index 2cc559124d..26e2f51891 100644 --- a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawFilterLoadMessageSerializerTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawFilterLoadMessageSerializerTest.scala @@ -1,4 +1,4 @@ -package org.bitcoins.node.serializers.messages.control +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.bloom.BloomUpdateNone import org.bitcoins.core.number.{UInt32, UInt64} diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetBlocksMessageSerializerTest.scala b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawGetBlocksMessageSerializerTest.scala similarity index 86% rename from node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetBlocksMessageSerializerTest.scala rename to core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawGetBlocksMessageSerializerTest.scala index f9fe9e3b7d..a298b77dff 100644 --- a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetBlocksMessageSerializerTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawGetBlocksMessageSerializerTest.scala @@ -1,13 +1,10 @@ -package org.bitcoins.node.serializers.messages.data +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.crypto.DoubleSha256Digest import org.bitcoins.core.number.UInt64 import org.bitcoins.core.protocol.CompactSizeUInt import org.bitcoins.core.util.BitcoinSUtil -import org.bitcoins.node.messages.GetBlocksMessage -import org.bitcoins.node.versions.ProtocolVersion70001 -import org.bitcoins.node.messages.GetBlocksMessage -import org.bitcoins.node.versions.ProtocolVersion70001 +import org.bitcoins.core.p2p._ import org.scalatest.{FlatSpec, MustMatchers} /** diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetDataMessageSerializerTest.scala b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawGetDataMessageSerializerTest.scala similarity index 89% rename from node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetDataMessageSerializerTest.scala rename to core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawGetDataMessageSerializerTest.scala index 379b1df0a9..78a827a83a 100644 --- a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetDataMessageSerializerTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawGetDataMessageSerializerTest.scala @@ -1,10 +1,10 @@ -package org.bitcoins.node.serializers.messages.data +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.crypto.DoubleSha256Digest import org.bitcoins.core.number.UInt64 import org.bitcoins.core.protocol.CompactSizeUInt -import org.bitcoins.node.messages.TypeIdentifier.MsgTx -import org.bitcoins.node.messages.data.Inventory +import org.bitcoins.core.p2p.Inventory +import org.bitcoins.core.p2p.TypeIdentifier.MsgTx import org.scalatest.{FlatSpec, MustMatchers} /** diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetHeadersMessageSerializerTest.scala b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawGetHeadersMessageSerializerTest.scala similarity index 91% rename from node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetHeadersMessageSerializerTest.scala rename to core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawGetHeadersMessageSerializerTest.scala index c26c72f434..53ace6f454 100644 --- a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetHeadersMessageSerializerTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawGetHeadersMessageSerializerTest.scala @@ -1,9 +1,9 @@ -package org.bitcoins.node.serializers.messages.data +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.crypto.DoubleSha256Digest +import org.bitcoins.core.p2p._ import org.bitcoins.core.number.UInt64 import org.bitcoins.core.protocol.CompactSizeUInt -import org.bitcoins.node.versions.ProtocolVersion70002 import org.bitcoins.testkit.node.NodeTestUtil import org.scalatest.{FlatSpec, MustMatchers} diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawHeadersMessageSerializerTest.scala b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawHeadersMessageSerializerTest.scala similarity index 98% rename from node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawHeadersMessageSerializerTest.scala rename to core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawHeadersMessageSerializerTest.scala index 36b35ba975..45f65ae17c 100644 --- a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawHeadersMessageSerializerTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawHeadersMessageSerializerTest.scala @@ -1,4 +1,4 @@ -package org.bitcoins.node.serializers.messages.data +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.crypto.DoubleSha256Digest import org.bitcoins.core.number.{UInt32, UInt64} diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawInventoryMessageSerializerTest.scala b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawInventoryMessageSerializerTest.scala similarity index 95% rename from node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawInventoryMessageSerializerTest.scala rename to core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawInventoryMessageSerializerTest.scala index 9b9103de2c..9620f7e35d 100644 --- a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawInventoryMessageSerializerTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawInventoryMessageSerializerTest.scala @@ -1,4 +1,4 @@ -package org.bitcoins.node.serializers.messages.data +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.number.UInt64 import org.bitcoins.core.protocol.CompactSizeUInt diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawInventorySerializerTest.scala b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawInventorySerializerTest.scala similarity index 90% rename from node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawInventorySerializerTest.scala rename to core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawInventorySerializerTest.scala index 3d541854c3..ca8d6b56ba 100644 --- a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawInventorySerializerTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawInventorySerializerTest.scala @@ -1,8 +1,8 @@ -package org.bitcoins.node.serializers.messages.data +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.crypto.DoubleSha256Digest import org.bitcoins.core.util.BitcoinSUtil -import org.bitcoins.node.messages.TypeIdentifier.MsgTx +import org.bitcoins.core.p2p.TypeIdentifier.MsgTx import org.scalatest.{FlatSpec, MustMatchers} /** diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawMerkleBlockMessageSerializerTest.scala b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawMerkleBlockMessageSerializerTest.scala similarity index 95% rename from node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawMerkleBlockMessageSerializerTest.scala rename to core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawMerkleBlockMessageSerializerTest.scala index 802295aabd..bda6c56718 100644 --- a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawMerkleBlockMessageSerializerTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawMerkleBlockMessageSerializerTest.scala @@ -1,4 +1,4 @@ -package org.bitcoins.node.serializers.messages.data +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.crypto.DoubleSha256Digest import org.bitcoins.core.number.{UInt32, UInt64} @@ -7,9 +7,6 @@ import org.bitcoins.core.util.BitcoinSUtil import org.scalatest.{FlatSpec, MustMatchers} import scodec.bits.BitVector -/** - * Created by chris on 6/2/16. - */ class RawMerkleBlockMessageSerializerTest extends FlatSpec with MustMatchers { //from bitcoin developer reference diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawNetworkIpAddressSerializerTest.scala b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawNetworkIpAddressSerializerTest.scala similarity index 82% rename from node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawNetworkIpAddressSerializerTest.scala rename to core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawNetworkIpAddressSerializerTest.scala index 9894b75f16..96ec34f509 100644 --- a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawNetworkIpAddressSerializerTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawNetworkIpAddressSerializerTest.scala @@ -1,13 +1,9 @@ -package org.bitcoins.node.serializers.messages.control +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.number.UInt32 -import org.bitcoins.node.messages.control.NodeNetwork -import org.bitcoins.node.messages.control.NodeNetwork +import org.bitcoins.core.p2p.NodeNetwork import org.scalatest.{FlatSpec, MustMatchers} -/** - * Created by chris on 6/2/16. - */ class RawNetworkIpAddressSerializerTest extends FlatSpec with MustMatchers { //from this bitcoin developer guide example diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawNotFoundMessageSerializerTest.scala b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawNotFoundMessageSerializerTest.scala similarity index 92% rename from node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawNotFoundMessageSerializerTest.scala rename to core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawNotFoundMessageSerializerTest.scala index 2714f88c45..60b50d31a1 100644 --- a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawNotFoundMessageSerializerTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawNotFoundMessageSerializerTest.scala @@ -1,12 +1,9 @@ -package org.bitcoins.node.serializers.messages.data +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.number.UInt64 import org.bitcoins.core.protocol.CompactSizeUInt import org.scalatest.{FlatSpec, MustMatchers} -/** - * Created by chris on 6/2/16. - */ class RawNotFoundMessageSerializerTest extends FlatSpec with MustMatchers { //according to the developer reference, the format for inventory messages and diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawPingMessageSerializerTest.scala b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawPingMessageSerializerTest.scala similarity index 83% rename from node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawPingMessageSerializerTest.scala rename to core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawPingMessageSerializerTest.scala index 58781887da..30c949af81 100644 --- a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawPingMessageSerializerTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawPingMessageSerializerTest.scala @@ -1,7 +1,7 @@ -package org.bitcoins.node.serializers.messages.control +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.number.UInt64 -import org.bitcoins.node.messages.control.PingMessage +import org.bitcoins.core.p2p.PingMessage import org.scalatest.{FlatSpec, MustMatchers} /** diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawRejectMessageSerializerTest.scala b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawRejectMessageSerializerTest.scala similarity index 95% rename from node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawRejectMessageSerializerTest.scala rename to core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawRejectMessageSerializerTest.scala index e83158df01..84eba95695 100644 --- a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawRejectMessageSerializerTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawRejectMessageSerializerTest.scala @@ -1,4 +1,4 @@ -package org.bitcoins.node.serializers.messages.control +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.number.UInt64 import org.bitcoins.core.protocol.CompactSizeUInt diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawServiceIdentifierSerializerTest.scala b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawServiceIdentifierSerializerTest.scala similarity index 82% rename from node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawServiceIdentifierSerializerTest.scala rename to core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawServiceIdentifierSerializerTest.scala index e831b0fa37..595012052b 100644 --- a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawServiceIdentifierSerializerTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawServiceIdentifierSerializerTest.scala @@ -1,7 +1,6 @@ -package org.bitcoins.node.serializers.messages.control +package org.bitcoins.core.serializers.p2p.messages -import org.bitcoins.node.messages.control.{NodeNetwork, UnnamedService} -import org.bitcoins.node.messages.control.{NodeNetwork, UnnamedService} +import org.bitcoins.core.p2p.{NodeNetwork, UnnamedService} import org.scalatest.{FlatSpec, MustMatchers} /** diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawTransactionMessageSerializerTest.scala b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawTransactionMessageSerializerTest.scala similarity index 89% rename from node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawTransactionMessageSerializerTest.scala rename to core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawTransactionMessageSerializerTest.scala index 2919d0880f..3ebff510f3 100644 --- a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawTransactionMessageSerializerTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawTransactionMessageSerializerTest.scala @@ -1,12 +1,9 @@ -package org.bitcoins.node.serializers.messages.data +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.util.BitcoinSUtil import org.bitcoins.testkit.node.NodeTestUtil import org.scalatest.{FlatSpec, MustMatchers} -/** - * Created by chris on 6/2/16. - */ class RawTransactionMessageSerializerTest extends FlatSpec with MustMatchers { "RawTransactionMessageSerializer" must "read a TransactionMessage from a sequence of bytes" in { diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/RawTypeIdentifierSerializerTest.scala b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawTypeIdentifierSerializerTest.scala similarity index 86% rename from node-test/src/test/scala/org/bitcoins/node/serializers/messages/RawTypeIdentifierSerializerTest.scala rename to core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawTypeIdentifierSerializerTest.scala index 889000597b..697f9d812a 100644 --- a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/RawTypeIdentifierSerializerTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawTypeIdentifierSerializerTest.scala @@ -1,10 +1,6 @@ -package org.bitcoins.node.serializers.messages +package org.bitcoins.core.serializers.p2p.messages -import org.bitcoins.node.messages.TypeIdentifier.{ - MsgBlock, - MsgFilteredBlock, - MsgTx -} +import org.bitcoins.core.p2p.TypeIdentifier.{MsgBlock, MsgFilteredBlock, MsgTx} import org.scalatest.{FlatSpec, MustMatchers} /** diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawVersionMessageSerializerTest.scala b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawVersionMessageSerializerTest.scala similarity index 91% rename from node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawVersionMessageSerializerTest.scala rename to core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawVersionMessageSerializerTest.scala index 7fb593d78e..fd5e685d8b 100644 --- a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawVersionMessageSerializerTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/serializers/p2p/messages/RawVersionMessageSerializerTest.scala @@ -1,25 +1,14 @@ -package org.bitcoins.node.serializers.messages.control +package org.bitcoins.core.serializers.p2p.messages import java.net.InetSocketAddress import org.bitcoins.core.number.{Int32, Int64, UInt64} import org.bitcoins.core.protocol.CompactSizeUInt import org.bitcoins.core.util.BitcoinSUtil -import org.bitcoins.node.messages.control.{NodeNetwork, UnnamedService} +import org.bitcoins.core.p2p._ import org.bitcoins.node.util.BitcoinSpvNodeUtil -import org.bitcoins.node.versions.{ProtocolVersion, ProtocolVersion70002} -import org.bitcoins.node.messages.control.{NodeNetwork, UnnamedService} -import org.bitcoins.node.util.BitcoinSpvNodeUtil -import org.bitcoins.node.versions.{ - ProtocolVersion, - ProtocolVersion70002, - ProtocolVersion70012 -} import org.scalatest.{FlatSpec, MustMatchers} -/** - * Created by chris on 6/3/16. - */ class RawVersionMessageSerializerTest extends FlatSpec with MustMatchers { //take from the bitcoin developer reference underneath this seciton @@ -54,13 +43,13 @@ class RawVersionMessageSerializerTest extends FlatSpec with MustMatchers { versionMessage.timestamp must be(Int64(1415483324)) versionMessage.addressReceiveServices must be(NodeNetwork) - BitcoinSpvNodeUtil + NetworkIpAddress .writeAddress(versionMessage.addressReceiveIpAddress) .toHex must be(receivingNodeIpAddress) versionMessage.addressReceivePort must be(8333) versionMessage.addressTransServices must be(NodeNetwork) - BitcoinSpvNodeUtil + NetworkIpAddress .writeAddress(versionMessage.addressTransIpAddress) .toHex must be(transNodeIpAddress) versionMessage.addressTransPort must be(8333) diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/Inventory.scala b/core/src/main/scala/org/bitcoins/core/p2p/Inventory.scala similarity index 72% rename from node/src/main/scala/org/bitcoins/node/messages/data/Inventory.scala rename to core/src/main/scala/org/bitcoins/core/p2p/Inventory.scala index e6d091735d..c88897111d 100644 --- a/node/src/main/scala/org/bitcoins/node/messages/data/Inventory.scala +++ b/core/src/main/scala/org/bitcoins/core/p2p/Inventory.scala @@ -1,18 +1,14 @@ -package org.bitcoins.node.messages.data +package org.bitcoins.core.p2p import org.bitcoins.core.crypto.DoubleSha256Digest import org.bitcoins.core.protocol.NetworkElement import org.bitcoins.core.util.Factory -import org.bitcoins.node.messages.TypeIdentifier -import org.bitcoins.node.serializers.messages.data.RawInventorySerializer -import org.bitcoins.node.messages.TypeIdentifier -import org.bitcoins.node.serializers.messages.data.RawInventorySerializer +import org.bitcoins.core.serializers.p2p.messages.RawInventorySerializer import scodec.bits.ByteVector /** - * Created by chris on 5/31/16. * These are used as unique identifiers inside the peer-to-peer network - * [[https://bitcoin.org/en/developer-reference#term-inventory]] + * @see [[https://bitcoin.org/en/developer-reference#term-inventory]] */ trait Inventory extends NetworkElement { @@ -47,3 +43,6 @@ object Inventory extends Factory[Inventory] { InventoryImpl(typeIdentifier, hash) } } + + + diff --git a/node/src/main/scala/org/bitcoins/node/headers/NetworkHeader.scala b/core/src/main/scala/org/bitcoins/core/p2p/NetworkHeader.scala similarity index 86% rename from node/src/main/scala/org/bitcoins/node/headers/NetworkHeader.scala rename to core/src/main/scala/org/bitcoins/core/p2p/NetworkHeader.scala index f90f4d18b9..9cb58354ac 100644 --- a/node/src/main/scala/org/bitcoins/node/headers/NetworkHeader.scala +++ b/core/src/main/scala/org/bitcoins/core/p2p/NetworkHeader.scala @@ -1,19 +1,15 @@ -package org.bitcoins.node.headers +package org.bitcoins.core.p2p import org.bitcoins.core.config.NetworkParameters import org.bitcoins.core.number.UInt32 import org.bitcoins.core.protocol.NetworkElement +import org.bitcoins.core.serializers.p2p.headers.RawNetworkHeaderSerializer import org.bitcoins.core.util.{CryptoUtil, Factory} -import org.bitcoins.node.messages.NetworkPayload -import org.bitcoins.node.serializers.headers.RawNetworkHeaderSerializer -import org.bitcoins.node.messages.NetworkPayload -import org.bitcoins.node.serializers.headers.RawNetworkHeaderSerializer import scodec.bits.ByteVector /** - * Created by chris on 5/31/16. * Represents a message header on the peer-to-peer network - * https://bitcoin.org/en/developer-reference#message-headers + * @see https://bitcoin.org/en/developer-reference#message-headers */ sealed trait NetworkHeader extends NetworkElement { @@ -22,23 +18,18 @@ sealed trait NetworkHeader extends NetworkElement { /** * Magic bytes indicating the originating network; * used to seek to next message when stream state is unknown. - * @return */ def network: ByteVector /** * ASCII string which identifies what message type is contained in the payload. * Followed by nulls (0x00) to pad out byte count; for example: version\0\0\0\0\0. - * - * @return */ def commandName: String /** * Number of bytes in payload. The current maximum number of bytes (MAX_SIZE) allowed in the payload * by Bitcoin Core is 32 MiB—messages with a payload size larger than this will be dropped or rejected. - * - * @return */ def payloadSize: UInt32 @@ -47,8 +38,6 @@ sealed trait NetworkHeader extends NetworkElement { * First 4 bytes of SHA256(SHA256(payload)) in internal byte order. * If payload is empty, as in verack and getaddr messages, * the checksum is always 0x5df6e0e2 (SHA256(SHA256(""))). - * - * @return */ def checksum: ByteVector @@ -74,7 +63,6 @@ object NetworkHeader extends Factory[NetworkHeader] { * @param commandName the name of the command being sent in the header * @param payloadSize the size of the payload being sent by this header * @param checksum the checksum of the payload to ensure that the entire payload was sent - * @return */ def apply( network: ByteVector, @@ -88,7 +76,6 @@ object NetworkHeader extends Factory[NetworkHeader] { * Creates a [[NetworkHeader]] from it's [[NetworkParameters]] and [[NetworkPayload]] * @param network the [[NetworkParameters]] object that indicates what network the payload needs to be sent on * @param payload the [[NetworkPayload]] object that needs to be sent on the network - * @return */ def apply( network: NetworkParameters, diff --git a/node/src/main/scala/org/bitcoins/node/util/NetworkIpAddress.scala b/core/src/main/scala/org/bitcoins/core/p2p/NetworkIpAddress.scala similarity index 70% rename from node/src/main/scala/org/bitcoins/node/util/NetworkIpAddress.scala rename to core/src/main/scala/org/bitcoins/core/p2p/NetworkIpAddress.scala index 0353e3ee92..eb98240507 100644 --- a/node/src/main/scala/org/bitcoins/node/util/NetworkIpAddress.scala +++ b/core/src/main/scala/org/bitcoins/core/p2p/NetworkIpAddress.scala @@ -1,19 +1,16 @@ -package org.bitcoins.node.util +package org.bitcoins.core.p2p import java.net.{InetAddress, InetSocketAddress} import org.bitcoins.core.number.UInt32 import org.bitcoins.core.protocol.NetworkElement +import org.bitcoins.core.serializers.p2p.messages.RawNetworkIpAddressSerializer import org.bitcoins.core.util.Factory -import org.bitcoins.node.messages.control.{NodeNetwork, ServiceIdentifier} -import org.bitcoins.node.messages.control.ServiceIdentifier -import org.bitcoins.node.serializers.messages.control.RawNetworkIpAddressSerializer -import scodec.bits.ByteVector +import scodec.bits._ /** - * Created by chris on 5/31/16. * Encapsulated network IP address currently uses the following structure - * https://bitcoin.org/en/developer-reference#addr + * @see https://bitcoin.org/en/developer-reference#addr */ sealed abstract class NetworkIpAddress extends NetworkElement { @@ -24,23 +21,17 @@ sealed abstract class NetworkIpAddress extends NetworkElement { * Other nodes just relaying the IP address should not change the time. * Nodes can use the time field to avoid relaying old addr messages. * Malicious nodes may change times or even set them in the future. - * - * @return */ def time: UInt32 /** * The services the node advertised in its version message. - * - * @return */ def services: ServiceIdentifier /** * IPv6 address in big endian byte order. * IPv4 addresses can be provided as IPv4-mapped IPv6 addresses - * - * @return */ def address: InetAddress @@ -49,8 +40,6 @@ sealed abstract class NetworkIpAddress extends NetworkElement { * Note that Bitcoin Core will only connect to nodes with non-standard port numbers as * a last resort for finding peers. This is to prevent anyone from trying to use the * network to disrupt non-Bitcoin services that run on other ports. - * - * @return */ def port: Int @@ -58,6 +47,30 @@ sealed abstract class NetworkIpAddress extends NetworkElement { } object NetworkIpAddress extends Factory[NetworkIpAddress] { + + /** + * Writes an IP address to the representation that the p2p network requires. + * An IPv6 address is in big endian byte order. + * An IPv4 address has to be mapped to an IPv6 address. + * + * @see https://en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses + */ + def writeAddress(iNetAddress: InetAddress): ByteVector = { + if (iNetAddress.getAddress.size == 4) { + //this means we need to convert the IPv4 address to an IPv6 address + //first we have an 80 bit prefix of zeros + val zeroBytes = ByteVector.fill(10)(0) + //the next 16 bits are ones + val oneBytes = hex"ffff" + + val prefix: ByteVector = zeroBytes ++ oneBytes + val addr = prefix ++ ByteVector(iNetAddress.getAddress) + addr + } else { + ByteVector(iNetAddress.getAddress) + } + } + private case class NetworkIpAddressImpl( time: UInt32, services: ServiceIdentifier, diff --git a/node/src/main/scala/org/bitcoins/node/NetworkMessage.scala b/core/src/main/scala/org/bitcoins/core/p2p/NetworkMessage.scala similarity index 82% rename from node/src/main/scala/org/bitcoins/node/NetworkMessage.scala rename to core/src/main/scala/org/bitcoins/core/p2p/NetworkMessage.scala index 023bbd48a0..2129359e1e 100644 --- a/node/src/main/scala/org/bitcoins/node/NetworkMessage.scala +++ b/core/src/main/scala/org/bitcoins/core/p2p/NetworkMessage.scala @@ -1,14 +1,9 @@ -package org.bitcoins.node +package org.bitcoins.core.p2p import org.bitcoins.core.config.NetworkParameters import org.bitcoins.core.protocol.NetworkElement +import org.bitcoins.core.serializers.p2p.RawNetworkMessageSerializer import org.bitcoins.core.util.Factory -import org.bitcoins.node.headers.NetworkHeader -import org.bitcoins.node.messages.NetworkPayload -import org.bitcoins.node.serializers.RawNetworkMessageSerializer -import org.bitcoins.node.headers.NetworkHeader -import org.bitcoins.node.messages.NetworkPayload -import org.bitcoins.node.serializers.RawNetworkMessageSerializer import scodec.bits.ByteVector /** diff --git a/node/src/main/scala/org/bitcoins/node/messages/NetworkPayload.scala b/core/src/main/scala/org/bitcoins/core/p2p/NetworkPayload.scala similarity index 58% rename from node/src/main/scala/org/bitcoins/node/messages/NetworkPayload.scala rename to core/src/main/scala/org/bitcoins/core/p2p/NetworkPayload.scala index f804e962af..e3a7c0724e 100644 --- a/node/src/main/scala/org/bitcoins/node/messages/NetworkPayload.scala +++ b/core/src/main/scala/org/bitcoins/core/p2p/NetworkPayload.scala @@ -1,4 +1,4 @@ -package org.bitcoins.node.messages +package org.bitcoins.core.p2p import java.net.InetAddress @@ -10,19 +10,17 @@ import org.bitcoins.core.protocol.transaction.Transaction import org.bitcoins.core.protocol.{CompactSizeUInt, NetworkElement} import org.bitcoins.core.util.BitcoinSUtil import org.bitcoins.core.wallet.fee.{SatoshisPerByte, SatoshisPerKiloByte} -import org.bitcoins.node.headers.NetworkHeader -import org.bitcoins.node.messages.control.ServiceIdentifier -import org.bitcoins.node.messages.data.Inventory -import org.bitcoins.node.serializers.messages.control._ -import org.bitcoins.node.serializers.messages.data._ -import org.bitcoins.node.util.NetworkIpAddress -import org.bitcoins.node.versions.ProtocolVersion +import org.bitcoins.core.serializers.p2p.messages._ import scodec.bits.ByteVector +import org.bitcoins.core.util.Factory +import org.bitcoins.core.config.NetworkParameters +import java.net.InetSocketAddress +import org.bitcoins.core.number.UInt32 +import org.bitcoins.core.bloom.BloomFlag /** - * Created by chris on 5/31/16. * Trait that represents a payload for a message on the Bitcoin p2p network - * [[https://bitcoin.org/en/developer-reference#p2p-network]] + * @see [[https://bitcoin.org/en/developer-reference#p2p-network]] */ sealed trait NetworkPayload extends NetworkElement { @@ -30,8 +28,7 @@ sealed trait NetworkPayload extends NetworkElement { * ASCII string which identifies what message type is contained in the payload. * Followed by nulls (0x00) to pad out byte count; for example: version\0\0\0\0\0. * Command names need to be 12 bytes long - * This is generally used to build a [[org.bitcoins.node.headers.NetworkHeader]] - * @return + * This is generally used to build a [[org.bitcoins.core.p2p.NetworkHeader]] */ def commandName: String } @@ -50,7 +47,6 @@ trait BlockMessage extends DataPayload { /** * The block being transmitted inside of this [[BlockMessage]] - * @return */ def block: Block @@ -59,18 +55,28 @@ trait BlockMessage extends DataPayload { override def bytes: ByteVector = RawBlockMessageSerializer.write(this) } +object BlockMessage extends Factory[BlockMessage] { + + private case class BlockMessageImpl(block: Block) extends BlockMessage + + def fromBytes(bytes: ByteVector): BlockMessage = + RawBlockMessageSerializer.read(bytes) + + def apply(block: Block): BlockMessage = BlockMessageImpl(block) + +} + /** - * The getblocks message requests an inv message that provides block header hashes + * The `getblocks` message requests an inv message that provides block header hashes * starting from a particular point in the block chain. * It allows a peer which has been disconnected or started for the first time to get the data * it needs to request the blocks it hasn’t seen. - * [[https://bitcoin.org/en/developer-reference#getblocks]] + * @see [https://bitcoin.org/en/developer-reference#getblocks]] */ trait GetBlocksMessage extends DataPayload { /** * The protocol version number; the same as sent in the version message. - * @return */ def protocolVersion: ProtocolVersion @@ -78,7 +84,6 @@ trait GetBlocksMessage extends DataPayload { * The number of header hashes provided not including the stop hash. * There is no limit except that the byte size of the entire message * must be below the MAX_SIZE limit; typically from 1 to 200 hashes are sent. - * @return */ def hashCount: CompactSizeUInt @@ -86,7 +91,6 @@ trait GetBlocksMessage extends DataPayload { * One or more block header hashes (32 bytes each) in internal byte order. * Hashes should be provided in reverse order of block height, * so highest-height hashes are listed first and lowest-height hashes are listed last. - * @return */ def blockHeaderHashes: Seq[DoubleSha256Digest] @@ -96,7 +100,6 @@ trait GetBlocksMessage extends DataPayload { * header hashes (a maximum of 500 will be sent as a reply to this message; * if you need more than 500, you will need to send another getblocks message * with a higher-height header hash as the first entry in block header hash field). - * @return */ def stopHash: DoubleSha256Digest @@ -105,23 +108,54 @@ trait GetBlocksMessage extends DataPayload { override def bytes: ByteVector = RawGetBlocksMessageSerializer.write(this) } +/** + * This is the companion object for the GetBlocks network message on the p2p network + * @see https://bitcoin.org/en/developer-reference#getblocks + */ +object GetBlocksMessage extends Factory[GetBlocksMessage] { + + private case class GetBlocksMessageImpl( + protocolVersion: ProtocolVersion, + hashCount: CompactSizeUInt, + blockHeaderHashes: Seq[DoubleSha256Digest], + stopHash: DoubleSha256Digest) + extends GetBlocksMessage + + def apply( + version: ProtocolVersion, + hashCount: CompactSizeUInt, + blockHeaderHashes: Seq[DoubleSha256Digest], + stopHash: DoubleSha256Digest): GetBlocksMessage = { + GetBlocksMessageImpl(version, hashCount, blockHeaderHashes, stopHash) + } + + def apply( + version: ProtocolVersion, + blockHeaderHashes: Seq[DoubleSha256Digest], + stopHash: DoubleSha256Digest): GetBlocksMessage = { + val hashCount = CompactSizeUInt(UInt64(blockHeaderHashes.length)) + GetBlocksMessage(version, hashCount, blockHeaderHashes, stopHash) + } + + def fromBytes(bytes: ByteVector): GetBlocksMessage = + RawGetBlocksMessageSerializer.read(bytes) +} + /** * The getdata message requests one or more data objects from another node. * The objects are requested by an inventory, * which the requesting node typically previously received by way of an inv message. - * [[https://bitcoin.org/en/developer-reference#getdata]] + * @see [[https://bitcoin.org/en/developer-reference#getdata]] */ trait GetDataMessage extends DataPayload { /** * The number of inventory enteries - * @return */ def inventoryCount: CompactSizeUInt /** * One or more inventory entries up to a maximum of 50,000 entries. - * @return */ def inventories: Seq[Inventory] @@ -130,6 +164,31 @@ trait GetDataMessage extends DataPayload { override def bytes: ByteVector = RawGetDataMessageSerializer.write(this) } +object GetDataMessage extends Factory[GetDataMessage] { + private case class GetDataMessageImpl( + inventoryCount: CompactSizeUInt, + inventories: Seq[Inventory]) + extends GetDataMessage + + override def fromBytes(bytes: ByteVector): GetDataMessage = { + RawGetDataMessageSerializer.read(bytes) + } + + def apply( + inventoryCount: CompactSizeUInt, + inventories: Seq[Inventory]): GetDataMessage = { + GetDataMessageImpl(inventoryCount, inventories) + } + + def apply(inventories: Seq[Inventory]): GetDataMessage = { + val inventoryCount = CompactSizeUInt(UInt64(inventories.length)) + GetDataMessage(inventoryCount, inventories) + } + + def apply(inventory: Inventory): GetDataMessage = + GetDataMessage(Seq(inventory)) +} + /** * The getheaders message requests a headers message that provides block headers starting * from a particular point in the block chain. @@ -147,10 +206,61 @@ trait GetHeadersMessage extends DataPayload { override def bytes: ByteVector = RawGetHeadersMessageSerializer.write(this) } +object GetHeadersMessage extends Factory[GetHeadersMessage] { + private case class GetHeadersMessageImpl( + version: ProtocolVersion, + hashCount: CompactSizeUInt, + hashes: Seq[DoubleSha256Digest], + hashStop: DoubleSha256Digest) + extends GetHeadersMessage + + override def fromBytes(bytes: ByteVector): GetHeadersMessage = + RawGetHeadersMessageSerializer.read(bytes) + + def apply( + version: ProtocolVersion, + hashCount: CompactSizeUInt, + hashes: Seq[DoubleSha256Digest], + hashStop: DoubleSha256Digest): GetHeadersMessage = { + GetHeadersMessageImpl(version, hashCount, hashes, hashStop) + } + + def apply( + version: ProtocolVersion, + hashes: Seq[DoubleSha256Digest], + hashStop: DoubleSha256Digest): GetHeadersMessage = { + val hashCount = CompactSizeUInt(UInt64(hashes.length)) + GetHeadersMessage(version, hashCount, hashes, hashStop) + } + + /** Creates a [[GetHeadersMessage]] with the default protocol version */ + def apply( + hashes: Seq[DoubleSha256Digest], + hashStop: DoubleSha256Digest): GetHeadersMessage = { + GetHeadersMessage(ProtocolVersion.default, hashes, hashStop) + } + + /** Creates a [[GetHeadersMessage]] with no hash stop set, this requests all possible blocks + * if we need more than 2000 block headers, we will have to send another [[GetHeadersMessage]] + * + * @see [[https://bitcoin.org/en/developer-reference#getheaders]] + */ + def apply(hashes: Seq[DoubleSha256Digest]): GetHeadersMessage = { + //The header hash of the last header hash being requested; set to all zeroes to request an inv message with all + //subsequent header hashes (a maximum of 2000 will be sent as a reply to this message + val hashStop = DoubleSha256Digest.empty + GetHeadersMessage(hashes, hashStop) + } + + def apply(hashes: DoubleSha256Digest): GetHeadersMessage = { + GetHeadersMessage(Vector(hashes)) + } +} + /** * The headers message sends one or more block headers to a node * which previously requested certain headers with a getheaders message. - * [[https://bitcoin.org/en/developer-reference#headers]] + * @see [[https://bitcoin.org/en/developer-reference#headers]] */ trait HeadersMessage extends DataPayload { @@ -158,7 +268,6 @@ trait HeadersMessage extends DataPayload { * Number of block headers up to a maximum of 2,000. * Note: headers-first sync assumes the sending node * will send the maximum number of headers whenever possible. - * @return */ def count: CompactSizeUInt @@ -167,7 +276,6 @@ trait HeadersMessage extends DataPayload { * block headers section with an additional 0x00 suffixed. * This 0x00 is called the transaction count, but because the headers message * doesn’t include any transactions, the transaction count is always zero. - * @return */ def headers: Vector[BlockHeader] @@ -176,23 +284,41 @@ trait HeadersMessage extends DataPayload { override def bytes: ByteVector = RawHeadersMessageSerializer.write(this) } +object HeadersMessage extends Factory[HeadersMessage] { + private case class HeadersMessageImpl( + count: CompactSizeUInt, + headers: Vector[BlockHeader]) + extends HeadersMessage + + def fromBytes(bytes: ByteVector): HeadersMessage = + RawHeadersMessageSerializer.read(bytes) + + def apply( + count: CompactSizeUInt, + headers: Vector[BlockHeader]): HeadersMessage = + HeadersMessageImpl(count, headers) + + def apply(headers: Vector[BlockHeader]): HeadersMessage = { + val count = CompactSizeUInt(UInt64(headers.length)) + HeadersMessageImpl(count, headers) + } +} + /** * The inv message (inventory message) transmits one or more inventories of objects known to the transmitting peer. * It can be sent unsolicited to announce new transactions or blocks, * or it can be sent in reply to a getblocks message or mempool message. - * [[https://bitcoin.org/en/developer-reference#inv]] + * @see [[https://bitcoin.org/en/developer-reference#inv]] */ trait InventoryMessage extends DataPayload { /** * The number of inventory enteries - * @return */ def inventoryCount: CompactSizeUInt /** * One or more inventory entries up to a maximum of 50,000 entries. - * @return */ def inventories: Seq[Inventory] @@ -201,6 +327,31 @@ trait InventoryMessage extends DataPayload { override def bytes: ByteVector = RawInventoryMessageSerializer.write(this) } +/** + * Creates an scala object that represents the inventory type on the p2p network + * @see https://bitcoin.org/en/developer-reference#inv + */ +object InventoryMessage extends Factory[InventoryMessage] { + + private case class InventoryMessageImpl( + inventoryCount: CompactSizeUInt, + inventories: Seq[Inventory]) + extends InventoryMessage + override def fromBytes(bytes: ByteVector): InventoryMessage = + RawInventoryMessageSerializer.read(bytes) + + def apply( + inventoryCount: CompactSizeUInt, + inventories: Seq[Inventory]): InventoryMessage = { + InventoryMessageImpl(inventoryCount, inventories) + } + + def apply(inventories: Seq[Inventory]): InventoryMessage = { + val count = CompactSizeUInt(UInt64(inventories.length)) + InventoryMessage(count, inventories) + } +} + /** * The mempool message requests the TXIDs of transactions that the receiving node has verified * as valid but which have not yet appeared in a block. @@ -218,7 +369,8 @@ case object MemPoolMessage extends DataPayload { * block using the inventory type MSG_MERKLEBLOCK. * It is only part of the reply: if any matching transactions are found, * they will be sent separately as tx messages. - * [[https://bitcoin.org/en/developer-reference#merkleblock]] + * + * @see [[https://bitcoin.org/en/developer-reference#merkleblock]] */ trait MerkleBlockMessage extends DataPayload { @@ -231,34 +383,86 @@ trait MerkleBlockMessage extends DataPayload { } +/** + * @see https://bitcoin.org/en/developer-reference#merkleblock + */ +object MerkleBlockMessage extends Factory[MerkleBlockMessage] { + + private case class MerkleBlockMessageImpl(merkleBlock: MerkleBlock) + extends MerkleBlockMessage + + def fromBytes(bytes: ByteVector): MerkleBlockMessage = + RawMerkleBlockMessageSerializer.read(bytes) + + def apply(merkleBlock: MerkleBlock): MerkleBlockMessage = { + MerkleBlockMessageImpl(merkleBlock) + } +} + /** * The notfound message is a reply to a getdata message which requested an object the receiving * node does not have available for relay. (Nodes are not expected to relay historic transactions * which are no longer in the memory pool or relay set. * Nodes may also have pruned spent transactions from older blocks, making them unable to send those blocks.) - * [[https://bitcoin.org/en/developer-reference#notfound]] + * @see [[https://bitcoin.org/en/developer-reference#notfound]] */ trait NotFoundMessage extends DataPayload with InventoryMessage { override def commandName = NetworkPayload.notFoundCommandName override def bytes: ByteVector = RawNotFoundMessageSerializer.write(this) } +/** + * The companion object factory used to create NotFoundMessages on the p2p network + * @see https://bitcoin.org/en/developer-reference#notfound + */ +object NotFoundMessage extends Factory[NotFoundMessage] { + + private case class NotFoundMessageImpl( + inventoryCount: CompactSizeUInt, + inventories: Seq[Inventory]) + extends NotFoundMessage + + def fromBytes(bytes: ByteVector): NotFoundMessage = + RawNotFoundMessageSerializer.read(bytes) + + def apply( + inventoryCount: CompactSizeUInt, + inventories: Seq[Inventory]): NotFoundMessage = { + NotFoundMessageImpl(inventoryCount, inventories) + } +} + /** * The tx message transmits a single transaction in the raw transaction format. * It can be sent in a variety of situations; - * [[https://bitcoin.org/en/developer-reference#tx]] + * @see [[https://bitcoin.org/en/developer-reference#tx]] */ trait TransactionMessage extends DataPayload { /** * The transaction being sent over the wire - * @return */ def transaction: Transaction override def commandName = NetworkPayload.transactionCommandName override def bytes: ByteVector = RawTransactionMessageSerializer.write(this) } +/** + * Companion factory object for the TransactionMessage on the p2p network + * @see https://bitcoin.org/en/developer-reference#tx + */ +object TransactionMessage extends Factory[TransactionMessage] { + + private case class TransactionMessageImpl(transaction: Transaction) + extends TransactionMessage + + def fromBytes(bytes: ByteVector): TransactionMessage = + RawTransactionMessageSerializer.read(bytes) + + def apply(transaction: Transaction): TransactionMessage = + TransactionMessageImpl(transaction) +} + /** * Represents a control message on this network * [[https://bitcoin.org/en/developer-reference#control-messages]] @@ -272,7 +476,7 @@ sealed trait ControlPayload extends NetworkPayload * Some of its peers send that information to their peers (also unsolicited), * some of which further distribute it, allowing decentralized peer discovery for * any program already on the network. - * [[https://bitcoin.org/en/developer-reference#addr]] + * @see [[https://bitcoin.org/en/developer-reference#addr]] */ trait AddrMessage extends ControlPayload { def ipCount: CompactSizeUInt @@ -281,6 +485,27 @@ trait AddrMessage extends ControlPayload { override def bytes: ByteVector = RawAddrMessageSerializer.write(this) } +/** + * The companion object for an AddrMessage + * @see https://bitcoin.org/en/developer-reference#addr + */ +object AddrMessage extends Factory[AddrMessage] { + + private case class AddrMessageImpl( + ipCount: CompactSizeUInt, + addresses: Seq[NetworkIpAddress]) + extends AddrMessage + + def fromBytes(bytes: ByteVector): AddrMessage = + RawAddrMessageSerializer.read(bytes) + + def apply( + ipCount: CompactSizeUInt, + addresses: Seq[NetworkIpAddress]): AddrMessage = + AddrMessageImpl(ipCount, addresses) + +} + /** * The feefilter message is a request to the receiving peer to not relay any transaction inv messages * to the sending peer where the fee rate for the transaction is below the fee rate specified in the @@ -309,18 +534,35 @@ trait FeeFilterMessage extends ControlPayload { } } +object FeeFilterMessage extends Factory[FeeFilterMessage] { + + private case class FeeFilterMessageImpl(feeRate: SatoshisPerKiloByte) + extends FeeFilterMessage + + override def fromBytes(bytes: ByteVector): FeeFilterMessage = { + RawFeeFilterMessageSerializer.read(bytes) + } + + def apply(satoshisPerKiloByte: SatoshisPerKiloByte): FeeFilterMessage = { + FeeFilterMessageImpl(satoshisPerKiloByte) + } + + def apply(satPerByte: SatoshisPerByte): FeeFilterMessage = { + FeeFilterMessage(satPerByte.toSatPerKb) + } +} + /** * The filteradd message tells the receiving peer to add a single element to a * previously-set bloom filter, such as a new public key. * The element is sent directly to the receiving peer; the peer then uses the parameters * set in the filterload message to add the element to the bloom filter. - * [[https://bitcoin.org/en/developer-reference#filteradd]] + * @see [[https://bitcoin.org/en/developer-reference#filteradd]] */ trait FilterAddMessage extends ControlPayload { /** * The number of bytes in the following element field. - * @return */ def elementSize: CompactSizeUInt @@ -330,7 +572,6 @@ trait FilterAddMessage extends ControlPayload { * onto the stack in a pubkey or signature script. * Elements must be sent in the byte order they would use when appearing in a raw transaction; * for example, hashes should be sent in internal byte order. - * @return */ def element: ByteVector @@ -339,11 +580,30 @@ trait FilterAddMessage extends ControlPayload { override def bytes: ByteVector = RawFilterAddMessageSerializer.write(this) } +/** + * @see [[https://bitcoin.org/en/developer-reference#filteradd]] + */ +object FilterAddMessage extends Factory[FilterAddMessage] { + + private case class FilterAddMessageImpl( + elementSize: CompactSizeUInt, + element: ByteVector) + extends FilterAddMessage + override def fromBytes(bytes: ByteVector): FilterAddMessage = + RawFilterAddMessageSerializer.read(bytes) + + def apply( + elementSize: CompactSizeUInt, + element: ByteVector): FilterAddMessage = { + FilterAddMessageImpl(elementSize, element) + } +} + /** * The filterclear message tells the receiving peer to remove a previously-set bloom filter. * This also undoes the effect of setting the relay field in the version message to 0, * allowing unfiltered access to inv messages announcing new transactions. - * [[https://bitcoin.org/en/developer-reference#filterclear]] + * @see [[https://bitcoin.org/en/developer-reference#filterclear]] */ case object FilterClearMessage extends ControlPayload { override val commandName = NetworkPayload.filterClearCommandName @@ -355,7 +615,7 @@ case object FilterClearMessage extends ControlPayload { * requested merkle blocks through the provided filter. * This allows clients to receive transactions relevant to their wallet plus a configurable * rate of false positive transactions which can provide plausible-deniability privacy. - * [[https://bitcoin.org/en/developer-reference#filterload]] + * @see [[https://bitcoin.org/en/developer-reference#filterload]] */ trait FilterLoadMessage extends ControlPayload { @@ -367,12 +627,58 @@ trait FilterLoadMessage extends ControlPayload { override def bytes: ByteVector = RawFilterLoadMessageSerializer.write(this) } +/** + * @see [[https://bitcoin.org/en/developer-reference#filterload]] + */ +object FilterLoadMessage extends Factory[FilterLoadMessage] { + private case class FilterLoadMessageImpl(bloomFilter: BloomFilter) + extends FilterLoadMessage { + require( + bloomFilter.filterSize.num.toLong <= BloomFilter.maxSize.toLong, + "Can only have a maximum of 36,000 bytes in our filter, got: " + bloomFilter.data.size) + require( + bloomFilter.hashFuncs <= BloomFilter.maxHashFuncs, + "Can only have a maximum of 50 hashFuncs inside FilterLoadMessage, got: " + bloomFilter.hashFuncs) + require( + bloomFilter.filterSize.num.toLong == bloomFilter.data.size, + "Filter Size compactSizeUInt and actual filter size were different, " + + "filterSize: " + bloomFilter.filterSize.num + " actual filter size: " + bloomFilter.data.length + ) + } + + override def fromBytes(bytes: ByteVector): FilterLoadMessage = + RawFilterLoadMessageSerializer.read(bytes) + + def apply( + filterSize: CompactSizeUInt, + filter: ByteVector, + hashFuncs: UInt32, + tweak: UInt32, + flags: BloomFlag): FilterLoadMessage = { + val bloomFilter = BloomFilter(filterSize, filter, hashFuncs, tweak, flags) + FilterLoadMessage(bloomFilter) + } + + def apply( + filter: ByteVector, + hashFuncs: UInt32, + tweak: UInt32, + flags: BloomFlag): FilterLoadMessage = { + val filterSize = CompactSizeUInt(UInt64(filter.length)) + FilterLoadMessage(filterSize, filter, hashFuncs, tweak, flags) + } + + def apply(bloomFilter: BloomFilter): FilterLoadMessage = { + FilterLoadMessageImpl(bloomFilter) + } +} + /** * The getaddr message requests an addr message from the receiving node, * preferably one with lots of IP addresses of other receiving nodes. * The transmitting node can use those IP addresses to quickly update its * database of available nodes rather than waiting for unsolicited addr messages to arrive over time. - * [[https://bitcoin.org/en/developer-reference#getaddr]] + * @see [[https://bitcoin.org/en/developer-reference#getaddr]] */ case object GetAddrMessage extends ControlPayload { override val commandName = NetworkPayload.getAddrCommandName @@ -384,7 +690,7 @@ case object GetAddrMessage extends ControlPayload { * If a TCP/IP error is encountered when sending the ping message (such as a connection timeout), * the transmitting node can assume that the receiving node is disconnected. * The response to a ping message is the pong message. - * [[https://bitcoin.org/en/developer-reference#ping]] + * @see [[https://bitcoin.org/en/developer-reference#ping]] */ trait PingMessage extends ControlPayload { @@ -392,7 +698,6 @@ trait PingMessage extends ControlPayload { * Random nonce assigned to this ping message. * The responding pong message will include this nonce * to identify the ping message to which it is replying. - * @return */ def nonce: UInt64 @@ -401,17 +706,26 @@ trait PingMessage extends ControlPayload { override def bytes: ByteVector = RawPingMessageSerializer.write(this) } +object PingMessage extends Factory[PingMessage] { + private case class PingMessageImpl(nonce: UInt64) extends PingMessage + override def fromBytes(bytes: ByteVector): PingMessage = { + val pingMsg = RawPingMessageSerializer.read(bytes) + PingMessageImpl(pingMsg.nonce) + } + + def apply(nonce: UInt64): PingMessage = PingMessageImpl(nonce) +} + /** * The pong message replies to a ping message, proving to the pinging node that the ponging node is still alive. * Bitcoin Core will, by default, disconnect from any clients which have not responded * to a ping message within 20 minutes. - * [[https://bitcoin.org/en/developer-reference#pong]] + * @see [[https://bitcoin.org/en/developer-reference#pong]] */ trait PongMessage extends ControlPayload { /** * The nonce which is the nonce in the ping message the peer is responding too - * @return */ def nonce: UInt64 @@ -421,42 +735,48 @@ trait PongMessage extends ControlPayload { } +object PongMessage extends Factory[PongMessage] { + private case class PongMessageImpl(nonce: UInt64) extends PongMessage + + def fromBytes(bytes: ByteVector): PongMessage = { + val pongMsg = RawPongMessageSerializer.read(bytes) + PongMessageImpl(pongMsg.nonce) + } + + def apply(nonce: UInt64): PongMessage = PongMessageImpl(nonce) +} + /** * The reject message informs the receiving node that one of its previous messages has been rejected. - * [[https://bitcoin.org/en/developer-reference#reject]] + * @see [[https://bitcoin.org/en/developer-reference#reject]] */ trait RejectMessage extends ControlPayload { /** * The number of bytes in the following message field. - * @return */ def messageSize: CompactSizeUInt /** * The type of message rejected as ASCII text without null padding. * For example: “tx”, “block”, or “version”. - * @return */ def message: String /** * The reject message code. - * @return */ def code: Char /** * The number of bytes in the following reason field. * May be 0x00 if a text reason isn’t provided. - * @return */ def reasonSize: CompactSizeUInt /** * The reason for the rejection in ASCII text. * This should not be displayed to the user; it is only for debugging purposes. - * @return */ def reason: String @@ -464,7 +784,6 @@ trait RejectMessage extends ControlPayload { * Optional additional data provided with the rejection. * For example, most rejections of tx messages or block messages include * the hash of the rejected transaction or block header. See the code table below. - * @return */ def extra: ByteVector @@ -473,6 +792,43 @@ trait RejectMessage extends ControlPayload { override def bytes: ByteVector = RawRejectMessageSerializer.write(this) } +/** + * @see [[https://bitcoin.org/en/developer-reference#reject]] + */ +object RejectMessage extends Factory[RejectMessage] { + private case class RejectMessageImpl( + messageSize: CompactSizeUInt, + message: String, + code: Char, + reasonSize: CompactSizeUInt, + reason: String, + extra: ByteVector) + extends RejectMessage + + def apply( + messageSize: CompactSizeUInt, + message: String, + code: Char, + reasonSize: CompactSizeUInt, + reason: String, + extra: ByteVector): RejectMessage = { + RejectMessageImpl(messageSize, message, code, reasonSize, reason, extra) + } + + def fromBytes(bytes: ByteVector): RejectMessage = + RawRejectMessageSerializer.read(bytes) + + def apply( + message: String, + code: Char, + reason: String, + extra: ByteVector): RejectMessage = { + val messageSize: CompactSizeUInt = CompactSizeUInt(UInt64(message.size)) + val reasonSize: CompactSizeUInt = CompactSizeUInt(UInt64(reason.size)) + RejectMessage(messageSize, message, code, reasonSize, reason, extra) + } +} + /** * The sendheaders message tells the receiving peer to send new block announcements * using a headers message rather than an inv message. @@ -510,13 +866,11 @@ trait VersionMessage extends ControlPayload { /** * The highest protocol version understood by the transmitting node. See the protocol version section. - * @return */ def version: ProtocolVersion /** * The services supported by the transmitting node encoded as a bitfield. See the list of service codes below. - * @return */ def services: ServiceIdentifier @@ -524,7 +878,6 @@ trait VersionMessage extends ControlPayload { * The current Unix epoch time according to the transmitting node’s clock. * Because nodes will reject blocks with timestamps more than two hours in the future, * this field can help other nodes to determine that their clock is wrong. - * @return */ def timestamp: Int64 @@ -532,7 +885,6 @@ trait VersionMessage extends ControlPayload { * The services supported by the receiving node as perceived by the transmitting node. * Same format as the ‘services’ field above. * Bitcoin Core will attempt to provide accurate information. BitcoinJ will, by default, always send 0. - * @return */ def addressReceiveServices: ServiceIdentifier @@ -547,13 +899,11 @@ trait VersionMessage extends ControlPayload { /** * The port number of the receiving node as perceived by the transmitting node in big endian byte order. - * @return */ def addressReceivePort: Int /** * The services supported by the transmitting node. Should be identical to the ‘services’ field above. - * @return */ def addressTransServices: ServiceIdentifier @@ -562,13 +912,11 @@ trait VersionMessage extends ControlPayload { * IPv4 addresses can be provided as IPv4-mapped IPv6 addresses. * Set to ::ffff:127.0.0.1 if unknown. * This is the network address of the node emitting this message - * @return */ def addressTransIpAddress: InetAddress /** * The port number of the transmitting node in big endian byte order. - * @return */ def addressTransPort: Int @@ -577,26 +925,22 @@ trait VersionMessage extends ControlPayload { * If the nonce is 0, the nonce field is ignored. * If the nonce is anything else, a node should terminate the connection on receipt * of a version message with a nonce it previously sent. - * @return */ def nonce: UInt64 /** * Number of bytes in following user_agent field. If 0x00, no user agent field is sent. - * @return */ def userAgentSize: CompactSizeUInt /** * User agent as defined by BIP14. Previously called subVer. - * @return */ def userAgent: String /** * The height of the transmitting node’s best block chain or, * in the case of an SPV client, best block header chain. - * @return */ def startHeight: Int32 @@ -604,7 +948,6 @@ trait VersionMessage extends ControlPayload { * Transaction relay flag. If 0x00, no inv messages or tx messages announcing new transactions * should be sent to this client until it sends a filterload message or filterclear message. * If 0x01, this node wants inv messages and tx messages announcing new transactions. - * @return */ def relay: Boolean @@ -613,6 +956,110 @@ trait VersionMessage extends ControlPayload { override def bytes: ByteVector = RawVersionMessageSerializer.write(this) } +/** + * @see https://bitcoin.org/en/developer-reference#version + */ +object VersionMessage extends Factory[VersionMessage] { + + private case class VersionMessageImpl( + version: ProtocolVersion, + services: ServiceIdentifier, + timestamp: Int64, + addressReceiveServices: ServiceIdentifier, + addressReceiveIpAddress: InetAddress, + addressReceivePort: Int, + addressTransServices: ServiceIdentifier, + addressTransIpAddress: InetAddress, + addressTransPort: Int, + nonce: UInt64, + userAgentSize: CompactSizeUInt, + userAgent: String, + startHeight: Int32, + relay: Boolean) + extends VersionMessage + + override def fromBytes(bytes: ByteVector): VersionMessage = + RawVersionMessageSerializer.read(bytes) + + def apply( + version: ProtocolVersion, + services: ServiceIdentifier, + timestamp: Int64, + addressReceiveServices: ServiceIdentifier, + addressReceiveIpAddress: InetAddress, + addressReceivePort: Int, + addressTransServices: ServiceIdentifier, + addressTransIpAddress: InetAddress, + addressTransPort: Int, + nonce: UInt64, + userAgent: String, + startHeight: Int32, + relay: Boolean): VersionMessage = { + val userAgentSize: CompactSizeUInt = + CompactSizeUInt.calculateCompactSizeUInt(ByteVector(userAgent.getBytes)) + VersionMessageImpl( + version = version, + services = services, + timestamp = timestamp, + addressReceiveServices = addressReceiveServices, + addressReceiveIpAddress = addressReceiveIpAddress, + addressReceivePort = addressReceivePort, + addressTransServices = addressTransServices, + addressTransIpAddress = addressTransIpAddress, + addressTransPort = addressTransPort, + nonce = nonce, + userAgentSize = userAgentSize, + userAgent = userAgent, + startHeight = startHeight, + relay = relay + ) + } + + def apply( + network: NetworkParameters, + receivingIpAddress: InetAddress): VersionMessage = { + val transmittingIpAddress = InetAddress.getLocalHost + VersionMessage(network, receivingIpAddress, transmittingIpAddress) + } + + def apply( + network: NetworkParameters, + 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 = UnnamedService, + timestamp = Int64(java.time.Instant.now.toEpochMilli), + addressReceiveServices = UnnamedService, + addressReceiveIpAddress = receivingIpAddress, + addressReceivePort = network.port, + addressTransServices = NodeNetwork, + addressTransIpAddress = transmittingIpAddress, + addressTransPort = network.port, + nonce = nonce, + userAgent = userAgent, + startHeight = startHeight, + relay = relay + ) + } + + def apply(host: String, network: NetworkParameters): VersionMessage = { + //network.dnsSeeds(0) + val transmittingIpAddress = InetAddress.getByName(host) + VersionMessage(network, transmittingIpAddress) + } + + def apply( + socket: InetSocketAddress, + network: NetworkParameters): VersionMessage = { + VersionMessage(network, socket.getAddress) + } +} + object NetworkPayload { val alertCommandName = "alert" val blockCommandName = "block" @@ -644,7 +1091,6 @@ object NetworkPayload { * required in [[NetworkHeader]] * [[https://bitcoin.org/en/developer-reference#message-headers]] * - * @return */ val commandNames: Map[String, ByteVector => NetworkPayload] = Map( blockCommandName -> { RawBlockMessageSerializer.read(_) }, @@ -688,7 +1134,6 @@ object NetworkPayload { * to determine what type of [[NetworkPayload]] this is * @param networkHeader the header for the message on the p2p network * @param payloadBytes the payload corresponding to the header on the p2p network - * @return */ def apply( networkHeader: NetworkHeader, @@ -704,7 +1149,6 @@ object NetworkPayload { * to determine what type of [[NetworkPayload]] this is * @param networkHeader the header for the message on the p2p network * @param payloadHex the hexadecimal representation of the payload - * @return */ def apply( networkHeader: NetworkHeader, diff --git a/node/src/main/scala/org/bitcoins/node/versions/ProtocolVersion.scala b/core/src/main/scala/org/bitcoins/core/p2p/ProtocolVersion.scala similarity index 75% rename from node/src/main/scala/org/bitcoins/node/versions/ProtocolVersion.scala rename to core/src/main/scala/org/bitcoins/core/p2p/ProtocolVersion.scala index 4ec502c975..cf9f8f2370 100644 --- a/node/src/main/scala/org/bitcoins/node/versions/ProtocolVersion.scala +++ b/core/src/main/scala/org/bitcoins/core/p2p/ProtocolVersion.scala @@ -1,19 +1,24 @@ -package org.bitcoins.node.versions +package org.bitcoins.core.p2p import org.bitcoins.core.protocol.NetworkElement import org.bitcoins.core.util.Factory -import scodec.bits.ByteVector +import scodec.bits._ /** - * Created by chris on 6/1/16. * The peer to peer network has versions to allow for new operations * Here are the currently protocol versions in the network - * [[https://bitcoin.org/en/developer-reference#protocol-versions]] + * @see [[https://bitcoin.org/en/developer-reference#protocol-versions]] */ sealed trait ProtocolVersion extends NetworkElement object ProtocolVersion extends Factory[ProtocolVersion] { + /** The default protocol version */ + val default: ProtocolVersion = ProtocolVersion70013 + + /** The Bitcoin-S node useragent */ + val userAgent = "/bitcoins-spv-node/0.0.1" + val versions: Seq[ProtocolVersion] = List( ProtocolVersion106, ProtocolVersion209, @@ -39,7 +44,7 @@ object ProtocolVersion extends Factory[ProtocolVersion] { * Bitcoin Core 0.1.6 (Oct 2009) */ case object ProtocolVersion106 extends ProtocolVersion { - override val bytes: ByteVector = ByteVector.fromHex("6a000000").get + override val bytes: ByteVector = hex"6a000000" } /** @@ -47,7 +52,7 @@ case object ProtocolVersion106 extends ProtocolVersion { * Bitcoin Core 0.2.9 (May 2010) */ case object ProtocolVersion209 extends ProtocolVersion { - override val bytes: ByteVector = ByteVector.fromHex("d1000000").get + override val bytes: ByteVector = hex"d1000000" } /** @@ -55,7 +60,7 @@ case object ProtocolVersion209 extends ProtocolVersion { * Bitcion Core 0.3.11 (Aug 2010) */ case object ProtocolVersion311 extends ProtocolVersion { - override val bytes: ByteVector = ByteVector.fromHex("37010000").get + override val bytes: ByteVector = hex"37010000" } /** @@ -63,7 +68,7 @@ case object ProtocolVersion311 extends ProtocolVersion { * Bitcoin Core 0.3.15 (Oct 2010) */ case object ProtocolVersion31402 extends ProtocolVersion { - override val bytes: ByteVector = ByteVector.fromHex("aa7a0000").get + override val bytes: ByteVector = hex"aa7a0000" } /** @@ -71,7 +76,7 @@ case object ProtocolVersion31402 extends ProtocolVersion { * Bitcoin Core 0.3.18 (Dec 2010) */ case object ProtocolVersion31800 extends ProtocolVersion { - override val bytes: ByteVector = ByteVector.fromHex("387c0000").get + override val bytes: ByteVector = hex"387c0000" } /** @@ -79,7 +84,7 @@ case object ProtocolVersion31800 extends ProtocolVersion { * Bitcoin Core 0.6.0 (Mar 2012) */ case object ProtocolVersion60000 extends ProtocolVersion { - override val bytes: ByteVector = ByteVector.fromHex("60ea0000").get + override val bytes: ByteVector = hex"60ea0000" } /** @@ -87,7 +92,7 @@ case object ProtocolVersion60000 extends ProtocolVersion { * Bitcoin Core 0.6.1 (May 2012) */ case object ProtocolVersion60001 extends ProtocolVersion { - override val bytes: ByteVector = ByteVector.fromHex("61ea0000").get + override val bytes: ByteVector = hex"61ea0000" } /** @@ -96,7 +101,7 @@ case object ProtocolVersion60001 extends ProtocolVersion { * Bitcoin Core 0.7.0 (Sep 2012) */ case object ProtocolVersion60002 extends ProtocolVersion { - override val bytes: ByteVector = ByteVector.fromHex("62ea0000").get + override val bytes: ByteVector = hex"62ea0000" } /** @@ -111,7 +116,7 @@ case object ProtocolVersion60002 extends ProtocolVersion { * Bitcoin Core 0.8.0 (Feb 2013) */ case object ProtocolVersion70001 extends ProtocolVersion { - override val bytes: ByteVector = ByteVector.fromHex("71110100").get + override val bytes: ByteVector = hex"71110100" } /** @@ -120,7 +125,7 @@ case object ProtocolVersion70001 extends ProtocolVersion { * Bitcoin Core 0.9.0 (Mar 2014) */ case object ProtocolVersion70002 extends ProtocolVersion { - override val bytes: ByteVector = ByteVector.fromHex("72110100").get + override val bytes: ByteVector = hex"72110100" } /** @@ -128,7 +133,7 @@ case object ProtocolVersion70002 extends ProtocolVersion { * Bitcoin Core 0.12.0 */ case object ProtocolVersion70012 extends ProtocolVersion { - override val bytes: ByteVector = ByteVector.fromHex("7c110100").get + override val bytes: ByteVector = hex"7c110100" } /** @@ -137,7 +142,7 @@ case object ProtocolVersion70012 extends ProtocolVersion { * Bitcoin Core 0.13.0 (August 2016) */ case object ProtocolVersion70013 extends ProtocolVersion { - override val bytes: ByteVector = ByteVector.fromHex("7d110100").get + override val bytes: ByteVector = hex"7d110100" } /** @@ -147,7 +152,7 @@ case object ProtocolVersion70013 extends ProtocolVersion { * Bitcoin Core 0.13.0 (August 2016) */ case object ProtocolVersion70014 extends ProtocolVersion { - override val bytes: ByteVector = ByteVector.fromHex("7e110100").get + override val bytes: ByteVector = hex"7e110100" } /** @@ -155,9 +160,5 @@ case object ProtocolVersion70014 extends ProtocolVersion { * Bitcoin Core 0.13.2 (January 2017) */ case object ProtocolVersion70015 extends ProtocolVersion { - override val bytes: ByteVector = ByteVector.fromHex("7f110100").get + override val bytes: ByteVector = hex"7f110100" } - - - - diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/ServiceIdentifier.scala b/core/src/main/scala/org/bitcoins/core/p2p/ServiceIdentifier.scala similarity index 87% rename from node/src/main/scala/org/bitcoins/node/messages/control/ServiceIdentifier.scala rename to core/src/main/scala/org/bitcoins/core/p2p/ServiceIdentifier.scala index dafa4e5617..0d6951804c 100644 --- a/node/src/main/scala/org/bitcoins/node/messages/control/ServiceIdentifier.scala +++ b/core/src/main/scala/org/bitcoins/core/p2p/ServiceIdentifier.scala @@ -1,15 +1,14 @@ -package org.bitcoins.node.messages.control +package org.bitcoins.core.p2p import org.bitcoins.core.number.UInt64 import org.bitcoins.core.protocol.NetworkElement +import org.bitcoins.core.serializers.p2p.messages.RawServiceIdentifierSerializer import org.bitcoins.core.util.Factory -import org.bitcoins.node.serializers.messages.control.RawServiceIdentifierSerializer import scodec.bits.ByteVector /** - * Created by chris on 6/2/16. * Indicates the services that are provided by this spv node - * [[https://bitcoin.org/en/developer-reference#version]] + * @see [[https://bitcoin.org/en/developer-reference#version]] */ sealed trait ServiceIdentifier extends NetworkElement { def num: UInt64 diff --git a/node/src/main/scala/org/bitcoins/node/messages/TypeIdentifier.scala b/core/src/main/scala/org/bitcoins/core/p2p/TypeIdentifier.scala similarity index 82% rename from node/src/main/scala/org/bitcoins/node/messages/TypeIdentifier.scala rename to core/src/main/scala/org/bitcoins/core/p2p/TypeIdentifier.scala index c985296348..c091d9b9ce 100644 --- a/node/src/main/scala/org/bitcoins/node/messages/TypeIdentifier.scala +++ b/core/src/main/scala/org/bitcoins/core/p2p/TypeIdentifier.scala @@ -1,16 +1,15 @@ -package org.bitcoins.node.messages +package org.bitcoins.core.p2p import org.bitcoins.core.number.UInt32 import org.bitcoins.core.protocol.NetworkElement +import org.bitcoins.core.serializers.p2p.messages.RawTypeIdentifierSerializer import org.bitcoins.core.util.Factory -import org.bitcoins.node.serializers.messages.RawTypeIdentifierSerializer -import org.bitcoins.node.serializers.messages.RawTypeIdentifierSerializer import scodec.bits.ByteVector /** - * Created by chris on 5/31/16. * This indicates the type of the object that has been hashed for an inventory - * https://bitcoin.org/en/developer-reference#data-messages + * + * @see https://bitcoin.org/en/developer-reference#data-messages */ sealed trait TypeIdentifier extends NetworkElement { def num: UInt32 diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawNetworkIpAddressSerializer.scala b/core/src/main/scala/org/bitcoins/core/p2p/serializers/messages/RawNetworkIpAddressSerializer.scala similarity index 74% rename from node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawNetworkIpAddressSerializer.scala rename to core/src/main/scala/org/bitcoins/core/p2p/serializers/messages/RawNetworkIpAddressSerializer.scala index 85830fafcf..85928d977d 100644 --- a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawNetworkIpAddressSerializer.scala +++ b/core/src/main/scala/org/bitcoins/core/p2p/serializers/messages/RawNetworkIpAddressSerializer.scala @@ -1,19 +1,16 @@ -package org.bitcoins.node.serializers.messages.control +package org.bitcoins.core.p2p.serializers.messages import java.net.InetAddress import org.bitcoins.core.number.UInt32 import org.bitcoins.core.serializers.RawBitcoinSerializer import org.bitcoins.core.util.{BitcoinSLogger, NumberUtil} -import org.bitcoins.node.messages.control.ServiceIdentifier -import org.bitcoins.node.util.{BitcoinSpvNodeUtil, NetworkIpAddress} -import org.bitcoins.node.util.{BitcoinSpvNodeUtil, NetworkIpAddress} +import org.bitcoins.core.p2p._ import scodec.bits.ByteVector /** - * Created by chris on 6/2/16. * Responsible for serializing and deserializing network ip address objects on the p2p network - * https://bitcoin.org/en/developer-reference#addr + * @see https://bitcoin.org/en/developer-reference#addr */ trait RawNetworkIpAddressSerializer extends RawBitcoinSerializer[NetworkIpAddress] @@ -31,7 +28,7 @@ trait RawNetworkIpAddressSerializer def write(networkIpAddress: NetworkIpAddress): ByteVector = { val time = networkIpAddress.time.bytes.reverse val services = networkIpAddress.services.bytes - val ipAddress = BitcoinSpvNodeUtil.writeAddress(networkIpAddress.address) + val ipAddress = NetworkIpAddress.writeAddress(networkIpAddress.address) //uint16s are only 4 hex characters val port = ByteVector.fromShort(networkIpAddress.port.toShort) time ++ services ++ ipAddress ++ port diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawVersionMessageSerializer.scala b/core/src/main/scala/org/bitcoins/core/p2p/serializers/messages/RawVersionMessageSerializer.scala similarity index 82% rename from node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawVersionMessageSerializer.scala rename to core/src/main/scala/org/bitcoins/core/p2p/serializers/messages/RawVersionMessageSerializer.scala index 6b50f58ec2..95bc3dc220 100644 --- a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawVersionMessageSerializer.scala +++ b/core/src/main/scala/org/bitcoins/core/p2p/serializers/messages/RawVersionMessageSerializer.scala @@ -1,4 +1,4 @@ -package org.bitcoins.node.serializers.messages.control +package org.bitcoins.core.p2p.serializers.messages import java.net.InetAddress @@ -6,19 +6,12 @@ import org.bitcoins.core.number.{Int32, Int64, UInt32, UInt64} import org.bitcoins.core.protocol.CompactSizeUInt import org.bitcoins.core.serializers.RawBitcoinSerializer import org.bitcoins.core.util.BitcoinSLogger -import org.bitcoins.node.messages.VersionMessage -import org.bitcoins.node.messages.control.{ServiceIdentifier, VersionMessage} -import org.bitcoins.node.util.BitcoinSpvNodeUtil -import org.bitcoins.node.versions.ProtocolVersion -import org.bitcoins.node.messages.control.{ServiceIdentifier, VersionMessage} -import org.bitcoins.node.util.BitcoinSpvNodeUtil -import org.bitcoins.node.versions.ProtocolVersion +import org.bitcoins.core.p2p._ import scodec.bits.ByteVector /** - * Created by chris on 6/2/16. * Responsible for serialization and deserialization of VersionMessages on the p2p network - * https://bitcoin.org/en/developer-reference#version + * @see https://bitcoin.org/en/developer-reference#version */ trait RawVersionMessageSerializer extends RawBitcoinSerializer[VersionMessage] @@ -87,12 +80,12 @@ trait RawVersionMessageSerializer versionMessage.services.bytes ++ versionMessage.timestamp.bytes.reverse ++ versionMessage.addressReceiveServices.bytes ++ - BitcoinSpvNodeUtil.writeAddress(versionMessage.addressReceiveIpAddress) ++ + NetworkIpAddress.writeAddress(versionMessage.addressReceiveIpAddress) ++ //encode hex returns 8 characters, but we only need the last 4 since port number is a uint16 //check for precision loss here? ByteVector.fromShort(versionMessage.addressReceivePort.toShort) ++ versionMessage.addressTransServices.bytes ++ - BitcoinSpvNodeUtil.writeAddress(versionMessage.addressTransIpAddress) ++ + NetworkIpAddress.writeAddress(versionMessage.addressTransIpAddress) ++ //encode hex returns 8 characters, but we only need the last 4 since port number is a uint16 //check for precision loss here? ByteVector.fromShort(versionMessage.addressTransPort.toShort) ++ diff --git a/node/src/main/scala/org/bitcoins/node/serializers/RawNetworkMessageSerializer.scala b/core/src/main/scala/org/bitcoins/core/serializers/p2p/RawNetworkMessageSerializer.scala similarity index 67% rename from node/src/main/scala/org/bitcoins/node/serializers/RawNetworkMessageSerializer.scala rename to core/src/main/scala/org/bitcoins/core/serializers/p2p/RawNetworkMessageSerializer.scala index f58721994b..6919fb1190 100644 --- a/node/src/main/scala/org/bitcoins/node/serializers/RawNetworkMessageSerializer.scala +++ b/core/src/main/scala/org/bitcoins/core/serializers/p2p/RawNetworkMessageSerializer.scala @@ -1,16 +1,9 @@ -package org.bitcoins.node.serializers +package org.bitcoins.core.serializers.p2p +import org.bitcoins.core.p2p._ import org.bitcoins.core.serializers.RawBitcoinSerializer -import org.bitcoins.node.NetworkMessage -import org.bitcoins.node.headers.NetworkHeader -import org.bitcoins.node.messages.NetworkPayload -import org.bitcoins.node.NetworkMessage -import org.bitcoins.node.headers.NetworkHeader import scodec.bits.ByteVector -/** - * Created by chris on 6/11/16. - */ trait RawNetworkMessageSerializer extends RawBitcoinSerializer[NetworkMessage] { def read(bytes: ByteVector): NetworkMessage = { diff --git a/node/src/main/scala/org/bitcoins/node/serializers/headers/RawNetworkHeaderSerializer.scala b/core/src/main/scala/org/bitcoins/core/serializers/p2p/headers/RawNetworkHeaderSerializer.scala similarity index 89% rename from node/src/main/scala/org/bitcoins/node/serializers/headers/RawNetworkHeaderSerializer.scala rename to core/src/main/scala/org/bitcoins/core/serializers/p2p/headers/RawNetworkHeaderSerializer.scala index 1ae207baed..186a1ea42d 100644 --- a/node/src/main/scala/org/bitcoins/node/serializers/headers/RawNetworkHeaderSerializer.scala +++ b/core/src/main/scala/org/bitcoins/core/serializers/p2p/headers/RawNetworkHeaderSerializer.scala @@ -1,15 +1,14 @@ -package org.bitcoins.node.serializers.headers +package org.bitcoins.core.serializers.p2p.headers import org.bitcoins.core.number.UInt32 +import org.bitcoins.core.p2p.NetworkHeader import org.bitcoins.core.serializers.RawBitcoinSerializer import org.bitcoins.core.util.BitcoinSLogger -import org.bitcoins.node.headers.NetworkHeader import scodec.bits.ByteVector /** - * Created by chris on 5/31/16. * Reads and writes a message header on the peer-to-peer network - * https://bitcoin.org/en/developer-reference#message-headers + * @see https://bitcoin.org/en/developer-reference#message-headers */ trait RawNetworkHeaderSerializer extends RawBitcoinSerializer[NetworkHeader] diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawAddrMessageSerializer.scala b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawAddrMessageSerializer.scala similarity index 87% rename from node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawAddrMessageSerializer.scala rename to core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawAddrMessageSerializer.scala index 3aa41c6f7f..d95ecf80c5 100644 --- a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawAddrMessageSerializer.scala +++ b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawAddrMessageSerializer.scala @@ -1,18 +1,15 @@ -package org.bitcoins.node.serializers.messages.control +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.protocol.CompactSizeUInt import org.bitcoins.core.serializers.{RawBitcoinSerializer, RawSerializerHelper} -import org.bitcoins.node.messages.AddrMessage -import org.bitcoins.node.messages.control.AddrMessage -import org.bitcoins.node.util.NetworkIpAddress +import org.bitcoins.core.p2p._ import scodec.bits.ByteVector import scala.annotation.tailrec /** - * Created by chris on 6/3/16. * Responsible for the serialization and deserialization of AddrMessages - * https://bitcoin.org/en/developer-reference#addr + * @see https://bitcoin.org/en/developer-reference#addr */ trait RawAddrMessageSerializer extends RawBitcoinSerializer[AddrMessage] { diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawBlockMessageSerializer.scala b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawBlockMessageSerializer.scala similarity index 62% rename from node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawBlockMessageSerializer.scala rename to core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawBlockMessageSerializer.scala index 2b852ec0ca..6da7f32119 100644 --- a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawBlockMessageSerializer.scala +++ b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawBlockMessageSerializer.scala @@ -1,16 +1,10 @@ -package org.bitcoins.node.serializers.messages.data +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.protocol.blockchain.Block import org.bitcoins.core.serializers.RawBitcoinSerializer -import org.bitcoins.node.messages.BlockMessage -import org.bitcoins.node.messages.data.BlockMessage -import org.bitcoins.node.messages.BlockMessage -import org.bitcoins.node.messages.data.BlockMessage +import org.bitcoins.core.p2p.BlockMessage import scodec.bits.ByteVector -/** - * Created by chris on 7/8/16. - */ trait RawBlockMessageSerializer extends RawBitcoinSerializer[BlockMessage] { def read(bytes: ByteVector): BlockMessage = { diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFeeFilterMessageSerializer.scala b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawFeeFilterMessageSerializer.scala similarity index 70% rename from node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFeeFilterMessageSerializer.scala rename to core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawFeeFilterMessageSerializer.scala index ea924f3eaa..61655b7a81 100644 --- a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFeeFilterMessageSerializer.scala +++ b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawFeeFilterMessageSerializer.scala @@ -1,14 +1,14 @@ -package org.bitcoins.node.serializers.messages.control +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.currency.Satoshis import org.bitcoins.core.number.Int64 import org.bitcoins.core.serializers.RawBitcoinSerializer import org.bitcoins.core.wallet.fee.SatoshisPerKiloByte -import org.bitcoins.node.messages.FeeFilterMessage -import org.bitcoins.node.messages.control.FeeFilterMessage +import org.bitcoins.core.p2p._ import scodec.bits.ByteVector -sealed abstract class RawFeeFilterMessageSerializer extends RawBitcoinSerializer[FeeFilterMessage] { +sealed abstract class RawFeeFilterMessageSerializer + extends RawBitcoinSerializer[FeeFilterMessage] { override def read(bytes: ByteVector): FeeFilterMessage = { val i64 = Int64.fromBytes(bytes.take(8).reverse) @@ -22,4 +22,4 @@ sealed abstract class RawFeeFilterMessageSerializer extends RawBitcoinSerializer } } -object RawFeeFilterMessageSerializer extends RawFeeFilterMessageSerializer \ No newline at end of file +object RawFeeFilterMessageSerializer extends RawFeeFilterMessageSerializer diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFilterAddMessageSerializer.scala b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawFilterAddMessageSerializer.scala similarity index 67% rename from node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFilterAddMessageSerializer.scala rename to core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawFilterAddMessageSerializer.scala index d934bc99f8..70395e6d17 100644 --- a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFilterAddMessageSerializer.scala +++ b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawFilterAddMessageSerializer.scala @@ -1,17 +1,13 @@ -package org.bitcoins.node.serializers.messages.control +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.protocol.CompactSizeUInt import org.bitcoins.core.serializers.RawBitcoinSerializer -import org.bitcoins.node.messages.FilterAddMessage -import org.bitcoins.node.messages.control.FilterAddMessage -import org.bitcoins.node.messages.FilterAddMessage -import org.bitcoins.node.messages.control.FilterAddMessage +import org.bitcoins.core.p2p._ import scodec.bits.ByteVector /** - * Created by chris on 8/26/16. * Responsible for serializing and deserializing a [[FilterAddMessage]] - * [[https://bitcoin.org/en/developer-reference#filteradd]] + * @see [[https://bitcoin.org/en/developer-reference#filteradd]] */ trait RawFilterAddMessageSerializer extends RawBitcoinSerializer[FilterAddMessage] { diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFilterLoadMessageSerializer.scala b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawFilterLoadMessageSerializer.scala similarity index 72% rename from node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFilterLoadMessageSerializer.scala rename to core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawFilterLoadMessageSerializer.scala index 228bc287f0..88af9c0794 100644 --- a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFilterLoadMessageSerializer.scala +++ b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawFilterLoadMessageSerializer.scala @@ -1,15 +1,13 @@ -package org.bitcoins.node.serializers.messages.control +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.serializers.RawBitcoinSerializer import org.bitcoins.core.serializers.bloom.RawBloomFilterSerializer -import org.bitcoins.node.messages.FilterLoadMessage -import org.bitcoins.node.messages.control.FilterLoadMessage +import org.bitcoins.core.p2p.FilterLoadMessage import scodec.bits.ByteVector /** - * Created by chris on 7/19/16. * Serializes and deserializes a [[FilterLoadMessage]] - * https://bitcoin.org/en/developer-reference#filterload + * @see https://bitcoin.org/en/developer-reference#filterload */ trait RawFilterLoadMessageSerializer extends RawBitcoinSerializer[FilterLoadMessage] { diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetBlocksMessageSerializer.scala b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawGetBlocksMessageSerializer.scala similarity index 84% rename from node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetBlocksMessageSerializer.scala rename to core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawGetBlocksMessageSerializer.scala index 15413c64e7..0704280ee2 100644 --- a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetBlocksMessageSerializer.scala +++ b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawGetBlocksMessageSerializer.scala @@ -1,23 +1,17 @@ -package org.bitcoins.node.serializers.messages.data +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.crypto.DoubleSha256Digest import org.bitcoins.core.protocol.CompactSizeUInt import org.bitcoins.core.serializers.{RawBitcoinSerializer, RawSerializerHelper} -import org.bitcoins.node.messages.GetBlocksMessage -import org.bitcoins.node.messages.data.GetBlocksMessage -import org.bitcoins.node.versions.ProtocolVersion -import org.bitcoins.node.messages.GetBlocksMessage -import org.bitcoins.node.messages.data.GetBlocksMessage -import org.bitcoins.node.versions.ProtocolVersion +import org.bitcoins.core.p2p._ import scodec.bits.ByteVector import scala.annotation.tailrec /** - * Created by chris on 6/1/16. * This trait is responsible for the serialization and deserialization of * getblocks messages in on the p2p network - * https://bitcoin.org/en/developer-reference#getblocks + * @see https://bitcoin.org/en/developer-reference#getblocks */ trait RawGetBlocksMessageSerializer extends RawBitcoinSerializer[GetBlocksMessage] { diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetDataMessageSerializer.scala b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawGetDataMessageSerializer.scala similarity index 69% rename from node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetDataMessageSerializer.scala rename to core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawGetDataMessageSerializer.scala index aeaeb02a11..15bebc9b33 100644 --- a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetDataMessageSerializer.scala +++ b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawGetDataMessageSerializer.scala @@ -1,14 +1,11 @@ -package org.bitcoins.node.serializers.messages.data +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.serializers.RawBitcoinSerializer -import org.bitcoins.node.messages.GetDataMessage -import org.bitcoins.node.messages.data.{GetDataMessage, InventoryMessage} -import org.bitcoins.node.messages.data.{GetDataMessage, InventoryMessage} +import org.bitcoins.core.p2p.{GetDataMessage, InventoryMessage} import scodec.bits.ByteVector /** - * Created by chris on 7/8/16. - * https://bitcoin.org/en/developer-reference#getdata + * @see https://bitcoin.org/en/developer-reference#getdata */ trait RawGetDataMessageSerializer extends RawBitcoinSerializer[GetDataMessage] { //InventoryMessages & GetDataMessages have the same structure and are serialized the same diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetHeadersMessageSerializer.scala b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawGetHeadersMessageSerializer.scala similarity index 83% rename from node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetHeadersMessageSerializer.scala rename to core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawGetHeadersMessageSerializer.scala index d426e0b7a4..6ae114da83 100644 --- a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetHeadersMessageSerializer.scala +++ b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawGetHeadersMessageSerializer.scala @@ -1,21 +1,13 @@ -package org.bitcoins.node.serializers.messages.data +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.crypto.DoubleSha256Digest import org.bitcoins.core.protocol.CompactSizeUInt import org.bitcoins.core.serializers.{RawBitcoinSerializer, RawSerializerHelper} -import org.bitcoins.node.messages.GetHeadersMessage -import org.bitcoins.node.messages.data.GetHeadersMessage -import org.bitcoins.node.versions.ProtocolVersion -import org.bitcoins.node.messages.GetHeadersMessage -import org.bitcoins.node.messages.data.GetHeadersMessage -import org.bitcoins.node.versions.ProtocolVersion +import org.bitcoins.core.p2p._ import scodec.bits.ByteVector import scala.annotation.tailrec -/** - * Created by chris on 6/29/16. - */ trait RawGetHeadersMessageSerializer extends RawBitcoinSerializer[GetHeadersMessage] { diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawHeadersMessageSerializer.scala b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawHeadersMessageSerializer.scala similarity index 86% rename from node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawHeadersMessageSerializer.scala rename to core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawHeadersMessageSerializer.scala index d1311a754b..17fcaabaee 100644 --- a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawHeadersMessageSerializer.scala +++ b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawHeadersMessageSerializer.scala @@ -1,19 +1,13 @@ -package org.bitcoins.node.serializers.messages.data +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.protocol.CompactSizeUInt import org.bitcoins.core.protocol.blockchain.BlockHeader import org.bitcoins.core.serializers.RawBitcoinSerializer -import org.bitcoins.node.messages.HeadersMessage -import org.bitcoins.node.messages.data.HeadersMessage -import org.bitcoins.node.messages.HeadersMessage -import org.bitcoins.node.messages.data.HeadersMessage +import org.bitcoins.core.p2p.HeadersMessage import scodec.bits.ByteVector import scala.annotation.tailrec -/** - * Created by chris on 7/5/16. - */ trait RawHeadersMessageSerializer extends RawBitcoinSerializer[HeadersMessage] { def read(bytes: ByteVector): HeadersMessage = { diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawInventoryMessageSerializer.scala b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawInventoryMessageSerializer.scala similarity index 84% rename from node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawInventoryMessageSerializer.scala rename to core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawInventoryMessageSerializer.scala index 358c1a6bfd..eac303d1dd 100644 --- a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawInventoryMessageSerializer.scala +++ b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawInventoryMessageSerializer.scala @@ -1,26 +1,21 @@ -package org.bitcoins.node.serializers.messages.data +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.protocol.CompactSizeUInt import org.bitcoins.core.serializers.{RawBitcoinSerializer, RawSerializerHelper} -import org.bitcoins.node.messages.InventoryMessage -import org.bitcoins.node.messages.data.{Inventory, InventoryMessage} -import org.bitcoins.node.messages.data.{Inventory, InventoryMessage} +import org.bitcoins.core.p2p.{Inventory, InventoryMessage} import scodec.bits.ByteVector import scala.annotation.tailrec /** - * Created by chris on 5/31/16. * Serializes and deserializes inventory objects on the peer-to-peer network - * https://bitcoin.org/en/developer-reference#inv + * @see https://bitcoin.org/en/developer-reference#inv */ trait RawInventoryMessageSerializer extends RawBitcoinSerializer[InventoryMessage] { /** * Transforms a sequence of bytes into a Inventory object - * @param bytes - * @return */ override def read(bytes: ByteVector): InventoryMessage = { val inventoryCount = CompactSizeUInt.parseCompactSizeUInt(bytes) @@ -32,8 +27,6 @@ trait RawInventoryMessageSerializer /** * Tranforms an inventory object into a hexadecimal string - * @param inventoryMessage - * @return */ override def write(inventoryMessage: InventoryMessage): ByteVector = { val msgBytes = diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawInventorySerializer.scala b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawInventorySerializer.scala similarity index 65% rename from node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawInventorySerializer.scala rename to core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawInventorySerializer.scala index b0539ace82..21ba7d74cb 100644 --- a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawInventorySerializer.scala +++ b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawInventorySerializer.scala @@ -1,17 +1,14 @@ -package org.bitcoins.node.serializers.messages.data +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.crypto.DoubleSha256Digest import org.bitcoins.core.serializers.RawBitcoinSerializer -import org.bitcoins.node.messages.TypeIdentifier -import org.bitcoins.node.messages.data.Inventory -import org.bitcoins.node.messages.TypeIdentifier -import org.bitcoins.node.messages.data.Inventory +import org.bitcoins.core.p2p.TypeIdentifier +import org.bitcoins.core.p2p.Inventory import scodec.bits.ByteVector /** - * Created by chris on 6/1/16. * Serializes/deserializes a inventory - * https://bitcoin.org/en/developer-reference#term-inventory + * @see https://bitcoin.org/en/developer-reference#term-inventory */ trait RawInventorySerializer extends RawBitcoinSerializer[Inventory] { diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawMerkleBlockMessageSerializer.scala b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawMerkleBlockMessageSerializer.scala similarity index 70% rename from node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawMerkleBlockMessageSerializer.scala rename to core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawMerkleBlockMessageSerializer.scala index 89bc403989..9253652484 100644 --- a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawMerkleBlockMessageSerializer.scala +++ b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawMerkleBlockMessageSerializer.scala @@ -1,17 +1,14 @@ -package org.bitcoins.node.serializers.messages.data +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.protocol.blockchain.MerkleBlock import org.bitcoins.core.serializers.RawBitcoinSerializer import org.bitcoins.core.util.BitcoinSLogger -import org.bitcoins.node.messages.MerkleBlockMessage -import org.bitcoins.node.messages.data.MerkleBlockMessage -import org.bitcoins.node.messages.MerkleBlockMessage +import org.bitcoins.core.p2p.MerkleBlockMessage import scodec.bits.ByteVector /** - * Created by chris on 6/2/16. * Responsible for serialization and deserialization of MerkleBlockMessages - * https://bitcoin.org/en/developer-reference#merkleblock + * @see https://bitcoin.org/en/developer-reference#merkleblock */ trait RawMerkleBlockMessageSerializer extends RawBitcoinSerializer[MerkleBlockMessage] diff --git a/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawNetworkIpAddressSerializer.scala b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawNetworkIpAddressSerializer.scala new file mode 100644 index 0000000000..3f41e93bdc --- /dev/null +++ b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawNetworkIpAddressSerializer.scala @@ -0,0 +1,40 @@ +package org.bitcoins.core.serializers.p2p.messages + +import java.net.InetAddress + +import org.bitcoins.core.number.UInt32 +import org.bitcoins.core.serializers.RawBitcoinSerializer +import org.bitcoins.core.util.{BitcoinSLogger, NumberUtil} +import org.bitcoins.core.p2p.ServiceIdentifier +import org.bitcoins.core.p2p._ +import scodec.bits.ByteVector + +/** + * Responsible for serializing and deserializing network ip address objects on the p2p network + * @see https://bitcoin.org/en/developer-reference#addr + */ +trait RawNetworkIpAddressSerializer + extends RawBitcoinSerializer[NetworkIpAddress] + with BitcoinSLogger { + + def read(bytes: ByteVector): NetworkIpAddress = { + val time = UInt32(bytes.take(4).reverse) + val services = ServiceIdentifier(bytes.slice(4, 12)) + val ipBytes = bytes.slice(12, 28) + val ipAddress = InetAddress.getByAddress(ipBytes.toArray) + val port = NumberUtil.toLong(bytes.slice(28, 30)).toInt + NetworkIpAddress(time, services, ipAddress, port) + } + + def write(networkIpAddress: NetworkIpAddress): ByteVector = { + val time = networkIpAddress.time.bytes.reverse + val services = networkIpAddress.services.bytes + val ipAddress = NetworkIpAddress.writeAddress(networkIpAddress.address) + //uint16s are only 4 hex characters + val port = ByteVector.fromShort(networkIpAddress.port.toShort) + time ++ services ++ ipAddress ++ port + } + +} + +object RawNetworkIpAddressSerializer extends RawNetworkIpAddressSerializer diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawNotFoundMessageSerializer.scala b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawNotFoundMessageSerializer.scala similarity index 75% rename from node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawNotFoundMessageSerializer.scala rename to core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawNotFoundMessageSerializer.scala index 814554619c..b37c16a569 100644 --- a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawNotFoundMessageSerializer.scala +++ b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawNotFoundMessageSerializer.scala @@ -1,16 +1,12 @@ -package org.bitcoins.node.serializers.messages.data +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.serializers.RawBitcoinSerializer -import org.bitcoins.node.messages.NotFoundMessage -import org.bitcoins.node.messages.data.{InventoryMessage, NotFoundMessage} -import org.bitcoins.node.messages.NotFoundMessage -import org.bitcoins.node.messages.data.{InventoryMessage, NotFoundMessage} +import org.bitcoins.core.p2p.{InventoryMessage, NotFoundMessage} import scodec.bits.ByteVector /** - * Created by chris on 6/2/16. * Responsible for the serialization and deserialization of a NotFound message on the p2p network - * https://bitcoin.org/en/developer-reference#notfound + * @see https://bitcoin.org/en/developer-reference#notfound */ trait RawNotFoundMessageSerializer extends RawBitcoinSerializer[NotFoundMessage] { diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawPingMessageSerializer.scala b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawPingMessageSerializer.scala similarity index 59% rename from node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawPingMessageSerializer.scala rename to core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawPingMessageSerializer.scala index 3986e4be9e..bcf4cb13ed 100644 --- a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawPingMessageSerializer.scala +++ b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawPingMessageSerializer.scala @@ -1,16 +1,13 @@ -package org.bitcoins.node.serializers.messages.control +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.number.UInt64 import org.bitcoins.core.serializers.RawBitcoinSerializer -import org.bitcoins.node.messages.PingMessage -import org.bitcoins.node.messages.control.PingMessage -import org.bitcoins.node.messages.PingMessage -import org.bitcoins.node.messages.control.PingMessage +import org.bitcoins.core.p2p.PingMessage +import org.bitcoins.core.p2p.PingMessage import scodec.bits.ByteVector /** - * Created by chris on 6/29/16. - * https://bitcoin.org/en/developer-reference#ping + * @see https://bitcoin.org/en/developer-reference#ping */ trait RawPingMessageSerializer extends RawBitcoinSerializer[PingMessage] { diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawPongMessageSerializer.scala b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawPongMessageSerializer.scala similarity index 61% rename from node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawPongMessageSerializer.scala rename to core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawPongMessageSerializer.scala index 4894eb926b..0616acb931 100644 --- a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawPongMessageSerializer.scala +++ b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawPongMessageSerializer.scala @@ -1,16 +1,11 @@ -package org.bitcoins.node.serializers.messages.control +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.number.UInt64 import org.bitcoins.core.serializers.RawBitcoinSerializer -import org.bitcoins.node.messages.PongMessage -import org.bitcoins.node.messages.control.PongMessage -import org.bitcoins.node.messages.PongMessage -import org.bitcoins.node.messages.control.PongMessage +import org.bitcoins.core.p2p.PongMessage +import org.bitcoins.core.p2p.PongMessage import scodec.bits.ByteVector -/** - * Created by chris on 7/5/16. - */ trait RawPongMessageSerializer extends RawBitcoinSerializer[PongMessage] { override def read(bytes: ByteVector): PongMessage = { diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawRejectMessageSerializer.scala b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawRejectMessageSerializer.scala similarity index 84% rename from node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawRejectMessageSerializer.scala rename to core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawRejectMessageSerializer.scala index c0dbc45623..43f2a331b7 100644 --- a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawRejectMessageSerializer.scala +++ b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawRejectMessageSerializer.scala @@ -1,16 +1,11 @@ -package org.bitcoins.node.serializers.messages.control +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.protocol.CompactSizeUInt import org.bitcoins.core.serializers.RawBitcoinSerializer -import org.bitcoins.node.messages.RejectMessage -import org.bitcoins.node.messages.control.RejectMessage -import org.bitcoins.node.messages.RejectMessage -import org.bitcoins.node.messages.control.RejectMessage +import org.bitcoins.core.p2p.RejectMessage +import org.bitcoins.core.p2p.RejectMessage import scodec.bits.ByteVector -/** - * Created by chris on 8/31/16. - */ trait RawRejectMessageSerializer extends RawBitcoinSerializer[RejectMessage] { def read(bytes: ByteVector): RejectMessage = { diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawServiceIdentifierSerializer.scala b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawServiceIdentifierSerializer.scala similarity index 74% rename from node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawServiceIdentifierSerializer.scala rename to core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawServiceIdentifierSerializer.scala index f55681f99d..3f8d7f7a46 100644 --- a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawServiceIdentifierSerializer.scala +++ b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawServiceIdentifierSerializer.scala @@ -1,16 +1,14 @@ -package org.bitcoins.node.serializers.messages.control +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.number.UInt64 import org.bitcoins.core.serializers.RawBitcoinSerializer -import org.bitcoins.node.messages.control.ServiceIdentifier -import org.bitcoins.node.messages.control.ServiceIdentifier +import org.bitcoins.core.p2p.ServiceIdentifier import scodec.bits.ByteVector /** - * Created by chris on 6/2/16. * Responsible for serializing and deserializing the * service identifier in a network message - * https://bitcoin.org/en/developer-reference#version + * @see https://bitcoin.org/en/developer-reference#version */ trait RawServiceIdentifierSerializer extends RawBitcoinSerializer[ServiceIdentifier] { diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawTransactionMessageSerializer.scala b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawTransactionMessageSerializer.scala similarity index 69% rename from node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawTransactionMessageSerializer.scala rename to core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawTransactionMessageSerializer.scala index 975b03d03e..a70b043720 100644 --- a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawTransactionMessageSerializer.scala +++ b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawTransactionMessageSerializer.scala @@ -1,16 +1,13 @@ -package org.bitcoins.node.serializers.messages.data +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.protocol.transaction.Transaction import org.bitcoins.core.serializers.RawBitcoinSerializer -import org.bitcoins.node.messages.TransactionMessage -import org.bitcoins.node.messages.data.TransactionMessage -import org.bitcoins.node.messages.TransactionMessage +import org.bitcoins.core.p2p.TransactionMessage import scodec.bits.ByteVector /** - * Created by chris on 6/2/16. * Responsible for serializing and deserializing TransactionMessage network objects - * https://bitcoin.org/en/developer-reference#tx + * @see https://bitcoin.org/en/developer-reference#tx */ trait RawTransactionMessageSerializer extends RawBitcoinSerializer[TransactionMessage] { diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/RawTypeIdentifierSerializer.scala b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawTypeIdentifierSerializer.scala similarity index 87% rename from node/src/main/scala/org/bitcoins/node/serializers/messages/RawTypeIdentifierSerializer.scala rename to core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawTypeIdentifierSerializer.scala index 090ad5acd1..d9ca905e1d 100644 --- a/node/src/main/scala/org/bitcoins/node/serializers/messages/RawTypeIdentifierSerializer.scala +++ b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawTypeIdentifierSerializer.scala @@ -1,8 +1,8 @@ -package org.bitcoins.node.serializers.messages +package org.bitcoins.core.serializers.p2p.messages import org.bitcoins.core.number.UInt32 import org.bitcoins.core.serializers.RawBitcoinSerializer -import org.bitcoins.node.messages.TypeIdentifier +import org.bitcoins.core.p2p.TypeIdentifier import scodec.bits.ByteVector /** diff --git a/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawVersionMessageSerializer.scala b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawVersionMessageSerializer.scala new file mode 100644 index 0000000000..75071d8cc6 --- /dev/null +++ b/core/src/main/scala/org/bitcoins/core/serializers/p2p/messages/RawVersionMessageSerializer.scala @@ -0,0 +1,102 @@ +package org.bitcoins.core.serializers.p2p.messages + +import java.net.InetAddress + +import org.bitcoins.core.number.{Int32, Int64, UInt32, UInt64} +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.serializers.RawBitcoinSerializer +import org.bitcoins.core.util.BitcoinSLogger +import org.bitcoins.core.p2p._ +import scodec.bits.ByteVector + +/** + * Responsible for serialization and deserialization of VersionMessages on the p2p network + * @see https://bitcoin.org/en/developer-reference#version + */ +trait RawVersionMessageSerializer + extends RawBitcoinSerializer[VersionMessage] + with BitcoinSLogger { + + def read(bytes: ByteVector): VersionMessage = { + val version = ProtocolVersion(bytes.take(4)) + + val services = ServiceIdentifier(bytes.slice(4, 12)) + + val timestamp = Int64(bytes.slice(12, 20).reverse) + + val addressReceiveServices = ServiceIdentifier(bytes.slice(20, 28)) + + val addressReceiveIpAddress = + InetAddress.getByAddress(bytes.slice(28, 44).toArray) + + val addressReceivePort = UInt32(bytes.slice(44, 46)).toInt + + val addressTransServices = ServiceIdentifier(bytes.slice(46, 54)) + + val addressTransIpAddress = + InetAddress.getByAddress(bytes.slice(54, 70).toArray) + + val addressTransPort = UInt32(bytes.slice(70, 72)).toInt + + val nonce = UInt64(bytes.slice(72, 80)) + + val userAgentSize = + CompactSizeUInt.parseCompactSizeUInt(bytes.slice(80, bytes.size)) + + val userAgentBytesStartIndex = 80 + userAgentSize.size.toInt + + val userAgentBytes = bytes.slice( + userAgentBytesStartIndex, + userAgentBytesStartIndex + userAgentSize.num.toInt) + + val userAgent = userAgentBytes.toArray.map(_.toChar).mkString + + val startHeightStartIndex = (userAgentBytesStartIndex + userAgentSize.num.toInt) + + val startHeight = Int32( + bytes.slice(startHeightStartIndex, startHeightStartIndex + 4).reverse) + + val relay = bytes(startHeightStartIndex + 4) != 0 + + VersionMessage( + version = version, + services = services, + timestamp = timestamp, + addressReceiveServices = addressReceiveServices, + addressReceiveIpAddress = addressReceiveIpAddress, + addressReceivePort = addressReceivePort, + addressTransServices = addressTransServices, + addressTransIpAddress = addressTransIpAddress, + addressTransPort = addressTransPort, + nonce = nonce, + userAgent = userAgent, + startHeight = startHeight, + relay = relay + ) + } + + def write(versionMessage: VersionMessage): ByteVector = { + versionMessage.version.bytes ++ + versionMessage.services.bytes ++ + versionMessage.timestamp.bytes.reverse ++ + versionMessage.addressReceiveServices.bytes ++ + NetworkIpAddress.writeAddress(versionMessage.addressReceiveIpAddress) ++ + //encode hex returns 8 characters, but we only need the last 4 since port number is a uint16 + //check for precision loss here? + ByteVector.fromShort(versionMessage.addressReceivePort.toShort) ++ + versionMessage.addressTransServices.bytes ++ + NetworkIpAddress.writeAddress(versionMessage.addressTransIpAddress) ++ + //encode hex returns 8 characters, but we only need the last 4 since port number is a uint16 + //check for precision loss here? + ByteVector.fromShort(versionMessage.addressTransPort.toShort) ++ + versionMessage.nonce.bytes ++ + versionMessage.userAgentSize.bytes ++ + ByteVector(versionMessage.userAgent.getBytes) ++ + versionMessage.startHeight.bytes.reverse ++ + (if (versionMessage.relay) ByteVector.fromByte(1.toByte) + else ByteVector.fromByte(0.toByte)) + } + +} + +object RawVersionMessageSerializer extends RawVersionMessageSerializer diff --git a/node-test/src/test/scala/org/bitcoins/node/networking/BlockActorTest.scala b/node-test/src/test/scala/org/bitcoins/node/networking/BlockActorTest.scala index 81534d8cfb..e43d334570 100644 --- a/node-test/src/test/scala/org/bitcoins/node/networking/BlockActorTest.scala +++ b/node-test/src/test/scala/org/bitcoins/node/networking/BlockActorTest.scala @@ -7,8 +7,8 @@ import org.bitcoins.core.crypto.DoubleSha256Digest import org.bitcoins.core.protocol.blockchain.BlockHeader import org.bitcoins.core.util.{BitcoinSLogger, BitcoinSUtil} import org.bitcoins.node.db.UnitTestDbConfig -import org.bitcoins.node.messages.BlockMessage -import org.bitcoins.node.messages.BlockMessage +import org.bitcoins.core.p2p.BlockMessage +import org.bitcoins.core.p2p.BlockMessage import org.bitcoins.node.util.TestUtil import org.scalatest.{BeforeAndAfter, BeforeAndAfterAll, FlatSpecLike, MustMatchers} diff --git a/node-test/src/test/scala/org/bitcoins/node/networking/PaymentActorTest.scala b/node-test/src/test/scala/org/bitcoins/node/networking/PaymentActorTest.scala index f677e5db66..d809eee43c 100644 --- a/node-test/src/test/scala/org/bitcoins/node/networking/PaymentActorTest.scala +++ b/node-test/src/test/scala/org/bitcoins/node/networking/PaymentActorTest.scala @@ -9,12 +9,12 @@ import org.bitcoins.core.protocol.P2PKHAddress import org.bitcoins.core.protocol.blockchain.{BlockHeader, MerkleBlock, PartialMerkleTree} import org.bitcoins.core.protocol.transaction.Transaction import org.bitcoins.node.constant.Constants -import org.bitcoins.node.messages.data.{Inventory, InventoryMessage, MerkleBlockMessage, TransactionMessage} -import org.bitcoins.node.messages.{MsgBlock, MsgTx} +import org.bitcoins.core.p2p.data.{Inventory, InventoryMessage, MerkleBlockMessage, TransactionMessage} +import org.bitcoins.core.p2p.{MsgBlock, MsgTx} import org.bitcoins.node.constant.Constants import org.bitcoins.node.db.UnitTestDbConfig -import org.bitcoins.node.messages.data.{Inventory, InventoryMessage, MerkleBlockMessage, TransactionMessage} -import org.bitcoins.node.messages.{MsgBlock, MsgTx} +import org.bitcoins.core.p2p.data.{Inventory, InventoryMessage, MerkleBlockMessage, TransactionMessage} +import org.bitcoins.core.p2p.{MsgBlock, MsgTx} import org.bitcoins.node.util.TestUtil import org.scalatest._ import scodec.bits.BitVector diff --git a/node-test/src/test/scala/org/bitcoins/node/networking/sync/BlockHeaderSyncActorTest.scala b/node-test/src/test/scala/org/bitcoins/node/networking/sync/BlockHeaderSyncActorTest.scala index c160a50e7e..3459c1fc92 100644 --- a/node-test/src/test/scala/org/bitcoins/node/networking/sync/BlockHeaderSyncActorTest.scala +++ b/node-test/src/test/scala/org/bitcoins/node/networking/sync/BlockHeaderSyncActorTest.scala @@ -12,7 +12,7 @@ import org.bitcoins.core.protocol.blockchain.{ } import org.bitcoins.node.constant.{Constants, TestConstants} import org.bitcoins.node.db.NodeDbManagement -import org.bitcoins.node.messages.data.HeadersMessage +import org.bitcoins.core.p2p.data.HeadersMessage import org.bitcoins.node.models.BlockHeaderTable import org.bitcoins.node.util.TestUtil import org.scalatest.{ diff --git a/node-test/src/test/scala/org/bitcoins/node/util/BitcoinSpvNodeUtilTest.scala b/node-test/src/test/scala/org/bitcoins/node/util/BitcoinSpvNodeUtilTest.scala index 75a02bb310..848e24aaa5 100644 --- a/node-test/src/test/scala/org/bitcoins/node/util/BitcoinSpvNodeUtilTest.scala +++ b/node-test/src/test/scala/org/bitcoins/node/util/BitcoinSpvNodeUtilTest.scala @@ -3,18 +3,12 @@ package org.bitcoins.node.util import org.bitcoins.core.config.TestNet3 import org.bitcoins.core.crypto.DoubleSha256Digest import org.bitcoins.core.number.{Int32, UInt32, UInt64} +import org.bitcoins.core.p2p.NetworkMessage import org.bitcoins.core.protocol.CompactSizeUInt import org.bitcoins.core.protocol.blockchain.BlockHeader -import org.bitcoins.core.util.{BitcoinSLogger, BitcoinSUtil} -import org.bitcoins.node.NetworkMessage +import org.bitcoins.core.p2p.HeadersMessage import org.bitcoins.node.constant.Constants -import org.bitcoins.node.messages.HeadersMessage -import org.bitcoins.node.messages.data.HeadersMessage -import org.bitcoins.node.NetworkMessage -import org.bitcoins.node.constant.Constants -import org.bitcoins.node.messages.HeadersMessage -import org.bitcoins.node.messages.control.VersionMessage -import org.bitcoins.node.messages.data.HeadersMessage +import org.bitcoins.core.p2p.VersionMessage import org.bitcoins.testkit.util.BitcoinSUnitTest import org.bitcoins.testkit.BitcoinSAppConfig import org.bitcoins.node.config.NodeAppConfig diff --git a/node/src/main/scala/org/bitcoins/node/Main.scala b/node/src/main/scala/org/bitcoins/node/Main.scala index fdde61ede1..0361f69ec0 100644 --- a/node/src/main/scala/org/bitcoins/node/Main.scala +++ b/node/src/main/scala/org/bitcoins/node/Main.scala @@ -5,11 +5,11 @@ import java.net.{InetAddress, InetSocketAddress} import org.bitcoins.chain.blockchain.ChainHandler import org.bitcoins.chain.config.ChainAppConfig import org.bitcoins.chain.models.{BlockHeaderDAO, BlockHeaderTable} +import org.bitcoins.core.p2p.NetworkIpAddress import org.bitcoins.core.util.BitcoinSLogger import org.bitcoins.node.config.NodeAppConfig import org.bitcoins.node.constant.Constants import org.bitcoins.node.models.Peer -import org.bitcoins.node.util.NetworkIpAddress import slick.jdbc.SQLiteProfile.api._ import scala.concurrent._ diff --git a/node/src/main/scala/org/bitcoins/node/constant/Constants.scala b/node/src/main/scala/org/bitcoins/node/constant/Constants.scala index 85ccb28931..85fa43dd8f 100644 --- a/node/src/main/scala/org/bitcoins/node/constant/Constants.scala +++ b/node/src/main/scala/org/bitcoins/node/constant/Constants.scala @@ -1,20 +1,13 @@ package org.bitcoins.node.constant import akka.actor.ActorSystem -import org.bitcoins.node.versions.ProtocolVersion70013 - import scala.concurrent.duration.DurationInt -import com.typesafe.config.ConfigFactory case object Constants { - val emptyConfig = ConfigFactory.parseString("") - lazy val actorSystem = ActorSystem("BitcoinSpvNode", emptyConfig) - def version = ProtocolVersion70013 + lazy val actorSystem = ActorSystem("BitcoinSpvNode") def timeout = 5.seconds - def userAgent = "/bitcoins-spv-node/0.0.1" /** This is the file where our block headers are stored */ def blockHeaderFile = new java.io.File("src/main/resources/block_headers.dat") - } diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/AddrMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/control/AddrMessage.scala deleted file mode 100644 index 8bd6c3b06e..0000000000 --- a/node/src/main/scala/org/bitcoins/node/messages/control/AddrMessage.scala +++ /dev/null @@ -1,33 +0,0 @@ -package org.bitcoins.node.messages.control - -import org.bitcoins.core.protocol.CompactSizeUInt -import org.bitcoins.core.util.Factory -import org.bitcoins.node.messages.AddrMessage -import org.bitcoins.node.serializers.messages.control.RawAddrMessageSerializer -import org.bitcoins.node.util.NetworkIpAddress -import org.bitcoins.node.messages.AddrMessage -import org.bitcoins.node.serializers.messages.control.RawAddrMessageSerializer -import org.bitcoins.node.util.NetworkIpAddress -import scodec.bits.ByteVector - -/** - * Created by chris on 6/3/16. - * The companion object for an AddrMessage - * https://bitcoin.org/en/developer-reference#addr - */ -object AddrMessage extends Factory[AddrMessage] { - - private case class AddrMessageImpl( - ipCount: CompactSizeUInt, - addresses: Seq[NetworkIpAddress]) - extends AddrMessage - - def fromBytes(bytes: ByteVector): AddrMessage = - RawAddrMessageSerializer.read(bytes) - - def apply( - ipCount: CompactSizeUInt, - addresses: Seq[NetworkIpAddress]): AddrMessage = - AddrMessageImpl(ipCount, addresses) - -} diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/FeeFilterMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/control/FeeFilterMessage.scala deleted file mode 100644 index d822a63348..0000000000 --- a/node/src/main/scala/org/bitcoins/node/messages/control/FeeFilterMessage.scala +++ /dev/null @@ -1,28 +0,0 @@ -package org.bitcoins.node.messages.control - -import org.bitcoins.core.util.Factory -import org.bitcoins.core.wallet.fee.{SatoshisPerByte, SatoshisPerKiloByte} -import org.bitcoins.node.messages.FeeFilterMessage -import org.bitcoins.node.serializers.messages.control.RawFeeFilterMessageSerializer -import scodec.bits.ByteVector - -object FeeFilterMessage extends Factory[FeeFilterMessage] { - - - private case class FeeFilterMessageImpl(feeRate: SatoshisPerKiloByte) extends FeeFilterMessage - - - override def fromBytes(bytes: ByteVector): FeeFilterMessage = { - RawFeeFilterMessageSerializer.read(bytes) - } - - - def apply(satoshisPerKiloByte: SatoshisPerKiloByte): FeeFilterMessage = { - FeeFilterMessageImpl(satoshisPerKiloByte) - } - - - def apply(satPerByte: SatoshisPerByte): FeeFilterMessage = { - FeeFilterMessage(satPerByte.toSatPerKb) - } -} diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/FilterAddMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/control/FilterAddMessage.scala deleted file mode 100644 index f3090146d8..0000000000 --- a/node/src/main/scala/org/bitcoins/node/messages/control/FilterAddMessage.scala +++ /dev/null @@ -1,29 +0,0 @@ -package org.bitcoins.node.messages.control - -import org.bitcoins.core.protocol.CompactSizeUInt -import org.bitcoins.core.util.Factory -import org.bitcoins.node.messages.FilterAddMessage -import org.bitcoins.node.serializers.messages.control.RawFilterAddMessageSerializer -import org.bitcoins.node.messages.FilterAddMessage -import scodec.bits.ByteVector - -/** - * Created by chris on 8/26/16. - * Factory object for a [[FilterAddMessage]] - * [[https://bitcoin.org/en/developer-reference#filteradd]] - */ -object FilterAddMessage extends Factory[FilterAddMessage] { - - private case class FilterAddMessageImpl( - elementSize: CompactSizeUInt, - element: ByteVector) - extends FilterAddMessage - override def fromBytes(bytes: ByteVector): FilterAddMessage = - RawFilterAddMessageSerializer.read(bytes) - - def apply( - elementSize: CompactSizeUInt, - element: ByteVector): FilterAddMessage = { - FilterAddMessageImpl(elementSize, element) - } -} diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/FilterLoadMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/control/FilterLoadMessage.scala deleted file mode 100644 index 8724d26739..0000000000 --- a/node/src/main/scala/org/bitcoins/node/messages/control/FilterLoadMessage.scala +++ /dev/null @@ -1,58 +0,0 @@ -package org.bitcoins.node.messages.control - -import org.bitcoins.core.bloom.{BloomFilter, BloomFlag} -import org.bitcoins.core.number.{UInt32, UInt64} -import org.bitcoins.core.protocol.CompactSizeUInt -import org.bitcoins.core.util.Factory -import org.bitcoins.node.messages.FilterLoadMessage -import org.bitcoins.node.serializers.messages.control.RawFilterLoadMessageSerializer -import org.bitcoins.node.messages.FilterLoadMessage -import org.bitcoins.node.serializers.messages.control.RawFilterLoadMessageSerializer -import scodec.bits.ByteVector - -/** - * Created by chris on 7/19/16. - * [[https://bitcoin.org/en/developer-reference#filterload]] - */ -object FilterLoadMessage extends Factory[FilterLoadMessage] { - private case class FilterLoadMessageImpl(bloomFilter: BloomFilter) - extends FilterLoadMessage { - require( - bloomFilter.filterSize.num.toLong <= BloomFilter.maxSize.toLong, - "Can only have a maximum of 36,000 bytes in our filter, got: " + bloomFilter.data.size) - require( - bloomFilter.hashFuncs <= BloomFilter.maxHashFuncs, - "Can only have a maximum of 50 hashFuncs inside FilterLoadMessage, got: " + bloomFilter.hashFuncs) - require( - bloomFilter.filterSize.num.toLong == bloomFilter.data.size, - "Filter Size compactSizeUInt and actual filter size were different, " + - "filterSize: " + bloomFilter.filterSize.num + " actual filter size: " + bloomFilter.data.length - ) - } - - override def fromBytes(bytes: ByteVector): FilterLoadMessage = - RawFilterLoadMessageSerializer.read(bytes) - - def apply( - filterSize: CompactSizeUInt, - filter: ByteVector, - hashFuncs: UInt32, - tweak: UInt32, - flags: BloomFlag): FilterLoadMessage = { - val bloomFilter = BloomFilter(filterSize, filter, hashFuncs, tweak, flags) - FilterLoadMessage(bloomFilter) - } - - def apply( - filter: ByteVector, - hashFuncs: UInt32, - tweak: UInt32, - flags: BloomFlag): FilterLoadMessage = { - val filterSize = CompactSizeUInt(UInt64(filter.length)) - FilterLoadMessage(filterSize, filter, hashFuncs, tweak, flags) - } - - def apply(bloomFilter: BloomFilter): FilterLoadMessage = { - FilterLoadMessageImpl(bloomFilter) - } -} diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/PingMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/control/PingMessage.scala deleted file mode 100644 index 39d11704fd..0000000000 --- a/node/src/main/scala/org/bitcoins/node/messages/control/PingMessage.scala +++ /dev/null @@ -1,18 +0,0 @@ -package org.bitcoins.node.messages.control - -import org.bitcoins.core.number.UInt64 -import org.bitcoins.core.util.Factory -import org.bitcoins.node.messages.PingMessage -import org.bitcoins.node.serializers.messages.control.RawPingMessageSerializer -import org.bitcoins.node.messages.PingMessage -import scodec.bits.ByteVector - -object PingMessage extends Factory[PingMessage] { - private case class PingMessageImpl(nonce: UInt64) extends PingMessage - override def fromBytes(bytes: ByteVector): PingMessage = { - val pingMsg = RawPingMessageSerializer.read(bytes) - PingMessageImpl(pingMsg.nonce) - } - - def apply(nonce: UInt64): PingMessage = PingMessageImpl(nonce) -} diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/PongMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/control/PongMessage.scala deleted file mode 100644 index 72db18b8a9..0000000000 --- a/node/src/main/scala/org/bitcoins/node/messages/control/PongMessage.scala +++ /dev/null @@ -1,22 +0,0 @@ -package org.bitcoins.node.messages.control - -import org.bitcoins.core.number.UInt64 -import org.bitcoins.core.util.Factory -import org.bitcoins.node.messages.PongMessage -import org.bitcoins.node.serializers.messages.control.RawPongMessageSerializer -import org.bitcoins.node.messages.PongMessage -import scodec.bits.ByteVector - -/** - * Created by chris on 7/5/16. - */ -object PongMessage extends Factory[PongMessage] { - private case class PongMessageImpl(nonce: UInt64) extends PongMessage - - def fromBytes(bytes: ByteVector): PongMessage = { - val pongMsg = RawPongMessageSerializer.read(bytes) - PongMessageImpl(pongMsg.nonce) - } - - def apply(nonce: UInt64): PongMessage = PongMessageImpl(nonce) -} diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/RejectMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/control/RejectMessage.scala deleted file mode 100644 index 521e4a94b2..0000000000 --- a/node/src/main/scala/org/bitcoins/node/messages/control/RejectMessage.scala +++ /dev/null @@ -1,48 +0,0 @@ -package org.bitcoins.node.messages.control - -import org.bitcoins.core.number.UInt64 -import org.bitcoins.core.protocol.CompactSizeUInt -import org.bitcoins.core.util.Factory -import org.bitcoins.node.messages.RejectMessage -import org.bitcoins.node.serializers.messages.control.RawRejectMessageSerializer -import org.bitcoins.node.messages.RejectMessage -import scodec.bits.ByteVector - -/** - * Created by chris on 8/31/16. - * Factory object for - * [[https://bitcoin.org/en/developer-reference#reject]] - */ -object RejectMessage extends Factory[RejectMessage] { - private case class RejectMessageImpl( - messageSize: CompactSizeUInt, - message: String, - code: Char, - reasonSize: CompactSizeUInt, - reason: String, - extra: ByteVector) - extends RejectMessage - - def apply( - messageSize: CompactSizeUInt, - message: String, - code: Char, - reasonSize: CompactSizeUInt, - reason: String, - extra: ByteVector): RejectMessage = { - RejectMessageImpl(messageSize, message, code, reasonSize, reason, extra) - } - - def fromBytes(bytes: ByteVector): RejectMessage = - RawRejectMessageSerializer.read(bytes) - - def apply( - message: String, - code: Char, - reason: String, - extra: ByteVector): RejectMessage = { - val messageSize: CompactSizeUInt = CompactSizeUInt(UInt64(message.size)) - val reasonSize: CompactSizeUInt = CompactSizeUInt(UInt64(reason.size)) - RejectMessage(messageSize, message, code, reasonSize, reason, extra) - } -} diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/VersionMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/control/VersionMessage.scala deleted file mode 100644 index 0d566beae1..0000000000 --- a/node/src/main/scala/org/bitcoins/node/messages/control/VersionMessage.scala +++ /dev/null @@ -1,120 +0,0 @@ -package org.bitcoins.node.messages.control - -import java.net.{InetAddress, InetSocketAddress} - -import org.bitcoins.core.config.NetworkParameters -import org.bitcoins.core.number.{Int32, Int64, UInt64} -import org.bitcoins.core.protocol.CompactSizeUInt -import org.bitcoins.core.util.Factory -import org.bitcoins.node.constant.Constants -import org.bitcoins.node.messages.VersionMessage -import org.bitcoins.node.serializers.messages.control.RawVersionMessageSerializer -import org.bitcoins.node.versions.ProtocolVersion -import org.joda.time.DateTime -import scodec.bits.ByteVector - -/** - * Created by chris on 6/3/16. - * Companion object responsible for creating VersionMessages on the p2p network - * https://bitcoin.org/en/developer-reference#version - */ -object VersionMessage extends Factory[VersionMessage] { - - private case class VersionMessageImpl( - version: ProtocolVersion, - services: ServiceIdentifier, - timestamp: Int64, - addressReceiveServices: ServiceIdentifier, - addressReceiveIpAddress: InetAddress, - addressReceivePort: Int, - addressTransServices: ServiceIdentifier, - addressTransIpAddress: InetAddress, - addressTransPort: Int, - nonce: UInt64, - userAgentSize: CompactSizeUInt, - userAgent: String, - startHeight: Int32, - relay: Boolean) - extends VersionMessage - - override def fromBytes(bytes: ByteVector): VersionMessage = - RawVersionMessageSerializer.read(bytes) - - def apply( - version: ProtocolVersion, - services: ServiceIdentifier, - timestamp: Int64, - addressReceiveServices: ServiceIdentifier, - addressReceiveIpAddress: InetAddress, - addressReceivePort: Int, - addressTransServices: ServiceIdentifier, - addressTransIpAddress: InetAddress, - addressTransPort: Int, - nonce: UInt64, - userAgent: String, - startHeight: Int32, - relay: Boolean): VersionMessage = { - val userAgentSize: CompactSizeUInt = - CompactSizeUInt.calculateCompactSizeUInt(ByteVector(userAgent.getBytes)) - VersionMessageImpl( - version = version, - services = services, - timestamp = timestamp, - addressReceiveServices = addressReceiveServices, - addressReceiveIpAddress = addressReceiveIpAddress, - addressReceivePort = addressReceivePort, - addressTransServices = addressTransServices, - addressTransIpAddress = addressTransIpAddress, - addressTransPort = addressTransPort, - nonce = nonce, - userAgentSize = userAgentSize, - userAgent = userAgent, - startHeight = startHeight, - relay = relay - ) - } - - def apply( - network: NetworkParameters, - receivingIpAddress: InetAddress): VersionMessage = { - val transmittingIpAddress = InetAddress.getLocalHost - VersionMessage(network, receivingIpAddress, transmittingIpAddress) - } - - def apply( - network: NetworkParameters, - receivingIpAddress: InetAddress, - transmittingIpAddress: InetAddress): VersionMessage = { - val nonce = UInt64.zero - val userAgent = Constants.userAgent - val startHeight = Int32.zero - val relay = false - VersionMessage( - version = Constants.version, - services = UnnamedService, - timestamp = Int64(DateTime.now.getMillis), - addressReceiveServices = UnnamedService, - addressReceiveIpAddress = receivingIpAddress, - addressReceivePort = network.port, - addressTransServices = NodeNetwork, - addressTransIpAddress = transmittingIpAddress, - addressTransPort = network.port, - nonce = nonce, - userAgent = userAgent, - startHeight = startHeight, - relay = relay - ) - } - - def apply(host: String, network: NetworkParameters): VersionMessage = { - //network.dnsSeeds(0) - val transmittingIpAddress = InetAddress.getByName(host) - VersionMessage(network, transmittingIpAddress) - } - - def apply( - socket: InetSocketAddress, - network: NetworkParameters): VersionMessage = { - VersionMessage(network, socket.getAddress) - } -} diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/BlockMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/BlockMessage.scala deleted file mode 100644 index 2c4ef497cb..0000000000 --- a/node/src/main/scala/org/bitcoins/node/messages/data/BlockMessage.scala +++ /dev/null @@ -1,22 +0,0 @@ -package org.bitcoins.node.messages.data - -import org.bitcoins.core.protocol.blockchain.Block -import org.bitcoins.core.util.Factory -import org.bitcoins.node.messages.BlockMessage -import org.bitcoins.node.serializers.messages.data.RawBlockMessageSerializer -import org.bitcoins.node.messages.BlockMessage -import scodec.bits.ByteVector - -/** - * Created by chris on 7/8/16. - */ -object BlockMessage extends Factory[BlockMessage] { - - private case class BlockMessageImpl(block: Block) extends BlockMessage - - def fromBytes(bytes: ByteVector): BlockMessage = - RawBlockMessageSerializer.read(bytes) - - def apply(block: Block): BlockMessage = BlockMessageImpl(block) - -} diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/GetBlocksMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/GetBlocksMessage.scala deleted file mode 100644 index 25e0d38b59..0000000000 --- a/node/src/main/scala/org/bitcoins/node/messages/data/GetBlocksMessage.scala +++ /dev/null @@ -1,47 +0,0 @@ -package org.bitcoins.node.messages.data - -import org.bitcoins.core.crypto.DoubleSha256Digest -import org.bitcoins.core.number.UInt64 -import org.bitcoins.core.protocol.CompactSizeUInt -import org.bitcoins.core.util.Factory -import org.bitcoins.node.messages.GetBlocksMessage -import org.bitcoins.node.serializers.messages.data.RawGetBlocksMessageSerializer -import org.bitcoins.node.versions.ProtocolVersion -import org.bitcoins.node.messages._ -import org.bitcoins.node.serializers.messages.data.RawGetBlocksMessageSerializer -import org.bitcoins.node.versions.ProtocolVersion -import scodec.bits.ByteVector - -/** - * Created by chris on 6/1/16. - * This is the companion object for the GetBlocks network message on the p2p network - * https://bitcoin.org/en/developer-reference#getblocks - */ -object GetBlocksMessage extends Factory[GetBlocksMessage] { - - private case class GetBlocksMessageImpl( - protocolVersion: ProtocolVersion, - hashCount: CompactSizeUInt, - blockHeaderHashes: Seq[DoubleSha256Digest], - stopHash: DoubleSha256Digest) - extends GetBlocksMessage - - def apply( - version: ProtocolVersion, - hashCount: CompactSizeUInt, - blockHeaderHashes: Seq[DoubleSha256Digest], - stopHash: DoubleSha256Digest): GetBlocksMessage = { - GetBlocksMessageImpl(version, hashCount, blockHeaderHashes, stopHash) - } - - def apply( - version: ProtocolVersion, - blockHeaderHashes: Seq[DoubleSha256Digest], - stopHash: DoubleSha256Digest): GetBlocksMessage = { - val hashCount = CompactSizeUInt(UInt64(blockHeaderHashes.length)) - GetBlocksMessage(version, hashCount, blockHeaderHashes, stopHash) - } - - def fromBytes(bytes: ByteVector): GetBlocksMessage = - RawGetBlocksMessageSerializer.read(bytes) -} diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/GetDataMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/GetDataMessage.scala deleted file mode 100644 index f3d0cbd9ac..0000000000 --- a/node/src/main/scala/org/bitcoins/node/messages/data/GetDataMessage.scala +++ /dev/null @@ -1,37 +0,0 @@ -package org.bitcoins.node.messages.data - -import org.bitcoins.core.number.UInt64 -import org.bitcoins.core.protocol.CompactSizeUInt -import org.bitcoins.core.util.Factory -import org.bitcoins.node.messages.GetDataMessage -import org.bitcoins.node.serializers.messages.data.RawGetDataMessageSerializer -import org.bitcoins.node.messages.GetDataMessage -import scodec.bits.ByteVector - -/** - * Created by chris on 7/8/16. - */ -object GetDataMessage extends Factory[GetDataMessage] { - private case class GetDataMessageImpl( - inventoryCount: CompactSizeUInt, - inventories: Seq[Inventory]) - extends GetDataMessage - - override def fromBytes(bytes: ByteVector): GetDataMessage = { - RawGetDataMessageSerializer.read(bytes) - } - - def apply( - inventoryCount: CompactSizeUInt, - inventories: Seq[Inventory]): GetDataMessage = { - GetDataMessageImpl(inventoryCount, inventories) - } - - def apply(inventories: Seq[Inventory]): GetDataMessage = { - val inventoryCount = CompactSizeUInt(UInt64(inventories.length)) - GetDataMessage(inventoryCount, inventories) - } - - def apply(inventory: Inventory): GetDataMessage = - GetDataMessage(Seq(inventory)) -} diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/GetHeadersMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/GetHeadersMessage.scala deleted file mode 100644 index 61080685d9..0000000000 --- a/node/src/main/scala/org/bitcoins/node/messages/data/GetHeadersMessage.scala +++ /dev/null @@ -1,67 +0,0 @@ -package org.bitcoins.node.messages.data - -import org.bitcoins.core.crypto.DoubleSha256Digest -import org.bitcoins.core.number.UInt64 -import org.bitcoins.core.protocol.CompactSizeUInt -import org.bitcoins.core.util.Factory -import org.bitcoins.node.constant.Constants -import org.bitcoins.node.messages.GetHeadersMessage -import org.bitcoins.node.serializers.messages.data.RawGetHeadersMessageSerializer -import org.bitcoins.node.versions.ProtocolVersion -import org.bitcoins.node.constant.Constants -import org.bitcoins.node.messages.GetHeadersMessage -import org.bitcoins.node.serializers.messages.data.RawGetHeadersMessageSerializer -import org.bitcoins.node.versions.ProtocolVersion -import scodec.bits.ByteVector - -/** - * Created by chris on 6/29/16. - */ -object GetHeadersMessage extends Factory[GetHeadersMessage] { - private case class GetHeadersMessageImpl( - version: ProtocolVersion, - hashCount: CompactSizeUInt, - hashes: Seq[DoubleSha256Digest], - hashStop: DoubleSha256Digest) - extends GetHeadersMessage - - override def fromBytes(bytes: ByteVector): GetHeadersMessage = - RawGetHeadersMessageSerializer.read(bytes) - - def apply( - version: ProtocolVersion, - hashCount: CompactSizeUInt, - hashes: Seq[DoubleSha256Digest], - hashStop: DoubleSha256Digest): GetHeadersMessage = { - GetHeadersMessageImpl(version, hashCount, hashes, hashStop) - } - - def apply( - version: ProtocolVersion, - hashes: Seq[DoubleSha256Digest], - hashStop: DoubleSha256Digest): GetHeadersMessage = { - val hashCount = CompactSizeUInt(UInt64(hashes.length)) - GetHeadersMessage(version, hashCount, hashes, hashStop) - } - - /** Creates a [[GetHeadersMessage]] with the default protocol version in [[Constants]] */ - def apply( - hashes: Seq[DoubleSha256Digest], - hashStop: DoubleSha256Digest): GetHeadersMessage = { - GetHeadersMessage(Constants.version, hashes, hashStop) - } - - /** Creates a [[GetHeadersMessage]] with no hash stop set, this requests all possible blocks - * if we need more than 2000 block headers, we will have to send another [[GetHeadersMessage]] - * [[https://bitcoin.org/en/developer-reference#getheaders]] */ - def apply(hashes: Seq[DoubleSha256Digest]): GetHeadersMessage = { - //The header hash of the last header hash being requested; set to all zeroes to request an inv message with all - //subsequent header hashes (a maximum of 2000 will be sent as a reply to this message - val hashStop = DoubleSha256Digest.empty - GetHeadersMessage(hashes, hashStop) - } - - def apply(hashes: DoubleSha256Digest): GetHeadersMessage = { - GetHeadersMessage(Vector(hashes)) - } -} diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/HeadersMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/HeadersMessage.scala deleted file mode 100644 index 65cf0541af..0000000000 --- a/node/src/main/scala/org/bitcoins/node/messages/data/HeadersMessage.scala +++ /dev/null @@ -1,33 +0,0 @@ -package org.bitcoins.node.messages.data - -import org.bitcoins.core.number.UInt64 -import org.bitcoins.core.protocol.CompactSizeUInt -import org.bitcoins.core.protocol.blockchain.BlockHeader -import org.bitcoins.core.util.Factory -import org.bitcoins.node.messages.HeadersMessage -import org.bitcoins.node.serializers.messages.data.RawHeadersMessageSerializer -import org.bitcoins.node.messages.HeadersMessage -import scodec.bits.ByteVector - -/** - * Created by chris on 7/5/16. - */ -object HeadersMessage extends Factory[HeadersMessage] { - private case class HeadersMessageImpl( - count: CompactSizeUInt, - headers: Vector[BlockHeader]) - extends HeadersMessage - - def fromBytes(bytes: ByteVector): HeadersMessage = - RawHeadersMessageSerializer.read(bytes) - - def apply( - count: CompactSizeUInt, - headers: Vector[BlockHeader]): HeadersMessage = - HeadersMessageImpl(count, headers) - - def apply(headers: Vector[BlockHeader]): HeadersMessage = { - val count = CompactSizeUInt(UInt64(headers.length)) - HeadersMessageImpl(count, headers) - } -} diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/InventoryMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/InventoryMessage.scala deleted file mode 100644 index ef4179aab3..0000000000 --- a/node/src/main/scala/org/bitcoins/node/messages/data/InventoryMessage.scala +++ /dev/null @@ -1,36 +0,0 @@ -package org.bitcoins.node.messages.data - -import org.bitcoins.core.number.UInt64 -import org.bitcoins.core.protocol.CompactSizeUInt -import org.bitcoins.core.util.Factory -import org.bitcoins.node.messages.InventoryMessage -import org.bitcoins.node.serializers.messages.data.RawInventoryMessageSerializer -import org.bitcoins.node.messages.InventoryMessage -import org.bitcoins.node.serializers.messages.data.RawInventoryMessageSerializer -import scodec.bits.ByteVector - -/** - * Created by chris on 6/1/16. - * Creates an scala object that represents the inventory type on the p2p network - * https://bitcoin.org/en/developer-reference#inv - */ -object InventoryMessage extends Factory[InventoryMessage] { - - private case class InventoryMessageImpl( - inventoryCount: CompactSizeUInt, - inventories: Seq[Inventory]) - extends InventoryMessage - override def fromBytes(bytes: ByteVector): InventoryMessage = - RawInventoryMessageSerializer.read(bytes) - - def apply( - inventoryCount: CompactSizeUInt, - inventories: Seq[Inventory]): InventoryMessage = { - InventoryMessageImpl(inventoryCount, inventories) - } - - def apply(inventories: Seq[Inventory]): InventoryMessage = { - val count = CompactSizeUInt(UInt64(inventories.length)) - InventoryMessage(count, inventories) - } -} diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/MerkleBlockMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/MerkleBlockMessage.scala deleted file mode 100644 index de8645e883..0000000000 --- a/node/src/main/scala/org/bitcoins/node/messages/data/MerkleBlockMessage.scala +++ /dev/null @@ -1,26 +0,0 @@ -package org.bitcoins.node.messages.data - -import org.bitcoins.core.protocol.blockchain.MerkleBlock -import org.bitcoins.core.util.Factory -import org.bitcoins.node.messages.MerkleBlockMessage -import org.bitcoins.node.serializers.messages.data.RawMerkleBlockMessageSerializer -import org.bitcoins.node.messages.MerkleBlockMessage -import org.bitcoins.node.serializers.messages.data.RawMerkleBlockMessageSerializer -import scodec.bits.ByteVector - -/** - * Created by chris on 6/2/16. - * https://bitcoin.org/en/developer-reference#merkleblock - */ -object MerkleBlockMessage extends Factory[MerkleBlockMessage] { - - private case class MerkleBlockMessageImpl(merkleBlock: MerkleBlock) - extends MerkleBlockMessage - - def fromBytes(bytes: ByteVector): MerkleBlockMessage = - RawMerkleBlockMessageSerializer.read(bytes) - - def apply(merkleBlock: MerkleBlock): MerkleBlockMessage = { - MerkleBlockMessageImpl(merkleBlock) - } -} diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/NotFoundMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/NotFoundMessage.scala deleted file mode 100644 index f729488e33..0000000000 --- a/node/src/main/scala/org/bitcoins/node/messages/data/NotFoundMessage.scala +++ /dev/null @@ -1,30 +0,0 @@ -package org.bitcoins.node.messages.data - -import org.bitcoins.core.protocol.CompactSizeUInt -import org.bitcoins.core.util.Factory -import org.bitcoins.node.messages.NotFoundMessage -import org.bitcoins.node.serializers.messages.data.RawNotFoundMessageSerializer -import org.bitcoins.node.messages.NotFoundMessage -import scodec.bits.ByteVector - -/** - * Created by chris on 6/2/16. - * The companion object factory used to create NotFoundMessages on the p2p network - * https://bitcoin.org/en/developer-reference#notfound - */ -object NotFoundMessage extends Factory[NotFoundMessage] { - - private case class NotFoundMessageImpl( - inventoryCount: CompactSizeUInt, - inventories: Seq[Inventory]) - extends NotFoundMessage - - def fromBytes(bytes: ByteVector): NotFoundMessage = - RawNotFoundMessageSerializer.read(bytes) - - def apply( - inventoryCount: CompactSizeUInt, - inventories: Seq[Inventory]): NotFoundMessage = { - NotFoundMessageImpl(inventoryCount, inventories) - } -} diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/TransactionMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/TransactionMessage.scala deleted file mode 100644 index d9cb044ed4..0000000000 --- a/node/src/main/scala/org/bitcoins/node/messages/data/TransactionMessage.scala +++ /dev/null @@ -1,26 +0,0 @@ -package org.bitcoins.node.messages.data - -import org.bitcoins.core.protocol.transaction.Transaction -import org.bitcoins.core.util.Factory -import org.bitcoins.node.messages.TransactionMessage -import org.bitcoins.node.serializers.messages.data.RawTransactionMessageSerializer -import org.bitcoins.node.messages._ -import org.bitcoins.node.serializers.messages.data.RawTransactionMessageSerializer -import scodec.bits.ByteVector - -/** - * Created by chris on 6/2/16. - * Companion factory object for the TransactionMessage on the p2p network - * https://bitcoin.org/en/developer-reference#tx - */ -object TransactionMessage extends Factory[TransactionMessage] { - - private case class TransactionMessageImpl(transaction: Transaction) - extends TransactionMessage - - def fromBytes(bytes: ByteVector): TransactionMessage = - RawTransactionMessageSerializer.read(bytes) - - def apply(transaction: Transaction): TransactionMessage = - TransactionMessageImpl(transaction) -} diff --git a/node/src/main/scala/org/bitcoins/node/models/Peer.scala b/node/src/main/scala/org/bitcoins/node/models/Peer.scala index ba930ccc34..b27fef26a0 100644 --- a/node/src/main/scala/org/bitcoins/node/models/Peer.scala +++ b/node/src/main/scala/org/bitcoins/node/models/Peer.scala @@ -2,8 +2,8 @@ package org.bitcoins.node.models import java.net.InetSocketAddress +import org.bitcoins.core.p2p.NetworkIpAddress import org.bitcoins.db.DbRowAutoInc -import org.bitcoins.node.util.NetworkIpAddress case class Peer(networkIpAddress: NetworkIpAddress, id: Option[Long] = None) extends DbRowAutoInc[Peer] { diff --git a/node/src/main/scala/org/bitcoins/node/networking/BlockActor.scala b/node/src/main/scala/org/bitcoins/node/networking/BlockActor.scala index 90998dc989..e67c64f6cb 100644 --- a/node/src/main/scala/org/bitcoins/node/networking/BlockActor.scala +++ b/node/src/main/scala/org/bitcoins/node/networking/BlockActor.scala @@ -3,12 +3,11 @@ package org.bitcoins.node.networking import akka.actor.{Actor, ActorContext, ActorRef, Props} import akka.event.LoggingReceive import org.bitcoins.core.crypto.DoubleSha256Digest +import org.bitcoins.core.p2p.NetworkMessage import org.bitcoins.core.protocol.blockchain.BlockHeader import org.bitcoins.core.util.BitcoinSLogger -import org.bitcoins.node.NetworkMessage import org.bitcoins.node.constant.Constants -import org.bitcoins.node.messages.data.{GetDataMessage, Inventory} -import org.bitcoins.node.messages.{BlockMessage, TypeIdentifier} +import org.bitcoins.core.p2p._ /** * Created by chris on 7/10/16. diff --git a/node/src/main/scala/org/bitcoins/node/networking/Client.scala b/node/src/main/scala/org/bitcoins/node/networking/Client.scala index 5e3178875f..73dd88ef7b 100644 --- a/node/src/main/scala/org/bitcoins/node/networking/Client.scala +++ b/node/src/main/scala/org/bitcoins/node/networking/Client.scala @@ -5,15 +5,15 @@ import akka.event.LoggingReceive import akka.io.{IO, Tcp} import akka.util.ByteString import org.bitcoins.core.config.NetworkParameters +import org.bitcoins.core.p2p.NetworkMessage import org.bitcoins.core.util.BitcoinSLogger -import org.bitcoins.node.NetworkMessage -import org.bitcoins.node.config.NodeAppConfig -import org.bitcoins.node.messages.NetworkPayload +import org.bitcoins.core.p2p.NetworkPayload import org.bitcoins.node.models.Peer import org.bitcoins.node.networking.peer.PeerMessageReceiver import org.bitcoins.node.networking.peer.PeerMessageReceiver.NetworkMessageReceived import org.bitcoins.node.util.BitcoinSpvNodeUtil import scodec.bits.ByteVector +import org.bitcoins.node.config.NodeAppConfig /** * Created by chris on 6/6/16. diff --git a/node/src/main/scala/org/bitcoins/node/networking/PaymentActor.scala b/node/src/main/scala/org/bitcoins/node/networking/PaymentActor.scala index 1ab3863b17..eef761b14d 100644 --- a/node/src/main/scala/org/bitcoins/node/networking/PaymentActor.scala +++ b/node/src/main/scala/org/bitcoins/node/networking/PaymentActor.scala @@ -6,14 +6,12 @@ import akka.io.Tcp import org.bitcoins.core.bloom.{BloomFilter, BloomUpdateNone} import org.bitcoins.core.crypto.{DoubleSha256Digest, Sha256Hash160Digest} import org.bitcoins.core.number.UInt32 +import org.bitcoins.core.p2p.NetworkMessage import org.bitcoins.core.protocol.Address import org.bitcoins.core.protocol.blockchain.MerkleBlock import org.bitcoins.core.util.BitcoinSLogger -import org.bitcoins.node.NetworkMessage import org.bitcoins.node.constant.Constants -import org.bitcoins.node.messages._ -import org.bitcoins.node.messages.control.FilterLoadMessage -import org.bitcoins.node.messages.data.{GetDataMessage, Inventory} +import org.bitcoins.core.p2p._ import org.bitcoins.node.util.BitcoinSpvNodeUtil /** diff --git a/node/src/main/scala/org/bitcoins/node/networking/peer/ControlMessageHandler.scala b/node/src/main/scala/org/bitcoins/node/networking/peer/ControlMessageHandler.scala index ded8a1fb12..00210ec3b6 100644 --- a/node/src/main/scala/org/bitcoins/node/networking/peer/ControlMessageHandler.scala +++ b/node/src/main/scala/org/bitcoins/node/networking/peer/ControlMessageHandler.scala @@ -1,7 +1,7 @@ package org.bitcoins.node.networking.peer import org.bitcoins.core.util.BitcoinSLogger -import org.bitcoins.node.messages._ +import org.bitcoins.core.p2p._ import scala.concurrent.ExecutionContext diff --git a/node/src/main/scala/org/bitcoins/node/networking/peer/DataMessageHandler.scala b/node/src/main/scala/org/bitcoins/node/networking/peer/DataMessageHandler.scala index 431df172b6..0788c79b27 100644 --- a/node/src/main/scala/org/bitcoins/node/networking/peer/DataMessageHandler.scala +++ b/node/src/main/scala/org/bitcoins/node/networking/peer/DataMessageHandler.scala @@ -5,7 +5,7 @@ import org.bitcoins.chain.blockchain.ChainHandler import org.bitcoins.chain.config.ChainAppConfig import org.bitcoins.chain.models.BlockHeaderDAO import org.bitcoins.core.util.{BitcoinSLogger, FutureUtil} -import org.bitcoins.node.messages.{ +import org.bitcoins.core.p2p.{ DataPayload, HeadersMessage, InventoryMessage diff --git a/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiver.scala b/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiver.scala index 2075e400b5..55eecbec60 100644 --- a/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiver.scala +++ b/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiver.scala @@ -2,18 +2,13 @@ package org.bitcoins.node.networking.peer import akka.actor.ActorRefFactory import org.bitcoins.chain.config.ChainAppConfig +import org.bitcoins.core.p2p.NetworkMessage import org.bitcoins.core.util.BitcoinSLogger -import org.bitcoins.node.NetworkMessage import org.bitcoins.node.config.NodeAppConfig -import org.bitcoins.node.messages._ +import org.bitcoins.core.p2p._ import org.bitcoins.node.models.Peer import org.bitcoins.node.networking.Client -import org.bitcoins.node.networking.peer.PeerMessageReceiverState.{ - Disconnected, - Initializing, - Normal, - Preconnection -} +import org.bitcoins.node.networking.peer.PeerMessageReceiverState.{Disconnected, Initializing, Normal, Preconnection} import scala.util.{Failure, Success, Try} diff --git a/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiverState.scala b/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiverState.scala index bca88013ce..f5ef96d164 100644 --- a/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiverState.scala +++ b/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiverState.scala @@ -1,8 +1,8 @@ package org.bitcoins.node.networking.peer +import org.bitcoins.core.p2p.NetworkMessage import org.bitcoins.core.util.BitcoinSLogger -import org.bitcoins.node.NetworkMessage -import org.bitcoins.node.messages.{VerAckMessage, VersionMessage} +import org.bitcoins.core.p2p.{VerAckMessage, VersionMessage} import org.bitcoins.node.networking.Client import scala.concurrent.{Future, Promise} diff --git a/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageSender.scala b/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageSender.scala index 407854733d..33fadb054c 100644 --- a/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageSender.scala +++ b/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageSender.scala @@ -4,12 +4,9 @@ import akka.actor.ActorRef import akka.io.Tcp import org.bitcoins.core.config.NetworkParameters import org.bitcoins.core.crypto.DoubleSha256Digest +import org.bitcoins.core.p2p.NetworkMessage import org.bitcoins.core.util.BitcoinSLogger -import org.bitcoins.node.NetworkMessage -import org.bitcoins.node.messages._ -import org.bitcoins.node.messages.control.{PongMessage, VersionMessage} -import org.bitcoins.node.messages.data.GetHeadersMessage -import org.bitcoins.node.models.Peer +import org.bitcoins.core.p2p._ import org.bitcoins.node.networking.Client /** diff --git a/node/src/main/scala/org/bitcoins/node/util/BitcoinSpvNodeUtil.scala b/node/src/main/scala/org/bitcoins/node/util/BitcoinSpvNodeUtil.scala index d2421d445e..a2d8bc46f5 100644 --- a/node/src/main/scala/org/bitcoins/node/util/BitcoinSpvNodeUtil.scala +++ b/node/src/main/scala/org/bitcoins/node/util/BitcoinSpvNodeUtil.scala @@ -1,46 +1,15 @@ package org.bitcoins.node.util -import java.net.InetAddress - import akka.util.{ByteString, CompactByteString} +import org.bitcoins.core.p2p.NetworkMessage import org.bitcoins.core.util.BitcoinSLogger -import org.bitcoins.node.NetworkMessage -import org.bitcoins.node.NetworkMessage import scodec.bits.ByteVector import scala.annotation.tailrec import scala.util.{Failure, Success, Try} -/** - * Created by chris on 6/3/16. - */ trait BitcoinSpvNodeUtil extends BitcoinSLogger { - /** - * Writes an ip address to the representation that the p2p network requires - * An IPv6 address is in big endian byte order - * An IPv4 address has to be mapped to an IPv6 address - * https://en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses - * - * @param iNetAddress - * @return - */ - def writeAddress(iNetAddress: InetAddress): ByteVector = { - if (iNetAddress.getAddress.size == 4) { - //this means we need to convert the IPv4 address to an IPv6 address - //first we have an 80 bit prefix of zeros - val zeroBytes = Array.fill(10)(0.toByte) - //the next 16 bits are ones - val oneBytes = List(0xff.toByte, 0xff.toByte) - - val prefix: ByteVector = ByteVector(zeroBytes) ++ ByteVector(oneBytes) - val addr = prefix ++ ByteVector(iNetAddress.getAddress) - addr - } else { - ByteVector(iNetAddress.getAddress) - } - } - /** * Akka sends messages as one byte stream. There is not a 1 to 1 relationship between byte streams received and * bitcoin protocol messages. This function parses our byte stream into individual network messages diff --git a/testkit/src/main/scala/org/bitcoins/testkit/gen/ControlMessageGenerator.scala b/testkit/src/main/scala/org/bitcoins/testkit/gen/ControlMessageGenerator.scala index abb7f17910..62b9aa0d67 100644 --- a/testkit/src/main/scala/org/bitcoins/testkit/gen/ControlMessageGenerator.scala +++ b/testkit/src/main/scala/org/bitcoins/testkit/gen/ControlMessageGenerator.scala @@ -3,22 +3,14 @@ package org.bitcoins.testkit.gen import java.net.{InetAddress, InetSocketAddress} import org.bitcoins.core.number.{UInt32, UInt64} +import org.bitcoins.core.p2p.ProtocolVersion import org.bitcoins.core.protocol.CompactSizeUInt -import org.bitcoins.node.messages._ -import org.bitcoins.node.messages.control._ -import org.bitcoins.node.versions.ProtocolVersion -import org.bitcoins.testkit.core.gen.{ - BloomFilterGenerator, - CryptoGenerators, - NumberGenerator, - StringGenerators -} +import org.bitcoins.core.p2p._ +import org.bitcoins.core.p2p._ +import org.bitcoins.testkit.core.gen.{BloomFilterGenerator, CryptoGenerators, NumberGenerator, StringGenerators} import org.scalacheck.Gen import scodec.bits.ByteVector -/** - * Created by chris on 6/27/16. - */ trait ControlMessageGenerator { /** diff --git a/testkit/src/main/scala/org/bitcoins/testkit/gen/DataMessageGenerator.scala b/testkit/src/main/scala/org/bitcoins/testkit/gen/DataMessageGenerator.scala index d3ebf0d72a..c4d9a26685 100644 --- a/testkit/src/main/scala/org/bitcoins/testkit/gen/DataMessageGenerator.scala +++ b/testkit/src/main/scala/org/bitcoins/testkit/gen/DataMessageGenerator.scala @@ -1,8 +1,7 @@ package org.bitcoins.testkit.gen import org.bitcoins.core.number.UInt32 -import org.bitcoins.node.messages._ -import org.bitcoins.node.messages.data._ +import org.bitcoins.core.p2p._ import org.bitcoins.testkit.core.gen.{ BlockchainElementsGenerator, CryptoGenerators, @@ -12,17 +11,14 @@ import org.bitcoins.testkit.core.gen.{ import org.scalacheck.Gen /** - * Created by chris on 6/29/16. * Responsible for generating random [[DataMessage]] - * [[https://bitcoin.org/en/developer-reference#data-messages]] + * @see [[https://bitcoin.org/en/developer-reference#data-messages]] */ trait DataMessageGenerator { /** * Generates a random [[GetHeadersMessage]] - * [[https://bitcoin.org/en/developer-reference#getheaders]] - * - * @return + * @see [[https://bitcoin.org/en/developer-reference#getheaders]] */ def getHeaderMessages: Gen[GetHeadersMessage] = for { @@ -44,8 +40,6 @@ trait DataMessageGenerator { /** * Generates a random [[TypeIdentifier]] * [[https://bitcoin.org/en/developer-reference#data-messages]] - * - * @return */ def typeIdentifier: Gen[TypeIdentifier] = for { @@ -54,9 +48,7 @@ trait DataMessageGenerator { /** * Generates a random [[Inventory]] - * [[https://bitcoin.org/en/developer-reference#term-inventory]] - * - * @return + * @see [[https://bitcoin.org/en/developer-reference#term-inventory]] */ def inventory: Gen[Inventory] = for { @@ -66,8 +58,7 @@ trait DataMessageGenerator { /** * Generates a random [[InventoryMessage]] - * [[https://bitcoin.org/en/developer-reference#inv]] - * @return + * @see [[https://bitcoin.org/en/developer-reference#inv]] */ def inventoryMessages: Gen[InventoryMessage] = for { @@ -77,8 +68,7 @@ trait DataMessageGenerator { /** * Generate a random [[GetDataMessage]] - * [[https://bitcoin.org/en/developer-reference#getdata]] - * @return + * @see [[https://bitcoin.org/en/developer-reference#getdata]] */ def getDataMessages: Gen[GetDataMessage] = for { @@ -87,8 +77,7 @@ trait DataMessageGenerator { /** * Generates a random [[MerkleBlockMessage]] - * [[https://bitcoin.org/en/developer-reference#merkleblock]] - * @return + * @see [[https://bitcoin.org/en/developer-reference#merkleblock]] */ def merkleBlockMessage: Gen[MerkleBlockMessage] = for { @@ -96,7 +85,7 @@ trait DataMessageGenerator { } yield MerkleBlockMessage(merkleBlock) /** Generates a [[TransactionMessage]] - * [[https://bitcoin.org/en/developer-reference#tx]] + * @see [[https://bitcoin.org/en/developer-reference#tx]] * */ def transactionMessage: Gen[TransactionMessage] = for { diff --git a/testkit/src/main/scala/org/bitcoins/testkit/node/NodeTestUtil.scala b/testkit/src/main/scala/org/bitcoins/testkit/node/NodeTestUtil.scala index fc47784c3c..d0c89d6cb1 100644 --- a/testkit/src/main/scala/org/bitcoins/testkit/node/NodeTestUtil.scala +++ b/testkit/src/main/scala/org/bitcoins/testkit/node/NodeTestUtil.scala @@ -3,16 +3,15 @@ package org.bitcoins.testkit.node import java.net.InetSocketAddress import akka.actor.ActorRefFactory +import org.bitcoins.core.p2p.{NetworkIpAddress, NetworkMessage} import org.bitcoins.core.protocol.blockchain.BlockHeader import org.bitcoins.core.protocol.transaction.Transaction -import org.bitcoins.node.NetworkMessage import org.bitcoins.node.config.NodeAppConfig -import org.bitcoins.node.messages.control.VersionMessage -import org.bitcoins.node.messages.data.GetHeadersMessage +import org.bitcoins.core.p2p.VersionMessage +import org.bitcoins.core.p2p.GetHeadersMessage import org.bitcoins.node.models.Peer import org.bitcoins.node.networking.Client import org.bitcoins.node.networking.peer.PeerMessageReceiver -import org.bitcoins.node.util.NetworkIpAddress import org.bitcoins.rpc.client.common.BitcoindRpcClient /** diff --git a/testkit/src/main/scala/org/bitcoins/testkit/node/NodeUnitTest.scala b/testkit/src/main/scala/org/bitcoins/testkit/node/NodeUnitTest.scala index 7fb7fb65be..3e90336b69 100644 --- a/testkit/src/main/scala/org/bitcoins/testkit/node/NodeUnitTest.scala +++ b/testkit/src/main/scala/org/bitcoins/testkit/node/NodeUnitTest.scala @@ -4,27 +4,18 @@ import java.net.InetSocketAddress import akka.actor.ActorSystem import org.bitcoins.core.config.NetworkParameters +import org.bitcoins.core.p2p.NetworkIpAddress import org.bitcoins.core.util.BitcoinSLogger import org.bitcoins.db.AppConfig import org.bitcoins.node.SpvNode import org.bitcoins.node.models.Peer -import org.bitcoins.node.networking.peer.{ - PeerHandler, - PeerMessageReceiver, - PeerMessageSender -} -import org.bitcoins.node.util.NetworkIpAddress +import org.bitcoins.node.networking.peer.{PeerHandler, PeerMessageReceiver, PeerMessageSender} import org.bitcoins.rpc.client.common.BitcoindRpcClient import org.bitcoins.testkit.chain.ChainUnitTest import org.bitcoins.testkit.fixtures.BitcoinSFixture import org.bitcoins.testkit.node.fixture.SpvNodeConnectedWithBitcoind import org.bitcoins.testkit.rpc.BitcoindRpcTestUtil -import org.scalatest.{ - BeforeAndAfter, - BeforeAndAfterAll, - FutureOutcome, - MustMatchers -} +import org.scalatest.{BeforeAndAfter, BeforeAndAfterAll, FutureOutcome, MustMatchers} import scala.concurrent.duration._ import scala.concurrent.{ExecutionContext, Future}