From 87dabed2b12491ce56051f51573bd9b7593e2b18 Mon Sep 17 00:00:00 2001 From: cwaldron97 <32018000+cwaldron97@users.noreply.github.com> Date: Tue, 30 Jul 2019 18:52:01 -0500 Subject: [PATCH] Replace Bitcoins params in RPC client with CurrencyUnit (#618) * implemented currency unit and wrote a writer * Convert more Bitcoins parameters to CurrencyUnit --- .../rpc/client/common/TransactionRpc.scala | 22 +++++++------- .../bitcoins/rpc/client/v16/V16SendRpc.scala | 12 ++++---- .../bitcoins/rpc/client/v17/V17PsbtRpc.scala | 30 +++++++++++-------- .../rpc/serializers/JsonWriters.scala | 2 +- 4 files changed, 37 insertions(+), 29 deletions(-) diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/client/common/TransactionRpc.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/client/common/TransactionRpc.scala index 5ea595b3ef..f83f42b577 100644 --- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/client/common/TransactionRpc.scala +++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/client/common/TransactionRpc.scala @@ -1,7 +1,7 @@ package org.bitcoins.rpc.client.common import org.bitcoins.core.crypto.{DoubleSha256Digest, DoubleSha256DigestBE} -import org.bitcoins.core.currency.{Bitcoins, Satoshis} +import org.bitcoins.core.currency.{Bitcoins, CurrencyUnit, Satoshis} import org.bitcoins.core.protocol.BitcoinAddress import org.bitcoins.core.protocol.blockchain.MerkleBlock import org.bitcoins.rpc.client.common.RpcOpts.{AddressType, FeeEstimationMode} @@ -133,29 +133,31 @@ trait TransactionRpc { self: Client => } def sendMany( - amounts: Map[BitcoinAddress, Bitcoins], + amounts: Map[BitcoinAddress, CurrencyUnit], minconf: Int = 1, comment: String = "", subtractFeeFrom: Vector[BitcoinAddress] = Vector.empty): Future[ DoubleSha256DigestBE] = { - bitcoindCall[DoubleSha256DigestBE]("sendmany", - List(JsString(""), - Json.toJson(amounts), - JsNumber(minconf), - JsString(comment), - Json.toJson(subtractFeeFrom))) + bitcoindCall[DoubleSha256DigestBE]( + "sendmany", + List(JsString(""), + Json.toJson(amounts.mapValues(curr => Bitcoins(curr.satoshis))), + JsNumber(minconf), + JsString(comment), + Json.toJson(subtractFeeFrom)) + ) } def sendToAddress( address: BitcoinAddress, - amount: Bitcoins, + amount: CurrencyUnit, localComment: String = "", toComment: String = "", subractFeeFromAmount: Boolean = false): Future[DoubleSha256DigestBE] = { bitcoindCall[DoubleSha256DigestBE]( "sendtoaddress", List(Json.toJson(address), - Json.toJson(amount), + Json.toJson(Bitcoins(amount.satoshis)), JsString(localComment), JsString(toComment), JsBoolean(subractFeeFromAmount)) diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/client/v16/V16SendRpc.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/client/v16/V16SendRpc.scala index 581baae3f3..77916fbcef 100644 --- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/client/v16/V16SendRpc.scala +++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/client/v16/V16SendRpc.scala @@ -9,6 +9,8 @@ import org.bitcoins.rpc.serializers.JsonSerializers._ import play.api.libs.json.{JsNumber, JsString} import scala.concurrent.Future +import org.bitcoins.core.currency.CurrencyUnit +import play.api.libs.json.Json /** * RPC calls related to transaction sending @@ -19,12 +21,12 @@ trait V16SendRpc { self: Client => def move( fromAccount: String, toAccount: String, - amount: Bitcoins, + amount: CurrencyUnit, comment: String = ""): Future[Boolean] = { bitcoindCall[Boolean]("move", List(JsString(fromAccount), JsString(toAccount), - JsNumber(amount.toBigDecimal), + Json.toJson(Bitcoins(amount.satoshis)), JsNumber(6), JsString(comment))) } @@ -32,15 +34,15 @@ trait V16SendRpc { self: Client => def sendFrom( fromAccount: String, toAddress: BitcoinAddress, - amount: Bitcoins, + amount: CurrencyUnit, confirmations: Int = 1, comment: String = "", toComment: String = ""): Future[DoubleSha256DigestBE] = { bitcoindCall[DoubleSha256DigestBE]( "sendfrom", List(JsString(fromAccount), - JsString(toAddress.value), - JsNumber(amount.toBigDecimal), + Json.toJson(toAddress), + Json.toJson(Bitcoins(amount.satoshis)), JsNumber(confirmations), JsString(comment), JsString(toComment)) diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/client/v17/V17PsbtRpc.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/client/v17/V17PsbtRpc.scala index 920e562042..5e64353998 100644 --- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/client/v17/V17PsbtRpc.scala +++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/client/v17/V17PsbtRpc.scala @@ -17,6 +17,7 @@ import org.bitcoins.rpc.serializers.JsonSerializers._ import play.api.libs.json._ import scala.concurrent.Future +import org.bitcoins.core.currency.CurrencyUnit /** * RPC calls related to PSBT (partially signed bitcoin transactions) @@ -43,14 +44,15 @@ trait V17PsbtRpc { self: Client => def createPsbt( inputs: Vector[TransactionInput], - outputs: Map[BitcoinAddress, Bitcoins], + outputs: Map[BitcoinAddress, CurrencyUnit], locktime: Int = 0, replacable: Boolean = false): Future[String] = { - bitcoindCall[String]("createpsbt", - List(Json.toJson(inputs), - Json.toJson(outputs), - JsNumber(locktime), - JsBoolean(replacable))) + bitcoindCall[String]( + "createpsbt", + List(Json.toJson(inputs), + Json.toJson(outputs.mapValues(curr => Bitcoins(curr.satoshis))), + JsNumber(locktime), + JsBoolean(replacable))) } def combinePsbt(psbts: Vector[String]): Future[String] = { @@ -66,17 +68,19 @@ trait V17PsbtRpc { self: Client => def walletCreateFundedPsbt( inputs: Vector[TransactionInput], - outputs: Map[BitcoinAddress, Bitcoins], + outputs: Map[BitcoinAddress, CurrencyUnit], locktime: Int = 0, options: WalletCreateFundedPsbtOptions = WalletCreateFundedPsbtOptions(), bip32derivs: Boolean = false ): Future[WalletCreateFundedPsbtResult] = - bitcoindCall[WalletCreateFundedPsbtResult]("walletcreatefundedpsbt", - List(Json.toJson(inputs), - Json.toJson(outputs), - JsNumber(locktime), - Json.toJson(options), - Json.toJson(bip32derivs))) + bitcoindCall[WalletCreateFundedPsbtResult]( + "walletcreatefundedpsbt", + List(Json.toJson(inputs), + Json.toJson(outputs.mapValues(curr => Bitcoins(curr.satoshis))), + JsNumber(locktime), + Json.toJson(options), + Json.toJson(bip32derivs)) + ) def walletProcessPsbt( psbt: String, diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonWriters.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonWriters.scala index fcab7bc15f..ec816c5843 100644 --- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonWriters.scala +++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonWriters.scala @@ -1,7 +1,7 @@ package org.bitcoins.rpc.serializers import org.bitcoins.core.crypto.{DoubleSha256Digest, DoubleSha256DigestBE} -import org.bitcoins.core.currency.Bitcoins +import org.bitcoins.core.currency.{Bitcoins, CurrencyUnit} import org.bitcoins.core.number.UInt32 import org.bitcoins.core.protocol.BitcoinAddress import org.bitcoins.core.protocol.ln.currency.MilliSatoshis