Mercurial > hg > bitcoin
annotate src/bitcoinrpc.cpp @ 1533:d0ccfedf2957 draft
Implement an mlock()'d string class for storing passphrases
SecureString is identical to std::string except with secure_allocator
substituting for std::allocator. This makes casting between them
impossible, so converting between the two at API boundaries requires
calling ::c_str() for now.
author | Dylan Noblesmith <nobled@dreamwidth.org> |
---|---|
date | Sat, 26 Nov 2011 06:02:04 +0000 |
parents | a5acaf226b6b |
children | d9bb9c516845 |
rev | line source |
---|---|
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1 // Copyright (c) 2010 Satoshi Nakamoto |
1264
eea709595ed2
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1256
diff
changeset
|
2 // Copyright (c) 2011 The Bitcoin developers |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3 // Distributed under the MIT/X11 software license, see the accompanying |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
4 // file license.txt or http://www.opensource.org/licenses/mit-license.php. |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
5 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
6 #include "headers.h" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
7 #include "db.h" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
8 #include "net.h" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
9 #include "init.h" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
10 #undef printf |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
11 #include <boost/asio.hpp> |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
12 #include <boost/iostreams/concepts.hpp> |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
13 #include <boost/iostreams/stream.hpp> |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
14 #include <boost/algorithm/string.hpp> |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
15 #ifdef USE_SSL |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
16 #include <boost/asio/ssl.hpp> |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
17 #include <boost/filesystem.hpp> |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
18 #include <boost/filesystem/fstream.hpp> |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
19 typedef boost::asio::ssl::stream<boost::asio::ip::tcp::socket> SSLStream; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
20 #endif |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
21 #include "json/json_spirit_reader_template.h" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
22 #include "json/json_spirit_writer_template.h" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
23 #include "json/json_spirit_utils.h" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
24 #define printf OutputDebugStringF |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
25 // MinGW 3.4.5 gets "fatal error: had to relocate PCH" if the json headers are |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
26 // precompiled in headers.h. The problem might be when the pch file goes over |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
27 // a certain size around 145MB. If we need access to json_spirit outside this |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
28 // file, we could use the compiled json_spirit option. |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
29 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
30 using namespace std; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
31 using namespace boost; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
32 using namespace boost::asio; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
33 using namespace json_spirit; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
34 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
35 void ThreadRPCServer2(void* parg); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
36 typedef Value(*rpcfn_type)(const Array& params, bool fHelp); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
37 extern map<string, rpcfn_type> mapCallTable; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
38 |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
39 static int64 nWalletUnlockTime; |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
40 static CCriticalSection cs_nWalletUnlockTime; |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
41 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
42 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
43 Object JSONRPCError(int code, const string& message) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
44 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
45 Object error; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
46 error.push_back(Pair("code", code)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
47 error.push_back(Pair("message", message)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
48 return error; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
49 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
50 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
51 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
52 void PrintConsole(const std::string &format, ...) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
53 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
54 char buffer[50000]; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
55 int limit = sizeof(buffer); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
56 va_list arg_ptr; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
57 va_start(arg_ptr, format); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
58 int ret = _vsnprintf(buffer, limit, format.c_str(), arg_ptr); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
59 va_end(arg_ptr); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
60 if (ret < 0 || ret >= limit) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
61 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
62 ret = limit - 1; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
63 buffer[limit-1] = 0; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
64 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
65 printf("%s", buffer); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
66 fprintf(stdout, "%s", buffer); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
67 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
68 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
69 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
70 int64 AmountFromValue(const Value& value) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
71 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
72 double dAmount = value.get_real(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
73 if (dAmount <= 0.0 || dAmount > 21000000.0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
74 throw JSONRPCError(-3, "Invalid amount"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
75 int64 nAmount = roundint64(dAmount * COIN); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
76 if (!MoneyRange(nAmount)) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
77 throw JSONRPCError(-3, "Invalid amount"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
78 return nAmount; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
79 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
80 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
81 Value ValueFromAmount(int64 amount) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
82 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
83 return (double)amount / (double)COIN; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
84 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
85 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
86 void WalletTxToJSON(const CWalletTx& wtx, Object& entry) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
87 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
88 entry.push_back(Pair("confirmations", wtx.GetDepthInMainChain())); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
89 entry.push_back(Pair("txid", wtx.GetHash().GetHex())); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
90 entry.push_back(Pair("time", (boost::int64_t)wtx.GetTxTime())); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
91 BOOST_FOREACH(const PAIRTYPE(string,string)& item, wtx.mapValue) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
92 entry.push_back(Pair(item.first, item.second)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
93 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
94 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
95 string AccountFromValue(const Value& value) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
96 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
97 string strAccount = value.get_str(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
98 if (strAccount == "*") |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
99 throw JSONRPCError(-11, "Invalid account name"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
100 return strAccount; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
101 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
102 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
103 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
104 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
105 /// |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
106 /// Note: This interface may still be subject to change. |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
107 /// |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
108 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
109 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
110 Value help(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
111 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
112 if (fHelp || params.size() > 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
113 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
114 "help [command]\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
115 "List commands, or get help for a command."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
116 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
117 string strCommand; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
118 if (params.size() > 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
119 strCommand = params[0].get_str(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
120 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
121 string strRet; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
122 set<rpcfn_type> setDone; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
123 for (map<string, rpcfn_type>::iterator mi = mapCallTable.begin(); mi != mapCallTable.end(); ++mi) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
124 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
125 string strMethod = (*mi).first; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
126 // We already filter duplicates, but these deprecated screw up the sort order |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
127 if (strMethod == "getamountreceived" || |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
128 strMethod == "getallreceived" || |
1490
f5b3cf558f89
Deprecate RPC getblocknumber
Michael Hendricks <michael@ndrix.org>
parents:
1388
diff
changeset
|
129 strMethod == "getblocknumber" || // deprecated |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
130 (strMethod.find("label") != string::npos)) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
131 continue; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
132 if (strCommand != "" && strMethod != strCommand) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
133 continue; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
134 try |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
135 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
136 Array params; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
137 rpcfn_type pfn = (*mi).second; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
138 if (setDone.insert(pfn).second) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
139 (*pfn)(params, true); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
140 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
141 catch (std::exception& e) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
142 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
143 // Help text is returned in an exception |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
144 string strHelp = string(e.what()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
145 if (strCommand == "") |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
146 if (strHelp.find('\n') != -1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
147 strHelp = strHelp.substr(0, strHelp.find('\n')); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
148 strRet += strHelp + "\n"; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
149 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
150 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
151 if (strRet == "") |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
152 strRet = strprintf("help: unknown command: %s\n", strCommand.c_str()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
153 strRet = strRet.substr(0,strRet.size()-1); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
154 return strRet; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
155 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
156 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
157 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
158 Value stop(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
159 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
160 if (fHelp || params.size() != 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
161 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
162 "stop\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
163 "Stop bitcoin server."); |
1493
4c9b0104740a
Do not launch Shutdown in a new thread in case we are running the UI.
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1388
diff
changeset
|
164 #ifndef QT_GUI |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
165 // Shutdown will take long enough that the response should get back |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
166 CreateThread(Shutdown, NULL); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
167 return "bitcoin server stopping"; |
1493
4c9b0104740a
Do not launch Shutdown in a new thread in case we are running the UI.
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1388
diff
changeset
|
168 #else |
4c9b0104740a
Do not launch Shutdown in a new thread in case we are running the UI.
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1388
diff
changeset
|
169 throw runtime_error("NYI: cannot shut down GUI with RPC command"); |
4c9b0104740a
Do not launch Shutdown in a new thread in case we are running the UI.
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1388
diff
changeset
|
170 #endif |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
171 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
172 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
173 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
174 Value getblockcount(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
175 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
176 if (fHelp || params.size() != 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
177 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
178 "getblockcount\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
179 "Returns the number of blocks in the longest block chain."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
180 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
181 return nBestHeight; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
182 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
183 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
184 |
1490
f5b3cf558f89
Deprecate RPC getblocknumber
Michael Hendricks <michael@ndrix.org>
parents:
1388
diff
changeset
|
185 // deprecated |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
186 Value getblocknumber(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
187 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
188 if (fHelp || params.size() != 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
189 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
190 "getblocknumber\n" |
1490
f5b3cf558f89
Deprecate RPC getblocknumber
Michael Hendricks <michael@ndrix.org>
parents:
1388
diff
changeset
|
191 "Deprecated. Use getblockcount."); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
192 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
193 return nBestHeight; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
194 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
195 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
196 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
197 Value getconnectioncount(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
198 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
199 if (fHelp || params.size() != 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
200 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
201 "getconnectioncount\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
202 "Returns the number of connections to other nodes."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
203 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
204 return (int)vNodes.size(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
205 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
206 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
207 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
208 double GetDifficulty() |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
209 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
210 // Floating point number that is a multiple of the minimum difficulty, |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
211 // minimum difficulty = 1.0. |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
212 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
213 if (pindexBest == NULL) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
214 return 1.0; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
215 int nShift = (pindexBest->nBits >> 24) & 0xff; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
216 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
217 double dDiff = |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
218 (double)0x0000ffff / (double)(pindexBest->nBits & 0x00ffffff); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
219 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
220 while (nShift < 29) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
221 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
222 dDiff *= 256.0; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
223 nShift++; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
224 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
225 while (nShift > 29) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
226 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
227 dDiff /= 256.0; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
228 nShift--; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
229 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
230 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
231 return dDiff; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
232 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
233 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
234 Value getdifficulty(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
235 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
236 if (fHelp || params.size() != 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
237 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
238 "getdifficulty\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
239 "Returns the proof-of-work difficulty as a multiple of the minimum difficulty."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
240 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
241 return GetDifficulty(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
242 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
243 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
244 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
245 Value getgenerate(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
246 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
247 if (fHelp || params.size() != 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
248 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
249 "getgenerate\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
250 "Returns true or false."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
251 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
252 return (bool)fGenerateBitcoins; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
253 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
254 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
255 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
256 Value setgenerate(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
257 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
258 if (fHelp || params.size() < 1 || params.size() > 2) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
259 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
260 "setgenerate <generate> [genproclimit]\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
261 "<generate> is true or false to turn generation on or off.\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
262 "Generation is limited to [genproclimit] processors, -1 is unlimited."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
263 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
264 bool fGenerate = true; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
265 if (params.size() > 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
266 fGenerate = params[0].get_bool(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
267 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
268 if (params.size() > 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
269 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
270 int nGenProcLimit = params[1].get_int(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
271 fLimitProcessors = (nGenProcLimit != -1); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
272 WriteSetting("fLimitProcessors", fLimitProcessors); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
273 if (nGenProcLimit != -1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
274 WriteSetting("nLimitProcessors", nLimitProcessors = nGenProcLimit); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
275 if (nGenProcLimit == 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
276 fGenerate = false; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
277 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
278 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
279 GenerateBitcoins(fGenerate, pwalletMain); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
280 return Value::null; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
281 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
282 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
283 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
284 Value gethashespersec(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
285 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
286 if (fHelp || params.size() != 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
287 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
288 "gethashespersec\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
289 "Returns a recent hashes per second performance measurement while generating."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
290 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
291 if (GetTimeMillis() - nHPSTimerStart > 8000) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
292 return (boost::int64_t)0; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
293 return (boost::int64_t)dHashesPerSec; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
294 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
295 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
296 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
297 Value getinfo(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
298 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
299 if (fHelp || params.size() != 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
300 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
301 "getinfo\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
302 "Returns an object containing various state info."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
303 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
304 Object obj; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
305 obj.push_back(Pair("version", (int)VERSION)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
306 obj.push_back(Pair("balance", ValueFromAmount(pwalletMain->GetBalance()))); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
307 obj.push_back(Pair("blocks", (int)nBestHeight)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
308 obj.push_back(Pair("connections", (int)vNodes.size())); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
309 obj.push_back(Pair("proxy", (fUseProxy ? addrProxy.ToStringIPPort() : string()))); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
310 obj.push_back(Pair("generate", (bool)fGenerateBitcoins)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
311 obj.push_back(Pair("genproclimit", (int)(fLimitProcessors ? nLimitProcessors : -1))); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
312 obj.push_back(Pair("difficulty", (double)GetDifficulty())); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
313 obj.push_back(Pair("hashespersec", gethashespersec(params, false))); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
314 obj.push_back(Pair("testnet", fTestNet)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
315 obj.push_back(Pair("keypoololdest", (boost::int64_t)pwalletMain->GetOldestKeyPoolTime())); |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
316 obj.push_back(Pair("keypoolsize", pwalletMain->GetKeyPoolSize())); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
317 obj.push_back(Pair("paytxfee", ValueFromAmount(nTransactionFee))); |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
318 if (pwalletMain->IsCrypted()) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
319 obj.push_back(Pair("unlocked_until", (boost::int64_t)nWalletUnlockTime)); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
320 obj.push_back(Pair("errors", GetWarnings("statusbar"))); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
321 return obj; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
322 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
323 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
324 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
325 Value getnewaddress(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
326 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
327 if (fHelp || params.size() > 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
328 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
329 "getnewaddress [account]\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
330 "Returns a new bitcoin address for receiving payments. " |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
331 "If [account] is specified (recommended), it is added to the address book " |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
332 "so payments received with the address will be credited to [account]."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
333 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
334 // Parse the account first so we don't generate a key if there's an error |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
335 string strAccount; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
336 if (params.size() > 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
337 strAccount = AccountFromValue(params[0]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
338 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
339 if (!pwalletMain->IsLocked()) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
340 pwalletMain->TopUpKeyPool(); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
341 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
342 // Generate a new key that is added to wallet |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
343 std::vector<unsigned char> newKey; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
344 if (!pwalletMain->GetKeyFromPool(newKey, false)) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
345 throw JSONRPCError(-12, "Error: Keypool ran out, please call keypoolrefill first"); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
346 CBitcoinAddress address(newKey); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
347 |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
348 pwalletMain->SetAddressBookName(address, strAccount); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
349 |
1256
3a687b55c04b
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1220
diff
changeset
|
350 return address.ToString(); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
351 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
352 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
353 |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
354 CBitcoinAddress GetAccountAddress(string strAccount, bool bForceNew=false) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
355 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
356 CWalletDB walletdb(pwalletMain->strWalletFile); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
357 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
358 CAccount account; |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
359 walletdb.ReadAccount(strAccount, account); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
360 |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
361 bool bKeyUsed = false; |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
362 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
363 // Check if the current key has been used |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
364 if (!account.vchPubKey.empty()) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
365 { |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
366 CScript scriptPubKey; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
367 scriptPubKey.SetBitcoinAddress(account.vchPubKey); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
368 for (map<uint256, CWalletTx>::iterator it = pwalletMain->mapWallet.begin(); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
369 it != pwalletMain->mapWallet.end() && !account.vchPubKey.empty(); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
370 ++it) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
371 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
372 const CWalletTx& wtx = (*it).second; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
373 BOOST_FOREACH(const CTxOut& txout, wtx.vout) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
374 if (txout.scriptPubKey == scriptPubKey) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
375 bKeyUsed = true; |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
376 } |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
377 } |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
378 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
379 // Generate a new key |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
380 if (account.vchPubKey.empty() || bForceNew || bKeyUsed) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
381 { |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
382 if (!pwalletMain->GetKeyFromPool(account.vchPubKey, false)) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
383 throw JSONRPCError(-12, "Error: Keypool ran out, please call keypoolrefill first"); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
384 |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
385 pwalletMain->SetAddressBookName(CBitcoinAddress(account.vchPubKey), strAccount); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
386 walletdb.WriteAccount(strAccount, account); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
387 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
388 |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
389 return CBitcoinAddress(account.vchPubKey); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
390 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
391 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
392 Value getaccountaddress(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
393 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
394 if (fHelp || params.size() != 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
395 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
396 "getaccountaddress <account>\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
397 "Returns the current bitcoin address for receiving payments to this account."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
398 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
399 // Parse the account first so we don't generate a key if there's an error |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
400 string strAccount = AccountFromValue(params[0]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
401 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
402 Value ret; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
403 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
404 ret = GetAccountAddress(strAccount).ToString(); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
405 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
406 return ret; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
407 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
408 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
409 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
410 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
411 Value setaccount(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
412 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
413 if (fHelp || params.size() < 1 || params.size() > 2) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
414 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
415 "setaccount <bitcoinaddress> <account>\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
416 "Sets the account associated with the given address."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
417 |
1256
3a687b55c04b
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1220
diff
changeset
|
418 CBitcoinAddress address(params[0].get_str()); |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
419 if (!address.IsValid()) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
420 throw JSONRPCError(-5, "Invalid bitcoin address"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
421 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
422 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
423 string strAccount; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
424 if (params.size() > 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
425 strAccount = AccountFromValue(params[1]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
426 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
427 // Detect when changing the account of an address that is the 'unused current key' of another account: |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
428 if (pwalletMain->mapAddressBook.count(address)) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
429 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
430 string strOldAccount = pwalletMain->mapAddressBook[address]; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
431 if (address == GetAccountAddress(strOldAccount)) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
432 GetAccountAddress(strOldAccount, true); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
433 } |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
434 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
435 pwalletMain->SetAddressBookName(address, strAccount); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
436 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
437 return Value::null; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
438 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
439 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
440 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
441 Value getaccount(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
442 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
443 if (fHelp || params.size() != 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
444 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
445 "getaccount <bitcoinaddress>\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
446 "Returns the account associated with the given address."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
447 |
1256
3a687b55c04b
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1220
diff
changeset
|
448 CBitcoinAddress address(params[0].get_str()); |
3a687b55c04b
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1220
diff
changeset
|
449 if (!address.IsValid()) |
3a687b55c04b
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1220
diff
changeset
|
450 throw JSONRPCError(-5, "Invalid bitcoin address"); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
451 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
452 string strAccount; |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
453 map<CBitcoinAddress, string>::iterator mi = pwalletMain->mapAddressBook.find(address); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
454 if (mi != pwalletMain->mapAddressBook.end() && !(*mi).second.empty()) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
455 strAccount = (*mi).second; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
456 return strAccount; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
457 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
458 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
459 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
460 Value getaddressesbyaccount(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
461 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
462 if (fHelp || params.size() != 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
463 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
464 "getaddressesbyaccount <account>\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
465 "Returns the list of addresses for the given account."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
466 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
467 string strAccount = AccountFromValue(params[0]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
468 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
469 // Find all addresses that have the given account |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
470 Array ret; |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
471 BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress, string)& item, pwalletMain->mapAddressBook) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
472 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
473 const CBitcoinAddress& address = item.first; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
474 const string& strName = item.second; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
475 if (strName == strAccount) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
476 ret.push_back(address.ToString()); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
477 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
478 return ret; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
479 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
480 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
481 Value settxfee(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
482 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
483 if (fHelp || params.size() < 1 || params.size() > 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
484 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
485 "settxfee <amount>\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
486 "<amount> is a real and is rounded to the nearest 0.00000001"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
487 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
488 // Amount |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
489 int64 nAmount = 0; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
490 if (params[0].get_real() != 0.0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
491 nAmount = AmountFromValue(params[0]); // rejects 0.0 amounts |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
492 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
493 nTransactionFee = nAmount; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
494 return true; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
495 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
496 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
497 Value sendtoaddress(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
498 { |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
499 if (pwalletMain->IsCrypted() && (fHelp || params.size() < 2 || params.size() > 4)) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
500 throw runtime_error( |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
501 "sendtoaddress <bitcoinaddress> <amount> [comment] [comment-to]\n" |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
502 "<amount> is a real and is rounded to the nearest 0.00000001\n" |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
503 "requires wallet passphrase to be set with walletpassphrase first"); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
504 if (!pwalletMain->IsCrypted() && (fHelp || params.size() < 2 || params.size() > 4)) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
505 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
506 "sendtoaddress <bitcoinaddress> <amount> [comment] [comment-to]\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
507 "<amount> is a real and is rounded to the nearest 0.00000001"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
508 |
1256
3a687b55c04b
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1220
diff
changeset
|
509 CBitcoinAddress address(params[0].get_str()); |
3a687b55c04b
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1220
diff
changeset
|
510 if (!address.IsValid()) |
3a687b55c04b
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1220
diff
changeset
|
511 throw JSONRPCError(-5, "Invalid bitcoin address"); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
512 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
513 // Amount |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
514 int64 nAmount = AmountFromValue(params[1]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
515 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
516 // Wallet comments |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
517 CWalletTx wtx; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
518 if (params.size() > 2 && params[2].type() != null_type && !params[2].get_str().empty()) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
519 wtx.mapValue["comment"] = params[2].get_str(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
520 if (params.size() > 3 && params[3].type() != null_type && !params[3].get_str().empty()) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
521 wtx.mapValue["to"] = params[3].get_str(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
522 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
523 if (pwalletMain->IsLocked()) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
524 throw JSONRPCError(-13, "Error: Please enter the wallet passphrase with walletpassphrase first."); |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
525 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
526 string strError = pwalletMain->SendMoneyToBitcoinAddress(address, nAmount, wtx); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
527 if (strError != "") |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
528 throw JSONRPCError(-4, strError); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
529 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
530 return wtx.GetHash().GetHex(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
531 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
532 |
1330
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
533 static const string strMessageMagic = "Bitcoin Signed Message:\n"; |
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
534 |
1329
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
535 Value signmessage(const Array& params, bool fHelp) |
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
536 { |
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
537 if (fHelp || params.size() != 2) |
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
538 throw runtime_error( |
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
539 "signmessage <bitcoinaddress> <message>\n" |
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
540 "Sign a message with the private key of an address"); |
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
541 |
1330
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
542 if (pwalletMain->IsLocked()) |
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
543 throw JSONRPCError(-13, "Error: Please enter the wallet passphrase with walletpassphrase first."); |
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
544 |
1329
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
545 string strAddress = params[0].get_str(); |
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
546 string strMessage = params[1].get_str(); |
1330
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
547 |
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
548 CBitcoinAddress addr(strAddress); |
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
549 if (!addr.IsValid()) |
1329
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
550 throw JSONRPCError(-3, "Invalid address"); |
1330
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
551 |
1329
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
552 CKey key; |
1330
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
553 if (!pwalletMain->GetKey(addr, key)) |
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
554 throw JSONRPCError(-4, "Private key not available"); |
1329
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
555 |
1330
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
556 CDataStream ss(SER_GETHASH); |
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
557 ss << strMessageMagic; |
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
558 ss << strMessage; |
1329
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
559 |
1330
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
560 vector<unsigned char> vchSig; |
1333
7efc4fb78051
Use key recovery for message signatures
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1331
diff
changeset
|
561 if (!key.SignCompact(Hash(ss.begin(), ss.end()), vchSig)) |
1330
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
562 throw JSONRPCError(-5, "Sign failed"); |
1329
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
563 |
1333
7efc4fb78051
Use key recovery for message signatures
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1331
diff
changeset
|
564 return EncodeBase64(&vchSig[0], vchSig.size()); |
1329
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
565 } |
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
566 |
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
567 Value verifymessage(const Array& params, bool fHelp) |
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
568 { |
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
569 if (fHelp || params.size() != 3) |
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
570 throw runtime_error( |
1330
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
571 "verifymessage <bitcoinaddress> <signature> <message>\n" |
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
572 "Verify a signed message"); |
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
573 |
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
574 string strAddress = params[0].get_str(); |
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
575 string strSign = params[1].get_str(); |
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
576 string strMessage = params[2].get_str(); |
1329
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
577 |
1330
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
578 CBitcoinAddress addr(strAddress); |
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
579 if (!addr.IsValid()) |
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
580 throw JSONRPCError(-3, "Invalid address"); |
1329
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
581 |
1331
b427db8574f1
base64-based sign/verify
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1330
diff
changeset
|
582 bool fInvalid = false; |
1333
7efc4fb78051
Use key recovery for message signatures
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1331
diff
changeset
|
583 vector<unsigned char> vchSig = DecodeBase64(strSign.c_str(), &fInvalid); |
1331
b427db8574f1
base64-based sign/verify
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1330
diff
changeset
|
584 |
b427db8574f1
base64-based sign/verify
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1330
diff
changeset
|
585 if (fInvalid) |
b427db8574f1
base64-based sign/verify
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1330
diff
changeset
|
586 throw JSONRPCError(-5, "Malformed base64 encoding"); |
b427db8574f1
base64-based sign/verify
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1330
diff
changeset
|
587 |
1333
7efc4fb78051
Use key recovery for message signatures
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1331
diff
changeset
|
588 CDataStream ss(SER_GETHASH); |
7efc4fb78051
Use key recovery for message signatures
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1331
diff
changeset
|
589 ss << strMessageMagic; |
7efc4fb78051
Use key recovery for message signatures
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1331
diff
changeset
|
590 ss << strMessage; |
1329
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
591 |
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
592 CKey key; |
1333
7efc4fb78051
Use key recovery for message signatures
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1331
diff
changeset
|
593 if (!key.SetCompactSignature(Hash(ss.begin(), ss.end()), vchSig)) |
7efc4fb78051
Use key recovery for message signatures
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1331
diff
changeset
|
594 return false; |
1330
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
595 |
1333
7efc4fb78051
Use key recovery for message signatures
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1331
diff
changeset
|
596 return (key.GetAddress() == addr); |
1329
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
597 } |
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
598 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
599 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
600 Value getreceivedbyaddress(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
601 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
602 if (fHelp || params.size() < 1 || params.size() > 2) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
603 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
604 "getreceivedbyaddress <bitcoinaddress> [minconf=1]\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
605 "Returns the total amount received by <bitcoinaddress> in transactions with at least [minconf] confirmations."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
606 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
607 // Bitcoin address |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
608 CBitcoinAddress address = CBitcoinAddress(params[0].get_str()); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
609 CScript scriptPubKey; |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
610 if (!address.IsValid()) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
611 throw JSONRPCError(-5, "Invalid bitcoin address"); |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
612 scriptPubKey.SetBitcoinAddress(address); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
613 if (!IsMine(*pwalletMain,scriptPubKey)) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
614 return (double)0.0; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
615 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
616 // Minimum confirmations |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
617 int nMinDepth = 1; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
618 if (params.size() > 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
619 nMinDepth = params[1].get_int(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
620 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
621 // Tally |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
622 int64 nAmount = 0; |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
623 for (map<uint256, CWalletTx>::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); ++it) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
624 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
625 const CWalletTx& wtx = (*it).second; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
626 if (wtx.IsCoinBase() || !wtx.IsFinal()) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
627 continue; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
628 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
629 BOOST_FOREACH(const CTxOut& txout, wtx.vout) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
630 if (txout.scriptPubKey == scriptPubKey) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
631 if (wtx.GetDepthInMainChain() >= nMinDepth) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
632 nAmount += txout.nValue; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
633 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
634 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
635 return ValueFromAmount(nAmount); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
636 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
637 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
638 |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
639 void GetAccountAddresses(string strAccount, set<CBitcoinAddress>& setAddress) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
640 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
641 BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress, string)& item, pwalletMain->mapAddressBook) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
642 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
643 const CBitcoinAddress& address = item.first; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
644 const string& strName = item.second; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
645 if (strName == strAccount) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
646 setAddress.insert(address); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
647 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
648 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
649 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
650 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
651 Value getreceivedbyaccount(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
652 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
653 if (fHelp || params.size() < 1 || params.size() > 2) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
654 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
655 "getreceivedbyaccount <account> [minconf=1]\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
656 "Returns the total amount received by addresses with <account> in transactions with at least [minconf] confirmations."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
657 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
658 // Minimum confirmations |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
659 int nMinDepth = 1; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
660 if (params.size() > 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
661 nMinDepth = params[1].get_int(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
662 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
663 // Get the set of pub keys that have the label |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
664 string strAccount = AccountFromValue(params[0]); |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
665 set<CBitcoinAddress> setAddress; |
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
666 GetAccountAddresses(strAccount, setAddress); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
667 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
668 // Tally |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
669 int64 nAmount = 0; |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
670 for (map<uint256, CWalletTx>::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); ++it) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
671 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
672 const CWalletTx& wtx = (*it).second; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
673 if (wtx.IsCoinBase() || !wtx.IsFinal()) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
674 continue; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
675 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
676 BOOST_FOREACH(const CTxOut& txout, wtx.vout) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
677 { |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
678 CBitcoinAddress address; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
679 if (ExtractAddress(txout.scriptPubKey, pwalletMain, address) && setAddress.count(address)) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
680 if (wtx.GetDepthInMainChain() >= nMinDepth) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
681 nAmount += txout.nValue; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
682 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
683 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
684 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
685 return (double)nAmount / (double)COIN; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
686 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
687 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
688 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
689 int64 GetAccountBalance(CWalletDB& walletdb, const string& strAccount, int nMinDepth) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
690 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
691 int64 nBalance = 0; |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
692 |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
693 // Tally wallet transactions |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
694 for (map<uint256, CWalletTx>::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); ++it) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
695 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
696 const CWalletTx& wtx = (*it).second; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
697 if (!wtx.IsFinal()) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
698 continue; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
699 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
700 int64 nGenerated, nReceived, nSent, nFee; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
701 wtx.GetAccountAmounts(strAccount, nGenerated, nReceived, nSent, nFee); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
702 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
703 if (nReceived != 0 && wtx.GetDepthInMainChain() >= nMinDepth) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
704 nBalance += nReceived; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
705 nBalance += nGenerated - nSent - nFee; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
706 } |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
707 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
708 // Tally internal accounting entries |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
709 nBalance += walletdb.GetAccountCreditDebit(strAccount); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
710 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
711 return nBalance; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
712 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
713 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
714 int64 GetAccountBalance(const string& strAccount, int nMinDepth) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
715 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
716 CWalletDB walletdb(pwalletMain->strWalletFile); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
717 return GetAccountBalance(walletdb, strAccount, nMinDepth); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
718 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
719 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
720 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
721 Value getbalance(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
722 { |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
723 if (fHelp || params.size() > 2) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
724 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
725 "getbalance [account] [minconf=1]\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
726 "If [account] is not specified, returns the server's total available balance.\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
727 "If [account] is specified, returns the balance in the account."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
728 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
729 if (params.size() == 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
730 return ValueFromAmount(pwalletMain->GetBalance()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
731 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
732 int nMinDepth = 1; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
733 if (params.size() > 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
734 nMinDepth = params[1].get_int(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
735 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
736 if (params[0].get_str() == "*") { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
737 // Calculate total balance a different way from GetBalance() |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
738 // (GetBalance() sums up all unspent TxOuts) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
739 // getbalance and getbalance '*' should always return the same number. |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
740 int64 nBalance = 0; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
741 for (map<uint256, CWalletTx>::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); ++it) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
742 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
743 const CWalletTx& wtx = (*it).second; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
744 if (!wtx.IsFinal()) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
745 continue; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
746 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
747 int64 allGeneratedImmature, allGeneratedMature, allFee; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
748 allGeneratedImmature = allGeneratedMature = allFee = 0; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
749 string strSentAccount; |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
750 list<pair<CBitcoinAddress, int64> > listReceived; |
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
751 list<pair<CBitcoinAddress, int64> > listSent; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
752 wtx.GetAmounts(allGeneratedImmature, allGeneratedMature, listReceived, listSent, allFee, strSentAccount); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
753 if (wtx.GetDepthInMainChain() >= nMinDepth) |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
754 BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress,int64)& r, listReceived) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
755 nBalance += r.second; |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
756 BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress,int64)& r, listSent) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
757 nBalance -= r.second; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
758 nBalance -= allFee; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
759 nBalance += allGeneratedMature; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
760 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
761 return ValueFromAmount(nBalance); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
762 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
763 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
764 string strAccount = AccountFromValue(params[0]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
765 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
766 int64 nBalance = GetAccountBalance(strAccount, nMinDepth); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
767 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
768 return ValueFromAmount(nBalance); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
769 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
770 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
771 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
772 Value movecmd(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
773 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
774 if (fHelp || params.size() < 3 || params.size() > 5) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
775 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
776 "move <fromaccount> <toaccount> <amount> [minconf=1] [comment]\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
777 "Move from one account in your wallet to another."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
778 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
779 string strFrom = AccountFromValue(params[0]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
780 string strTo = AccountFromValue(params[1]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
781 int64 nAmount = AmountFromValue(params[2]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
782 if (params.size() > 3) |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
783 // unused parameter, used to be nMinDepth, keep type-checking it though |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
784 (void)params[3].get_int(); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
785 string strComment; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
786 if (params.size() > 4) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
787 strComment = params[4].get_str(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
788 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
789 CWalletDB walletdb(pwalletMain->strWalletFile); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
790 walletdb.TxnBegin(); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
791 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
792 int64 nNow = GetAdjustedTime(); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
793 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
794 // Debit |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
795 CAccountingEntry debit; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
796 debit.strAccount = strFrom; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
797 debit.nCreditDebit = -nAmount; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
798 debit.nTime = nNow; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
799 debit.strOtherAccount = strTo; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
800 debit.strComment = strComment; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
801 walletdb.WriteAccountingEntry(debit); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
802 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
803 // Credit |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
804 CAccountingEntry credit; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
805 credit.strAccount = strTo; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
806 credit.nCreditDebit = nAmount; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
807 credit.nTime = nNow; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
808 credit.strOtherAccount = strFrom; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
809 credit.strComment = strComment; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
810 walletdb.WriteAccountingEntry(credit); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
811 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
812 walletdb.TxnCommit(); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
813 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
814 return true; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
815 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
816 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
817 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
818 Value sendfrom(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
819 { |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
820 if (pwalletMain->IsCrypted() && (fHelp || params.size() < 3 || params.size() > 6)) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
821 throw runtime_error( |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
822 "sendfrom <fromaccount> <tobitcoinaddress> <amount> [minconf=1] [comment] [comment-to]\n" |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
823 "<amount> is a real and is rounded to the nearest 0.00000001\n" |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
824 "requires wallet passphrase to be set with walletpassphrase first"); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
825 if (!pwalletMain->IsCrypted() && (fHelp || params.size() < 3 || params.size() > 6)) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
826 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
827 "sendfrom <fromaccount> <tobitcoinaddress> <amount> [minconf=1] [comment] [comment-to]\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
828 "<amount> is a real and is rounded to the nearest 0.00000001"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
829 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
830 string strAccount = AccountFromValue(params[0]); |
1256
3a687b55c04b
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1220
diff
changeset
|
831 CBitcoinAddress address(params[1].get_str()); |
3a687b55c04b
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1220
diff
changeset
|
832 if (!address.IsValid()) |
3a687b55c04b
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1220
diff
changeset
|
833 throw JSONRPCError(-5, "Invalid bitcoin address"); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
834 int64 nAmount = AmountFromValue(params[2]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
835 int nMinDepth = 1; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
836 if (params.size() > 3) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
837 nMinDepth = params[3].get_int(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
838 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
839 CWalletTx wtx; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
840 wtx.strFromAccount = strAccount; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
841 if (params.size() > 4 && params[4].type() != null_type && !params[4].get_str().empty()) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
842 wtx.mapValue["comment"] = params[4].get_str(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
843 if (params.size() > 5 && params[5].type() != null_type && !params[5].get_str().empty()) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
844 wtx.mapValue["to"] = params[5].get_str(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
845 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
846 if (pwalletMain->IsLocked()) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
847 throw JSONRPCError(-13, "Error: Please enter the wallet passphrase with walletpassphrase first."); |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
848 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
849 // Check funds |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
850 int64 nBalance = GetAccountBalance(strAccount, nMinDepth); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
851 if (nAmount > nBalance) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
852 throw JSONRPCError(-6, "Account has insufficient funds"); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
853 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
854 // Send |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
855 string strError = pwalletMain->SendMoneyToBitcoinAddress(address, nAmount, wtx); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
856 if (strError != "") |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
857 throw JSONRPCError(-4, strError); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
858 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
859 return wtx.GetHash().GetHex(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
860 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
861 |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
862 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
863 Value sendmany(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
864 { |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
865 if (pwalletMain->IsCrypted() && (fHelp || params.size() < 2 || params.size() > 4)) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
866 throw runtime_error( |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
867 "sendmany <fromaccount> {address:amount,...} [minconf=1] [comment]\n" |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
868 "amounts are double-precision floating point numbers\n" |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
869 "requires wallet passphrase to be set with walletpassphrase first"); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
870 if (!pwalletMain->IsCrypted() && (fHelp || params.size() < 2 || params.size() > 4)) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
871 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
872 "sendmany <fromaccount> {address:amount,...} [minconf=1] [comment]\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
873 "amounts are double-precision floating point numbers"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
874 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
875 string strAccount = AccountFromValue(params[0]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
876 Object sendTo = params[1].get_obj(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
877 int nMinDepth = 1; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
878 if (params.size() > 2) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
879 nMinDepth = params[2].get_int(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
880 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
881 CWalletTx wtx; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
882 wtx.strFromAccount = strAccount; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
883 if (params.size() > 3 && params[3].type() != null_type && !params[3].get_str().empty()) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
884 wtx.mapValue["comment"] = params[3].get_str(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
885 |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
886 set<CBitcoinAddress> setAddress; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
887 vector<pair<CScript, int64> > vecSend; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
888 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
889 int64 totalAmount = 0; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
890 BOOST_FOREACH(const Pair& s, sendTo) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
891 { |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
892 CBitcoinAddress address(s.name_); |
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
893 if (!address.IsValid()) |
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
894 throw JSONRPCError(-5, string("Invalid bitcoin address:")+s.name_); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
895 |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
896 if (setAddress.count(address)) |
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
897 throw JSONRPCError(-8, string("Invalid parameter, duplicated address: ")+s.name_); |
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
898 setAddress.insert(address); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
899 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
900 CScript scriptPubKey; |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
901 scriptPubKey.SetBitcoinAddress(address); |
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
902 int64 nAmount = AmountFromValue(s.value_); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
903 totalAmount += nAmount; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
904 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
905 vecSend.push_back(make_pair(scriptPubKey, nAmount)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
906 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
907 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
908 if (pwalletMain->IsLocked()) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
909 throw JSONRPCError(-13, "Error: Please enter the wallet passphrase with walletpassphrase first."); |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
910 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
911 // Check funds |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
912 int64 nBalance = GetAccountBalance(strAccount, nMinDepth); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
913 if (totalAmount > nBalance) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
914 throw JSONRPCError(-6, "Account has insufficient funds"); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
915 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
916 // Send |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
917 CReserveKey keyChange(pwalletMain); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
918 int64 nFeeRequired = 0; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
919 bool fCreated = pwalletMain->CreateTransaction(vecSend, wtx, keyChange, nFeeRequired); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
920 if (!fCreated) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
921 { |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
922 if (totalAmount + nFeeRequired > pwalletMain->GetBalance()) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
923 throw JSONRPCError(-6, "Insufficient funds"); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
924 throw JSONRPCError(-4, "Transaction creation failed"); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
925 } |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
926 if (!pwalletMain->CommitTransaction(wtx, keyChange)) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
927 throw JSONRPCError(-4, "Transaction commit failed"); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
928 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
929 return wtx.GetHash().GetHex(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
930 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
931 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
932 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
933 struct tallyitem |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
934 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
935 int64 nAmount; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
936 int nConf; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
937 tallyitem() |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
938 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
939 nAmount = 0; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
940 nConf = INT_MAX; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
941 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
942 }; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
943 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
944 Value ListReceived(const Array& params, bool fByAccounts) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
945 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
946 // Minimum confirmations |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
947 int nMinDepth = 1; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
948 if (params.size() > 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
949 nMinDepth = params[0].get_int(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
950 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
951 // Whether to include empty accounts |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
952 bool fIncludeEmpty = false; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
953 if (params.size() > 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
954 fIncludeEmpty = params[1].get_bool(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
955 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
956 // Tally |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
957 map<CBitcoinAddress, tallyitem> mapTally; |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
958 for (map<uint256, CWalletTx>::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); ++it) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
959 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
960 const CWalletTx& wtx = (*it).second; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
961 if (wtx.IsCoinBase() || !wtx.IsFinal()) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
962 continue; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
963 |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
964 int nDepth = wtx.GetDepthInMainChain(); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
965 if (nDepth < nMinDepth) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
966 continue; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
967 |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
968 BOOST_FOREACH(const CTxOut& txout, wtx.vout) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
969 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
970 CBitcoinAddress address; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
971 if (!ExtractAddress(txout.scriptPubKey, pwalletMain, address) || !address.IsValid()) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
972 continue; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
973 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
974 tallyitem& item = mapTally[address]; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
975 item.nAmount += txout.nValue; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
976 item.nConf = min(item.nConf, nDepth); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
977 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
978 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
979 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
980 // Reply |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
981 Array ret; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
982 map<string, tallyitem> mapAccountTally; |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
983 BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress, string)& item, pwalletMain->mapAddressBook) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
984 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
985 const CBitcoinAddress& address = item.first; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
986 const string& strAccount = item.second; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
987 map<CBitcoinAddress, tallyitem>::iterator it = mapTally.find(address); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
988 if (it == mapTally.end() && !fIncludeEmpty) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
989 continue; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
990 |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
991 int64 nAmount = 0; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
992 int nConf = INT_MAX; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
993 if (it != mapTally.end()) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
994 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
995 nAmount = (*it).second.nAmount; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
996 nConf = (*it).second.nConf; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
997 } |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
998 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
999 if (fByAccounts) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1000 { |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1001 tallyitem& item = mapAccountTally[strAccount]; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1002 item.nAmount += nAmount; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1003 item.nConf = min(item.nConf, nConf); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1004 } |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1005 else |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1006 { |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1007 Object obj; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1008 obj.push_back(Pair("address", address.ToString())); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1009 obj.push_back(Pair("account", strAccount)); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1010 obj.push_back(Pair("amount", ValueFromAmount(nAmount))); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1011 obj.push_back(Pair("confirmations", (nConf == INT_MAX ? 0 : nConf))); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1012 ret.push_back(obj); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1013 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1014 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1015 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1016 if (fByAccounts) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1017 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1018 for (map<string, tallyitem>::iterator it = mapAccountTally.begin(); it != mapAccountTally.end(); ++it) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1019 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1020 int64 nAmount = (*it).second.nAmount; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1021 int nConf = (*it).second.nConf; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1022 Object obj; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1023 obj.push_back(Pair("account", (*it).first)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1024 obj.push_back(Pair("amount", ValueFromAmount(nAmount))); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1025 obj.push_back(Pair("confirmations", (nConf == INT_MAX ? 0 : nConf))); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1026 ret.push_back(obj); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1027 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1028 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1029 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1030 return ret; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1031 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1032 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1033 Value listreceivedbyaddress(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1034 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1035 if (fHelp || params.size() > 2) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1036 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1037 "listreceivedbyaddress [minconf=1] [includeempty=false]\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1038 "[minconf] is the minimum number of confirmations before payments are included.\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1039 "[includeempty] whether to include addresses that haven't received any payments.\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1040 "Returns an array of objects containing:\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1041 " \"address\" : receiving address\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1042 " \"account\" : the account of the receiving address\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1043 " \"amount\" : total amount received by the address\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1044 " \"confirmations\" : number of confirmations of the most recent transaction included"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1045 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1046 return ListReceived(params, false); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1047 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1048 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1049 Value listreceivedbyaccount(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1050 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1051 if (fHelp || params.size() > 2) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1052 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1053 "listreceivedbyaccount [minconf=1] [includeempty=false]\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1054 "[minconf] is the minimum number of confirmations before payments are included.\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1055 "[includeempty] whether to include accounts that haven't received any payments.\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1056 "Returns an array of objects containing:\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1057 " \"account\" : the account of the receiving addresses\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1058 " \"amount\" : total amount received by addresses with this account\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1059 " \"confirmations\" : number of confirmations of the most recent transaction included"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1060 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1061 return ListReceived(params, true); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1062 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1063 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1064 void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDepth, bool fLong, Array& ret) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1065 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1066 int64 nGeneratedImmature, nGeneratedMature, nFee; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1067 string strSentAccount; |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
1068 list<pair<CBitcoinAddress, int64> > listReceived; |
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
1069 list<pair<CBitcoinAddress, int64> > listSent; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1070 wtx.GetAmounts(nGeneratedImmature, nGeneratedMature, listReceived, listSent, nFee, strSentAccount); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1071 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1072 bool fAllAccounts = (strAccount == string("*")); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1073 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1074 // Generated blocks assigned to account "" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1075 if ((nGeneratedMature+nGeneratedImmature) != 0 && (fAllAccounts || strAccount == "")) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1076 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1077 Object entry; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1078 entry.push_back(Pair("account", string(""))); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1079 if (nGeneratedImmature) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1080 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1081 entry.push_back(Pair("category", wtx.GetDepthInMainChain() ? "immature" : "orphan")); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1082 entry.push_back(Pair("amount", ValueFromAmount(nGeneratedImmature))); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1083 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1084 else |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1085 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1086 entry.push_back(Pair("category", "generate")); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1087 entry.push_back(Pair("amount", ValueFromAmount(nGeneratedMature))); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1088 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1089 if (fLong) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1090 WalletTxToJSON(wtx, entry); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1091 ret.push_back(entry); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1092 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1093 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1094 // Sent |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1095 if ((!listSent.empty() || nFee != 0) && (fAllAccounts || strAccount == strSentAccount)) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1096 { |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
1097 BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress, int64)& s, listSent) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1098 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1099 Object entry; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1100 entry.push_back(Pair("account", strSentAccount)); |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
1101 entry.push_back(Pair("address", s.first.ToString())); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1102 entry.push_back(Pair("category", "send")); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1103 entry.push_back(Pair("amount", ValueFromAmount(-s.second))); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1104 entry.push_back(Pair("fee", ValueFromAmount(-nFee))); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1105 if (fLong) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1106 WalletTxToJSON(wtx, entry); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1107 ret.push_back(entry); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1108 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1109 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1110 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1111 // Received |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1112 if (listReceived.size() > 0 && wtx.GetDepthInMainChain() >= nMinDepth) |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1113 BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress, int64)& r, listReceived) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1114 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1115 string account; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1116 if (pwalletMain->mapAddressBook.count(r.first)) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1117 account = pwalletMain->mapAddressBook[r.first]; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1118 if (fAllAccounts || (account == strAccount)) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1119 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1120 Object entry; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1121 entry.push_back(Pair("account", account)); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1122 entry.push_back(Pair("address", r.first.ToString())); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1123 entry.push_back(Pair("category", "receive")); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1124 entry.push_back(Pair("amount", ValueFromAmount(r.second))); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1125 if (fLong) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1126 WalletTxToJSON(wtx, entry); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1127 ret.push_back(entry); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1128 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1129 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1130 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1131 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1132 void AcentryToJSON(const CAccountingEntry& acentry, const string& strAccount, Array& ret) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1133 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1134 bool fAllAccounts = (strAccount == string("*")); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1135 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1136 if (fAllAccounts || acentry.strAccount == strAccount) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1137 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1138 Object entry; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1139 entry.push_back(Pair("account", acentry.strAccount)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1140 entry.push_back(Pair("category", "move")); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1141 entry.push_back(Pair("time", (boost::int64_t)acentry.nTime)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1142 entry.push_back(Pair("amount", ValueFromAmount(acentry.nCreditDebit))); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1143 entry.push_back(Pair("otheraccount", acentry.strOtherAccount)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1144 entry.push_back(Pair("comment", acentry.strComment)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1145 ret.push_back(entry); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1146 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1147 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1148 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1149 Value listtransactions(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1150 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1151 if (fHelp || params.size() > 3) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1152 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1153 "listtransactions [account] [count=10] [from=0]\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1154 "Returns up to [count] most recent transactions skipping the first [from] transactions for account [account]."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1155 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1156 string strAccount = "*"; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1157 if (params.size() > 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1158 strAccount = params[0].get_str(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1159 int nCount = 10; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1160 if (params.size() > 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1161 nCount = params[1].get_int(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1162 int nFrom = 0; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1163 if (params.size() > 2) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1164 nFrom = params[2].get_int(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1165 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1166 Array ret; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1167 CWalletDB walletdb(pwalletMain->strWalletFile); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1168 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1169 // Firs: get all CWalletTx and CAccountingEntry into a sorted-by-time multimap: |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1170 typedef pair<CWalletTx*, CAccountingEntry*> TxPair; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1171 typedef multimap<int64, TxPair > TxItems; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1172 TxItems txByTime; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1173 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1174 for (map<uint256, CWalletTx>::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); ++it) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1175 { |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1176 CWalletTx* wtx = &((*it).second); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1177 txByTime.insert(make_pair(wtx->GetTxTime(), TxPair(wtx, (CAccountingEntry*)0))); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1178 } |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1179 list<CAccountingEntry> acentries; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1180 walletdb.ListAccountCreditDebit(strAccount, acentries); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1181 BOOST_FOREACH(CAccountingEntry& entry, acentries) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1182 { |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1183 txByTime.insert(make_pair(entry.nTime, TxPair((CWalletTx*)0, &entry))); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1184 } |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1185 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1186 // Now: iterate backwards until we have nCount items to return: |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1187 TxItems::reverse_iterator it = txByTime.rbegin(); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1188 if (txByTime.size() > nFrom) std::advance(it, nFrom); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1189 for (; it != txByTime.rend(); ++it) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1190 { |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1191 CWalletTx *const pwtx = (*it).second.first; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1192 if (pwtx != 0) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1193 ListTransactions(*pwtx, strAccount, 0, true, ret); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1194 CAccountingEntry *const pacentry = (*it).second.second; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1195 if (pacentry != 0) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1196 AcentryToJSON(*pacentry, strAccount, ret); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1197 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1198 if (ret.size() >= nCount) break; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1199 } |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1200 // ret is now newest to oldest |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
1201 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1202 // Make sure we return only last nCount items (sends-to-self might give us an extra): |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1203 if (ret.size() > nCount) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1204 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1205 Array::iterator last = ret.begin(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1206 std::advance(last, nCount); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1207 ret.erase(last, ret.end()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1208 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1209 std::reverse(ret.begin(), ret.end()); // oldest to newest |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1210 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1211 return ret; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1212 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1213 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1214 Value listaccounts(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1215 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1216 if (fHelp || params.size() > 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1217 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1218 "listaccounts [minconf=1]\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1219 "Returns Object that has account names as keys, account balances as values."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1220 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1221 int nMinDepth = 1; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1222 if (params.size() > 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1223 nMinDepth = params[0].get_int(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1224 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1225 map<string, int64> mapAccountBalances; |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1226 BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress, string)& entry, pwalletMain->mapAddressBook) { |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1227 if (pwalletMain->HaveKey(entry.first)) // This address belongs to me |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1228 mapAccountBalances[entry.second] = 0; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1229 } |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1230 |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1231 for (map<uint256, CWalletTx>::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); ++it) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1232 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1233 const CWalletTx& wtx = (*it).second; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1234 int64 nGeneratedImmature, nGeneratedMature, nFee; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1235 string strSentAccount; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1236 list<pair<CBitcoinAddress, int64> > listReceived; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1237 list<pair<CBitcoinAddress, int64> > listSent; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1238 wtx.GetAmounts(nGeneratedImmature, nGeneratedMature, listReceived, listSent, nFee, strSentAccount); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1239 mapAccountBalances[strSentAccount] -= nFee; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1240 BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress, int64)& s, listSent) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1241 mapAccountBalances[strSentAccount] -= s.second; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1242 if (wtx.GetDepthInMainChain() >= nMinDepth) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1243 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1244 mapAccountBalances[""] += nGeneratedMature; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1245 BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress, int64)& r, listReceived) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1246 if (pwalletMain->mapAddressBook.count(r.first)) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1247 mapAccountBalances[pwalletMain->mapAddressBook[r.first]] += r.second; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1248 else |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1249 mapAccountBalances[""] += r.second; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1250 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1251 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1252 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1253 list<CAccountingEntry> acentries; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1254 CWalletDB(pwalletMain->strWalletFile).ListAccountCreditDebit("*", acentries); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1255 BOOST_FOREACH(const CAccountingEntry& entry, acentries) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1256 mapAccountBalances[entry.strAccount] += entry.nCreditDebit; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1257 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1258 Object ret; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1259 BOOST_FOREACH(const PAIRTYPE(string, int64)& accountBalance, mapAccountBalances) { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1260 ret.push_back(Pair(accountBalance.first, ValueFromAmount(accountBalance.second))); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1261 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1262 return ret; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1263 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1264 |
1382
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1265 Value listsinceblock(const Array& params, bool fHelp) |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1266 { |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1267 if (fHelp) |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1268 throw runtime_error( |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1269 "listsinceblock [blockid] [target-confirmations]\n" |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1270 "Get all transactions in blocks since block [blockid], or all transactions if omitted"); |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1271 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1272 CBlockIndex *pindex = NULL; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1273 int target_confirms = 1; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1274 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1275 if (params.size() > 0) |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1276 { |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1277 uint256 blockId = 0; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1278 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1279 blockId.SetHex(params[0].get_str()); |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1280 pindex = CBlockLocator(blockId).GetBlockIndex(); |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1281 } |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1282 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1283 if (params.size() > 1) |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1284 { |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1285 target_confirms = params[1].get_int(); |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1286 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1287 if (target_confirms < 1) |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1288 throw JSONRPCError(-8, "Invalid parameter"); |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1289 } |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1290 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1291 int depth = pindex ? (1 + nBestHeight - pindex->nHeight) : -1; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1292 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1293 Array transactions; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1294 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1295 for (map<uint256, CWalletTx>::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); it++) |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1296 { |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1297 CWalletTx tx = (*it).second; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1298 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1299 if (depth == -1 || tx.GetDepthInMainChain() < depth) |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1300 ListTransactions(tx, "*", 0, true, transactions); |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1301 } |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1302 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1303 uint256 lastblock; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1304 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1305 if (target_confirms == 1) |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1306 { |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1307 printf("oops!\n"); |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1308 lastblock = hashBestChain; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1309 } |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1310 else |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1311 { |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1312 int target_height = pindexBest->nHeight + 1 - target_confirms; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1313 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1314 CBlockIndex *block; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1315 for (block = pindexBest; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1316 block && block->nHeight > target_height; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1317 block = block->pprev); |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1318 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1319 lastblock = block ? block->GetBlockHash() : 0; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1320 } |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1321 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1322 Object ret; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1323 ret.push_back(Pair("transactions", transactions)); |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1324 ret.push_back(Pair("lastblock", lastblock.GetHex())); |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1325 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1326 return ret; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1327 } |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1328 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1329 Value gettransaction(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1330 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1331 if (fHelp || params.size() != 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1332 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1333 "gettransaction <txid>\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1334 "Get detailed information about <txid>"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1335 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1336 uint256 hash; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1337 hash.SetHex(params[0].get_str()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1338 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1339 Object entry; |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1340 |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1341 if (!pwalletMain->mapWallet.count(hash)) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1342 throw JSONRPCError(-5, "Invalid or non-wallet transaction id"); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1343 const CWalletTx& wtx = pwalletMain->mapWallet[hash]; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1344 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1345 int64 nCredit = wtx.GetCredit(); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1346 int64 nDebit = wtx.GetDebit(); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1347 int64 nNet = nCredit - nDebit; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1348 int64 nFee = (wtx.IsFromMe() ? wtx.GetValueOut() - nDebit : 0); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1349 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1350 entry.push_back(Pair("amount", ValueFromAmount(nNet - nFee))); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1351 if (wtx.IsFromMe()) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1352 entry.push_back(Pair("fee", ValueFromAmount(nFee))); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1353 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1354 WalletTxToJSON(pwalletMain->mapWallet[hash], entry); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1355 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1356 Array details; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1357 ListTransactions(pwalletMain->mapWallet[hash], "*", 0, false, details); |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1358 entry.push_back(Pair("details", details)); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1359 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1360 return entry; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1361 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1362 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1363 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1364 Value backupwallet(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1365 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1366 if (fHelp || params.size() != 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1367 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1368 "backupwallet <destination>\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1369 "Safely copies wallet.dat to destination, which can be a directory or a path with filename."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1370 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1371 string strDest = params[0].get_str(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1372 BackupWallet(*pwalletMain, strDest); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1373 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1374 return Value::null; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1375 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1376 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1377 |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1378 Value keypoolrefill(const Array& params, bool fHelp) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1379 { |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1380 if (pwalletMain->IsCrypted() && (fHelp || params.size() > 0)) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1381 throw runtime_error( |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1382 "keypoolrefill\n" |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1383 "Fills the keypool, requires wallet passphrase to be set."); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1384 if (!pwalletMain->IsCrypted() && (fHelp || params.size() > 0)) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1385 throw runtime_error( |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1386 "keypoolrefill\n" |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1387 "Fills the keypool."); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1388 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1389 if (pwalletMain->IsLocked()) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1390 throw JSONRPCError(-13, "Error: Please enter the wallet passphrase with walletpassphrase first."); |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1391 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1392 pwalletMain->TopUpKeyPool(); |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1393 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1394 if (pwalletMain->GetKeyPoolSize() < GetArg("-keypool", 100)) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1395 throw JSONRPCError(-4, "Error refreshing keypool."); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1396 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1397 return Value::null; |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1398 } |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1399 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1400 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1401 void ThreadTopUpKeyPool(void* parg) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1402 { |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1403 pwalletMain->TopUpKeyPool(); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1404 } |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1405 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1406 void ThreadCleanWalletPassphrase(void* parg) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1407 { |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1408 int64 nMyWakeTime = GetTime() + *((int*)parg); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1409 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1410 if (nWalletUnlockTime == 0) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1411 { |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1412 CRITICAL_BLOCK(cs_nWalletUnlockTime) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1413 { |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1414 nWalletUnlockTime = nMyWakeTime; |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1415 } |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1416 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1417 while (GetTime() < nWalletUnlockTime) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1418 Sleep(GetTime() - nWalletUnlockTime); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1419 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1420 CRITICAL_BLOCK(cs_nWalletUnlockTime) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1421 { |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1422 nWalletUnlockTime = 0; |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1423 } |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1424 } |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1425 else |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1426 { |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1427 CRITICAL_BLOCK(cs_nWalletUnlockTime) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1428 { |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1429 if (nWalletUnlockTime < nMyWakeTime) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1430 nWalletUnlockTime = nMyWakeTime; |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1431 } |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1432 free(parg); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1433 return; |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1434 } |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1435 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1436 pwalletMain->Lock(); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1437 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1438 delete (int*)parg; |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1439 } |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1440 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1441 Value walletpassphrase(const Array& params, bool fHelp) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1442 { |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1443 if (pwalletMain->IsCrypted() && (fHelp || params.size() != 2)) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1444 throw runtime_error( |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1445 "walletpassphrase <passphrase> <timeout>\n" |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1446 "Stores the wallet decryption key in memory for <timeout> seconds."); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1447 if (fHelp) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1448 return true; |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1449 if (!pwalletMain->IsCrypted()) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1450 throw JSONRPCError(-15, "Error: running with an unencrypted wallet, but walletpassphrase was called."); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1451 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1452 if (!pwalletMain->IsLocked()) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1453 throw JSONRPCError(-17, "Error: Wallet is already unlocked."); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1454 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1455 // Note that the walletpassphrase is stored in params[0] which is not mlock()ed |
1533
d0ccfedf2957
Implement an mlock()'d string class for storing passphrases
Dylan Noblesmith <nobled@dreamwidth.org>
parents:
1521
diff
changeset
|
1456 SecureString strWalletPass; |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1457 strWalletPass.reserve(100); |
1533
d0ccfedf2957
Implement an mlock()'d string class for storing passphrases
Dylan Noblesmith <nobled@dreamwidth.org>
parents:
1521
diff
changeset
|
1458 // TODO: get rid of this .c_str() by implementing SecureString::operator=(std::string) |
d0ccfedf2957
Implement an mlock()'d string class for storing passphrases
Dylan Noblesmith <nobled@dreamwidth.org>
parents:
1521
diff
changeset
|
1459 // Alternately, find a way to make params[0] mlock()'d to begin with. |
d0ccfedf2957
Implement an mlock()'d string class for storing passphrases
Dylan Noblesmith <nobled@dreamwidth.org>
parents:
1521
diff
changeset
|
1460 strWalletPass = params[0].get_str().c_str(); |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1461 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1462 if (strWalletPass.length() > 0) |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1463 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1464 if (!pwalletMain->Unlock(strWalletPass)) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1465 throw JSONRPCError(-14, "Error: The wallet passphrase entered was incorrect."); |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1466 } |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1467 else |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1468 throw runtime_error( |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1469 "walletpassphrase <passphrase> <timeout>\n" |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1470 "Stores the wallet decryption key in memory for <timeout> seconds."); |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1471 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1472 CreateThread(ThreadTopUpKeyPool, NULL); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1473 int* pnSleepTime = new int(params[1].get_int()); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1474 CreateThread(ThreadCleanWalletPassphrase, pnSleepTime); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1475 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1476 return Value::null; |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1477 } |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1478 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1479 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1480 Value walletpassphrasechange(const Array& params, bool fHelp) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1481 { |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1482 if (pwalletMain->IsCrypted() && (fHelp || params.size() != 2)) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1483 throw runtime_error( |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1484 "walletpassphrasechange <oldpassphrase> <newpassphrase>\n" |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1485 "Changes the wallet passphrase from <oldpassphrase> to <newpassphrase>."); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1486 if (fHelp) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1487 return true; |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1488 if (!pwalletMain->IsCrypted()) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1489 throw JSONRPCError(-15, "Error: running with an unencrypted wallet, but walletpassphrasechange was called."); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1490 |
1533
d0ccfedf2957
Implement an mlock()'d string class for storing passphrases
Dylan Noblesmith <nobled@dreamwidth.org>
parents:
1521
diff
changeset
|
1491 // TODO: get rid of these .c_str() calls by implementing SecureString::operator=(std::string) |
d0ccfedf2957
Implement an mlock()'d string class for storing passphrases
Dylan Noblesmith <nobled@dreamwidth.org>
parents:
1521
diff
changeset
|
1492 // Alternately, find a way to make params[0] mlock()'d to begin with. |
d0ccfedf2957
Implement an mlock()'d string class for storing passphrases
Dylan Noblesmith <nobled@dreamwidth.org>
parents:
1521
diff
changeset
|
1493 SecureString strOldWalletPass; |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1494 strOldWalletPass.reserve(100); |
1533
d0ccfedf2957
Implement an mlock()'d string class for storing passphrases
Dylan Noblesmith <nobled@dreamwidth.org>
parents:
1521
diff
changeset
|
1495 strOldWalletPass = params[0].get_str().c_str(); |
d0ccfedf2957
Implement an mlock()'d string class for storing passphrases
Dylan Noblesmith <nobled@dreamwidth.org>
parents:
1521
diff
changeset
|
1496 |
d0ccfedf2957
Implement an mlock()'d string class for storing passphrases
Dylan Noblesmith <nobled@dreamwidth.org>
parents:
1521
diff
changeset
|
1497 SecureString strNewWalletPass; |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1498 strNewWalletPass.reserve(100); |
1533
d0ccfedf2957
Implement an mlock()'d string class for storing passphrases
Dylan Noblesmith <nobled@dreamwidth.org>
parents:
1521
diff
changeset
|
1499 strNewWalletPass = params[1].get_str().c_str(); |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1500 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1501 if (strOldWalletPass.length() < 1 || strNewWalletPass.length() < 1) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1502 throw runtime_error( |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1503 "walletpassphrasechange <oldpassphrase> <newpassphrase>\n" |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1504 "Changes the wallet passphrase from <oldpassphrase> to <newpassphrase>."); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1505 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1506 if (!pwalletMain->ChangeWalletPassphrase(strOldWalletPass, strNewWalletPass)) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1507 throw JSONRPCError(-14, "Error: The wallet passphrase entered was incorrect."); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1508 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1509 return Value::null; |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1510 } |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1511 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1512 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1513 Value walletlock(const Array& params, bool fHelp) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1514 { |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1515 if (pwalletMain->IsCrypted() && (fHelp || params.size() != 0)) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1516 throw runtime_error( |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1517 "walletlock\n" |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1518 "Removes the wallet encryption key from memory, locking the wallet.\n" |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1519 "After calling this method, you will need to call walletpassphrase again\n" |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1520 "before being able to call any methods which require the wallet to be unlocked."); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1521 if (fHelp) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1522 return true; |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1523 if (!pwalletMain->IsCrypted()) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1524 throw JSONRPCError(-15, "Error: running with an unencrypted wallet, but walletlock was called."); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1525 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1526 pwalletMain->Lock(); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1527 CRITICAL_BLOCK(cs_nWalletUnlockTime) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1528 { |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1529 nWalletUnlockTime = 0; |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1530 } |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1531 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1532 return Value::null; |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1533 } |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1534 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1535 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1536 Value encryptwallet(const Array& params, bool fHelp) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1537 { |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1538 if (!pwalletMain->IsCrypted() && (fHelp || params.size() != 1)) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1539 throw runtime_error( |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1540 "encryptwallet <passphrase>\n" |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1541 "Encrypts the wallet with <passphrase>."); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1542 if (fHelp) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1543 return true; |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1544 if (pwalletMain->IsCrypted()) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1545 throw JSONRPCError(-15, "Error: running with an encrypted wallet, but encryptwallet was called."); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1546 |
1501
26d0f350347a
Obsolete keypool and make sure database removes log files on shutdown.
Gavin Andresen <gavinandresen@gmail.com>
parents:
1493
diff
changeset
|
1547 #ifdef QT_GUI |
26d0f350347a
Obsolete keypool and make sure database removes log files on shutdown.
Gavin Andresen <gavinandresen@gmail.com>
parents:
1493
diff
changeset
|
1548 // shutting down via RPC while the GUI is running does not work (yet): |
26d0f350347a
Obsolete keypool and make sure database removes log files on shutdown.
Gavin Andresen <gavinandresen@gmail.com>
parents:
1493
diff
changeset
|
1549 throw runtime_error("Not Yet Implemented: use GUI to encrypt wallet, not RPC command"); |
26d0f350347a
Obsolete keypool and make sure database removes log files on shutdown.
Gavin Andresen <gavinandresen@gmail.com>
parents:
1493
diff
changeset
|
1550 #endif |
26d0f350347a
Obsolete keypool and make sure database removes log files on shutdown.
Gavin Andresen <gavinandresen@gmail.com>
parents:
1493
diff
changeset
|
1551 |
1533
d0ccfedf2957
Implement an mlock()'d string class for storing passphrases
Dylan Noblesmith <nobled@dreamwidth.org>
parents:
1521
diff
changeset
|
1552 // TODO: get rid of this .c_str() by implementing SecureString::operator=(std::string) |
d0ccfedf2957
Implement an mlock()'d string class for storing passphrases
Dylan Noblesmith <nobled@dreamwidth.org>
parents:
1521
diff
changeset
|
1553 // Alternately, find a way to make params[0] mlock()'d to begin with. |
d0ccfedf2957
Implement an mlock()'d string class for storing passphrases
Dylan Noblesmith <nobled@dreamwidth.org>
parents:
1521
diff
changeset
|
1554 SecureString strWalletPass; |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1555 strWalletPass.reserve(100); |
1533
d0ccfedf2957
Implement an mlock()'d string class for storing passphrases
Dylan Noblesmith <nobled@dreamwidth.org>
parents:
1521
diff
changeset
|
1556 strWalletPass = params[0].get_str().c_str(); |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1557 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1558 if (strWalletPass.length() < 1) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1559 throw runtime_error( |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1560 "encryptwallet <passphrase>\n" |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1561 "Encrypts the wallet with <passphrase>."); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1562 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1563 if (!pwalletMain->EncryptWallet(strWalletPass)) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1564 throw JSONRPCError(-16, "Error: Failed to encrypt the wallet."); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1565 |
1501
26d0f350347a
Obsolete keypool and make sure database removes log files on shutdown.
Gavin Andresen <gavinandresen@gmail.com>
parents:
1493
diff
changeset
|
1566 // BDB seems to have a bad habit of writing old data into |
26d0f350347a
Obsolete keypool and make sure database removes log files on shutdown.
Gavin Andresen <gavinandresen@gmail.com>
parents:
1493
diff
changeset
|
1567 // slack space in .dat files; that is bad if the old data is |
26d0f350347a
Obsolete keypool and make sure database removes log files on shutdown.
Gavin Andresen <gavinandresen@gmail.com>
parents:
1493
diff
changeset
|
1568 // unencrypted private keys. So: |
26d0f350347a
Obsolete keypool and make sure database removes log files on shutdown.
Gavin Andresen <gavinandresen@gmail.com>
parents:
1493
diff
changeset
|
1569 CreateThread(Shutdown, NULL); |
26d0f350347a
Obsolete keypool and make sure database removes log files on shutdown.
Gavin Andresen <gavinandresen@gmail.com>
parents:
1493
diff
changeset
|
1570 return "wallet encrypted; bitcoin server stopping, restart to run with encrypted wallet"; |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1571 } |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1572 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1573 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1574 Value validateaddress(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1575 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1576 if (fHelp || params.size() != 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1577 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1578 "validateaddress <bitcoinaddress>\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1579 "Return information about <bitcoinaddress>."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1580 |
1256
3a687b55c04b
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1220
diff
changeset
|
1581 CBitcoinAddress address(params[0].get_str()); |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
1582 bool isValid = address.IsValid(); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1583 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1584 Object ret; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1585 ret.push_back(Pair("isvalid", isValid)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1586 if (isValid) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1587 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1588 // Call Hash160ToAddress() so we always return current ADDRESSVERSION |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1589 // version of the address: |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
1590 string currentAddress = address.ToString(); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1591 ret.push_back(Pair("address", currentAddress)); |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
1592 ret.push_back(Pair("ismine", (pwalletMain->HaveKey(address) > 0))); |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1593 if (pwalletMain->mapAddressBook.count(address)) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1594 ret.push_back(Pair("account", pwalletMain->mapAddressBook[address])); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1595 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1596 return ret; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1597 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1598 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1599 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1600 Value getwork(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1601 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1602 if (fHelp || params.size() > 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1603 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1604 "getwork [data]\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1605 "If [data] is not specified, returns formatted hash data to work on:\n" |
1337
447bba2f0a56
deprecate midstate and hash1 in getwork
Nils Schneider <nils.schneider@gmail.com>
parents:
1320
diff
changeset
|
1606 " \"midstate\" : precomputed hash state after hashing the first half of the data (DEPRECATED)\n" // deprecated |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1607 " \"data\" : block data\n" |
1337
447bba2f0a56
deprecate midstate and hash1 in getwork
Nils Schneider <nils.schneider@gmail.com>
parents:
1320
diff
changeset
|
1608 " \"hash1\" : formatted hash buffer for second hash (DEPRECATED)\n" // deprecated |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1609 " \"target\" : little endian hash target\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1610 "If [data] is specified, tries to solve the block and returns true if it was successful."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1611 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1612 if (vNodes.empty()) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1613 throw JSONRPCError(-9, "Bitcoin is not connected!"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1614 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1615 if (IsInitialBlockDownload()) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1616 throw JSONRPCError(-10, "Bitcoin is downloading blocks..."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1617 |
1292
024a12d5558d
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1274
diff
changeset
|
1618 typedef map<uint256, pair<CBlock*, CScript> > mapNewBlock_t; |
024a12d5558d
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1274
diff
changeset
|
1619 static mapNewBlock_t mapNewBlock; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1620 static vector<CBlock*> vNewBlock; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1621 static CReserveKey reservekey(pwalletMain); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1622 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1623 if (params.size() == 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1624 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1625 // Update block |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1626 static unsigned int nTransactionsUpdatedLast; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1627 static CBlockIndex* pindexPrev; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1628 static int64 nStart; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1629 static CBlock* pblock; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1630 if (pindexPrev != pindexBest || |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1631 (nTransactionsUpdated != nTransactionsUpdatedLast && GetTime() - nStart > 60)) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1632 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1633 if (pindexPrev != pindexBest) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1634 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1635 // Deallocate old blocks since they're obsolete now |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1636 mapNewBlock.clear(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1637 BOOST_FOREACH(CBlock* pblock, vNewBlock) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1638 delete pblock; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1639 vNewBlock.clear(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1640 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1641 nTransactionsUpdatedLast = nTransactionsUpdated; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1642 pindexPrev = pindexBest; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1643 nStart = GetTime(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1644 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1645 // Create new block |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1646 pblock = CreateNewBlock(reservekey); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1647 if (!pblock) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1648 throw JSONRPCError(-7, "Out of memory"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1649 vNewBlock.push_back(pblock); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1650 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1651 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1652 // Update nTime |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1653 pblock->nTime = max(pindexPrev->GetMedianTimePast()+1, GetAdjustedTime()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1654 pblock->nNonce = 0; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1655 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1656 // Update nExtraNonce |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1657 static unsigned int nExtraNonce = 0; |
1292
024a12d5558d
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1274
diff
changeset
|
1658 IncrementExtraNonce(pblock, pindexPrev, nExtraNonce); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1659 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1660 // Save |
1292
024a12d5558d
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1274
diff
changeset
|
1661 mapNewBlock[pblock->hashMerkleRoot] = make_pair(pblock, pblock->vtx[0].vin[0].scriptSig); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1662 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1663 // Prebuild hash buffers |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1664 char pmidstate[32]; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1665 char pdata[128]; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1666 char phash1[64]; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1667 FormatHashBuffers(pblock, pmidstate, pdata, phash1); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1668 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1669 uint256 hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1670 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1671 Object result; |
1337
447bba2f0a56
deprecate midstate and hash1 in getwork
Nils Schneider <nils.schneider@gmail.com>
parents:
1320
diff
changeset
|
1672 result.push_back(Pair("midstate", HexStr(BEGIN(pmidstate), END(pmidstate)))); // deprecated |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1673 result.push_back(Pair("data", HexStr(BEGIN(pdata), END(pdata)))); |
1337
447bba2f0a56
deprecate midstate and hash1 in getwork
Nils Schneider <nils.schneider@gmail.com>
parents:
1320
diff
changeset
|
1674 result.push_back(Pair("hash1", HexStr(BEGIN(phash1), END(phash1)))); // deprecated |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1675 result.push_back(Pair("target", HexStr(BEGIN(hashTarget), END(hashTarget)))); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1676 return result; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1677 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1678 else |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1679 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1680 // Parse parameters |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1681 vector<unsigned char> vchData = ParseHex(params[0].get_str()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1682 if (vchData.size() != 128) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1683 throw JSONRPCError(-8, "Invalid parameter"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1684 CBlock* pdata = (CBlock*)&vchData[0]; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1685 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1686 // Byte reverse |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1687 for (int i = 0; i < 128/4; i++) |
1359
08006bbf6cf3
remove cryptopp dependency, add simple unittest for SHA256Transform()
Nils Schneider <nils.schneider@gmail.com>
parents:
1358
diff
changeset
|
1688 ((unsigned int*)pdata)[i] = ByteReverse(((unsigned int*)pdata)[i]); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1689 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1690 // Get saved block |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1691 if (!mapNewBlock.count(pdata->hashMerkleRoot)) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1692 return false; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1693 CBlock* pblock = mapNewBlock[pdata->hashMerkleRoot].first; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1694 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1695 pblock->nTime = pdata->nTime; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1696 pblock->nNonce = pdata->nNonce; |
1292
024a12d5558d
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1274
diff
changeset
|
1697 pblock->vtx[0].vin[0].scriptSig = mapNewBlock[pdata->hashMerkleRoot].second; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1698 pblock->hashMerkleRoot = pblock->BuildMerkleTree(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1699 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1700 return CheckWork(pblock, *pwalletMain, reservekey); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1701 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1702 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1703 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1704 |
1363
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1705 Value getmemorypool(const Array& params, bool fHelp) |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1706 { |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1707 if (fHelp || params.size() > 1) |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1708 throw runtime_error( |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1709 "getmemorypool [data]\n" |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1710 "If [data] is not specified, returns data needed to construct a block to work on:\n" |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1711 " \"version\" : block version\n" |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1712 " \"previousblockhash\" : hash of current highest block\n" |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1713 " \"transactions\" : contents of non-coinbase transactions that should be included in the next block\n" |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1714 " \"coinbasevalue\" : maximum allowable input to coinbase transaction, including the generation award and transaction fees\n" |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1715 " \"time\" : timestamp appropriate for next block\n" |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1716 " \"bits\" : compressed target of next block\n" |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1717 "If [data] is specified, tries to solve the block and returns true if it was successful."); |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1718 |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1719 if (params.size() == 0) |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1720 { |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1721 if (vNodes.empty()) |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1722 throw JSONRPCError(-9, "Bitcoin is not connected!"); |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1723 |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1724 if (IsInitialBlockDownload()) |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1725 throw JSONRPCError(-10, "Bitcoin is downloading blocks..."); |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1726 |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1727 static CReserveKey reservekey(pwalletMain); |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1728 |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1729 // Update block |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1730 static unsigned int nTransactionsUpdatedLast; |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1731 static CBlockIndex* pindexPrev; |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1732 static int64 nStart; |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1733 static CBlock* pblock; |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1734 if (pindexPrev != pindexBest || |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1735 (nTransactionsUpdated != nTransactionsUpdatedLast && GetTime() - nStart > 5)) |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1736 { |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1737 nTransactionsUpdatedLast = nTransactionsUpdated; |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1738 pindexPrev = pindexBest; |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1739 nStart = GetTime(); |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1740 |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1741 // Create new block |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1742 if(pblock) |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1743 delete pblock; |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1744 pblock = CreateNewBlock(reservekey); |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1745 if (!pblock) |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1746 throw JSONRPCError(-7, "Out of memory"); |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1747 } |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1748 |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1749 // Update nTime |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1750 pblock->nTime = max(pindexPrev->GetMedianTimePast()+1, GetAdjustedTime()); |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1751 pblock->nNonce = 0; |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1752 |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1753 Array transactions; |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1754 BOOST_FOREACH(CTransaction tx, pblock->vtx) { |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1755 if(tx.IsCoinBase()) |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1756 continue; |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1757 |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1758 CDataStream ssTx; |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1759 ssTx << tx; |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1760 |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1761 transactions.push_back(HexStr(ssTx.begin(), ssTx.end())); |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1762 } |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1763 |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1764 Object result; |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1765 result.push_back(Pair("version", pblock->nVersion)); |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1766 result.push_back(Pair("previousblockhash", pblock->hashPrevBlock.GetHex())); |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1767 result.push_back(Pair("transactions", transactions)); |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1768 result.push_back(Pair("coinbasevalue", (int64_t)pblock->vtx[0].vout[0].nValue)); |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1769 result.push_back(Pair("time", (int64_t)pblock->nTime)); |
1388
878c3aef8a40
Bugfix: "bits" should be a hex-string, not a number (that just doesn't make sense)
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1384
diff
changeset
|
1770 |
878c3aef8a40
Bugfix: "bits" should be a hex-string, not a number (that just doesn't make sense)
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1384
diff
changeset
|
1771 union { |
878c3aef8a40
Bugfix: "bits" should be a hex-string, not a number (that just doesn't make sense)
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1384
diff
changeset
|
1772 int32_t nBits; |
878c3aef8a40
Bugfix: "bits" should be a hex-string, not a number (that just doesn't make sense)
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1384
diff
changeset
|
1773 char cBits[4]; |
878c3aef8a40
Bugfix: "bits" should be a hex-string, not a number (that just doesn't make sense)
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1384
diff
changeset
|
1774 } uBits; |
878c3aef8a40
Bugfix: "bits" should be a hex-string, not a number (that just doesn't make sense)
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1384
diff
changeset
|
1775 uBits.nBits = htonl((int32_t)pblock->nBits); |
878c3aef8a40
Bugfix: "bits" should be a hex-string, not a number (that just doesn't make sense)
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1384
diff
changeset
|
1776 result.push_back(Pair("bits", HexStr(BEGIN(uBits.cBits), END(uBits.cBits)))); |
878c3aef8a40
Bugfix: "bits" should be a hex-string, not a number (that just doesn't make sense)
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1384
diff
changeset
|
1777 |
1363
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1778 return result; |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1779 } |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1780 else |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1781 { |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1782 // Parse parameters |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1783 CDataStream ssBlock(ParseHex(params[0].get_str())); |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1784 CBlock pblock; |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1785 ssBlock >> pblock; |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1786 |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1787 return ProcessBlock(NULL, &pblock); |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1788 } |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1789 } |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1790 |
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1791 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1792 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1793 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1794 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1795 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1796 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1797 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1798 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1799 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1800 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1801 // |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1802 // Call Table |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1803 // |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1804 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1805 pair<string, rpcfn_type> pCallTable[] = |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1806 { |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1807 make_pair("help", &help), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1808 make_pair("stop", &stop), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1809 make_pair("getblockcount", &getblockcount), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1810 make_pair("getblocknumber", &getblocknumber), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1811 make_pair("getconnectioncount", &getconnectioncount), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1812 make_pair("getdifficulty", &getdifficulty), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1813 make_pair("getgenerate", &getgenerate), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1814 make_pair("setgenerate", &setgenerate), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1815 make_pair("gethashespersec", &gethashespersec), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1816 make_pair("getinfo", &getinfo), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1817 make_pair("getnewaddress", &getnewaddress), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1818 make_pair("getaccountaddress", &getaccountaddress), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1819 make_pair("setaccount", &setaccount), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1820 make_pair("getaccount", &getaccount), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1821 make_pair("getaddressesbyaccount", &getaddressesbyaccount), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1822 make_pair("sendtoaddress", &sendtoaddress), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1823 make_pair("getreceivedbyaddress", &getreceivedbyaddress), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1824 make_pair("getreceivedbyaccount", &getreceivedbyaccount), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1825 make_pair("listreceivedbyaddress", &listreceivedbyaddress), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1826 make_pair("listreceivedbyaccount", &listreceivedbyaccount), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1827 make_pair("backupwallet", &backupwallet), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1828 make_pair("keypoolrefill", &keypoolrefill), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1829 make_pair("walletpassphrase", &walletpassphrase), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1830 make_pair("walletpassphrasechange", &walletpassphrasechange), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1831 make_pair("walletlock", &walletlock), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1832 make_pair("encryptwallet", &encryptwallet), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1833 make_pair("validateaddress", &validateaddress), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1834 make_pair("getbalance", &getbalance), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1835 make_pair("move", &movecmd), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1836 make_pair("sendfrom", &sendfrom), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1837 make_pair("sendmany", &sendmany), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1838 make_pair("gettransaction", &gettransaction), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1839 make_pair("listtransactions", &listtransactions), |
1329
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
1840 make_pair("signmessage", &signmessage), |
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
1841 make_pair("verifymessage", &verifymessage), |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1842 make_pair("getwork", &getwork), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1843 make_pair("listaccounts", &listaccounts), |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1844 make_pair("settxfee", &settxfee), |
1363
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1845 make_pair("getmemorypool", &getmemorypool), |
1382
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1846 make_pair("listsinceblock", &listsinceblock), |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1847 }; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1848 map<string, rpcfn_type> mapCallTable(pCallTable, pCallTable + sizeof(pCallTable)/sizeof(pCallTable[0])); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1849 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1850 string pAllowInSafeMode[] = |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1851 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1852 "help", |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1853 "stop", |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1854 "getblockcount", |
1490
f5b3cf558f89
Deprecate RPC getblocknumber
Michael Hendricks <michael@ndrix.org>
parents:
1388
diff
changeset
|
1855 "getblocknumber", // deprecated |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1856 "getconnectioncount", |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1857 "getdifficulty", |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1858 "getgenerate", |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1859 "setgenerate", |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1860 "gethashespersec", |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1861 "getinfo", |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1862 "getnewaddress", |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1863 "getaccountaddress", |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1864 "getaccount", |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1865 "getaddressesbyaccount", |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1866 "backupwallet", |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1867 "keypoolrefill", |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1868 "walletpassphrase", |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1869 "walletlock", |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1870 "validateaddress", |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1871 "getwork", |
1363
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
1872 "getmemorypool", |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1873 }; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1874 set<string> setAllowInSafeMode(pAllowInSafeMode, pAllowInSafeMode + sizeof(pAllowInSafeMode)/sizeof(pAllowInSafeMode[0])); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1875 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1876 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1877 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1878 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1879 // |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1880 // HTTP protocol |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1881 // |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1882 // This ain't Apache. We're just using HTTP header for the length field |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1883 // and to be compatible with other JSON-RPC implementations. |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1884 // |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1885 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1886 string HTTPPost(const string& strMsg, const map<string,string>& mapRequestHeaders) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1887 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1888 ostringstream s; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1889 s << "POST / HTTP/1.1\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1890 << "User-Agent: bitcoin-json-rpc/" << FormatFullVersion() << "\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1891 << "Host: 127.0.0.1\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1892 << "Content-Type: application/json\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1893 << "Content-Length: " << strMsg.size() << "\r\n" |
1375
7494c1ddaf7a
Send "Connection: close" HTTP header with JSON-RPC requests (client)
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1363
diff
changeset
|
1894 << "Connection: close\r\n" |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1895 << "Accept: application/json\r\n"; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1896 BOOST_FOREACH(const PAIRTYPE(string, string)& item, mapRequestHeaders) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1897 s << item.first << ": " << item.second << "\r\n"; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1898 s << "\r\n" << strMsg; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1899 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1900 return s.str(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1901 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1902 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1903 string rfc1123Time() |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1904 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1905 char buffer[64]; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1906 time_t now; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1907 time(&now); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1908 struct tm* now_gmt = gmtime(&now); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1909 string locale(setlocale(LC_TIME, NULL)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1910 setlocale(LC_TIME, "C"); // we want posix (aka "C") weekday/month strings |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1911 strftime(buffer, sizeof(buffer), "%a, %d %b %Y %H:%M:%S +0000", now_gmt); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1912 setlocale(LC_TIME, locale.c_str()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1913 return string(buffer); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1914 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1915 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1916 static string HTTPReply(int nStatus, const string& strMsg) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1917 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1918 if (nStatus == 401) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1919 return strprintf("HTTP/1.0 401 Authorization Required\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1920 "Date: %s\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1921 "Server: bitcoin-json-rpc/%s\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1922 "WWW-Authenticate: Basic realm=\"jsonrpc\"\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1923 "Content-Type: text/html\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1924 "Content-Length: 296\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1925 "\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1926 "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1927 "\"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd\">\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1928 "<HTML>\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1929 "<HEAD>\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1930 "<TITLE>Error</TITLE>\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1931 "<META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1932 "</HEAD>\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1933 "<BODY><H1>401 Unauthorized.</H1></BODY>\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1934 "</HTML>\r\n", rfc1123Time().c_str(), FormatFullVersion().c_str()); |
1384
024ebec128ee
Use C's const char* for status strings rather than C++'s std::string, which is slower
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
1382
diff
changeset
|
1935 const char *cStatus; |
024ebec128ee
Use C's const char* for status strings rather than C++'s std::string, which is slower
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
1382
diff
changeset
|
1936 if (nStatus == 200) cStatus = "OK"; |
024ebec128ee
Use C's const char* for status strings rather than C++'s std::string, which is slower
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
1382
diff
changeset
|
1937 else if (nStatus == 400) cStatus = "Bad Request"; |
024ebec128ee
Use C's const char* for status strings rather than C++'s std::string, which is slower
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
1382
diff
changeset
|
1938 else if (nStatus == 403) cStatus = "Forbidden"; |
024ebec128ee
Use C's const char* for status strings rather than C++'s std::string, which is slower
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
1382
diff
changeset
|
1939 else if (nStatus == 404) cStatus = "Not Found"; |
024ebec128ee
Use C's const char* for status strings rather than C++'s std::string, which is slower
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
1382
diff
changeset
|
1940 else if (nStatus == 500) cStatus = "Internal Server Error"; |
024ebec128ee
Use C's const char* for status strings rather than C++'s std::string, which is slower
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
1382
diff
changeset
|
1941 else cStatus = ""; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1942 return strprintf( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1943 "HTTP/1.1 %d %s\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1944 "Date: %s\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1945 "Connection: close\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1946 "Content-Length: %d\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1947 "Content-Type: application/json\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1948 "Server: bitcoin-json-rpc/%s\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1949 "\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1950 "%s", |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1951 nStatus, |
1384
024ebec128ee
Use C's const char* for status strings rather than C++'s std::string, which is slower
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
1382
diff
changeset
|
1952 cStatus, |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1953 rfc1123Time().c_str(), |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1954 strMsg.size(), |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1955 FormatFullVersion().c_str(), |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1956 strMsg.c_str()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1957 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1958 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1959 int ReadHTTPStatus(std::basic_istream<char>& stream) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1960 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1961 string str; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1962 getline(stream, str); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1963 vector<string> vWords; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1964 boost::split(vWords, str, boost::is_any_of(" ")); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1965 if (vWords.size() < 2) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1966 return 500; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1967 return atoi(vWords[1].c_str()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1968 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1969 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1970 int ReadHTTPHeader(std::basic_istream<char>& stream, map<string, string>& mapHeadersRet) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1971 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1972 int nLen = 0; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1973 loop |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1974 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1975 string str; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1976 std::getline(stream, str); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1977 if (str.empty() || str == "\r") |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1978 break; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1979 string::size_type nColon = str.find(":"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1980 if (nColon != string::npos) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1981 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1982 string strHeader = str.substr(0, nColon); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1983 boost::trim(strHeader); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1984 boost::to_lower(strHeader); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1985 string strValue = str.substr(nColon+1); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1986 boost::trim(strValue); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1987 mapHeadersRet[strHeader] = strValue; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1988 if (strHeader == "content-length") |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1989 nLen = atoi(strValue.c_str()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1990 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1991 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1992 return nLen; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1993 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1994 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1995 int ReadHTTP(std::basic_istream<char>& stream, map<string, string>& mapHeadersRet, string& strMessageRet) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1996 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1997 mapHeadersRet.clear(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1998 strMessageRet = ""; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1999 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2000 // Read status |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2001 int nStatus = ReadHTTPStatus(stream); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2002 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2003 // Read header |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2004 int nLen = ReadHTTPHeader(stream, mapHeadersRet); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2005 if (nLen < 0 || nLen > MAX_SIZE) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2006 return 500; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2007 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2008 // Read message |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2009 if (nLen > 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2010 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2011 vector<char> vch(nLen); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2012 stream.read(&vch[0], nLen); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2013 strMessageRet = string(vch.begin(), vch.end()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2014 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2015 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2016 return nStatus; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2017 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2018 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2019 bool HTTPAuthorized(map<string, string>& mapHeaders) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2020 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2021 string strAuth = mapHeaders["authorization"]; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2022 if (strAuth.substr(0,6) != "Basic ") |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2023 return false; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2024 string strUserPass64 = strAuth.substr(6); boost::trim(strUserPass64); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2025 string strUserPass = DecodeBase64(strUserPass64); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2026 string::size_type nColon = strUserPass.find(":"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2027 if (nColon == string::npos) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2028 return false; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2029 string strUser = strUserPass.substr(0, nColon); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2030 string strPassword = strUserPass.substr(nColon+1); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2031 return (strUser == mapArgs["-rpcuser"] && strPassword == mapArgs["-rpcpassword"]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2032 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2033 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2034 // |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2035 // JSON-RPC protocol. Bitcoin speaks version 1.0 for maximum compatibility, |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2036 // but uses JSON-RPC 1.1/2.0 standards for parts of the 1.0 standard that were |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2037 // unspecified (HTTP errors and contents of 'error'). |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2038 // |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2039 // 1.0 spec: http://json-rpc.org/wiki/specification |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2040 // 1.2 spec: http://groups.google.com/group/json-rpc/web/json-rpc-over-http |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2041 // http://www.codeproject.com/KB/recipes/JSON_Spirit.aspx |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2042 // |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2043 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2044 string JSONRPCRequest(const string& strMethod, const Array& params, const Value& id) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2045 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2046 Object request; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2047 request.push_back(Pair("method", strMethod)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2048 request.push_back(Pair("params", params)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2049 request.push_back(Pair("id", id)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2050 return write_string(Value(request), false) + "\n"; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2051 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2052 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2053 string JSONRPCReply(const Value& result, const Value& error, const Value& id) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2054 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2055 Object reply; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2056 if (error.type() != null_type) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2057 reply.push_back(Pair("result", Value::null)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2058 else |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2059 reply.push_back(Pair("result", result)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2060 reply.push_back(Pair("error", error)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2061 reply.push_back(Pair("id", id)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2062 return write_string(Value(reply), false) + "\n"; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2063 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2064 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2065 void ErrorReply(std::ostream& stream, const Object& objError, const Value& id) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2066 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2067 // Send error reply from json-rpc error object |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2068 int nStatus = 500; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2069 int code = find_value(objError, "code").get_int(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2070 if (code == -32600) nStatus = 400; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2071 else if (code == -32601) nStatus = 404; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2072 string strReply = JSONRPCReply(Value::null, objError, id); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2073 stream << HTTPReply(nStatus, strReply) << std::flush; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2074 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2075 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2076 bool ClientAllowed(const string& strAddress) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2077 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2078 if (strAddress == asio::ip::address_v4::loopback().to_string()) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2079 return true; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2080 const vector<string>& vAllow = mapMultiArgs["-rpcallowip"]; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2081 BOOST_FOREACH(string strAllow, vAllow) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2082 if (WildcardMatch(strAddress, strAllow)) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2083 return true; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2084 return false; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2085 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2086 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2087 #ifdef USE_SSL |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2088 // |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2089 // IOStream device that speaks SSL but can also speak non-SSL |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2090 // |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2091 class SSLIOStreamDevice : public iostreams::device<iostreams::bidirectional> { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2092 public: |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2093 SSLIOStreamDevice(SSLStream &streamIn, bool fUseSSLIn) : stream(streamIn) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2094 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2095 fUseSSL = fUseSSLIn; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2096 fNeedHandshake = fUseSSLIn; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2097 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2098 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2099 void handshake(ssl::stream_base::handshake_type role) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2100 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2101 if (!fNeedHandshake) return; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2102 fNeedHandshake = false; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2103 stream.handshake(role); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2104 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2105 std::streamsize read(char* s, std::streamsize n) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2106 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2107 handshake(ssl::stream_base::server); // HTTPS servers read first |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2108 if (fUseSSL) return stream.read_some(asio::buffer(s, n)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2109 return stream.next_layer().read_some(asio::buffer(s, n)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2110 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2111 std::streamsize write(const char* s, std::streamsize n) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2112 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2113 handshake(ssl::stream_base::client); // HTTPS clients write first |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2114 if (fUseSSL) return asio::write(stream, asio::buffer(s, n)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2115 return asio::write(stream.next_layer(), asio::buffer(s, n)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2116 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2117 bool connect(const std::string& server, const std::string& port) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2118 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2119 ip::tcp::resolver resolver(stream.get_io_service()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2120 ip::tcp::resolver::query query(server.c_str(), port.c_str()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2121 ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve(query); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2122 ip::tcp::resolver::iterator end; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2123 boost::system::error_code error = asio::error::host_not_found; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2124 while (error && endpoint_iterator != end) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2125 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2126 stream.lowest_layer().close(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2127 stream.lowest_layer().connect(*endpoint_iterator++, error); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2128 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2129 if (error) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2130 return false; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2131 return true; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2132 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2133 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2134 private: |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2135 bool fNeedHandshake; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2136 bool fUseSSL; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2137 SSLStream& stream; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2138 }; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2139 #endif |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2140 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2141 void ThreadRPCServer(void* parg) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2142 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2143 IMPLEMENT_RANDOMIZE_STACK(ThreadRPCServer(parg)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2144 try |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2145 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2146 vnThreadsRunning[4]++; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2147 ThreadRPCServer2(parg); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2148 vnThreadsRunning[4]--; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2149 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2150 catch (std::exception& e) { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2151 vnThreadsRunning[4]--; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2152 PrintException(&e, "ThreadRPCServer()"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2153 } catch (...) { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2154 vnThreadsRunning[4]--; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2155 PrintException(NULL, "ThreadRPCServer()"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2156 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2157 printf("ThreadRPCServer exiting\n"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2158 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2159 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2160 void ThreadRPCServer2(void* parg) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2161 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2162 printf("ThreadRPCServer started\n"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2163 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2164 if (mapArgs["-rpcuser"] == "" && mapArgs["-rpcpassword"] == "") |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2165 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2166 string strWhatAmI = "To use bitcoind"; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2167 if (mapArgs.count("-server")) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2168 strWhatAmI = strprintf(_("To use the %s option"), "\"-server\""); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2169 else if (mapArgs.count("-daemon")) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2170 strWhatAmI = strprintf(_("To use the %s option"), "\"-daemon\""); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2171 PrintConsole( |
1493
4c9b0104740a
Do not launch Shutdown in a new thread in case we are running the UI.
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1388
diff
changeset
|
2172 _("Error: %s, you must set rpcpassword=<password>\nin the configuration file: %s\n" |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2173 "If the file does not exist, create it with owner-readable-only file permissions.\n"), |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2174 strWhatAmI.c_str(), |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2175 GetConfigFile().c_str()); |
1493
4c9b0104740a
Do not launch Shutdown in a new thread in case we are running the UI.
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1388
diff
changeset
|
2176 #ifndef QT_GUI |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2177 CreateThread(Shutdown, NULL); |
1493
4c9b0104740a
Do not launch Shutdown in a new thread in case we are running the UI.
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1388
diff
changeset
|
2178 #endif |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2179 return; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2180 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2181 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2182 bool fUseSSL = GetBoolArg("-rpcssl"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2183 asio::ip::address bindAddress = mapArgs.count("-rpcallowip") ? asio::ip::address_v4::any() : asio::ip::address_v4::loopback(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2184 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2185 asio::io_service io_service; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2186 ip::tcp::endpoint endpoint(bindAddress, GetArg("-rpcport", 8332)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2187 ip::tcp::acceptor acceptor(io_service, endpoint); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2188 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2189 acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2190 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2191 #ifdef USE_SSL |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2192 ssl::context context(io_service, ssl::context::sslv23); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2193 if (fUseSSL) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2194 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2195 context.set_options(ssl::context::no_sslv2); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2196 filesystem::path certfile = GetArg("-rpcsslcertificatechainfile", "server.cert"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2197 if (!certfile.is_complete()) certfile = filesystem::path(GetDataDir()) / certfile; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2198 if (filesystem::exists(certfile)) context.use_certificate_chain_file(certfile.string().c_str()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2199 else printf("ThreadRPCServer ERROR: missing server certificate file %s\n", certfile.string().c_str()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2200 filesystem::path pkfile = GetArg("-rpcsslprivatekeyfile", "server.pem"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2201 if (!pkfile.is_complete()) pkfile = filesystem::path(GetDataDir()) / pkfile; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2202 if (filesystem::exists(pkfile)) context.use_private_key_file(pkfile.string().c_str(), ssl::context::pem); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2203 else printf("ThreadRPCServer ERROR: missing server private key file %s\n", pkfile.string().c_str()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2204 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2205 string ciphers = GetArg("-rpcsslciphers", |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2206 "TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2207 SSL_CTX_set_cipher_list(context.impl(), ciphers.c_str()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2208 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2209 #else |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2210 if (fUseSSL) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2211 throw runtime_error("-rpcssl=1, but bitcoin compiled without full openssl libraries."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2212 #endif |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2213 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2214 loop |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2215 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2216 // Accept connection |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2217 #ifdef USE_SSL |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2218 SSLStream sslStream(io_service, context); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2219 SSLIOStreamDevice d(sslStream, fUseSSL); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2220 iostreams::stream<SSLIOStreamDevice> stream(d); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2221 #else |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2222 ip::tcp::iostream stream; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2223 #endif |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2224 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2225 ip::tcp::endpoint peer; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2226 vnThreadsRunning[4]--; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2227 #ifdef USE_SSL |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2228 acceptor.accept(sslStream.lowest_layer(), peer); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2229 #else |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2230 acceptor.accept(*stream.rdbuf(), peer); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2231 #endif |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2232 vnThreadsRunning[4]++; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2233 if (fShutdown) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2234 return; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2235 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2236 // Restrict callers by IP |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2237 if (!ClientAllowed(peer.address().to_string())) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2238 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2239 // Only send a 403 if we're not using SSL to prevent a DoS during the SSL handshake. |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2240 if (!fUseSSL) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2241 stream << HTTPReply(403, "") << std::flush; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2242 continue; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2243 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2244 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2245 map<string, string> mapHeaders; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2246 string strRequest; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2247 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2248 boost::thread api_caller(ReadHTTP, boost::ref(stream), boost::ref(mapHeaders), boost::ref(strRequest)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2249 if (!api_caller.timed_join(boost::posix_time::seconds(GetArg("-rpctimeout", 30)))) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2250 { // Timed out: |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2251 acceptor.cancel(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2252 printf("ThreadRPCServer ReadHTTP timeout\n"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2253 continue; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2254 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2255 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2256 // Check authorization |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2257 if (mapHeaders.count("authorization") == 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2258 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2259 stream << HTTPReply(401, "") << std::flush; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2260 continue; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2261 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2262 if (!HTTPAuthorized(mapHeaders)) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2263 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2264 // Deter brute-forcing short passwords |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2265 if (mapArgs["-rpcpassword"].size() < 15) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2266 Sleep(50); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2267 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2268 stream << HTTPReply(401, "") << std::flush; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2269 printf("ThreadRPCServer incorrect password attempt\n"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2270 continue; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2271 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2272 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2273 Value id = Value::null; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2274 try |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2275 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2276 // Parse request |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2277 Value valRequest; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2278 if (!read_string(strRequest, valRequest) || valRequest.type() != obj_type) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2279 throw JSONRPCError(-32700, "Parse error"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2280 const Object& request = valRequest.get_obj(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2281 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2282 // Parse id now so errors from here on will have the id |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2283 id = find_value(request, "id"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2284 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2285 // Parse method |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2286 Value valMethod = find_value(request, "method"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2287 if (valMethod.type() == null_type) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2288 throw JSONRPCError(-32600, "Missing method"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2289 if (valMethod.type() != str_type) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2290 throw JSONRPCError(-32600, "Method must be a string"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2291 string strMethod = valMethod.get_str(); |
1363
5bcc1d373dc1
Added RPC call 'getmemorypool' that provides everything needed to construct a block with a custom generation transaction and submit a solution
Forrest Voight <forrest@forre.st>
parents:
1358
diff
changeset
|
2292 if (strMethod != "getwork" && strMethod != "getmemorypool") |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2293 printf("ThreadRPCServer method=%s\n", strMethod.c_str()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2294 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2295 // Parse params |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2296 Value valParams = find_value(request, "params"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2297 Array params; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2298 if (valParams.type() == array_type) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2299 params = valParams.get_array(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2300 else if (valParams.type() == null_type) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2301 params = Array(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2302 else |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2303 throw JSONRPCError(-32600, "Params must be an array"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2304 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2305 // Find method |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2306 map<string, rpcfn_type>::iterator mi = mapCallTable.find(strMethod); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2307 if (mi == mapCallTable.end()) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2308 throw JSONRPCError(-32601, "Method not found"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2309 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2310 // Observe safe mode |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2311 string strWarning = GetWarnings("rpc"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2312 if (strWarning != "" && !GetBoolArg("-disablesafemode") && !setAllowInSafeMode.count(strMethod)) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2313 throw JSONRPCError(-2, string("Safe mode: ") + strWarning); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2314 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2315 try |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2316 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2317 // Execute |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
2318 Value result; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
2319 CRITICAL_BLOCK(cs_main) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
2320 CRITICAL_BLOCK(pwalletMain->cs_wallet) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
2321 result = (*(*mi).second)(params, false); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2322 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2323 // Send reply |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2324 string strReply = JSONRPCReply(result, Value::null, id); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2325 stream << HTTPReply(200, strReply) << std::flush; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2326 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2327 catch (std::exception& e) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2328 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2329 ErrorReply(stream, JSONRPCError(-1, e.what()), id); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2330 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2331 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2332 catch (Object& objError) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2333 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2334 ErrorReply(stream, objError, id); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2335 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2336 catch (std::exception& e) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2337 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2338 ErrorReply(stream, JSONRPCError(-32700, e.what()), id); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2339 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2340 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2341 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2342 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2343 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2344 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2345 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2346 Object CallRPC(const string& strMethod, const Array& params) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2347 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2348 if (mapArgs["-rpcuser"] == "" && mapArgs["-rpcpassword"] == "") |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2349 throw runtime_error(strprintf( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2350 _("You must set rpcpassword=<password> in the configuration file:\n%s\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2351 "If the file does not exist, create it with owner-readable-only file permissions."), |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2352 GetConfigFile().c_str())); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2353 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2354 // Connect to localhost |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2355 bool fUseSSL = GetBoolArg("-rpcssl"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2356 #ifdef USE_SSL |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2357 asio::io_service io_service; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2358 ssl::context context(io_service, ssl::context::sslv23); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2359 context.set_options(ssl::context::no_sslv2); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2360 SSLStream sslStream(io_service, context); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2361 SSLIOStreamDevice d(sslStream, fUseSSL); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2362 iostreams::stream<SSLIOStreamDevice> stream(d); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2363 if (!d.connect(GetArg("-rpcconnect", "127.0.0.1"), GetArg("-rpcport", "8332"))) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2364 throw runtime_error("couldn't connect to server"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2365 #else |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2366 if (fUseSSL) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2367 throw runtime_error("-rpcssl=1, but bitcoin compiled without full openssl libraries."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2368 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2369 ip::tcp::iostream stream(GetArg("-rpcconnect", "127.0.0.1"), GetArg("-rpcport", "8332")); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2370 if (stream.fail()) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2371 throw runtime_error("couldn't connect to server"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2372 #endif |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2373 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2374 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2375 // HTTP basic authentication |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2376 string strUserPass64 = EncodeBase64(mapArgs["-rpcuser"] + ":" + mapArgs["-rpcpassword"]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2377 map<string, string> mapRequestHeaders; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2378 mapRequestHeaders["Authorization"] = string("Basic ") + strUserPass64; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2379 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2380 // Send request |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2381 string strRequest = JSONRPCRequest(strMethod, params, 1); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2382 string strPost = HTTPPost(strRequest, mapRequestHeaders); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2383 stream << strPost << std::flush; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2384 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2385 // Receive reply |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2386 map<string, string> mapHeaders; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2387 string strReply; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2388 int nStatus = ReadHTTP(stream, mapHeaders, strReply); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2389 if (nStatus == 401) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2390 throw runtime_error("incorrect rpcuser or rpcpassword (authorization failed)"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2391 else if (nStatus >= 400 && nStatus != 400 && nStatus != 404 && nStatus != 500) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2392 throw runtime_error(strprintf("server returned HTTP error %d", nStatus)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2393 else if (strReply.empty()) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2394 throw runtime_error("no response from server"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2395 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2396 // Parse reply |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2397 Value valReply; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2398 if (!read_string(strReply, valReply)) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2399 throw runtime_error("couldn't parse reply from server"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2400 const Object& reply = valReply.get_obj(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2401 if (reply.empty()) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2402 throw runtime_error("expected reply to have result, error and id properties"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2403 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2404 return reply; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2405 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2406 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2407 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2408 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2409 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2410 template<typename T> |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2411 void ConvertTo(Value& value) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2412 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2413 if (value.type() == str_type) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2414 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2415 // reinterpret string as unquoted json value |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2416 Value value2; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2417 if (!read_string(value.get_str(), value2)) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2418 throw runtime_error("type mismatch"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2419 value = value2.get_value<T>(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2420 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2421 else |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2422 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2423 value = value.get_value<T>(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2424 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2425 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2426 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2427 int CommandLineRPC(int argc, char *argv[]) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2428 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2429 string strPrint; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2430 int nRet = 0; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2431 try |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2432 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2433 // Skip switches |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2434 while (argc > 1 && IsSwitchChar(argv[1][0])) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2435 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2436 argc--; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2437 argv++; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2438 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2439 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2440 // Method |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2441 if (argc < 2) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2442 throw runtime_error("too few parameters"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2443 string strMethod = argv[1]; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2444 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2445 // Parameters default to strings |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2446 Array params; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2447 for (int i = 2; i < argc; i++) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2448 params.push_back(argv[i]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2449 int n = params.size(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2450 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2451 // |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2452 // Special case non-string parameter types |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2453 // |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2454 if (strMethod == "setgenerate" && n > 0) ConvertTo<bool>(params[0]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2455 if (strMethod == "setgenerate" && n > 1) ConvertTo<boost::int64_t>(params[1]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2456 if (strMethod == "sendtoaddress" && n > 1) ConvertTo<double>(params[1]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2457 if (strMethod == "settxfee" && n > 0) ConvertTo<double>(params[0]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2458 if (strMethod == "getreceivedbyaddress" && n > 1) ConvertTo<boost::int64_t>(params[1]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2459 if (strMethod == "getreceivedbyaccount" && n > 1) ConvertTo<boost::int64_t>(params[1]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2460 if (strMethod == "listreceivedbyaddress" && n > 0) ConvertTo<boost::int64_t>(params[0]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2461 if (strMethod == "listreceivedbyaddress" && n > 1) ConvertTo<bool>(params[1]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2462 if (strMethod == "listreceivedbyaccount" && n > 0) ConvertTo<boost::int64_t>(params[0]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2463 if (strMethod == "listreceivedbyaccount" && n > 1) ConvertTo<bool>(params[1]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2464 if (strMethod == "getbalance" && n > 1) ConvertTo<boost::int64_t>(params[1]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2465 if (strMethod == "move" && n > 2) ConvertTo<double>(params[2]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2466 if (strMethod == "move" && n > 3) ConvertTo<boost::int64_t>(params[3]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2467 if (strMethod == "sendfrom" && n > 2) ConvertTo<double>(params[2]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2468 if (strMethod == "sendfrom" && n > 3) ConvertTo<boost::int64_t>(params[3]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2469 if (strMethod == "listtransactions" && n > 1) ConvertTo<boost::int64_t>(params[1]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2470 if (strMethod == "listtransactions" && n > 2) ConvertTo<boost::int64_t>(params[2]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2471 if (strMethod == "listaccounts" && n > 0) ConvertTo<boost::int64_t>(params[0]); |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
2472 if (strMethod == "walletpassphrase" && n > 1) ConvertTo<boost::int64_t>(params[1]); |
1382
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
2473 if (strMethod == "listsinceblock" && n > 1) ConvertTo<boost::int64_t>(params[1]); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2474 if (strMethod == "sendmany" && n > 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2475 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2476 string s = params[1].get_str(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2477 Value v; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2478 if (!read_string(s, v) || v.type() != obj_type) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2479 throw runtime_error("type mismatch"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2480 params[1] = v.get_obj(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2481 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2482 if (strMethod == "sendmany" && n > 2) ConvertTo<boost::int64_t>(params[2]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2483 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2484 // Execute |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2485 Object reply = CallRPC(strMethod, params); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2486 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2487 // Parse reply |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2488 const Value& result = find_value(reply, "result"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2489 const Value& error = find_value(reply, "error"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2490 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2491 if (error.type() != null_type) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2492 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2493 // Error |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2494 strPrint = "error: " + write_string(error, false); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2495 int code = find_value(error.get_obj(), "code").get_int(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2496 nRet = abs(code); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2497 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2498 else |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2499 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2500 // Result |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2501 if (result.type() == null_type) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2502 strPrint = ""; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2503 else if (result.type() == str_type) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2504 strPrint = result.get_str(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2505 else |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2506 strPrint = write_string(result, true); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2507 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2508 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2509 catch (std::exception& e) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2510 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2511 strPrint = string("error: ") + e.what(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2512 nRet = 87; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2513 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2514 catch (...) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2515 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2516 PrintException(NULL, "CommandLineRPC()"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2517 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2518 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2519 if (strPrint != "") |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2520 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2521 fprintf((nRet == 0 ? stdout : stderr), "%s\n", strPrint.c_str()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2522 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2523 return nRet; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2524 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2525 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2526 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2527 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2528 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2529 #ifdef TEST |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2530 int main(int argc, char *argv[]) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2531 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2532 #ifdef _MSC_VER |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2533 // Turn off microsoft heap dump noise |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2534 _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2535 _CrtSetReportFile(_CRT_WARN, CreateFile("NUL", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2536 #endif |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2537 setbuf(stdin, NULL); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2538 setbuf(stdout, NULL); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2539 setbuf(stderr, NULL); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2540 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2541 try |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2542 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2543 if (argc >= 2 && string(argv[1]) == "-server") |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2544 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2545 printf("server ready\n"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2546 ThreadRPCServer(NULL); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2547 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2548 else |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2549 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2550 return CommandLineRPC(argc, argv); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2551 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2552 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2553 catch (std::exception& e) { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2554 PrintException(&e, "main()"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2555 } catch (...) { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2556 PrintException(NULL, "main()"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2557 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2558 return 0; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2559 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2560 #endif |