diff --git a/app/server-test/src/test/scala/org/bitcoins/server/RoutesSpec.scala b/app/server-test/src/test/scala/org/bitcoins/server/RoutesSpec.scala index 2236535b54..ab5ebc3985 100644 --- a/app/server-test/src/test/scala/org/bitcoins/server/RoutesSpec.scala +++ b/app/server-test/src/test/scala/org/bitcoins/server/RoutesSpec.scala @@ -8,6 +8,7 @@ import akka.http.scaladsl.testkit.ScalatestRouteTest import org.bitcoins.chain.api.ChainApi import org.bitcoins.commons.jsonmodels.wallet.CoinSelectionAlgo import org.bitcoins.core.Core +import org.bitcoins.core.config.RegTest import org.bitcoins.core.crypto.ExtPublicKey import org.bitcoins.core.currency.{Bitcoins, CurrencyUnit, Satoshis} import org.bitcoins.core.hd._ @@ -37,6 +38,7 @@ import org.bitcoins.crypto.{ } import org.bitcoins.node.Node import org.bitcoins.wallet.MockWalletApi +import org.bitcoins.wallet.api.AddressInfo import org.bitcoins.wallet.models._ import org.scalamock.scalatest.MockFactory import org.scalatest.wordspec.AnyWordSpec @@ -472,6 +474,27 @@ class RoutesSpec extends AnyWordSpec with ScalatestRouteTest with MockFactory { } } + "get address info" in { + + val key = ECPublicKey.freshPublicKey + val hdPath = HDPath.fromString("m/84'/1'/0'/0/0").get + + (mockWalletApi + .getAddressInfo(_: BitcoinAddress)) + .expects(testAddress) + .returning(Future.successful(Some(AddressInfo(key, RegTest, hdPath)))) + + val route = + walletRoutes.handleCommand( + ServerCommand("getaddressinfo", Arr(Str(testAddressStr)))) + + Get() ~> route ~> check { + contentType == `application/json` + responseAs[ + String] == """{"result":"""" + key.hex + " " + hdPath.toString + """","error":null}""" + } + } + "return a new address with a label" in { (mockWalletApi .getNewAddress(_: Vector[AddressTag])) diff --git a/app/server/src/main/scala/org/bitcoins/server/WalletRoutes.scala b/app/server/src/main/scala/org/bitcoins/server/WalletRoutes.scala index 9ed127de24..ec05a0d94d 100644 --- a/app/server/src/main/scala/org/bitcoins/server/WalletRoutes.scala +++ b/app/server/src/main/scala/org/bitcoins/server/WalletRoutes.scala @@ -317,6 +317,22 @@ case class WalletRoutes(wallet: AnyHDWalletApi, node: Node)(implicit } } + case ServerCommand("getaddressinfo", arr) => + GetAddressInfo.fromJsArr(arr) match { + case Failure(err) => + reject(ValidationRejection("failure", Some(err))) + case Success(GetAddressInfo(address)) => + complete { + wallet.getAddressInfo(address).map { + case Some(addressInfo) => + Server.httpSuccess( + s"${addressInfo.pubkey.hex} ${addressInfo.path.toString}") + case None => + Server.httpSuccess("Wallet does not contain address") + } + } + } + case ServerCommand("createnewaccount", _) => complete { for {