From 80be6e69a92130175da623fbb75552a04d3ff4f8 Mon Sep 17 00:00:00 2001
From: Gavin Andresen <gavinandresen@gmail.com>
Date: Fri, 7 Jan 2011 14:10:08 -0500
Subject: [PATCH] Add account/address details to gettransaction output

---
 rpc.cpp | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/rpc.cpp b/rpc.cpp
index 520921972..fa9bda773 100644
--- a/rpc.cpp
+++ b/rpc.cpp
@@ -857,7 +857,7 @@ Value listreceivedbyaccount(const Array& params, bool fHelp)
     return ListReceived(params, true);
 }
 
-void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDepth, Array& ret)
+void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDepth, bool fLong, Array& ret)
 {
     int64 nGenerated, nFee;
     string strSentAccount;
@@ -874,7 +874,8 @@ void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDe
         entry.push_back(Pair("account", string("")));
         entry.push_back(Pair("category", "generate"));
         entry.push_back(Pair("amount", ValueFromAmount(nGenerated)));
-        WalletTxToJSON(wtx, entry);
+        if (fLong)
+            WalletTxToJSON(wtx, entry);
         ret.push_back(entry);
     }
 
@@ -889,7 +890,8 @@ void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDe
             entry.push_back(Pair("category", "send"));
             entry.push_back(Pair("amount", ValueFromAmount(-s.second)));
             entry.push_back(Pair("fee", ValueFromAmount(-nFee)));
-            WalletTxToJSON(wtx, entry);
+            if (fLong)
+                WalletTxToJSON(wtx, entry);
             ret.push_back(entry);
         }
     }
@@ -910,7 +912,8 @@ void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDe
                     entry.push_back(Pair("address", r.first));
                     entry.push_back(Pair("category", "receive"));
                     entry.push_back(Pair("amount", ValueFromAmount(r.second)));
-                    WalletTxToJSON(wtx, entry);
+                    if (fLong)
+                        WalletTxToJSON(wtx, entry);
                     ret.push_back(entry);
                 }
             }
@@ -976,7 +979,7 @@ Value listtransactions(const Array& params, bool fHelp)
         {
             CWalletTx *const pwtx = (*it).second.first;
             if (pwtx != 0)
-                ListTransactions(*pwtx, strAccount, 0, ret);
+                ListTransactions(*pwtx, strAccount, 0, true, ret);
             CAccountingEntry *const pacentry = (*it).second.second;
             if (pacentry != 0)
                 AcentryToJSON(*pacentry, strAccount, ret);
@@ -1063,7 +1066,7 @@ Value gettransaction(const Array& params, bool fHelp)
     CRITICAL_BLOCK(cs_mapWallet)
     {
         if (!mapWallet.count(hash))
-            throw JSONRPCError(-5, "Invalid transaction id");
+            throw JSONRPCError(-5, "Invalid or non-wallet transaction id");
         const CWalletTx& wtx = mapWallet[hash];
 
         int64 nCredit = wtx.GetCredit();
@@ -1074,7 +1077,12 @@ Value gettransaction(const Array& params, bool fHelp)
         entry.push_back(Pair("amount", ValueFromAmount(nNet - nFee)));
         if (wtx.IsFromMe())
             entry.push_back(Pair("fee", ValueFromAmount(nFee)));
+
         WalletTxToJSON(mapWallet[hash], entry);
+
+        Array details;
+        ListTransactions(mapWallet[hash], "*", 0, false, details);
+        entry.push_back(Pair("details", details));
     }
 
     return entry;