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}