From a4d0fd026b74db034dc8a1fa7efbd4f1dba8cdb9 Mon Sep 17 00:00:00 2001
From: fanquake <fanquake@gmail.com>
Date: Fri, 8 Mar 2019 12:20:51 +0800
Subject: [PATCH 1/2] doc: correct analysepsbt rpc doc

---
 src/rpc/rawtransaction.cpp | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp
index d19afaa8a..80d8c962d 100644
--- a/src/rpc/rawtransaction.cpp
+++ b/src/rpc/rawtransaction.cpp
@@ -1862,21 +1862,21 @@ UniValue analyzepsbt(const JSONRPCRequest& request)
                 "      \"has_utxo\" : true|false     (boolean) Whether a UTXO is provided\n"
                 "      \"is_final\" : true|false     (boolean) Whether the input is finalized\n"
                 "      \"missing\" : {               (json object, optional) Things that are missing that are required to complete this input\n"
-                "        \"pubkeys\" : [             (array)\n"
+                "        \"pubkeys\" : [             (array, optional)\n"
                 "          \"keyid\"                 (string) Public key ID, hash160 of the public key, of a public key whose BIP 32 derivation path is missing\n"
                 "        ]\n"
-                "        \"signatures\" : [          (array)\n"
+                "        \"signatures\" : [          (array, optional)\n"
                 "          \"keyid\"                 (string) Public key ID, hash160 of the public key, of a public key whose signature is missing\n"
                 "        ]\n"
-                "        \"redeemscript\" : \"hash\"   (string) Hash160 of the redeemScript that is missing\n"
-                "        \"witnessscript\" : \"hash\"  (string) SHA256 of the witnessScript that is missing\n"
+                "        \"redeemscript\" : \"hash\"   (string, optional) Hash160 of the redeemScript that is missing\n"
+                "        \"witnessscript\" : \"hash\"  (string, optional) SHA256 of the witnessScript that is missing\n"
                 "      }\n"
-                "      \"next\" : \"role\"           (string) Role of the next person that this input needs to go to\n"
+                "      \"next\" : \"role\"             (string, optional) Role of the next person that this input needs to go to\n"
                 "    }\n"
                 "    ,...\n"
                 "  ]\n"
-                "  \"estimated_vsize\" : vsize       (numeric) Estimated vsize of the final signed transaction\n"
-                "  \"estimated_feerate\" : feerate   (numeric, optional) Estimated feerate of the final signed transaction. Shown only if all UTXO slots in the PSBT have been filled.\n"
+                "  \"estimated_vsize\" : vsize       (numeric, optional) Estimated vsize of the final signed transaction\n"
+                "  \"estimated_feerate\" : feerate   (numeric, optional) Estimated feerate of the final signed transaction in " + CURRENCY_UNIT + "/kB. Shown only if all UTXO slots in the PSBT have been filled.\n"
                 "  \"fee\" : fee                     (numeric, optional) The transaction fee paid. Shown only if all UTXO slots in the PSBT have been filled.\n"
                 "  \"next\" : \"role\"                 (string) Role of the next person that this psbt needs to go to\n"
                 "}\n"

From 335931df4a37467299a2ee0ba521ecd5c4e6d39e Mon Sep 17 00:00:00 2001
From: fanquake <fanquake@gmail.com>
Date: Sat, 9 Mar 2019 14:50:44 +0800
Subject: [PATCH 2/2] rpc: return a number for estimated_feerate in analyzepsbt

---
 src/rpc/rawtransaction.cpp  | 2 +-
 test/functional/rpc_psbt.py | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp
index 80d8c962d..541171602 100644
--- a/src/rpc/rawtransaction.cpp
+++ b/src/rpc/rawtransaction.cpp
@@ -2021,7 +2021,7 @@ UniValue analyzepsbt(const JSONRPCRequest& request)
             result.pushKV("estimated_vsize", (int)size);
             // Estimate fee rate
             CFeeRate feerate(fee, size);
-            result.pushKV("estimated_feerate", feerate.ToString());
+            result.pushKV("estimated_feerate", ValueFromAmount(feerate.GetFeePerK()));
         }
         result.pushKV("fee", ValueFromAmount(fee));
 
diff --git a/test/functional/rpc_psbt.py b/test/functional/rpc_psbt.py
index 885e07c4d..904ddac42 100755
--- a/test/functional/rpc_psbt.py
+++ b/test/functional/rpc_psbt.py
@@ -355,7 +355,7 @@ class PSBTTest(BitcoinTestFramework):
         assert analyzed['inputs'][0]['has_utxo'] and not analyzed['inputs'][0]['is_final'] and analyzed['inputs'][0]['next'] == 'signer' and analyzed['next'] == 'signer' and analyzed['inputs'][0]['missing']['signatures'][0] == addrinfo['embedded']['witness_program']
 
         # Check fee and size things
-        assert analyzed['fee'] == Decimal('0.001') and analyzed['estimated_vsize'] == 134 and analyzed['estimated_feerate'] == '0.00746268 BTC/kB'
+        assert analyzed['fee'] == Decimal('0.001') and analyzed['estimated_vsize'] == 134 and analyzed['estimated_feerate'] == Decimal('0.00746268')
 
         # After signing and finalizing, needs extracting
         signed = self.nodes[1].walletprocesspsbt(updated)['psbt']