diff --git a/doc/release-notes.md b/doc/release-notes.md
--- a/doc/release-notes.md
+++ b/doc/release-notes.md
@@ -3,3 +3,4 @@
This release includes the following features and fixes:
+ - Return amounts from `decoderawtransaction` are padded to 8 decimal places.
diff --git a/src/core_io.h b/src/core_io.h
--- a/src/core_io.h
+++ b/src/core_io.h
@@ -8,6 +8,7 @@
#include
#include
+class Amount;
class CBlock;
class CMutableTransaction;
class CScript;
@@ -26,6 +27,7 @@
std::vector ParseHexUV(const UniValue &v, const std::string &strName);
// core_write.cpp
+UniValue ValueFromAmount(const Amount &amount);
std::string FormatScript(const CScript &script);
std::string EncodeHexTx(const CTransaction &tx, const int serializeFlags = 0);
void ScriptPubKeyToUniv(const CScript &scriptPubKey, UniValue &out,
diff --git a/src/core_write.cpp b/src/core_write.cpp
--- a/src/core_write.cpp
+++ b/src/core_write.cpp
@@ -17,6 +17,15 @@
#include
+UniValue ValueFromAmount(const Amount &amount) {
+ bool sign = amount < Amount::zero();
+ Amount n_abs(sign ? -amount : amount);
+ int64_t quotient = n_abs / COIN;
+ int64_t remainder = (n_abs % COIN) / SATOSHI;
+ return UniValue(UniValue::VNUM, strprintf("%s%d.%08d", sign ? "-" : "",
+ quotient, remainder));
+}
+
std::string FormatScript(const CScript &script) {
std::string ret;
CScript::const_iterator it = script.begin();
@@ -222,8 +231,7 @@
UniValue out(UniValue::VOBJ);
- UniValue outValue(UniValue::VNUM, FormatMoney(txout.nValue));
- out.pushKV("value", outValue);
+ out.pushKV("value", ValueFromAmount(txout.nValue));
out.pushKV("n", int64_t(i));
UniValue o(UniValue::VOBJ);
diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp
--- a/src/rpc/misc.cpp
+++ b/src/rpc/misc.cpp
@@ -7,6 +7,7 @@
#include
#include
#include
+#include
#include
#include
#include
diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp
--- a/src/rpc/net.cpp
+++ b/src/rpc/net.cpp
@@ -7,6 +7,7 @@
#include
#include
#include
+#include
#include
#include
#include
diff --git a/src/rpc/server.h b/src/rpc/server.h
--- a/src/rpc/server.h
+++ b/src/rpc/server.h
@@ -268,7 +268,6 @@
extern std::vector ParseHexO(const UniValue &o, std::string strKey);
extern Amount AmountFromValue(const UniValue &value);
-extern UniValue ValueFromAmount(const Amount amount);
extern std::string HelpExampleCli(const std::string &methodname,
const std::string &args);
extern std::string HelpExampleRpc(const std::string &methodname,
diff --git a/src/rpc/server.cpp b/src/rpc/server.cpp
--- a/src/rpc/server.cpp
+++ b/src/rpc/server.cpp
@@ -161,15 +161,6 @@
return amt;
}
-UniValue ValueFromAmount(const Amount amount) {
- bool sign = amount < Amount::zero();
- Amount n_abs(sign ? -amount : amount);
- int64_t quotient = n_abs / COIN;
- int64_t remainder = (n_abs % COIN) / SATOSHI;
- return UniValue(UniValue::VNUM, strprintf("%s%d.%08d", sign ? "-" : "",
- quotient, remainder));
-}
-
uint256 ParseHashV(const UniValue &v, std::string strName) {
std::string strHex;
if (v.isStr()) {
diff --git a/src/test/rpc_tests.cpp b/src/test/rpc_tests.cpp
--- a/src/test/rpc_tests.cpp
+++ b/src/test/rpc_tests.cpp
@@ -7,6 +7,7 @@
#include
#include
+#include
#include
#include
diff --git a/src/utilmoneystr.h b/src/utilmoneystr.h
--- a/src/utilmoneystr.h
+++ b/src/utilmoneystr.h
@@ -14,6 +14,10 @@
#include
#include
+/**
+ * Do not use these functions to represent or parse monetary amounts to or from
+ * JSON but use AmountFromValue and ValueFromAmount for that.
+ */
std::string FormatMoney(const Amount n);
bool ParseMoney(const std::string &str, Amount &nRet);
bool ParseMoney(const char *pszIn, Amount &nRet);
diff --git a/test/util/data/tt-delin1-out.json b/test/util/data/tt-delin1-out.json
--- a/test/util/data/tt-delin1-out.json
+++ b/test/util/data/tt-delin1-out.json
@@ -188,7 +188,7 @@
],
"vout": [
{
- "value": 1.3782,
+ "value": 1.37820000,
"n": 0,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 8fd139bb39ced713f231c58a4d07bf6954d1c201 OP_EQUALVERIFY OP_CHECKSIG",
diff --git a/test/util/data/tt-delout1-out.json b/test/util/data/tt-delout1-out.json
--- a/test/util/data/tt-delout1-out.json
+++ b/test/util/data/tt-delout1-out.json
@@ -197,7 +197,7 @@
],
"vout": [
{
- "value": 1.3782,
+ "value": 1.37820000,
"n": 0,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 8fd139bb39ced713f231c58a4d07bf6954d1c201 OP_EQUALVERIFY OP_CHECKSIG",
diff --git a/test/util/data/tt-locktime317000-out.json b/test/util/data/tt-locktime317000-out.json
--- a/test/util/data/tt-locktime317000-out.json
+++ b/test/util/data/tt-locktime317000-out.json
@@ -197,7 +197,7 @@
],
"vout": [
{
- "value": 1.3782,
+ "value": 1.37820000,
"n": 0,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 8fd139bb39ced713f231c58a4d07bf6954d1c201 OP_EQUALVERIFY OP_CHECKSIG",
diff --git a/test/util/data/txcreate1.json b/test/util/data/txcreate1.json
--- a/test/util/data/txcreate1.json
+++ b/test/util/data/txcreate1.json
@@ -35,7 +35,7 @@
],
"vout": [
{
- "value": 0.18,
+ "value": 0.18000000,
"n": 0,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 1fc11f39be1729bf973a7ab6a615ca4729d64574 OP_EQUALVERIFY OP_CHECKSIG",
@@ -48,7 +48,7 @@
}
},
{
- "value": 4.00,
+ "value": 4.00000000,
"n": 1,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 f2d4db28cad6502226ee484ae24505c2885cb12d OP_EQUALVERIFY OP_CHECKSIG",
diff --git a/test/util/data/txcreate2.json b/test/util/data/txcreate2.json
--- a/test/util/data/txcreate2.json
+++ b/test/util/data/txcreate2.json
@@ -8,7 +8,7 @@
],
"vout": [
{
- "value": 0.00,
+ "value": 0.00000000,
"n": 0,
"scriptPubKey": {
"asm": "",
diff --git a/test/util/data/txcreatedata1.json b/test/util/data/txcreatedata1.json
--- a/test/util/data/txcreatedata1.json
+++ b/test/util/data/txcreatedata1.json
@@ -17,7 +17,7 @@
],
"vout": [
{
- "value": 0.18,
+ "value": 0.18000000,
"n": 0,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 1fc11f39be1729bf973a7ab6a615ca4729d64574 OP_EQUALVERIFY OP_CHECKSIG",
@@ -30,7 +30,7 @@
}
},
{
- "value": 4.00,
+ "value": 4.00000000,
"n": 1,
"scriptPubKey": {
"asm": "OP_RETURN 54686973204f505f52455455524e207472616e73616374696f6e206f7574707574207761732063726561746564206279206d6f646966696564206372656174657261777472616e73616374696f6e2e",
diff --git a/test/util/data/txcreatedata2.json b/test/util/data/txcreatedata2.json
--- a/test/util/data/txcreatedata2.json
+++ b/test/util/data/txcreatedata2.json
@@ -17,7 +17,7 @@
],
"vout": [
{
- "value": 0.18,
+ "value": 0.18000000,
"n": 0,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 1fc11f39be1729bf973a7ab6a615ca4729d64574 OP_EQUALVERIFY OP_CHECKSIG",
@@ -30,7 +30,7 @@
}
},
{
- "value": 0.00,
+ "value": 0.00000000,
"n": 1,
"scriptPubKey": {
"asm": "OP_RETURN 54686973204f505f52455455524e207472616e73616374696f6e206f7574707574207761732063726561746564206279206d6f646966696564206372656174657261777472616e73616374696f6e2e",
diff --git a/test/util/data/txcreatedata_seq0.json b/test/util/data/txcreatedata_seq0.json
--- a/test/util/data/txcreatedata_seq0.json
+++ b/test/util/data/txcreatedata_seq0.json
@@ -17,7 +17,7 @@
],
"vout": [
{
- "value": 0.18,
+ "value": 0.18000000,
"n": 0,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 1fc11f39be1729bf973a7ab6a615ca4729d64574 OP_EQUALVERIFY OP_CHECKSIG",
diff --git a/test/util/data/txcreatedata_seq1.json b/test/util/data/txcreatedata_seq1.json
--- a/test/util/data/txcreatedata_seq1.json
+++ b/test/util/data/txcreatedata_seq1.json
@@ -26,7 +26,7 @@
],
"vout": [
{
- "value": 0.18,
+ "value": 0.18000000,
"n": 0,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 1fc11f39be1729bf973a7ab6a615ca4729d64574 OP_EQUALVERIFY OP_CHECKSIG",
diff --git a/test/util/data/txcreatemultisig1.json b/test/util/data/txcreatemultisig1.json
--- a/test/util/data/txcreatemultisig1.json
+++ b/test/util/data/txcreatemultisig1.json
@@ -8,7 +8,7 @@
],
"vout": [
{
- "value": 1.00,
+ "value": 1.00000000,
"n": 0,
"scriptPubKey": {
"asm": "2 02a5613bd857b7048924264d1e70e08fb2a7e6527d32b7ab1bb993ac59964ff397 021ac43c7ff740014c3b33737ede99c967e4764553d1b2b83db77c83b8715fa72d 02df2089105c77f266fa11a9d33f05c735234075f2e8780824c6b709415f9fb485 3 OP_CHECKMULTISIG",
diff --git a/test/util/data/txcreatemultisig2.json b/test/util/data/txcreatemultisig2.json
--- a/test/util/data/txcreatemultisig2.json
+++ b/test/util/data/txcreatemultisig2.json
@@ -8,7 +8,7 @@
],
"vout": [
{
- "value": 1.00,
+ "value": 1.00000000,
"n": 0,
"scriptPubKey": {
"asm": "OP_HASH160 1c6fbaf46d64221e80cbae182c33ddf81b9294ac OP_EQUAL",
diff --git a/test/util/data/txcreateoutpubkey1.json b/test/util/data/txcreateoutpubkey1.json
--- a/test/util/data/txcreateoutpubkey1.json
+++ b/test/util/data/txcreateoutpubkey1.json
@@ -8,7 +8,7 @@
],
"vout": [
{
- "value": 0.00,
+ "value": 0.00000000,
"n": 0,
"scriptPubKey": {
"asm": "02a5613bd857b7048924264d1e70e08fb2a7e6527d32b7ab1bb993ac59964ff397 OP_CHECKSIG",
diff --git a/test/util/data/txcreatescript1.json b/test/util/data/txcreatescript1.json
--- a/test/util/data/txcreatescript1.json
+++ b/test/util/data/txcreatescript1.json
@@ -8,7 +8,7 @@
],
"vout": [
{
- "value": 0.00,
+ "value": 0.00000000,
"n": 0,
"scriptPubKey": {
"asm": "OP_DROP",
diff --git a/test/util/data/txcreatescript2.json b/test/util/data/txcreatescript2.json
--- a/test/util/data/txcreatescript2.json
+++ b/test/util/data/txcreatescript2.json
@@ -8,7 +8,7 @@
],
"vout": [
{
- "value": 0.00,
+ "value": 0.00000000,
"n": 0,
"scriptPubKey": {
"asm": "OP_HASH160 71ed53322d470bb96657deb786b94f97dd46fb15 OP_EQUAL",
diff --git a/test/util/data/txcreatesignv1.json b/test/util/data/txcreatesignv1.json
--- a/test/util/data/txcreatesignv1.json
+++ b/test/util/data/txcreatesignv1.json
@@ -17,7 +17,7 @@
],
"vout": [
{
- "value": 0.001,
+ "value": 0.00100000,
"n": 0,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 5834479edbbe0539b31ffd3a8f8ebadc2165ed01 OP_EQUALVERIFY OP_CHECKSIG",