diff --git a/app/server/src/main/scala/org/bitcoins/server/Main.scala b/app/server/src/main/scala/org/bitcoins/server/Main.scala index 64bd4f6950..facd01c857 100644 --- a/app/server/src/main/scala/org/bitcoins/server/Main.scala +++ b/app/server/src/main/scala/org/bitcoins/server/Main.scala @@ -5,7 +5,7 @@ import java.nio.file.Files import akka.actor.ActorSystem import org.bitcoins.chain.config.ChainAppConfig -import org.bitcoins.core.node.NodeApi +import org.bitcoins.core.api.NodeApi import org.bitcoins.node.config.NodeAppConfig import org.bitcoins.node.models.Peer import org.bitcoins.node.networking.peer.DataMessageHandler diff --git a/chain/src/main/scala/org/bitcoins/chain/api/ChainApi.scala b/chain/src/main/scala/org/bitcoins/chain/api/ChainApi.scala index 81cd874482..00d8b1e3ed 100644 --- a/chain/src/main/scala/org/bitcoins/chain/api/ChainApi.scala +++ b/chain/src/main/scala/org/bitcoins/chain/api/ChainApi.scala @@ -5,6 +5,7 @@ import org.bitcoins.chain.models.{ CompactFilterDb, CompactFilterHeaderDb } +import org.bitcoins.core.api.ChainQueryApi import org.bitcoins.core.crypto.{DoubleSha256Digest, DoubleSha256DigestBE} import org.bitcoins.core.gcs.FilterHeader import org.bitcoins.core.p2p.CompactFilterMessage @@ -17,7 +18,7 @@ import scala.concurrent.{ExecutionContext, Future} /** * Entry api to the chain project for adding new things to our blockchain */ -trait ChainApi { +trait ChainApi extends ChainQueryApi { /** * Adds a block header to our chain project @@ -50,7 +51,7 @@ trait ChainApi { def getBlockCount(implicit ec: ExecutionContext): Future[Int] /** Gets the hash of the block that is what we consider "best" */ - def getBestBlockHash( + override def getBestBlockHash( implicit ec: ExecutionContext): Future[DoubleSha256DigestBE] /** Gets the best block header we have */ @@ -186,4 +187,10 @@ trait ChainApi { /** Returns the block height of the given block stamp */ def getHeightByBlockStamp(blockStamp: BlockStamp)( implicit ec: ExecutionContext): Future[Int] + + /** @inheritdoc */ + override def getBlockHeight(blockHash: DoubleSha256DigestBE)( + implicit ec: ExecutionContext): Future[Option[Int]] = + getHeader(blockHash).map(_.map(_.height)) + } diff --git a/core/src/main/scala/org/bitcoins/core/api/ChainQueryApi.scala b/core/src/main/scala/org/bitcoins/core/api/ChainQueryApi.scala new file mode 100644 index 0000000000..f12536e5f8 --- /dev/null +++ b/core/src/main/scala/org/bitcoins/core/api/ChainQueryApi.scala @@ -0,0 +1,20 @@ +package org.bitcoins.core.api + +import org.bitcoins.core.crypto.DoubleSha256DigestBE + +import scala.concurrent.{ExecutionContext, Future} + +/** + * This trait provides methods to query various types of blockchain data. + */ +trait ChainQueryApi { + + /** Gets the height of the given block */ + def getBlockHeight(blockHash: DoubleSha256DigestBE)( + implicit ec: ExecutionContext): Future[Option[Int]] + + /** Gets the hash of the block that is what we consider "best" */ + def getBestBlockHash( + implicit ec: ExecutionContext): Future[DoubleSha256DigestBE] + +} diff --git a/core/src/main/scala/org/bitcoins/core/node/NodeApi.scala b/core/src/main/scala/org/bitcoins/core/api/NodeApi.scala similarity index 95% rename from core/src/main/scala/org/bitcoins/core/node/NodeApi.scala rename to core/src/main/scala/org/bitcoins/core/api/NodeApi.scala index a80eb4a71d..523ed95e5e 100644 --- a/core/src/main/scala/org/bitcoins/core/node/NodeApi.scala +++ b/core/src/main/scala/org/bitcoins/core/api/NodeApi.scala @@ -1,4 +1,4 @@ -package org.bitcoins.core.node +package org.bitcoins.core.api import org.bitcoins.core.crypto.DoubleSha256Digest import org.bitcoins.core.util.FutureUtil diff --git a/docs/applications/wallet.md b/docs/applications/wallet.md index 8c9851a71c..4807b26f5a 100644 --- a/docs/applications/wallet.md +++ b/docs/applications/wallet.md @@ -100,7 +100,7 @@ val syncF: Future[ChainApi] = configF.flatMap { _ => import org.bitcoins.wallet.api.LockedWalletApi import org.bitcoins.wallet.api.InitializeWalletSuccess import org.bitcoins.wallet.Wallet -import org.bitcoins.core.node.NodeApi +import org.bitcoins.core.api.NodeApi val walletF: Future[LockedWalletApi] = configF.flatMap { _ => Wallet.initialize(NodeApi.NoOp).collect { case InitializeWalletSuccess(wallet) => wallet diff --git a/node/src/main/scala/org/bitcoins/node/Node.scala b/node/src/main/scala/org/bitcoins/node/Node.scala index a9ded06c89..891efcf0ad 100644 --- a/node/src/main/scala/org/bitcoins/node/Node.scala +++ b/node/src/main/scala/org/bitcoins/node/Node.scala @@ -8,8 +8,8 @@ import org.bitcoins.chain.models.{ CompactFilterDAO, CompactFilterHeaderDAO } +import org.bitcoins.core.api.NodeApi import org.bitcoins.core.crypto.DoubleSha256Digest -import org.bitcoins.core.node.NodeApi import org.bitcoins.core.p2p.{NetworkPayload, TypeIdentifier} import org.bitcoins.core.protocol.BlockStamp import org.bitcoins.core.protocol.script.ScriptPubKey diff --git a/testkit/src/main/scala/org/bitcoins/testkit/wallet/BitcoinSWalletTest.scala b/testkit/src/main/scala/org/bitcoins/testkit/wallet/BitcoinSWalletTest.scala index 192f99e0be..203ef398e3 100644 --- a/testkit/src/main/scala/org/bitcoins/testkit/wallet/BitcoinSWalletTest.scala +++ b/testkit/src/main/scala/org/bitcoins/testkit/wallet/BitcoinSWalletTest.scala @@ -2,9 +2,9 @@ package org.bitcoins.testkit.wallet import akka.actor.ActorSystem import com.typesafe.config.{Config, ConfigFactory} +import org.bitcoins.core.api.NodeApi import org.bitcoins.core.crypto.DoubleSha256Digest import org.bitcoins.core.currency._ -import org.bitcoins.core.node.NodeApi import org.bitcoins.core.util.FutureUtil import org.bitcoins.db.AppConfig import org.bitcoins.rpc.client.common.{BitcoindRpcClient, BitcoindVersion} diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/TrezorAddressTest.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/TrezorAddressTest.scala index 5f784346b6..141897f933 100644 --- a/wallet-test/src/test/scala/org/bitcoins/wallet/TrezorAddressTest.scala +++ b/wallet-test/src/test/scala/org/bitcoins/wallet/TrezorAddressTest.scala @@ -38,7 +38,7 @@ import org.bitcoins.core.hd.HDChainType.External import org.bitcoins.wallet.models.AddressDb import org.bitcoins.wallet.models.AccountDb import _root_.akka.actor.Address -import org.bitcoins.core.node.NodeApi +import org.bitcoins.core.api.NodeApi import org.scalatest.compatible.Assertion import scala.concurrent.ExecutionContext diff --git a/wallet/src/main/scala/org/bitcoins/wallet/Wallet.scala b/wallet/src/main/scala/org/bitcoins/wallet/Wallet.scala index 1f55c1dc0a..51c6b8f8ce 100644 --- a/wallet/src/main/scala/org/bitcoins/wallet/Wallet.scala +++ b/wallet/src/main/scala/org/bitcoins/wallet/Wallet.scala @@ -1,11 +1,11 @@ package org.bitcoins.wallet +import org.bitcoins.core.api.NodeApi import org.bitcoins.core.compat._ import org.bitcoins.core.config.BitcoinNetwork import org.bitcoins.core.crypto._ import org.bitcoins.core.currency._ import org.bitcoins.core.hd._ -import org.bitcoins.core.node.NodeApi import org.bitcoins.core.protocol.BitcoinAddress import org.bitcoins.core.protocol.transaction._ import org.bitcoins.core.wallet.builder.BitcoinTxBuilder diff --git a/wallet/src/main/scala/org/bitcoins/wallet/api/WalletApi.scala b/wallet/src/main/scala/org/bitcoins/wallet/api/WalletApi.scala index 3ddd902736..f8707b578e 100644 --- a/wallet/src/main/scala/org/bitcoins/wallet/api/WalletApi.scala +++ b/wallet/src/main/scala/org/bitcoins/wallet/api/WalletApi.scala @@ -1,12 +1,12 @@ package org.bitcoins.wallet.api +import org.bitcoins.core.api.NodeApi import org.bitcoins.core.bloom.BloomFilter import org.bitcoins.core.config.NetworkParameters import org.bitcoins.core.crypto._ import org.bitcoins.core.currency.CurrencyUnit import org.bitcoins.core.gcs.{GolombFilter, SimpleFilterMatcher} import org.bitcoins.core.hd.{AddressType, HDPurpose} -import org.bitcoins.core.node.NodeApi import org.bitcoins.core.protocol.BitcoinAddress import org.bitcoins.core.protocol.blockchain.{Block, ChainParams} import org.bitcoins.core.protocol.transaction.Transaction