Mercurial > hg > bitcoin
annotate src/bitcoinrpc.cpp @ 3112:1d9c0011eb5a draft
Revert "*Always* send a shutdown signal to enable custom shutdown actions"
This reverts commit 896899e0d66e25f6549a92749d237c8a87b12f08.
author | Matt Corallo <matt@bluematt.me> |
---|---|
date | Thu, 28 Jun 2012 15:52:45 +0200 |
parents | b50fa2ffa4bd |
children | 5ed35adc426f |
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 |
1818
20667468f95b
Update all copyrights to 2012
Gavin Andresen <gavinandresen@gmail.com>
parents:
1800
diff
changeset
|
2 // Copyright (c) 2009-2012 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 |
2607 | 4 // file COPYING or http://www.opensource.org/licenses/mit-license.php. |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
5 |
2274 | 6 #include "main.h" |
7 #include "wallet.h" | |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
8 #include "db.h" |
2275
fd09fd11692a
Move CWalletDB code to new walletdb module.
Jeff Garzik <jeff@garzik.org>
parents:
2274
diff
changeset
|
9 #include "walletdb.h" |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
10 #include "net.h" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
11 #include "init.h" |
2274 | 12 #include "ui_interface.h" |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
13 #include "base58.h" |
2294
bc7f29fbeed5
Expose CRPCTable via bitcoinrpc.h for testing
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2293
diff
changeset
|
14 #include "bitcoinrpc.h" |
2274 | 15 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
16 #undef printf |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
17 #include <boost/asio.hpp> |
3080
0a1544df18af
Add dual IPv4/IPv6 stack support to the RPC server
Giel van Schijndel <me@mortis.eu>
parents:
3079
diff
changeset
|
18 #include <boost/asio/ip/v6_only.hpp> |
3079
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
19 #include <boost/bind.hpp> |
1583
df45e8721f53
Key import and export
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1582
diff
changeset
|
20 #include <boost/filesystem.hpp> |
3082
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
21 #include <boost/foreach.hpp> |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
22 #include <boost/iostreams/concepts.hpp> |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
23 #include <boost/iostreams/stream.hpp> |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
24 #include <boost/algorithm/string.hpp> |
1582
a562176d7552
Preparations for key import/export
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1580
diff
changeset
|
25 #include <boost/lexical_cast.hpp> |
2746
246ba5ba6805
introduce a new StartShutdown() function, which starts a thread with Shutdown() if no GUI is used and calls uiInterface.QueueShutdown() if a GUI is used / all direct uiInterface.QueueShutdown() calls are replaced with Shutdown() - this ensures a clean GUI shutdown, even when catching a SIGTERM and allows the BitcoinGUI destructor to get called (which fixes a tray-icon issue and keeps the tray-icon until Bitcoin-Qt exits)
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2723
diff
changeset
|
26 #include <boost/asio/ssl.hpp> |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
27 #include <boost/filesystem/fstream.hpp> |
3079
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
28 #include <boost/shared_ptr.hpp> |
3082
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
29 #include <list> |
2169
fab353e96776
Remove USE_SSL #define
Gavin Andresen <gavinandresen@gmail.com>
parents:
2154
diff
changeset
|
30 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
31 #define printf OutputDebugStringF |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
32 // 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
|
33 // 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
|
34 // 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
|
35 // 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
|
36 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
37 using namespace std; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
38 using namespace boost; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
39 using namespace boost::asio; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
40 using namespace json_spirit; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
41 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
42 void ThreadRPCServer2(void* parg); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
43 |
1541
d9bb9c516845
Speed up RPC authentication (reworked pull from Joel Katz)
Gavin Andresen <gavinandresen@gmail.com>
parents:
1533
diff
changeset
|
44 static std::string strRPCUserColonPass; |
d9bb9c516845
Speed up RPC authentication (reworked pull from Joel Katz)
Gavin Andresen <gavinandresen@gmail.com>
parents:
1533
diff
changeset
|
45 |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
46 static int64 nWalletUnlockTime; |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
47 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
|
48 |
1583
df45e8721f53
Key import and export
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1582
diff
changeset
|
49 extern Value dumpprivkey(const Array& params, bool fHelp); |
df45e8721f53
Key import and export
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1582
diff
changeset
|
50 extern Value importprivkey(const Array& params, bool fHelp); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
51 |
2413
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
52 const Object emptyobj; |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
53 |
2427
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
54 void ThreadRPCServer3(void* parg); |
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
55 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
56 Object JSONRPCError(int code, const string& message) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
57 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
58 Object error; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
59 error.push_back(Pair("code", code)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
60 error.push_back(Pair("message", message)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
61 return error; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
62 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
63 |
1627
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
64 double GetDifficulty(const CBlockIndex* blockindex = NULL) |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
65 { |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
66 // Floating point number that is a multiple of the minimum difficulty, |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
67 // minimum difficulty = 1.0. |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
68 if (blockindex == NULL) |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
69 { |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
70 if (pindexBest == NULL) |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
71 return 1.0; |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
72 else |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
73 blockindex = pindexBest; |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
74 } |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
75 |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
76 int nShift = (blockindex->nBits >> 24) & 0xff; |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
77 |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
78 double dDiff = |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
79 (double)0x0000ffff / (double)(blockindex->nBits & 0x00ffffff); |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
80 |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
81 while (nShift < 29) |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
82 { |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
83 dDiff *= 256.0; |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
84 nShift++; |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
85 } |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
86 while (nShift > 29) |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
87 { |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
88 dDiff /= 256.0; |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
89 nShift--; |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
90 } |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
91 |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
92 return dDiff; |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
93 } |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
94 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
95 |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
96 int64 AmountFromValue(const Value& value) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
97 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
98 double dAmount = value.get_real(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
99 if (dAmount <= 0.0 || dAmount > 21000000.0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
100 throw JSONRPCError(-3, "Invalid amount"); |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
101 int64 nAmount = roundint64(dAmount * COIN); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
102 if (!MoneyRange(nAmount)) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
103 throw JSONRPCError(-3, "Invalid amount"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
104 return nAmount; |
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 |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
107 Value ValueFromAmount(int64 amount) |
1181
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 return (double)amount / (double)COIN; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
110 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
111 |
1900
7ce608dfe20e
Cleanup JSON-RPC getblock output to be consistent
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1869
diff
changeset
|
112 std::string |
7ce608dfe20e
Cleanup JSON-RPC getblock output to be consistent
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1869
diff
changeset
|
113 HexBits(unsigned int nBits) |
7ce608dfe20e
Cleanup JSON-RPC getblock output to be consistent
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1869
diff
changeset
|
114 { |
7ce608dfe20e
Cleanup JSON-RPC getblock output to be consistent
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1869
diff
changeset
|
115 union { |
7ce608dfe20e
Cleanup JSON-RPC getblock output to be consistent
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1869
diff
changeset
|
116 int32_t nBits; |
7ce608dfe20e
Cleanup JSON-RPC getblock output to be consistent
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1869
diff
changeset
|
117 char cBits[4]; |
7ce608dfe20e
Cleanup JSON-RPC getblock output to be consistent
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1869
diff
changeset
|
118 } uBits; |
7ce608dfe20e
Cleanup JSON-RPC getblock output to be consistent
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1869
diff
changeset
|
119 uBits.nBits = htonl((int32_t)nBits); |
7ce608dfe20e
Cleanup JSON-RPC getblock output to be consistent
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1869
diff
changeset
|
120 return HexStr(BEGIN(uBits.cBits), END(uBits.cBits)); |
7ce608dfe20e
Cleanup JSON-RPC getblock output to be consistent
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1869
diff
changeset
|
121 } |
7ce608dfe20e
Cleanup JSON-RPC getblock output to be consistent
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1869
diff
changeset
|
122 |
2619
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
123 static std::string |
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
124 HelpRequiringPassphrase() |
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
125 { |
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
126 return pwalletMain->IsCrypted() |
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
127 ? "\nrequires wallet passphrase to be set with walletpassphrase first" |
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
128 : ""; |
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
129 } |
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
130 |
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
131 static inline void |
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
132 EnsureWalletIsUnlocked() |
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
133 { |
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
134 if (pwalletMain->IsLocked()) |
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
135 throw JSONRPCError(-13, "Error: Please enter the wallet passphrase with walletpassphrase first."); |
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
136 } |
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
137 |
2413
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
138 enum DecomposeMode { |
2508
a364ee8690fd
convert 4 tabs into 4 x 4 spaces in bitcoinrpc.cpp
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2492
diff
changeset
|
139 DM_NONE = 0, |
a364ee8690fd
convert 4 tabs into 4 x 4 spaces in bitcoinrpc.cpp
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2492
diff
changeset
|
140 DM_HASH, |
a364ee8690fd
convert 4 tabs into 4 x 4 spaces in bitcoinrpc.cpp
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2492
diff
changeset
|
141 DM_HEX, |
a364ee8690fd
convert 4 tabs into 4 x 4 spaces in bitcoinrpc.cpp
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2492
diff
changeset
|
142 DM_ASM, |
a364ee8690fd
convert 4 tabs into 4 x 4 spaces in bitcoinrpc.cpp
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2492
diff
changeset
|
143 DM_OBJ, |
2413
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
144 }; |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
145 |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
146 enum DecomposeMode |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
147 FindDecompose(const Object& decompositions, const char* pcType, const char* pcDefault) |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
148 { |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
149 Value val = find_value(decompositions, pcType); |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
150 std::string strDecompose = (val.type() == null_type) ? pcDefault : val.get_str(); |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
151 |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
152 if (strDecompose == "no") |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
153 return DM_NONE; |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
154 if (strDecompose == "hash") |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
155 return DM_HASH; |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
156 if (strDecompose == "hex") |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
157 return DM_HEX; |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
158 if (strDecompose == "asm") |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
159 return DM_ASM; |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
160 if (strDecompose == "obj") |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
161 return DM_OBJ; |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
162 throw JSONRPCError(-18, "Invalid decomposition"); |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
163 } |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
164 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
165 void WalletTxToJSON(const CWalletTx& wtx, Object& entry) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
166 { |
1590
820c00b48391
Merge branch 'txn_block_info' of https://github.com/luke-jr/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
167 int confirms = wtx.GetDepthInMainChain(); |
820c00b48391
Merge branch 'txn_block_info' of https://github.com/luke-jr/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
168 entry.push_back(Pair("confirmations", confirms)); |
820c00b48391
Merge branch 'txn_block_info' of https://github.com/luke-jr/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
169 if (confirms) |
820c00b48391
Merge branch 'txn_block_info' of https://github.com/luke-jr/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
170 { |
820c00b48391
Merge branch 'txn_block_info' of https://github.com/luke-jr/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
171 entry.push_back(Pair("blockhash", wtx.hashBlock.GetHex())); |
820c00b48391
Merge branch 'txn_block_info' of https://github.com/luke-jr/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
172 entry.push_back(Pair("blockindex", wtx.nIndex)); |
820c00b48391
Merge branch 'txn_block_info' of https://github.com/luke-jr/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
173 } |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
174 entry.push_back(Pair("txid", wtx.GetHash().GetHex())); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
175 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
|
176 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
|
177 entry.push_back(Pair(item.first, item.second)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
178 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
179 |
2414
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
180 void |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
181 ScriptSigToJSON(const CTxIn& txin, Object& out) |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
182 { |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
183 out.push_back(Pair("asm", txin.scriptSig.ToString())); |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
184 out.push_back(Pair("hex", HexStr(txin.scriptSig.begin(), txin.scriptSig.end()))); |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
185 |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
186 CTransaction txprev; |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
187 uint256 hashTxprevBlock; |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
188 if (!GetTransaction(txin.prevout.hash, txprev, hashTxprevBlock)) |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
189 return; |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
190 |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
191 txnouttype type; |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
192 vector<CTxDestination> addresses; |
2414
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
193 int nRequired; |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
194 |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
195 if (!ExtractDestinations(txprev.vout[txin.prevout.n].scriptPubKey, type, |
2414
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
196 addresses, nRequired)) |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
197 { |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
198 out.push_back(Pair("type", GetTxnOutputType(TX_NONSTANDARD))); |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
199 return; |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
200 } |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
201 |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
202 out.push_back(Pair("type", GetTxnOutputType(type))); |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
203 if (type == TX_MULTISIG) |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
204 { |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
205 // TODO: Need to handle this specially since not all input addresses are required... |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
206 return; |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
207 } |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
208 |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
209 Array a; |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
210 BOOST_FOREACH(const CTxDestination& addr, addresses) |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
211 a.push_back(CBitcoinAddress(addr).ToString()); |
2414
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
212 out.push_back(Pair("addresses", a)); |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
213 } |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
214 |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
215 void |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
216 ScriptPubKeyToJSON(const CScript& scriptPubKey, Object& out) |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
217 { |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
218 txnouttype type; |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
219 vector<CTxDestination> addresses; |
2414
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
220 int nRequired; |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
221 |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
222 out.push_back(Pair("asm", scriptPubKey.ToString())); |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
223 out.push_back(Pair("hex", HexStr(scriptPubKey.begin(), scriptPubKey.end()))); |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
224 |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
225 if (!ExtractDestinations(scriptPubKey, type, addresses, nRequired)) |
2414
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
226 { |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
227 out.push_back(Pair("type", GetTxnOutputType(TX_NONSTANDARD))); |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
228 return; |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
229 } |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
230 |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
231 out.push_back(Pair("reqSigs", nRequired)); |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
232 out.push_back(Pair("type", GetTxnOutputType(type))); |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
233 |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
234 Array a; |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
235 BOOST_FOREACH(const CTxDestination& addr, addresses) |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
236 a.push_back(CBitcoinAddress(addr).ToString()); |
2414
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
237 out.push_back(Pair("addresses", a)); |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
238 } |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
239 |
2413
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
240 void TxToJSON(const CTransaction &tx, Object& entry, const Object& decompositions) |
2288
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
241 { |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
242 entry.push_back(Pair("version", tx.nVersion)); |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
243 entry.push_back(Pair("locktime", (boost::int64_t)tx.nLockTime)); |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
244 entry.push_back(Pair("size", (boost::int64_t)::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION))); |
2413
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
245 |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
246 enum DecomposeMode decomposeScript = FindDecompose(decompositions, "script", "asm"); |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
247 |
2288
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
248 Array vin; |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
249 BOOST_FOREACH(const CTxIn& txin, tx.vin) |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
250 { |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
251 Object in; |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
252 if (tx.IsCoinBase()) |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
253 in.push_back(Pair("coinbase", HexStr(txin.scriptSig.begin(), txin.scriptSig.end()))); |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
254 else |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
255 { |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
256 Object prevout; |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
257 prevout.push_back(Pair("hash", txin.prevout.hash.GetHex())); |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
258 prevout.push_back(Pair("n", (boost::int64_t)txin.prevout.n)); |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
259 in.push_back(Pair("prevout", prevout)); |
2413
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
260 switch (decomposeScript) { |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
261 case DM_NONE: |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
262 break; |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
263 case DM_HEX: |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
264 in.push_back(Pair("scriptSig", HexStr(txin.scriptSig.begin(), txin.scriptSig.end()))); |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
265 break; |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
266 case DM_ASM: |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
267 in.push_back(Pair("scriptSig", txin.scriptSig.ToString())); |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
268 break; |
2414
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
269 case DM_OBJ: |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
270 { |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
271 Object o; |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
272 ScriptSigToJSON(txin, o); |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
273 in.push_back(Pair("scriptSig", o)); |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
274 break; |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
275 } |
2413
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
276 default: |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
277 throw JSONRPCError(-18, "Invalid script decomposition"); |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
278 } |
2288
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
279 } |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
280 in.push_back(Pair("sequence", (boost::int64_t)txin.nSequence)); |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
281 vin.push_back(in); |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
282 } |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
283 entry.push_back(Pair("vin", vin)); |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
284 Array vout; |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
285 BOOST_FOREACH(const CTxOut& txout, tx.vout) |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
286 { |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
287 Object out; |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
288 out.push_back(Pair("value", ValueFromAmount(txout.nValue))); |
2413
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
289 switch (decomposeScript) { |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
290 case DM_NONE: |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
291 break; |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
292 case DM_HEX: |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
293 out.push_back(Pair("scriptPubKey", HexStr(txout.scriptPubKey.begin(), txout.scriptPubKey.end()))); |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
294 break; |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
295 case DM_ASM: |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
296 out.push_back(Pair("scriptPubKey", txout.scriptPubKey.ToString())); |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
297 break; |
2414
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
298 case DM_OBJ: |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
299 { |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
300 Object o; |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
301 ScriptPubKeyToJSON(txout.scriptPubKey, o); |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
302 out.push_back(Pair("scriptPubKey", o)); |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
303 break; |
b7e51b5cdc07
Support for decomposing scripts as "obj"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2413
diff
changeset
|
304 } |
2413
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
305 default: |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
306 throw JSONRPCError(-18, "Invalid script decomposition"); |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
307 } |
2288
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
308 vout.push_back(out); |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
309 } |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
310 entry.push_back(Pair("vout", vout)); |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
311 } |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
312 |
2413
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
313 void AnyTxToJSON(const uint256 hash, const CTransaction* ptx, Object& entry, const Object& decompositions); |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
314 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
315 string AccountFromValue(const Value& value) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
316 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
317 string strAccount = value.get_str(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
318 if (strAccount == "*") |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
319 throw JSONRPCError(-11, "Invalid account name"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
320 return strAccount; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
321 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
322 |
2413
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
323 Object blockToJSON(const CBlock& block, const CBlockIndex* blockindex, const Object& decompositions) |
1627
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
324 { |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
325 Object result; |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
326 result.push_back(Pair("hash", block.GetHash().GetHex())); |
2412
1199f19e41c6
Add block "confirmations" to getblock, mainly for identifying orphans
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2405
diff
changeset
|
327 CMerkleTx txGen(block.vtx[0]); |
1199f19e41c6
Add block "confirmations" to getblock, mainly for identifying orphans
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2405
diff
changeset
|
328 txGen.SetMerkleBranch(&block); |
1199f19e41c6
Add block "confirmations" to getblock, mainly for identifying orphans
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2405
diff
changeset
|
329 result.push_back(Pair("confirmations", (int)txGen.GetDepthInMainChain())); |
2277
0dcf927bc6b2
Further reduce header dependencies
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2275
diff
changeset
|
330 result.push_back(Pair("size", (int)::GetSerializeSize(block, SER_NETWORK, PROTOCOL_VERSION))); |
1900
7ce608dfe20e
Cleanup JSON-RPC getblock output to be consistent
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1869
diff
changeset
|
331 result.push_back(Pair("height", blockindex->nHeight)); |
1627
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
332 result.push_back(Pair("version", block.nVersion)); |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
333 result.push_back(Pair("merkleroot", block.hashMerkleRoot.GetHex())); |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
334 result.push_back(Pair("time", (boost::int64_t)block.GetBlockTime())); |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
335 result.push_back(Pair("nonce", (boost::uint64_t)block.nNonce)); |
1900
7ce608dfe20e
Cleanup JSON-RPC getblock output to be consistent
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1869
diff
changeset
|
336 result.push_back(Pair("bits", HexBits(block.nBits))); |
1627
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
337 result.push_back(Pair("difficulty", GetDifficulty(blockindex))); |
2413
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
338 |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
339 enum DecomposeMode decomposeTxn = FindDecompose(decompositions, "tx", "hash"); |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
340 if (decomposeTxn) |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
341 { |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
342 Array txs; |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
343 switch (decomposeTxn) { |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
344 case DM_OBJ: |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
345 BOOST_FOREACH (const CTransaction&tx, block.vtx) |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
346 { |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
347 Object entry; |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
348 AnyTxToJSON(tx.GetHash(), &tx, entry, decompositions); |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
349 txs.push_back(entry); |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
350 } |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
351 break; |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
352 case DM_HEX: |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
353 BOOST_FOREACH (const CTransaction&tx, block.vtx) |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
354 { |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
355 CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION); |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
356 ssTx << tx; |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
357 |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
358 txs.push_back(HexStr(ssTx.begin(), ssTx.end())); |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
359 } |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
360 break; |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
361 case DM_HASH: |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
362 BOOST_FOREACH (const CTransaction&tx, block.vtx) |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
363 txs.push_back(tx.GetHash().GetHex()); |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
364 break; |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
365 default: |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
366 throw JSONRPCError(-18, "Invalid transaction decomposition"); |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
367 } |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
368 result.push_back(Pair("tx", txs)); |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
369 } |
1627
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
370 |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
371 if (blockindex->pprev) |
1900
7ce608dfe20e
Cleanup JSON-RPC getblock output to be consistent
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1869
diff
changeset
|
372 result.push_back(Pair("previousblockhash", blockindex->pprev->GetBlockHash().GetHex())); |
1627
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
373 if (blockindex->pnext) |
1900
7ce608dfe20e
Cleanup JSON-RPC getblock output to be consistent
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1869
diff
changeset
|
374 result.push_back(Pair("nextblockhash", blockindex->pnext->GetBlockHash().GetHex())); |
1627
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
375 return result; |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
376 } |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
377 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
378 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
379 |
2413
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
380 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
381 /// |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
382 /// 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
|
383 /// |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
384 |
2293
6edb3e47a45b
Encapsulate mapCommands in class CRPCTable
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2292
diff
changeset
|
385 string CRPCTable::help(string strCommand) const |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
386 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
387 string strRet; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
388 set<rpcfn_type> setDone; |
2293
6edb3e47a45b
Encapsulate mapCommands in class CRPCTable
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2292
diff
changeset
|
389 for (map<string, const CRPCCommand*>::const_iterator mi = mapCommands.begin(); mi != mapCommands.end(); ++mi) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
390 { |
2293
6edb3e47a45b
Encapsulate mapCommands in class CRPCTable
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2292
diff
changeset
|
391 const CRPCCommand *pcmd = mi->second; |
2292
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
392 string strMethod = mi->first; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
393 // We already filter duplicates, but these deprecated screw up the sort order |
2608
4394920b7888
JSON-RPC: remove 'getblocknumber' deprecated RPC
Jeff Garzik <jgarzik@exmulti.com>
parents:
2593
diff
changeset
|
394 if (strMethod.find("label") != string::npos) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
395 continue; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
396 if (strCommand != "" && strMethod != strCommand) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
397 continue; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
398 try |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
399 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
400 Array params; |
2292
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
401 rpcfn_type pfn = pcmd->actor; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
402 if (setDone.insert(pfn).second) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
403 (*pfn)(params, true); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
404 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
405 catch (std::exception& e) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
406 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
407 // Help text is returned in an exception |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
408 string strHelp = string(e.what()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
409 if (strCommand == "") |
2255
7e66f9a59926
The string class returns string::npos, when find() fails.
Jeff Garzik <jeff@garzik.org>
parents:
2246
diff
changeset
|
410 if (strHelp.find('\n') != string::npos) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
411 strHelp = strHelp.substr(0, strHelp.find('\n')); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
412 strRet += strHelp + "\n"; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
413 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
414 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
415 if (strRet == "") |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
416 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
|
417 strRet = strRet.substr(0,strRet.size()-1); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
418 return strRet; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
419 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
420 |
2293
6edb3e47a45b
Encapsulate mapCommands in class CRPCTable
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2292
diff
changeset
|
421 Value help(const Array& params, bool fHelp) |
6edb3e47a45b
Encapsulate mapCommands in class CRPCTable
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2292
diff
changeset
|
422 { |
6edb3e47a45b
Encapsulate mapCommands in class CRPCTable
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2292
diff
changeset
|
423 if (fHelp || params.size() > 1) |
6edb3e47a45b
Encapsulate mapCommands in class CRPCTable
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2292
diff
changeset
|
424 throw runtime_error( |
6edb3e47a45b
Encapsulate mapCommands in class CRPCTable
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2292
diff
changeset
|
425 "help [command]\n" |
6edb3e47a45b
Encapsulate mapCommands in class CRPCTable
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2292
diff
changeset
|
426 "List commands, or get help for a command."); |
6edb3e47a45b
Encapsulate mapCommands in class CRPCTable
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2292
diff
changeset
|
427 |
6edb3e47a45b
Encapsulate mapCommands in class CRPCTable
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2292
diff
changeset
|
428 string strCommand; |
6edb3e47a45b
Encapsulate mapCommands in class CRPCTable
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2292
diff
changeset
|
429 if (params.size() > 0) |
6edb3e47a45b
Encapsulate mapCommands in class CRPCTable
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2292
diff
changeset
|
430 strCommand = params[0].get_str(); |
6edb3e47a45b
Encapsulate mapCommands in class CRPCTable
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2292
diff
changeset
|
431 |
6edb3e47a45b
Encapsulate mapCommands in class CRPCTable
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2292
diff
changeset
|
432 return tableRPC.help(strCommand); |
6edb3e47a45b
Encapsulate mapCommands in class CRPCTable
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2292
diff
changeset
|
433 } |
6edb3e47a45b
Encapsulate mapCommands in class CRPCTable
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2292
diff
changeset
|
434 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
435 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
436 Value stop(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
437 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
438 if (fHelp || params.size() != 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
439 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
440 "stop\n" |
2618
56d80f7ce10c
change strings to Bitcoin (uppercase), where it is used as a noun and update strings to use "Qt" (and not qt or QT) / update initialisation of notificator to use qApp->applicationName() instead of a static string
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2608
diff
changeset
|
441 "Stop Bitcoin server."); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
442 // Shutdown will take long enough that the response should get back |
2746
246ba5ba6805
introduce a new StartShutdown() function, which starts a thread with Shutdown() if no GUI is used and calls uiInterface.QueueShutdown() if a GUI is used / all direct uiInterface.QueueShutdown() calls are replaced with Shutdown() - this ensures a clean GUI shutdown, even when catching a SIGTERM and allows the BitcoinGUI destructor to get called (which fixes a tray-icon issue and keeps the tray-icon until Bitcoin-Qt exits)
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2723
diff
changeset
|
443 StartShutdown(); |
2618
56d80f7ce10c
change strings to Bitcoin (uppercase), where it is used as a noun and update strings to use "Qt" (and not qt or QT) / update initialisation of notificator to use qApp->applicationName() instead of a static string
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2608
diff
changeset
|
444 return "Bitcoin server stopping"; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
445 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
446 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
447 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
448 Value getblockcount(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
449 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
450 if (fHelp || params.size() != 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
451 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
452 "getblockcount\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
453 "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
|
454 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
455 return nBestHeight; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
456 } |
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 Value getconnectioncount(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
460 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
461 if (fHelp || params.size() != 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
462 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
463 "getconnectioncount\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
464 "Returns the number of connections to other nodes."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
465 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
466 return (int)vNodes.size(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
467 } |
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 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
470 Value getdifficulty(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
471 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
472 if (fHelp || params.size() != 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
473 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
474 "getdifficulty\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
475 "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
|
476 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
477 return GetDifficulty(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
478 } |
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 getgenerate(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() != 0) |
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 "getgenerate\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
486 "Returns true or false."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
487 |
1920
bffd14be46a8
bitcoind changes to stop storing settings in wallet.dat.
Gavin Andresen <gavinandresen@gmail.com>
parents:
1900
diff
changeset
|
488 return GetBoolArg("-gen"); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
489 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
490 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
491 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
492 Value setgenerate(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
493 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
494 if (fHelp || params.size() < 1 || params.size() > 2) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
495 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
496 "setgenerate <generate> [genproclimit]\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
497 "<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
|
498 "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
|
499 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
500 bool fGenerate = true; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
501 if (params.size() > 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
502 fGenerate = params[0].get_bool(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
503 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
504 if (params.size() > 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
505 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
506 int nGenProcLimit = params[1].get_int(); |
1920
bffd14be46a8
bitcoind changes to stop storing settings in wallet.dat.
Gavin Andresen <gavinandresen@gmail.com>
parents:
1900
diff
changeset
|
507 mapArgs["-genproclimit"] = itostr(nGenProcLimit); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
508 if (nGenProcLimit == 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
509 fGenerate = false; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
510 } |
1920
bffd14be46a8
bitcoind changes to stop storing settings in wallet.dat.
Gavin Andresen <gavinandresen@gmail.com>
parents:
1900
diff
changeset
|
511 mapArgs["-gen"] = (fGenerate ? "1" : "0"); |
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 GenerateBitcoins(fGenerate, pwalletMain); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
514 return Value::null; |
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 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
517 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
518 Value gethashespersec(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
519 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
520 if (fHelp || params.size() != 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
521 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
522 "gethashespersec\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
523 "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
|
524 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
525 if (GetTimeMillis() - nHPSTimerStart > 8000) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
526 return (boost::int64_t)0; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
527 return (boost::int64_t)dHashesPerSec; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
528 } |
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 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
531 Value getinfo(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
532 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
533 if (fHelp || params.size() != 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
534 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
535 "getinfo\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
536 "Returns an object containing various state info."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
537 |
2706
2e7f831240f5
Rework network config settings
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2688
diff
changeset
|
538 CService addrProxy; |
2e7f831240f5
Rework network config settings
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2688
diff
changeset
|
539 GetProxy(NET_IPV4, addrProxy); |
2e7f831240f5
Rework network config settings
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2688
diff
changeset
|
540 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
541 Object obj; |
1584
a67f13278e2c
Implement BIP 14 : separate protocol version from client version
Gavin Andresen <gavinandresen@gmail.com>
parents:
1541
diff
changeset
|
542 obj.push_back(Pair("version", (int)CLIENT_VERSION)); |
a67f13278e2c
Implement BIP 14 : separate protocol version from client version
Gavin Andresen <gavinandresen@gmail.com>
parents:
1541
diff
changeset
|
543 obj.push_back(Pair("protocolversion",(int)PROTOCOL_VERSION)); |
2086
394961982d80
Introduce explicit -walletupgrade option
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2072
diff
changeset
|
544 obj.push_back(Pair("walletversion", pwalletMain->GetVersion())); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
545 obj.push_back(Pair("balance", ValueFromAmount(pwalletMain->GetBalance()))); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
546 obj.push_back(Pair("blocks", (int)nBestHeight)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
547 obj.push_back(Pair("connections", (int)vNodes.size())); |
2706
2e7f831240f5
Rework network config settings
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2688
diff
changeset
|
548 obj.push_back(Pair("proxy", (addrProxy.IsValid() ? addrProxy.ToStringIPPort() : string()))); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
549 obj.push_back(Pair("difficulty", (double)GetDifficulty())); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
550 obj.push_back(Pair("testnet", fTestNet)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
551 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
|
552 obj.push_back(Pair("keypoolsize", pwalletMain->GetKeyPoolSize())); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
553 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
|
554 if (pwalletMain->IsCrypted()) |
1834
1961ebec6e7d
Extra wallet locking fixes
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1833
diff
changeset
|
555 obj.push_back(Pair("unlocked_until", (boost::int64_t)nWalletUnlockTime / 1000)); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
556 obj.push_back(Pair("errors", GetWarnings("statusbar"))); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
557 return obj; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
558 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
559 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
560 |
1745
4b0c13de5387
Add new "getmininginfo" JSON-RPC method, with mining-only fields moved out of "getinfo"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1734
diff
changeset
|
561 Value getmininginfo(const Array& params, bool fHelp) |
4b0c13de5387
Add new "getmininginfo" JSON-RPC method, with mining-only fields moved out of "getinfo"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1734
diff
changeset
|
562 { |
4b0c13de5387
Add new "getmininginfo" JSON-RPC method, with mining-only fields moved out of "getinfo"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1734
diff
changeset
|
563 if (fHelp || params.size() != 0) |
4b0c13de5387
Add new "getmininginfo" JSON-RPC method, with mining-only fields moved out of "getinfo"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1734
diff
changeset
|
564 throw runtime_error( |
4b0c13de5387
Add new "getmininginfo" JSON-RPC method, with mining-only fields moved out of "getinfo"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1734
diff
changeset
|
565 "getmininginfo\n" |
4b0c13de5387
Add new "getmininginfo" JSON-RPC method, with mining-only fields moved out of "getinfo"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1734
diff
changeset
|
566 "Returns an object containing mining-related information."); |
4b0c13de5387
Add new "getmininginfo" JSON-RPC method, with mining-only fields moved out of "getinfo"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1734
diff
changeset
|
567 |
4b0c13de5387
Add new "getmininginfo" JSON-RPC method, with mining-only fields moved out of "getinfo"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1734
diff
changeset
|
568 Object obj; |
4b0c13de5387
Add new "getmininginfo" JSON-RPC method, with mining-only fields moved out of "getinfo"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1734
diff
changeset
|
569 obj.push_back(Pair("blocks", (int)nBestHeight)); |
1746
7b7c12a59103
collect more info on tx pooling and block finding for getmininginfo
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1745
diff
changeset
|
570 obj.push_back(Pair("currentblocksize",(uint64_t)nLastBlockSize)); |
7b7c12a59103
collect more info on tx pooling and block finding for getmininginfo
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1745
diff
changeset
|
571 obj.push_back(Pair("currentblocktx",(uint64_t)nLastBlockTx)); |
1745
4b0c13de5387
Add new "getmininginfo" JSON-RPC method, with mining-only fields moved out of "getinfo"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1734
diff
changeset
|
572 obj.push_back(Pair("difficulty", (double)GetDifficulty())); |
4b0c13de5387
Add new "getmininginfo" JSON-RPC method, with mining-only fields moved out of "getinfo"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1734
diff
changeset
|
573 obj.push_back(Pair("errors", GetWarnings("statusbar"))); |
1920
bffd14be46a8
bitcoind changes to stop storing settings in wallet.dat.
Gavin Andresen <gavinandresen@gmail.com>
parents:
1900
diff
changeset
|
574 obj.push_back(Pair("generate", GetBoolArg("-gen"))); |
bffd14be46a8
bitcoind changes to stop storing settings in wallet.dat.
Gavin Andresen <gavinandresen@gmail.com>
parents:
1900
diff
changeset
|
575 obj.push_back(Pair("genproclimit", (int)GetArg("-genproclimit", -1))); |
1745
4b0c13de5387
Add new "getmininginfo" JSON-RPC method, with mining-only fields moved out of "getinfo"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1734
diff
changeset
|
576 obj.push_back(Pair("hashespersec", gethashespersec(params, false))); |
2252
a52e8d9c2638
CTxMemPool: encapsulate AddToMemoryPoolUnchecked(), RemoveFromMemoryPool(),
Jeff Garzik <jeff@garzik.org>
parents:
2246
diff
changeset
|
577 obj.push_back(Pair("pooledtx", (uint64_t)mempool.size())); |
1745
4b0c13de5387
Add new "getmininginfo" JSON-RPC method, with mining-only fields moved out of "getinfo"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1734
diff
changeset
|
578 obj.push_back(Pair("testnet", fTestNet)); |
4b0c13de5387
Add new "getmininginfo" JSON-RPC method, with mining-only fields moved out of "getinfo"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1734
diff
changeset
|
579 return obj; |
4b0c13de5387
Add new "getmininginfo" JSON-RPC method, with mining-only fields moved out of "getinfo"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1734
diff
changeset
|
580 } |
4b0c13de5387
Add new "getmininginfo" JSON-RPC method, with mining-only fields moved out of "getinfo"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1734
diff
changeset
|
581 |
4b0c13de5387
Add new "getmininginfo" JSON-RPC method, with mining-only fields moved out of "getinfo"
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1734
diff
changeset
|
582 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
583 Value getnewaddress(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
584 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
585 if (fHelp || params.size() > 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
586 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
587 "getnewaddress [account]\n" |
2618
56d80f7ce10c
change strings to Bitcoin (uppercase), where it is used as a noun and update strings to use "Qt" (and not qt or QT) / update initialisation of notificator to use qApp->applicationName() instead of a static string
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2608
diff
changeset
|
588 "Returns a new Bitcoin address for receiving payments. " |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
589 "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
|
590 "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
|
591 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
592 // 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
|
593 string strAccount; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
594 if (params.size() > 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
595 strAccount = AccountFromValue(params[0]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
596 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
597 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
|
598 pwalletMain->TopUpKeyPool(); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
599 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
600 // Generate a new key that is added to wallet |
2687
2cca172f83a9
Encapsulate public keys in CPubKey
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2676
diff
changeset
|
601 CPubKey newKey; |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
602 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
|
603 throw JSONRPCError(-12, "Error: Keypool ran out, please call keypoolrefill first"); |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
604 CKeyID keyID = newKey.GetID(); |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
605 |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
606 pwalletMain->SetAddressBookName(keyID, strAccount); |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
607 |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
608 return CBitcoinAddress(keyID).ToString(); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
609 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
610 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
611 |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
612 CBitcoinAddress GetAccountAddress(string strAccount, bool bForceNew=false) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
613 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
614 CWalletDB walletdb(pwalletMain->strWalletFile); |
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 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
|
617 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
|
618 |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
619 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
|
620 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
621 // Check if the current key has been used |
2687
2cca172f83a9
Encapsulate public keys in CPubKey
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2676
diff
changeset
|
622 if (account.vchPubKey.IsValid()) |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
623 { |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
624 CScript scriptPubKey; |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
625 scriptPubKey.SetDestination(account.vchPubKey.GetID()); |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
626 for (map<uint256, CWalletTx>::iterator it = pwalletMain->mapWallet.begin(); |
2687
2cca172f83a9
Encapsulate public keys in CPubKey
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2676
diff
changeset
|
627 it != pwalletMain->mapWallet.end() && account.vchPubKey.IsValid(); |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
628 ++it) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
629 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
630 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
|
631 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
|
632 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
|
633 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
|
634 } |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
635 } |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
636 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
637 // Generate a new key |
2687
2cca172f83a9
Encapsulate public keys in CPubKey
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2676
diff
changeset
|
638 if (!account.vchPubKey.IsValid() || bForceNew || bKeyUsed) |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
639 { |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
640 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
|
641 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
|
642 |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
643 pwalletMain->SetAddressBookName(account.vchPubKey.GetID(), strAccount); |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
644 walletdb.WriteAccount(strAccount, account); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
645 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
646 |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
647 return CBitcoinAddress(account.vchPubKey.GetID()); |
1181
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 Value getaccountaddress(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
651 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
652 if (fHelp || params.size() != 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
653 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
654 "getaccountaddress <account>\n" |
2618
56d80f7ce10c
change strings to Bitcoin (uppercase), where it is used as a noun and update strings to use "Qt" (and not qt or QT) / update initialisation of notificator to use qApp->applicationName() instead of a static string
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2608
diff
changeset
|
655 "Returns the current Bitcoin address for receiving payments to this account."); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
656 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
657 // 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
|
658 string strAccount = AccountFromValue(params[0]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
659 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
660 Value ret; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
661 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
662 ret = GetAccountAddress(strAccount).ToString(); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
663 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
664 return ret; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
665 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
666 |
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 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
669 Value setaccount(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
670 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
671 if (fHelp || params.size() < 1 || params.size() > 2) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
672 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
673 "setaccount <bitcoinaddress> <account>\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
674 "Sets the account associated with the given address."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
675 |
1256
3a687b55c04b
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1220
diff
changeset
|
676 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
|
677 if (!address.IsValid()) |
2618
56d80f7ce10c
change strings to Bitcoin (uppercase), where it is used as a noun and update strings to use "Qt" (and not qt or QT) / update initialisation of notificator to use qApp->applicationName() instead of a static string
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2608
diff
changeset
|
678 throw JSONRPCError(-5, "Invalid Bitcoin address"); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
679 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
680 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
681 string strAccount; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
682 if (params.size() > 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
683 strAccount = AccountFromValue(params[1]); |
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 // Detect when changing the account of an address that is the 'unused current key' of another account: |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
686 if (pwalletMain->mapAddressBook.count(address.Get())) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
687 { |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
688 string strOldAccount = pwalletMain->mapAddressBook[address.Get()]; |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
689 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
|
690 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
|
691 } |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
692 |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
693 pwalletMain->SetAddressBookName(address.Get(), strAccount); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
694 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
695 return Value::null; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
696 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
697 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
698 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
699 Value getaccount(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
700 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
701 if (fHelp || params.size() != 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
702 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
703 "getaccount <bitcoinaddress>\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
704 "Returns the account associated with the given address."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
705 |
1256
3a687b55c04b
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1220
diff
changeset
|
706 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
|
707 if (!address.IsValid()) |
2618
56d80f7ce10c
change strings to Bitcoin (uppercase), where it is used as a noun and update strings to use "Qt" (and not qt or QT) / update initialisation of notificator to use qApp->applicationName() instead of a static string
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2608
diff
changeset
|
708 throw JSONRPCError(-5, "Invalid Bitcoin address"); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
709 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
710 string strAccount; |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
711 map<CTxDestination, string>::iterator mi = pwalletMain->mapAddressBook.find(address.Get()); |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
712 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
|
713 strAccount = (*mi).second; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
714 return strAccount; |
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 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
717 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
718 Value getaddressesbyaccount(const Array& params, bool fHelp) |
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 if (fHelp || params.size() != 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
721 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
722 "getaddressesbyaccount <account>\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
723 "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
|
724 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
725 string strAccount = AccountFromValue(params[0]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
726 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
727 // Find all addresses that have the given account |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
728 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
|
729 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
|
730 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
731 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
|
732 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
|
733 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
|
734 ret.push_back(address.ToString()); |
1181
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 return ret; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
737 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
738 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
739 Value settxfee(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
740 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
741 if (fHelp || params.size() < 1 || params.size() > 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
742 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
743 "settxfee <amount>\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
744 "<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
|
745 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
746 // Amount |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
747 int64 nAmount = 0; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
748 if (params[0].get_real() != 0.0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
749 nAmount = AmountFromValue(params[0]); // rejects 0.0 amounts |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
750 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
751 nTransactionFee = nAmount; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
752 return true; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
753 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
754 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
755 Value sendtoaddress(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
756 { |
2619
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
757 if (fHelp || params.size() < 2 || params.size() > 4) |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
758 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
|
759 "sendtoaddress <bitcoinaddress> <amount> [comment] [comment-to]\n" |
2619
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
760 "<amount> is a real and is rounded to the nearest 0.00000001" |
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
761 + HelpRequiringPassphrase()); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
762 |
1256
3a687b55c04b
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1220
diff
changeset
|
763 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
|
764 if (!address.IsValid()) |
2618
56d80f7ce10c
change strings to Bitcoin (uppercase), where it is used as a noun and update strings to use "Qt" (and not qt or QT) / update initialisation of notificator to use qApp->applicationName() instead of a static string
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2608
diff
changeset
|
765 throw JSONRPCError(-5, "Invalid Bitcoin address"); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
766 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
767 // Amount |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
768 int64 nAmount = AmountFromValue(params[1]); |
1181
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 // Wallet comments |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
771 CWalletTx wtx; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
772 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
|
773 wtx.mapValue["comment"] = params[2].get_str(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
774 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
|
775 wtx.mapValue["to"] = params[3].get_str(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
776 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
777 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
|
778 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
|
779 |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
780 string strError = pwalletMain->SendMoneyToDestination(address.Get(), nAmount, wtx); |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
781 if (strError != "") |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
782 throw JSONRPCError(-4, strError); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
783 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
784 return wtx.GetHash().GetHex(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
785 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
786 |
1329
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
787 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
|
788 { |
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
789 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
|
790 throw runtime_error( |
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
791 "signmessage <bitcoinaddress> <message>\n" |
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
792 "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
|
793 |
2619
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
794 EnsureWalletIsUnlocked(); |
1330
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
795 |
1329
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
796 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
|
797 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
|
798 |
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
799 CBitcoinAddress addr(strAddress); |
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
800 if (!addr.IsValid()) |
1329
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
801 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
|
802 |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
803 CKeyID keyID; |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
804 if (!addr.GetKeyID(keyID)) |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
805 throw JSONRPCError(-3, "Address does not refer to key"); |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
806 |
1329
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
807 CKey key; |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
808 if (!pwalletMain->GetKey(keyID, key)) |
1330
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
809 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
|
810 |
2277
0dcf927bc6b2
Further reduce header dependencies
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2275
diff
changeset
|
811 CDataStream ss(SER_GETHASH, 0); |
1330
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
812 ss << strMessageMagic; |
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
813 ss << strMessage; |
1329
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
814 |
1330
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
815 vector<unsigned char> vchSig; |
1333
7efc4fb78051
Use key recovery for message signatures
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1331
diff
changeset
|
816 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
|
817 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
|
818 |
1333
7efc4fb78051
Use key recovery for message signatures
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1331
diff
changeset
|
819 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
|
820 } |
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
821 |
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
822 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
|
823 { |
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
824 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
|
825 throw runtime_error( |
1330
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
826 "verifymessage <bitcoinaddress> <signature> <message>\n" |
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
827 "Verify a signed message"); |
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
828 |
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
829 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
|
830 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
|
831 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
|
832 |
1330
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
833 CBitcoinAddress addr(strAddress); |
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
834 if (!addr.IsValid()) |
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
835 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
|
836 |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
837 CKeyID keyID; |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
838 if (!addr.GetKeyID(keyID)) |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
839 throw JSONRPCError(-3, "Address does not refer to key"); |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
840 |
1331
b427db8574f1
base64-based sign/verify
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1330
diff
changeset
|
841 bool fInvalid = false; |
1333
7efc4fb78051
Use key recovery for message signatures
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1331
diff
changeset
|
842 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
|
843 |
b427db8574f1
base64-based sign/verify
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1330
diff
changeset
|
844 if (fInvalid) |
b427db8574f1
base64-based sign/verify
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1330
diff
changeset
|
845 throw JSONRPCError(-5, "Malformed base64 encoding"); |
b427db8574f1
base64-based sign/verify
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1330
diff
changeset
|
846 |
2277
0dcf927bc6b2
Further reduce header dependencies
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2275
diff
changeset
|
847 CDataStream ss(SER_GETHASH, 0); |
1333
7efc4fb78051
Use key recovery for message signatures
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1331
diff
changeset
|
848 ss << strMessageMagic; |
7efc4fb78051
Use key recovery for message signatures
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1331
diff
changeset
|
849 ss << strMessage; |
1329
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
850 |
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
851 CKey key; |
1333
7efc4fb78051
Use key recovery for message signatures
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1331
diff
changeset
|
852 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
|
853 return false; |
1330
1537d1a22f34
Incorporate pubkey in signature, check based on address
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1329
diff
changeset
|
854 |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
855 return (key.GetPubKey().GetID() == keyID); |
1329
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
856 } |
22f52365d86b
Sign and verify message with bitcoin address and public key
Khalahan <khal@bitcoin-contact.org>
parents:
1327
diff
changeset
|
857 |
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 Value getreceivedbyaddress(const Array& params, bool fHelp) |
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 if (fHelp || params.size() < 1 || params.size() > 2) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
862 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
863 "getreceivedbyaddress <bitcoinaddress> [minconf=1]\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
864 "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
|
865 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
866 // Bitcoin address |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
867 CBitcoinAddress address = CBitcoinAddress(params[0].get_str()); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
868 CScript scriptPubKey; |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
869 if (!address.IsValid()) |
2618
56d80f7ce10c
change strings to Bitcoin (uppercase), where it is used as a noun and update strings to use "Qt" (and not qt or QT) / update initialisation of notificator to use qApp->applicationName() instead of a static string
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2608
diff
changeset
|
870 throw JSONRPCError(-5, "Invalid Bitcoin address"); |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
871 scriptPubKey.SetDestination(address.Get()); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
872 if (!IsMine(*pwalletMain,scriptPubKey)) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
873 return (double)0.0; |
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 // Minimum confirmations |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
876 int nMinDepth = 1; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
877 if (params.size() > 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
878 nMinDepth = params[1].get_int(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
879 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
880 // Tally |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
881 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
|
882 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
|
883 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
884 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
|
885 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
|
886 continue; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
887 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
888 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
|
889 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
|
890 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
|
891 nAmount += txout.nValue; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
892 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
893 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
894 return ValueFromAmount(nAmount); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
895 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
896 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
897 |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
898 void GetAccountAddresses(string strAccount, set<CTxDestination>& setAddress) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
899 { |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
900 BOOST_FOREACH(const PAIRTYPE(CTxDestination, string)& item, pwalletMain->mapAddressBook) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
901 { |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
902 const CTxDestination& address = item.first; |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
903 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
|
904 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
|
905 setAddress.insert(address); |
1181
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 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
908 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
909 Value getreceivedbyaccount(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
910 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
911 if (fHelp || params.size() < 1 || params.size() > 2) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
912 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
913 "getreceivedbyaccount <account> [minconf=1]\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
914 "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
|
915 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
916 // Minimum confirmations |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
917 int nMinDepth = 1; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
918 if (params.size() > 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
919 nMinDepth = params[1].get_int(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
920 |
1600
dc663e46a784
OP_EVAL implementation
Gavin Andresen <gavinandresen@gmail.com>
parents:
1598
diff
changeset
|
921 // Get the set of pub keys assigned to account |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
922 string strAccount = AccountFromValue(params[0]); |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
923 set<CTxDestination> setAddress; |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
924 GetAccountAddresses(strAccount, setAddress); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
925 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
926 // Tally |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
927 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
|
928 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
|
929 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
930 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
|
931 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
|
932 continue; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
933 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
934 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
|
935 { |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
936 CTxDestination address; |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
937 if (ExtractDestination(txout.scriptPubKey, address) && IsMine(*pwalletMain, address) && setAddress.count(address)) |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
938 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
|
939 nAmount += txout.nValue; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
940 } |
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 return (double)nAmount / (double)COIN; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
944 } |
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 |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
947 int64 GetAccountBalance(CWalletDB& walletdb, const string& strAccount, int nMinDepth) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
948 { |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
949 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
|
950 |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
951 // 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
|
952 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
|
953 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
954 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
|
955 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
|
956 continue; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
957 |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
958 int64 nGenerated, nReceived, nSent, nFee; |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
959 wtx.GetAccountAmounts(strAccount, nGenerated, nReceived, nSent, nFee); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
960 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
961 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
|
962 nBalance += nReceived; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
963 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
|
964 } |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
965 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
966 // 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
|
967 nBalance += walletdb.GetAccountCreditDebit(strAccount); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
968 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
969 return nBalance; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
970 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
971 |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
972 int64 GetAccountBalance(const string& strAccount, int nMinDepth) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
973 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
974 CWalletDB walletdb(pwalletMain->strWalletFile); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
975 return GetAccountBalance(walletdb, strAccount, nMinDepth); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
976 } |
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 Value getbalance(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
980 { |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
981 if (fHelp || params.size() > 2) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
982 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
983 "getbalance [account] [minconf=1]\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
984 "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
|
985 "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
|
986 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
987 if (params.size() == 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
988 return ValueFromAmount(pwalletMain->GetBalance()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
989 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
990 int nMinDepth = 1; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
991 if (params.size() > 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
992 nMinDepth = params[1].get_int(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
993 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
994 if (params[0].get_str() == "*") { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
995 // Calculate total balance a different way from GetBalance() |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
996 // (GetBalance() sums up all unspent TxOuts) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
997 // getbalance and getbalance '*' should always return the same number. |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
998 int64 nBalance = 0; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
999 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
|
1000 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1001 const CWalletTx& wtx = (*it).second; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1002 if (!wtx.IsFinal()) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1003 continue; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1004 |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
1005 int64 allGeneratedImmature, allGeneratedMature, allFee; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1006 allGeneratedImmature = allGeneratedMature = allFee = 0; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1007 string strSentAccount; |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1008 list<pair<CTxDestination, int64> > listReceived; |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1009 list<pair<CTxDestination, int64> > listSent; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1010 wtx.GetAmounts(allGeneratedImmature, allGeneratedMature, listReceived, listSent, allFee, strSentAccount); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1011 if (wtx.GetDepthInMainChain() >= nMinDepth) |
2246
b26677f778d1
fix warnings: suggest explicit braces to avoid ambiguous 'else' [-Wparentheses]
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2219
diff
changeset
|
1012 { |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1013 BOOST_FOREACH(const PAIRTYPE(CTxDestination,int64)& r, listReceived) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1014 nBalance += r.second; |
2246
b26677f778d1
fix warnings: suggest explicit braces to avoid ambiguous 'else' [-Wparentheses]
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2219
diff
changeset
|
1015 } |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1016 BOOST_FOREACH(const PAIRTYPE(CTxDestination,int64)& r, listSent) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1017 nBalance -= r.second; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1018 nBalance -= allFee; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1019 nBalance += allGeneratedMature; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1020 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1021 return ValueFromAmount(nBalance); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1022 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1023 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1024 string strAccount = AccountFromValue(params[0]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1025 |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
1026 int64 nBalance = GetAccountBalance(strAccount, nMinDepth); |
1181
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 return ValueFromAmount(nBalance); |
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 |
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 Value movecmd(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1033 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1034 if (fHelp || params.size() < 3 || params.size() > 5) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1035 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1036 "move <fromaccount> <toaccount> <amount> [minconf=1] [comment]\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1037 "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
|
1038 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1039 string strFrom = AccountFromValue(params[0]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1040 string strTo = AccountFromValue(params[1]); |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
1041 int64 nAmount = AmountFromValue(params[2]); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1042 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
|
1043 // 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
|
1044 (void)params[3].get_int(); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1045 string strComment; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1046 if (params.size() > 4) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1047 strComment = params[4].get_str(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1048 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1049 CWalletDB walletdb(pwalletMain->strWalletFile); |
2552
5389f4e6b4e1
Always check return values of TxnBegin() and TxnCommit()
Jeff Garzik <jgarzik@exmulti.com>
parents:
2527
diff
changeset
|
1050 if (!walletdb.TxnBegin()) |
5389f4e6b4e1
Always check return values of TxnBegin() and TxnCommit()
Jeff Garzik <jgarzik@exmulti.com>
parents:
2527
diff
changeset
|
1051 throw JSONRPCError(-20, "database error"); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1052 |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
1053 int64 nNow = GetAdjustedTime(); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1054 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1055 // Debit |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1056 CAccountingEntry debit; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1057 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
|
1058 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
|
1059 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
|
1060 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
|
1061 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
|
1062 walletdb.WriteAccountingEntry(debit); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1063 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1064 // Credit |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1065 CAccountingEntry credit; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1066 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
|
1067 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
|
1068 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
|
1069 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
|
1070 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
|
1071 walletdb.WriteAccountingEntry(credit); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1072 |
2552
5389f4e6b4e1
Always check return values of TxnBegin() and TxnCommit()
Jeff Garzik <jgarzik@exmulti.com>
parents:
2527
diff
changeset
|
1073 if (!walletdb.TxnCommit()) |
5389f4e6b4e1
Always check return values of TxnBegin() and TxnCommit()
Jeff Garzik <jgarzik@exmulti.com>
parents:
2527
diff
changeset
|
1074 throw JSONRPCError(-20, "database error"); |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1075 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1076 return true; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1077 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1078 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1079 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1080 Value sendfrom(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1081 { |
2619
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
1082 if (fHelp || params.size() < 3 || params.size() > 6) |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1083 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
|
1084 "sendfrom <fromaccount> <tobitcoinaddress> <amount> [minconf=1] [comment] [comment-to]\n" |
2619
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
1085 "<amount> is a real and is rounded to the nearest 0.00000001" |
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
1086 + HelpRequiringPassphrase()); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1087 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1088 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
|
1089 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
|
1090 if (!address.IsValid()) |
2618
56d80f7ce10c
change strings to Bitcoin (uppercase), where it is used as a noun and update strings to use "Qt" (and not qt or QT) / update initialisation of notificator to use qApp->applicationName() instead of a static string
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2608
diff
changeset
|
1091 throw JSONRPCError(-5, "Invalid Bitcoin address"); |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
1092 int64 nAmount = AmountFromValue(params[2]); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1093 int nMinDepth = 1; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1094 if (params.size() > 3) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1095 nMinDepth = params[3].get_int(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1096 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1097 CWalletTx wtx; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1098 wtx.strFromAccount = strAccount; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1099 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
|
1100 wtx.mapValue["comment"] = params[4].get_str(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1101 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
|
1102 wtx.mapValue["to"] = params[5].get_str(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1103 |
2619
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
1104 EnsureWalletIsUnlocked(); |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1105 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1106 // Check funds |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
1107 int64 nBalance = GetAccountBalance(strAccount, nMinDepth); |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1108 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
|
1109 throw JSONRPCError(-6, "Account has insufficient funds"); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1110 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1111 // Send |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1112 string strError = pwalletMain->SendMoneyToDestination(address.Get(), nAmount, wtx); |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1113 if (strError != "") |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1114 throw JSONRPCError(-4, strError); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1115 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1116 return wtx.GetHash().GetHex(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1117 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1118 |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1119 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1120 Value sendmany(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1121 { |
2619
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
1122 if (fHelp || params.size() < 2 || params.size() > 4) |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1123 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
|
1124 "sendmany <fromaccount> {address:amount,...} [minconf=1] [comment]\n" |
2619
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
1125 "amounts are double-precision floating point numbers" |
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
1126 + HelpRequiringPassphrase()); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1127 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1128 string strAccount = AccountFromValue(params[0]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1129 Object sendTo = params[1].get_obj(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1130 int nMinDepth = 1; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1131 if (params.size() > 2) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1132 nMinDepth = params[2].get_int(); |
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 CWalletTx wtx; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1135 wtx.strFromAccount = strAccount; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1136 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
|
1137 wtx.mapValue["comment"] = params[3].get_str(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1138 |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
1139 set<CBitcoinAddress> setAddress; |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
1140 vector<pair<CScript, int64> > vecSend; |
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
1141 |
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
1142 int64 totalAmount = 0; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1143 BOOST_FOREACH(const Pair& s, sendTo) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1144 { |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
1145 CBitcoinAddress address(s.name_); |
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
1146 if (!address.IsValid()) |
2618
56d80f7ce10c
change strings to Bitcoin (uppercase), where it is used as a noun and update strings to use "Qt" (and not qt or QT) / update initialisation of notificator to use qApp->applicationName() instead of a static string
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2608
diff
changeset
|
1147 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
|
1148 |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
1149 if (setAddress.count(address)) |
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
1150 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
|
1151 setAddress.insert(address); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1152 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1153 CScript scriptPubKey; |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1154 scriptPubKey.SetDestination(address.Get()); |
2746
246ba5ba6805
introduce a new StartShutdown() function, which starts a thread with Shutdown() if no GUI is used and calls uiInterface.QueueShutdown() if a GUI is used / all direct uiInterface.QueueShutdown() calls are replaced with Shutdown() - this ensures a clean GUI shutdown, even when catching a SIGTERM and allows the BitcoinGUI destructor to get called (which fixes a tray-icon issue and keeps the tray-icon until Bitcoin-Qt exits)
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2723
diff
changeset
|
1155 int64 nAmount = AmountFromValue(s.value_); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1156 totalAmount += nAmount; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1157 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1158 vecSend.push_back(make_pair(scriptPubKey, nAmount)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1159 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1160 |
2619
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
1161 EnsureWalletIsUnlocked(); |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1162 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1163 // Check funds |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
1164 int64 nBalance = GetAccountBalance(strAccount, nMinDepth); |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1165 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
|
1166 throw JSONRPCError(-6, "Account has insufficient funds"); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1167 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1168 // Send |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1169 CReserveKey keyChange(pwalletMain); |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
1170 int64 nFeeRequired = 0; |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1171 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
|
1172 if (!fCreated) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1173 { |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1174 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
|
1175 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
|
1176 throw JSONRPCError(-4, "Transaction creation failed"); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1177 } |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1178 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
|
1179 throw JSONRPCError(-4, "Transaction commit failed"); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1180 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1181 return wtx.GetHash().GetHex(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1182 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1183 |
1600
dc663e46a784
OP_EVAL implementation
Gavin Andresen <gavinandresen@gmail.com>
parents:
1598
diff
changeset
|
1184 Value addmultisigaddress(const Array& params, bool fHelp) |
1598
057a59e89d51
Support 3 new multisignature IsStandard transactions
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
1185 { |
1600
dc663e46a784
OP_EVAL implementation
Gavin Andresen <gavinandresen@gmail.com>
parents:
1598
diff
changeset
|
1186 if (fHelp || params.size() < 2 || params.size() > 3) |
1598
057a59e89d51
Support 3 new multisignature IsStandard transactions
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
1187 { |
1600
dc663e46a784
OP_EVAL implementation
Gavin Andresen <gavinandresen@gmail.com>
parents:
1598
diff
changeset
|
1188 string msg = "addmultisigaddress <nrequired> <'[\"key\",\"key\"]'> [account]\n" |
dc663e46a784
OP_EVAL implementation
Gavin Andresen <gavinandresen@gmail.com>
parents:
1598
diff
changeset
|
1189 "Add a nrequired-to-sign multisignature address to the wallet\"\n" |
2618
56d80f7ce10c
change strings to Bitcoin (uppercase), where it is used as a noun and update strings to use "Qt" (and not qt or QT) / update initialisation of notificator to use qApp->applicationName() instead of a static string
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2608
diff
changeset
|
1190 "each key is a Bitcoin address or hex-encoded public key\n" |
1600
dc663e46a784
OP_EVAL implementation
Gavin Andresen <gavinandresen@gmail.com>
parents:
1598
diff
changeset
|
1191 "If [account] is specified, assign address to [account]."; |
1598
057a59e89d51
Support 3 new multisignature IsStandard transactions
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
1192 throw runtime_error(msg); |
057a59e89d51
Support 3 new multisignature IsStandard transactions
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
1193 } |
057a59e89d51
Support 3 new multisignature IsStandard transactions
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
1194 |
1600
dc663e46a784
OP_EVAL implementation
Gavin Andresen <gavinandresen@gmail.com>
parents:
1598
diff
changeset
|
1195 int nRequired = params[0].get_int(); |
dc663e46a784
OP_EVAL implementation
Gavin Andresen <gavinandresen@gmail.com>
parents:
1598
diff
changeset
|
1196 const Array& keys = params[1].get_array(); |
dc663e46a784
OP_EVAL implementation
Gavin Andresen <gavinandresen@gmail.com>
parents:
1598
diff
changeset
|
1197 string strAccount; |
dc663e46a784
OP_EVAL implementation
Gavin Andresen <gavinandresen@gmail.com>
parents:
1598
diff
changeset
|
1198 if (params.size() > 2) |
dc663e46a784
OP_EVAL implementation
Gavin Andresen <gavinandresen@gmail.com>
parents:
1598
diff
changeset
|
1199 strAccount = AccountFromValue(params[2]); |
1598
057a59e89d51
Support 3 new multisignature IsStandard transactions
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
1200 |
057a59e89d51
Support 3 new multisignature IsStandard transactions
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
1201 // Gather public keys |
2359
2dea5179cfd9
Fixed non-sensical error message
Peter Todd <pete@petertodd.org>
parents:
2327
diff
changeset
|
1202 if (nRequired < 1) |
2dea5179cfd9
Fixed non-sensical error message
Peter Todd <pete@petertodd.org>
parents:
2327
diff
changeset
|
1203 throw runtime_error("a multisignature address must require at least one key to redeem"); |
2dea5179cfd9
Fixed non-sensical error message
Peter Todd <pete@petertodd.org>
parents:
2327
diff
changeset
|
1204 if ((int)keys.size() < nRequired) |
1598
057a59e89d51
Support 3 new multisignature IsStandard transactions
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
1205 throw runtime_error( |
2359
2dea5179cfd9
Fixed non-sensical error message
Peter Todd <pete@petertodd.org>
parents:
2327
diff
changeset
|
1206 strprintf("not enough keys supplied " |
2dea5179cfd9
Fixed non-sensical error message
Peter Todd <pete@petertodd.org>
parents:
2327
diff
changeset
|
1207 "(got %d keys, but need at least %d to redeem)", keys.size(), nRequired)); |
1598
057a59e89d51
Support 3 new multisignature IsStandard transactions
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
1208 std::vector<CKey> pubkeys; |
1600
dc663e46a784
OP_EVAL implementation
Gavin Andresen <gavinandresen@gmail.com>
parents:
1598
diff
changeset
|
1209 pubkeys.resize(keys.size()); |
2256
341e07b996f2
Fix loop index var types, fixing many minor sign comparison warnings
Jeff Garzik <jeff@garzik.org>
parents:
2255
diff
changeset
|
1210 for (unsigned int i = 0; i < keys.size(); i++) |
1598
057a59e89d51
Support 3 new multisignature IsStandard transactions
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
1211 { |
057a59e89d51
Support 3 new multisignature IsStandard transactions
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
1212 const std::string& ks = keys[i].get_str(); |
1752
7b4383bddf3b
Replace OP_EVAL (BIP 12) with Pay-to-script-hash (BIP 16).
Gavin Andresen <gavinandresen@gmail.com>
parents:
1750
diff
changeset
|
1213 |
2618
56d80f7ce10c
change strings to Bitcoin (uppercase), where it is used as a noun and update strings to use "Qt" (and not qt or QT) / update initialisation of notificator to use qApp->applicationName() instead of a static string
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2608
diff
changeset
|
1214 // Case 1: Bitcoin address and we have full public key: |
1752
7b4383bddf3b
Replace OP_EVAL (BIP 12) with Pay-to-script-hash (BIP 16).
Gavin Andresen <gavinandresen@gmail.com>
parents:
1750
diff
changeset
|
1215 CBitcoinAddress address(ks); |
7b4383bddf3b
Replace OP_EVAL (BIP 12) with Pay-to-script-hash (BIP 16).
Gavin Andresen <gavinandresen@gmail.com>
parents:
1750
diff
changeset
|
1216 if (address.IsValid()) |
1598
057a59e89d51
Support 3 new multisignature IsStandard transactions
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
1217 { |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1218 CKeyID keyID; |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1219 if (!address.GetKeyID(keyID)) |
1752
7b4383bddf3b
Replace OP_EVAL (BIP 12) with Pay-to-script-hash (BIP 16).
Gavin Andresen <gavinandresen@gmail.com>
parents:
1750
diff
changeset
|
1220 throw runtime_error( |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1221 strprintf("%s does not refer to a key",ks.c_str())); |
2687
2cca172f83a9
Encapsulate public keys in CPubKey
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2676
diff
changeset
|
1222 CPubKey vchPubKey; |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1223 if (!pwalletMain->GetPubKey(keyID, vchPubKey)) |
1598
057a59e89d51
Support 3 new multisignature IsStandard transactions
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
1224 throw runtime_error( |
1752
7b4383bddf3b
Replace OP_EVAL (BIP 12) with Pay-to-script-hash (BIP 16).
Gavin Andresen <gavinandresen@gmail.com>
parents:
1750
diff
changeset
|
1225 strprintf("no full public key for address %s",ks.c_str())); |
2687
2cca172f83a9
Encapsulate public keys in CPubKey
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2676
diff
changeset
|
1226 if (!vchPubKey.IsValid() || !pubkeys[i].SetPubKey(vchPubKey)) |
1777
addcc9fb01f5
Fixed addmultisigaddress if looking up public keys from locked wallets.
Gavin Andresen <gavinandresen@gmail.com>
parents:
1759
diff
changeset
|
1227 throw runtime_error(" Invalid public key: "+ks); |
1598
057a59e89d51
Support 3 new multisignature IsStandard transactions
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
1228 } |
1752
7b4383bddf3b
Replace OP_EVAL (BIP 12) with Pay-to-script-hash (BIP 16).
Gavin Andresen <gavinandresen@gmail.com>
parents:
1750
diff
changeset
|
1229 |
7b4383bddf3b
Replace OP_EVAL (BIP 12) with Pay-to-script-hash (BIP 16).
Gavin Andresen <gavinandresen@gmail.com>
parents:
1750
diff
changeset
|
1230 // Case 2: hex public key |
1755
30050ce9b291
Remove base58 encoding from validateaddress/addmultisigaddress
Gavin Andresen <gavinandresen@gmail.com>
parents:
1752
diff
changeset
|
1231 else if (IsHex(ks)) |
1752
7b4383bddf3b
Replace OP_EVAL (BIP 12) with Pay-to-script-hash (BIP 16).
Gavin Andresen <gavinandresen@gmail.com>
parents:
1750
diff
changeset
|
1232 { |
2687
2cca172f83a9
Encapsulate public keys in CPubKey
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2676
diff
changeset
|
1233 CPubKey vchPubKey(ParseHex(ks)); |
2cca172f83a9
Encapsulate public keys in CPubKey
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2676
diff
changeset
|
1234 if (!vchPubKey.IsValid() || !pubkeys[i].SetPubKey(vchPubKey)) |
1752
7b4383bddf3b
Replace OP_EVAL (BIP 12) with Pay-to-script-hash (BIP 16).
Gavin Andresen <gavinandresen@gmail.com>
parents:
1750
diff
changeset
|
1235 throw runtime_error(" Invalid public key: "+ks); |
7b4383bddf3b
Replace OP_EVAL (BIP 12) with Pay-to-script-hash (BIP 16).
Gavin Andresen <gavinandresen@gmail.com>
parents:
1750
diff
changeset
|
1236 } |
1755
30050ce9b291
Remove base58 encoding from validateaddress/addmultisigaddress
Gavin Andresen <gavinandresen@gmail.com>
parents:
1752
diff
changeset
|
1237 else |
1752
7b4383bddf3b
Replace OP_EVAL (BIP 12) with Pay-to-script-hash (BIP 16).
Gavin Andresen <gavinandresen@gmail.com>
parents:
1750
diff
changeset
|
1238 { |
1755
30050ce9b291
Remove base58 encoding from validateaddress/addmultisigaddress
Gavin Andresen <gavinandresen@gmail.com>
parents:
1752
diff
changeset
|
1239 throw runtime_error(" Invalid public key: "+ks); |
1752
7b4383bddf3b
Replace OP_EVAL (BIP 12) with Pay-to-script-hash (BIP 16).
Gavin Andresen <gavinandresen@gmail.com>
parents:
1750
diff
changeset
|
1240 } |
1598
057a59e89d51
Support 3 new multisignature IsStandard transactions
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
1241 } |
057a59e89d51
Support 3 new multisignature IsStandard transactions
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
1242 |
1752
7b4383bddf3b
Replace OP_EVAL (BIP 12) with Pay-to-script-hash (BIP 16).
Gavin Andresen <gavinandresen@gmail.com>
parents:
1750
diff
changeset
|
1243 // Construct using pay-to-script-hash: |
1600
dc663e46a784
OP_EVAL implementation
Gavin Andresen <gavinandresen@gmail.com>
parents:
1598
diff
changeset
|
1244 CScript inner; |
dc663e46a784
OP_EVAL implementation
Gavin Andresen <gavinandresen@gmail.com>
parents:
1598
diff
changeset
|
1245 inner.SetMultisig(nRequired, pubkeys); |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1246 CScriptID innerID = inner.GetID(); |
1752
7b4383bddf3b
Replace OP_EVAL (BIP 12) with Pay-to-script-hash (BIP 16).
Gavin Andresen <gavinandresen@gmail.com>
parents:
1750
diff
changeset
|
1247 pwalletMain->AddCScript(inner); |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1248 |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1249 pwalletMain->SetAddressBookName(innerID, strAccount); |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1250 return CBitcoinAddress(innerID).ToString(); |
1598
057a59e89d51
Support 3 new multisignature IsStandard transactions
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
1251 } |
057a59e89d51
Support 3 new multisignature IsStandard transactions
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
1252 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1253 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1254 struct tallyitem |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1255 { |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
1256 int64 nAmount; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1257 int nConf; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1258 tallyitem() |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1259 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1260 nAmount = 0; |
1594
e79944b2d430
Use std::numeric_limits<> for typesafe INT_MAX/etc
Gavin Andresen <gavinandresen@gmail.com>
parents:
1590
diff
changeset
|
1261 nConf = std::numeric_limits<int>::max(); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1262 } |
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 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1265 Value ListReceived(const Array& params, bool fByAccounts) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1266 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1267 // Minimum confirmations |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1268 int nMinDepth = 1; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1269 if (params.size() > 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1270 nMinDepth = params[0].get_int(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1271 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1272 // Whether to include empty accounts |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1273 bool fIncludeEmpty = false; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1274 if (params.size() > 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1275 fIncludeEmpty = params[1].get_bool(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1276 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1277 // Tally |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
1278 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
|
1279 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
|
1280 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1281 const CWalletTx& wtx = (*it).second; |
1618
e16276182f0f
Fix broken ExtractAddress (refactored, made callers check for addresses in keystore if they care)
Gavin Andresen <gavinandresen@gmail.com>
parents:
1616
diff
changeset
|
1282 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1283 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
|
1284 continue; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1285 |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1286 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
|
1287 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
|
1288 continue; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1289 |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1290 BOOST_FOREACH(const CTxOut& txout, wtx.vout) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1291 { |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1292 CTxDestination address; |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1293 if (!ExtractDestination(txout.scriptPubKey, address) || !IsMine(*pwalletMain, address)) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1294 continue; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1295 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1296 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
|
1297 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
|
1298 item.nConf = min(item.nConf, nDepth); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1299 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1300 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1301 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1302 // Reply |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1303 Array ret; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1304 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
|
1305 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
|
1306 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1307 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
|
1308 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
|
1309 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
|
1310 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
|
1311 continue; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1312 |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
1313 int64 nAmount = 0; |
1594
e79944b2d430
Use std::numeric_limits<> for typesafe INT_MAX/etc
Gavin Andresen <gavinandresen@gmail.com>
parents:
1590
diff
changeset
|
1314 int nConf = std::numeric_limits<int>::max(); |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1315 if (it != mapTally.end()) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1316 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1317 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
|
1318 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
|
1319 } |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1320 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1321 if (fByAccounts) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1322 { |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1323 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
|
1324 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
|
1325 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
|
1326 } |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1327 else |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1328 { |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1329 Object obj; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1330 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
|
1331 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
|
1332 obj.push_back(Pair("amount", ValueFromAmount(nAmount))); |
1594
e79944b2d430
Use std::numeric_limits<> for typesafe INT_MAX/etc
Gavin Andresen <gavinandresen@gmail.com>
parents:
1590
diff
changeset
|
1333 obj.push_back(Pair("confirmations", (nConf == std::numeric_limits<int>::max() ? 0 : nConf))); |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1334 ret.push_back(obj); |
1181
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 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1337 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1338 if (fByAccounts) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1339 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1340 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
|
1341 { |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
1342 int64 nAmount = (*it).second.nAmount; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1343 int nConf = (*it).second.nConf; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1344 Object obj; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1345 obj.push_back(Pair("account", (*it).first)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1346 obj.push_back(Pair("amount", ValueFromAmount(nAmount))); |
1594
e79944b2d430
Use std::numeric_limits<> for typesafe INT_MAX/etc
Gavin Andresen <gavinandresen@gmail.com>
parents:
1590
diff
changeset
|
1347 obj.push_back(Pair("confirmations", (nConf == std::numeric_limits<int>::max() ? 0 : nConf))); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1348 ret.push_back(obj); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1349 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1350 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1351 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1352 return ret; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1353 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1354 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1355 Value listreceivedbyaddress(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1356 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1357 if (fHelp || params.size() > 2) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1358 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1359 "listreceivedbyaddress [minconf=1] [includeempty=false]\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1360 "[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
|
1361 "[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
|
1362 "Returns an array of objects containing:\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1363 " \"address\" : receiving address\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1364 " \"account\" : the account of the receiving address\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1365 " \"amount\" : total amount received by the address\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1366 " \"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
|
1367 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1368 return ListReceived(params, false); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1369 } |
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 Value listreceivedbyaccount(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1372 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1373 if (fHelp || params.size() > 2) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1374 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1375 "listreceivedbyaccount [minconf=1] [includeempty=false]\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1376 "[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
|
1377 "[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
|
1378 "Returns an array of objects containing:\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1379 " \"account\" : the account of the receiving addresses\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1380 " \"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
|
1381 " \"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
|
1382 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1383 return ListReceived(params, true); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1384 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1385 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1386 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
|
1387 { |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
1388 int64 nGeneratedImmature, nGeneratedMature, nFee; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1389 string strSentAccount; |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1390 list<pair<CTxDestination, int64> > listReceived; |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1391 list<pair<CTxDestination, int64> > listSent; |
1618
e16276182f0f
Fix broken ExtractAddress (refactored, made callers check for addresses in keystore if they care)
Gavin Andresen <gavinandresen@gmail.com>
parents:
1616
diff
changeset
|
1392 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1393 wtx.GetAmounts(nGeneratedImmature, nGeneratedMature, listReceived, listSent, nFee, strSentAccount); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1394 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1395 bool fAllAccounts = (strAccount == string("*")); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1396 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1397 // Generated blocks assigned to account "" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1398 if ((nGeneratedMature+nGeneratedImmature) != 0 && (fAllAccounts || strAccount == "")) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1399 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1400 Object entry; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1401 entry.push_back(Pair("account", string(""))); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1402 if (nGeneratedImmature) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1403 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1404 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
|
1405 entry.push_back(Pair("amount", ValueFromAmount(nGeneratedImmature))); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1406 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1407 else |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1408 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1409 entry.push_back(Pair("category", "generate")); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1410 entry.push_back(Pair("amount", ValueFromAmount(nGeneratedMature))); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1411 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1412 if (fLong) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1413 WalletTxToJSON(wtx, entry); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1414 ret.push_back(entry); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1415 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1416 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1417 // Sent |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1418 if ((!listSent.empty() || nFee != 0) && (fAllAccounts || strAccount == strSentAccount)) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1419 { |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1420 BOOST_FOREACH(const PAIRTYPE(CTxDestination, int64)& s, listSent) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1421 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1422 Object entry; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1423 entry.push_back(Pair("account", strSentAccount)); |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1424 entry.push_back(Pair("address", CBitcoinAddress(s.first).ToString())); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1425 entry.push_back(Pair("category", "send")); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1426 entry.push_back(Pair("amount", ValueFromAmount(-s.second))); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1427 entry.push_back(Pair("fee", ValueFromAmount(-nFee))); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1428 if (fLong) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1429 WalletTxToJSON(wtx, entry); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1430 ret.push_back(entry); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1431 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1432 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1433 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1434 // Received |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1435 if (listReceived.size() > 0 && wtx.GetDepthInMainChain() >= nMinDepth) |
2246
b26677f778d1
fix warnings: suggest explicit braces to avoid ambiguous 'else' [-Wparentheses]
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2219
diff
changeset
|
1436 { |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1437 BOOST_FOREACH(const PAIRTYPE(CTxDestination, int64)& r, listReceived) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1438 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1439 string account; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1440 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
|
1441 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
|
1442 if (fAllAccounts || (account == strAccount)) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1443 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1444 Object entry; |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1445 entry.push_back(Pair("account", account)); |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1446 entry.push_back(Pair("address", CBitcoinAddress(r.first).ToString())); |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1447 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
|
1448 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
|
1449 if (fLong) |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1450 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
|
1451 ret.push_back(entry); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1452 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1453 } |
2246
b26677f778d1
fix warnings: suggest explicit braces to avoid ambiguous 'else' [-Wparentheses]
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2219
diff
changeset
|
1454 } |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1455 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1456 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1457 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
|
1458 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1459 bool fAllAccounts = (strAccount == string("*")); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1460 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1461 if (fAllAccounts || acentry.strAccount == strAccount) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1462 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1463 Object entry; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1464 entry.push_back(Pair("account", acentry.strAccount)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1465 entry.push_back(Pair("category", "move")); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1466 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
|
1467 entry.push_back(Pair("amount", ValueFromAmount(acentry.nCreditDebit))); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1468 entry.push_back(Pair("otheraccount", acentry.strOtherAccount)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1469 entry.push_back(Pair("comment", acentry.strComment)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1470 ret.push_back(entry); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1471 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1472 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1473 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1474 Value listtransactions(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1475 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1476 if (fHelp || params.size() > 3) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1477 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1478 "listtransactions [account] [count=10] [from=0]\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1479 "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
|
1480 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1481 string strAccount = "*"; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1482 if (params.size() > 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1483 strAccount = params[0].get_str(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1484 int nCount = 10; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1485 if (params.size() > 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1486 nCount = params[1].get_int(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1487 int nFrom = 0; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1488 if (params.size() > 2) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1489 nFrom = params[2].get_int(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1490 |
2168
babecba95257
Bug fix listtransactions from/count handling.
Gavin Andresen <gavinandresen@gmail.com>
parents:
2154
diff
changeset
|
1491 if (nCount < 0) |
babecba95257
Bug fix listtransactions from/count handling.
Gavin Andresen <gavinandresen@gmail.com>
parents:
2154
diff
changeset
|
1492 throw JSONRPCError(-8, "Negative count"); |
babecba95257
Bug fix listtransactions from/count handling.
Gavin Andresen <gavinandresen@gmail.com>
parents:
2154
diff
changeset
|
1493 if (nFrom < 0) |
babecba95257
Bug fix listtransactions from/count handling.
Gavin Andresen <gavinandresen@gmail.com>
parents:
2154
diff
changeset
|
1494 throw JSONRPCError(-8, "Negative from"); |
babecba95257
Bug fix listtransactions from/count handling.
Gavin Andresen <gavinandresen@gmail.com>
parents:
2154
diff
changeset
|
1495 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1496 Array ret; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1497 CWalletDB walletdb(pwalletMain->strWalletFile); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1498 |
2168
babecba95257
Bug fix listtransactions from/count handling.
Gavin Andresen <gavinandresen@gmail.com>
parents:
2154
diff
changeset
|
1499 // First: get all CWalletTx and CAccountingEntry into a sorted-by-time multimap. |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1500 typedef pair<CWalletTx*, CAccountingEntry*> TxPair; |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
1501 typedef multimap<int64, TxPair > TxItems; |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1502 TxItems txByTime; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1503 |
2168
babecba95257
Bug fix listtransactions from/count handling.
Gavin Andresen <gavinandresen@gmail.com>
parents:
2154
diff
changeset
|
1504 // Note: maintaining indices in the database of (account,time) --> txid and (account, time) --> acentry |
babecba95257
Bug fix listtransactions from/count handling.
Gavin Andresen <gavinandresen@gmail.com>
parents:
2154
diff
changeset
|
1505 // would make this much faster for applications that do this a lot. |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1506 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
|
1507 { |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1508 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
|
1509 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
|
1510 } |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1511 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
|
1512 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
|
1513 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
|
1514 { |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1515 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
|
1516 } |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1517 |
2168
babecba95257
Bug fix listtransactions from/count handling.
Gavin Andresen <gavinandresen@gmail.com>
parents:
2154
diff
changeset
|
1518 // iterate backwards until we have nCount items to return: |
babecba95257
Bug fix listtransactions from/count handling.
Gavin Andresen <gavinandresen@gmail.com>
parents:
2154
diff
changeset
|
1519 for (TxItems::reverse_iterator it = txByTime.rbegin(); it != txByTime.rend(); ++it) |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1520 { |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1521 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
|
1522 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
|
1523 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
|
1524 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
|
1525 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
|
1526 AcentryToJSON(*pacentry, strAccount, ret); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1527 |
2443
e1b3cf031d0c
Kill warning from unavoidable signed/unsigned comparison in bitcoinrpc.cpp.
Gregory Maxwell <greg@xiph.org>
parents:
2414
diff
changeset
|
1528 if ((int)ret.size() >= (nCount+nFrom)) break; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1529 } |
2168
babecba95257
Bug fix listtransactions from/count handling.
Gavin Andresen <gavinandresen@gmail.com>
parents:
2154
diff
changeset
|
1530 // ret is newest to oldest |
2746
246ba5ba6805
introduce a new StartShutdown() function, which starts a thread with Shutdown() if no GUI is used and calls uiInterface.QueueShutdown() if a GUI is used / all direct uiInterface.QueueShutdown() calls are replaced with Shutdown() - this ensures a clean GUI shutdown, even when catching a SIGTERM and allows the BitcoinGUI destructor to get called (which fixes a tray-icon issue and keeps the tray-icon until Bitcoin-Qt exits)
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2723
diff
changeset
|
1531 |
2311
20e40ae0d404
Add casts for unavoidable signed/unsigned comparisons
Jeff Garzik <jgarzik@exmulti.com>
parents:
2294
diff
changeset
|
1532 if (nFrom > (int)ret.size()) |
20e40ae0d404
Add casts for unavoidable signed/unsigned comparisons
Jeff Garzik <jgarzik@exmulti.com>
parents:
2294
diff
changeset
|
1533 nFrom = ret.size(); |
20e40ae0d404
Add casts for unavoidable signed/unsigned comparisons
Jeff Garzik <jgarzik@exmulti.com>
parents:
2294
diff
changeset
|
1534 if ((nFrom + nCount) > (int)ret.size()) |
20e40ae0d404
Add casts for unavoidable signed/unsigned comparisons
Jeff Garzik <jgarzik@exmulti.com>
parents:
2294
diff
changeset
|
1535 nCount = ret.size() - nFrom; |
2168
babecba95257
Bug fix listtransactions from/count handling.
Gavin Andresen <gavinandresen@gmail.com>
parents:
2154
diff
changeset
|
1536 Array::iterator first = ret.begin(); |
babecba95257
Bug fix listtransactions from/count handling.
Gavin Andresen <gavinandresen@gmail.com>
parents:
2154
diff
changeset
|
1537 std::advance(first, nFrom); |
babecba95257
Bug fix listtransactions from/count handling.
Gavin Andresen <gavinandresen@gmail.com>
parents:
2154
diff
changeset
|
1538 Array::iterator last = ret.begin(); |
babecba95257
Bug fix listtransactions from/count handling.
Gavin Andresen <gavinandresen@gmail.com>
parents:
2154
diff
changeset
|
1539 std::advance(last, nFrom+nCount); |
babecba95257
Bug fix listtransactions from/count handling.
Gavin Andresen <gavinandresen@gmail.com>
parents:
2154
diff
changeset
|
1540 |
babecba95257
Bug fix listtransactions from/count handling.
Gavin Andresen <gavinandresen@gmail.com>
parents:
2154
diff
changeset
|
1541 if (last != ret.end()) ret.erase(last, ret.end()); |
babecba95257
Bug fix listtransactions from/count handling.
Gavin Andresen <gavinandresen@gmail.com>
parents:
2154
diff
changeset
|
1542 if (first != ret.begin()) ret.erase(ret.begin(), first); |
babecba95257
Bug fix listtransactions from/count handling.
Gavin Andresen <gavinandresen@gmail.com>
parents:
2154
diff
changeset
|
1543 |
babecba95257
Bug fix listtransactions from/count handling.
Gavin Andresen <gavinandresen@gmail.com>
parents:
2154
diff
changeset
|
1544 std::reverse(ret.begin(), ret.end()); // Return oldest to newest |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1545 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1546 return ret; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1547 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1548 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1549 Value listaccounts(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1550 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1551 if (fHelp || params.size() > 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1552 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1553 "listaccounts [minconf=1]\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1554 "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
|
1555 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1556 int nMinDepth = 1; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1557 if (params.size() > 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1558 nMinDepth = params[0].get_int(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1559 |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
1560 map<string, int64> mapAccountBalances; |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1561 BOOST_FOREACH(const PAIRTYPE(CTxDestination, string)& entry, pwalletMain->mapAddressBook) { |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1562 if (IsMine(*pwalletMain, entry.first)) // This address belongs to me |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1563 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
|
1564 } |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1565 |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1566 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
|
1567 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1568 const CWalletTx& wtx = (*it).second; |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
1569 int64 nGeneratedImmature, nGeneratedMature, nFee; |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1570 string strSentAccount; |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1571 list<pair<CTxDestination, int64> > listReceived; |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1572 list<pair<CTxDestination, int64> > listSent; |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1573 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
|
1574 mapAccountBalances[strSentAccount] -= nFee; |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1575 BOOST_FOREACH(const PAIRTYPE(CTxDestination, int64)& s, listSent) |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1576 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
|
1577 if (wtx.GetDepthInMainChain() >= nMinDepth) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1578 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1579 mapAccountBalances[""] += nGeneratedMature; |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1580 BOOST_FOREACH(const PAIRTYPE(CTxDestination, int64)& r, listReceived) |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1581 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
|
1582 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
|
1583 else |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1584 mapAccountBalances[""] += r.second; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1585 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1586 } |
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 list<CAccountingEntry> acentries; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1589 CWalletDB(pwalletMain->strWalletFile).ListAccountCreditDebit("*", acentries); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1590 BOOST_FOREACH(const CAccountingEntry& entry, acentries) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1591 mapAccountBalances[entry.strAccount] += entry.nCreditDebit; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1592 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1593 Object ret; |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
1594 BOOST_FOREACH(const PAIRTYPE(string, int64)& accountBalance, mapAccountBalances) { |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1595 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
|
1596 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1597 return ret; |
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 |
1382
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1600 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
|
1601 { |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1602 if (fHelp) |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1603 throw runtime_error( |
2319
b155de017684
listsinceblock: rpc param blockid -> blockhash
freewil <sean@eternalrise.com>
parents:
2311
diff
changeset
|
1604 "listsinceblock [blockhash] [target-confirmations]\n" |
b155de017684
listsinceblock: rpc param blockid -> blockhash
freewil <sean@eternalrise.com>
parents:
2311
diff
changeset
|
1605 "Get all transactions in blocks since block [blockhash], or all transactions if omitted"); |
1382
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1606 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1607 CBlockIndex *pindex = NULL; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1608 int target_confirms = 1; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1609 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1610 if (params.size() > 0) |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1611 { |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1612 uint256 blockId = 0; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1613 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1614 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
|
1615 pindex = CBlockLocator(blockId).GetBlockIndex(); |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1616 } |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1617 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1618 if (params.size() > 1) |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1619 { |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1620 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
|
1621 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1622 if (target_confirms < 1) |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1623 throw JSONRPCError(-8, "Invalid parameter"); |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1624 } |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1625 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1626 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
|
1627 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1628 Array transactions; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1629 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1630 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
|
1631 { |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1632 CWalletTx tx = (*it).second; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1633 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1634 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
|
1635 ListTransactions(tx, "*", 0, true, transactions); |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1636 } |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1637 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1638 uint256 lastblock; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1639 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1640 if (target_confirms == 1) |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1641 { |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1642 lastblock = hashBestChain; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1643 } |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1644 else |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1645 { |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1646 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
|
1647 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1648 CBlockIndex *block; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1649 for (block = pindexBest; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1650 block && block->nHeight > target_height; |
1749
a16663dadac9
Compile with extra warnings turned on. And more makefile/code tidying up.
Gavin Andresen <gavinandresen@gmail.com>
parents:
1734
diff
changeset
|
1651 block = block->pprev) { } |
1382
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1652 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1653 lastblock = block ? block->GetBlockHash() : 0; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1654 } |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1655 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1656 Object ret; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1657 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
|
1658 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
|
1659 |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1660 return ret; |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1661 } |
f9e09403e449
Merge branch 'listsinceblock' of https://github.com/cdhowie/bitcoin
Gavin Andresen <gavinandresen@gmail.com>
parents:
1378
diff
changeset
|
1662 |
2413
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
1663 void |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
1664 AnyTxToJSON(const uint256 hash, const CTransaction* ptx, Object& entry, const Object& decompositions) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1665 { |
2288
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1666 if (pwalletMain->mapWallet.count(hash)) |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1667 { |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1668 const CWalletTx& wtx = pwalletMain->mapWallet[hash]; |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1669 |
2413
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
1670 TxToJSON(wtx, entry, decompositions); |
2288
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1671 |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1672 int64 nCredit = wtx.GetCredit(); |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1673 int64 nDebit = wtx.GetDebit(); |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1674 int64 nNet = nCredit - nDebit; |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1675 int64 nFee = (wtx.IsFromMe() ? wtx.GetValueOut() - nDebit : 0); |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1676 |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1677 entry.push_back(Pair("amount", ValueFromAmount(nNet - nFee))); |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1678 if (wtx.IsFromMe()) |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1679 entry.push_back(Pair("fee", ValueFromAmount(nFee))); |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1680 |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1681 WalletTxToJSON(wtx, entry); |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1682 |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1683 Array details; |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1684 ListTransactions(pwalletMain->mapWallet[hash], "*", 0, false, details); |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1685 entry.push_back(Pair("details", details)); |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1686 } |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1687 else |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1688 { |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1689 CTransaction tx; |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1690 uint256 hashBlock = 0; |
2413
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
1691 if ((!ptx) && GetTransaction(hash, tx, hashBlock)) |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
1692 ptx = &tx; |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
1693 if (ptx) |
2288
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1694 { |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1695 entry.push_back(Pair("txid", hash.GetHex())); |
2413
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
1696 TxToJSON(*ptx, entry, decompositions); |
2288
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1697 if (hashBlock == 0) |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1698 entry.push_back(Pair("confirmations", 0)); |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1699 else |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1700 { |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1701 entry.push_back(Pair("blockhash", hashBlock.GetHex())); |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1702 map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(hashBlock); |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1703 if (mi != mapBlockIndex.end() && (*mi).second) |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1704 { |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1705 CBlockIndex* pindex = (*mi).second; |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1706 if (pindex->IsInMainChain()) |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1707 { |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1708 entry.push_back(Pair("confirmations", 1 + nBestHeight - pindex->nHeight)); |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1709 entry.push_back(Pair("time", (boost::int64_t)pindex->nTime)); |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1710 } |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1711 else |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1712 entry.push_back(Pair("confirmations", 0)); |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1713 } |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1714 } |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1715 } |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1716 else |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1717 throw JSONRPCError(-5, "No information available about transaction"); |
377eedafc770
gettransaction RPC for non-wallet transactions
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2280
diff
changeset
|
1718 } |
2413
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
1719 } |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
1720 |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
1721 Value gettransaction(const Array& params, bool fHelp) |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
1722 { |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
1723 if (fHelp || params.size() < 1 || params.size() > 2) |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
1724 throw runtime_error( |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
1725 "gettransaction <txid> [decompositions]\n" |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
1726 "Get detailed information about <txid>"); |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
1727 |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
1728 uint256 hash; |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
1729 hash.SetHex(params[0].get_str()); |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
1730 |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
1731 Object entry; |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
1732 |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
1733 AnyTxToJSON(hash, NULL, entry, |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
1734 (params.size() > 1) ? params[1].get_obj() : emptyobj); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1735 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1736 return entry; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1737 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1738 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1739 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1740 Value backupwallet(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1741 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1742 if (fHelp || params.size() != 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1743 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1744 "backupwallet <destination>\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1745 "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
|
1746 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1747 string strDest = params[0].get_str(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1748 BackupWallet(*pwalletMain, strDest); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1749 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1750 return Value::null; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1751 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1752 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1753 |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1754 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
|
1755 { |
2619
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
1756 if (fHelp || params.size() > 0) |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1757 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
|
1758 "keypoolrefill\n" |
2619
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
1759 "Fills the keypool." |
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
1760 + HelpRequiringPassphrase()); |
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
1761 |
0f61092b4367
Shared code for wallet lock help and check
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2608
diff
changeset
|
1762 EnsureWalletIsUnlocked(); |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1763 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1764 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
|
1765 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1766 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
|
1767 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
|
1768 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1769 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
|
1770 } |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1771 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1772 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1773 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
|
1774 { |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1775 pwalletMain->TopUpKeyPool(); |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1776 } |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1777 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1778 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
|
1779 { |
1942
aa7f644075af
Resolves issue #922 - "wallet passphrase timeout of several years doesn't work"
Gregory Maxwell <greg@xiph.org>
parents:
1920
diff
changeset
|
1780 int64 nMyWakeTime = GetTimeMillis() + *((int64*)parg) * 1000; |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1781 |
1833
b1be8c6fa967
Fix wallet locking locking
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1828
diff
changeset
|
1782 ENTER_CRITICAL_SECTION(cs_nWalletUnlockTime); |
b1be8c6fa967
Fix wallet locking locking
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1828
diff
changeset
|
1783 |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1784 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
|
1785 { |
1833
b1be8c6fa967
Fix wallet locking locking
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1828
diff
changeset
|
1786 nWalletUnlockTime = nMyWakeTime; |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1787 |
1834
1961ebec6e7d
Extra wallet locking fixes
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1833
diff
changeset
|
1788 do |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1789 { |
1834
1961ebec6e7d
Extra wallet locking fixes
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1833
diff
changeset
|
1790 if (nWalletUnlockTime==0) |
1961ebec6e7d
Extra wallet locking fixes
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1833
diff
changeset
|
1791 break; |
1961ebec6e7d
Extra wallet locking fixes
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1833
diff
changeset
|
1792 int64 nToSleep = nWalletUnlockTime - GetTimeMillis(); |
1961ebec6e7d
Extra wallet locking fixes
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1833
diff
changeset
|
1793 if (nToSleep <= 0) |
1961ebec6e7d
Extra wallet locking fixes
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1833
diff
changeset
|
1794 break; |
1833
b1be8c6fa967
Fix wallet locking locking
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1828
diff
changeset
|
1795 |
b1be8c6fa967
Fix wallet locking locking
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1828
diff
changeset
|
1796 LEAVE_CRITICAL_SECTION(cs_nWalletUnlockTime); |
b1be8c6fa967
Fix wallet locking locking
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1828
diff
changeset
|
1797 Sleep(nToSleep); |
b1be8c6fa967
Fix wallet locking locking
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1828
diff
changeset
|
1798 ENTER_CRITICAL_SECTION(cs_nWalletUnlockTime); |
1834
1961ebec6e7d
Extra wallet locking fixes
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1833
diff
changeset
|
1799 |
1961ebec6e7d
Extra wallet locking fixes
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1833
diff
changeset
|
1800 } while(1); |
1961ebec6e7d
Extra wallet locking fixes
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1833
diff
changeset
|
1801 |
1961ebec6e7d
Extra wallet locking fixes
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1833
diff
changeset
|
1802 if (nWalletUnlockTime) |
1961ebec6e7d
Extra wallet locking fixes
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1833
diff
changeset
|
1803 { |
1961ebec6e7d
Extra wallet locking fixes
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1833
diff
changeset
|
1804 nWalletUnlockTime = 0; |
1961ebec6e7d
Extra wallet locking fixes
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1833
diff
changeset
|
1805 pwalletMain->Lock(); |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1806 } |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1807 } |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1808 else |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1809 { |
1833
b1be8c6fa967
Fix wallet locking locking
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1828
diff
changeset
|
1810 if (nWalletUnlockTime < nMyWakeTime) |
b1be8c6fa967
Fix wallet locking locking
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1828
diff
changeset
|
1811 nWalletUnlockTime = nMyWakeTime; |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1812 } |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1813 |
1833
b1be8c6fa967
Fix wallet locking locking
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1828
diff
changeset
|
1814 LEAVE_CRITICAL_SECTION(cs_nWalletUnlockTime); |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1815 |
1942
aa7f644075af
Resolves issue #922 - "wallet passphrase timeout of several years doesn't work"
Gregory Maxwell <greg@xiph.org>
parents:
1920
diff
changeset
|
1816 delete (int64*)parg; |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1817 } |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1818 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1819 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
|
1820 { |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1821 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
|
1822 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
|
1823 "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
|
1824 "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
|
1825 if (fHelp) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1826 return true; |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1827 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
|
1828 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
|
1829 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1830 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
|
1831 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
|
1832 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1833 // 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
|
1834 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
|
1835 strWalletPass.reserve(100); |
1533
d0ccfedf2957
Implement an mlock()'d string class for storing passphrases
Dylan Noblesmith <nobled@dreamwidth.org>
parents:
1521
diff
changeset
|
1836 // 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
|
1837 // 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
|
1838 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
|
1839 |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1840 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
|
1841 { |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1842 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
|
1843 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
|
1844 } |
1274
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1845 else |
d8a2cdd23fdb
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1264
diff
changeset
|
1846 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
|
1847 "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
|
1848 "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
|
1849 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1850 CreateThread(ThreadTopUpKeyPool, NULL); |
1942
aa7f644075af
Resolves issue #922 - "wallet passphrase timeout of several years doesn't work"
Gregory Maxwell <greg@xiph.org>
parents:
1920
diff
changeset
|
1851 int64* pnSleepTime = new int64(params[1].get_int64()); |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1852 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
|
1853 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1854 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
|
1855 } |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1856 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1857 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1858 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
|
1859 { |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1860 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
|
1861 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
|
1862 "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
|
1863 "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
|
1864 if (fHelp) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1865 return true; |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1866 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
|
1867 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
|
1868 |
1533
d0ccfedf2957
Implement an mlock()'d string class for storing passphrases
Dylan Noblesmith <nobled@dreamwidth.org>
parents:
1521
diff
changeset
|
1869 // 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
|
1870 // 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
|
1871 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
|
1872 strOldWalletPass.reserve(100); |
1533
d0ccfedf2957
Implement an mlock()'d string class for storing passphrases
Dylan Noblesmith <nobled@dreamwidth.org>
parents:
1521
diff
changeset
|
1873 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
|
1874 |
d0ccfedf2957
Implement an mlock()'d string class for storing passphrases
Dylan Noblesmith <nobled@dreamwidth.org>
parents:
1521
diff
changeset
|
1875 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
|
1876 strNewWalletPass.reserve(100); |
1533
d0ccfedf2957
Implement an mlock()'d string class for storing passphrases
Dylan Noblesmith <nobled@dreamwidth.org>
parents:
1521
diff
changeset
|
1877 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
|
1878 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1879 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
|
1880 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
|
1881 "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
|
1882 "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
|
1883 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1884 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
|
1885 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
|
1886 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1887 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
|
1888 } |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1889 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1890 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1891 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
|
1892 { |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1893 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
|
1894 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
|
1895 "walletlock\n" |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1896 "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
|
1897 "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
|
1898 "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
|
1899 if (fHelp) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1900 return true; |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1901 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
|
1902 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
|
1903 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1904 { |
2190
60fe81a4849b
Use scoped locks instead of CRITICAL_BLOCK
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2174
diff
changeset
|
1905 LOCK(cs_nWalletUnlockTime); |
1834
1961ebec6e7d
Extra wallet locking fixes
Pieter Wuille <pieter.wuille@gmail.com>
parents:
1833
diff
changeset
|
1906 pwalletMain->Lock(); |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1907 nWalletUnlockTime = 0; |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1908 } |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1909 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1910 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
|
1911 } |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1912 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1913 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1914 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
|
1915 { |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1916 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
|
1917 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
|
1918 "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
|
1919 "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
|
1920 if (fHelp) |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1921 return true; |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1922 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
|
1923 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
|
1924 |
1533
d0ccfedf2957
Implement an mlock()'d string class for storing passphrases
Dylan Noblesmith <nobled@dreamwidth.org>
parents:
1521
diff
changeset
|
1925 // 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
|
1926 // 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
|
1927 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
|
1928 strWalletPass.reserve(100); |
1533
d0ccfedf2957
Implement an mlock()'d string class for storing passphrases
Dylan Noblesmith <nobled@dreamwidth.org>
parents:
1521
diff
changeset
|
1929 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
|
1930 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1931 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
|
1932 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
|
1933 "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
|
1934 "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
|
1935 |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1936 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
|
1937 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
|
1938 |
1501
26d0f350347a
Obsolete keypool and make sure database removes log files on shutdown.
Gavin Andresen <gavinandresen@gmail.com>
parents:
1493
diff
changeset
|
1939 // 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
|
1940 // 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
|
1941 // unencrypted private keys. So: |
2746
246ba5ba6805
introduce a new StartShutdown() function, which starts a thread with Shutdown() if no GUI is used and calls uiInterface.QueueShutdown() if a GUI is used / all direct uiInterface.QueueShutdown() calls are replaced with Shutdown() - this ensures a clean GUI shutdown, even when catching a SIGTERM and allows the BitcoinGUI destructor to get called (which fixes a tray-icon issue and keeps the tray-icon until Bitcoin-Qt exits)
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2723
diff
changeset
|
1942 StartShutdown(); |
2618
56d80f7ce10c
change strings to Bitcoin (uppercase), where it is used as a noun and update strings to use "Qt" (and not qt or QT) / update initialisation of notificator to use qApp->applicationName() instead of a static string
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2608
diff
changeset
|
1943 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
|
1944 } |
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1945 |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1946 class DescribeAddressVisitor : public boost::static_visitor<Object> |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1947 { |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1948 public: |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1949 Object operator()(const CNoDestination &dest) const { return Object(); } |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1950 |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1951 Object operator()(const CKeyID &keyID) const { |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1952 Object obj; |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1953 CPubKey vchPubKey; |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1954 pwalletMain->GetPubKey(keyID, vchPubKey); |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1955 obj.push_back(Pair("isscript", false)); |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1956 obj.push_back(Pair("pubkey", HexStr(vchPubKey.Raw()))); |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1957 obj.push_back(Pair("iscompressed", vchPubKey.IsCompressed())); |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1958 return obj; |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1959 } |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1960 |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1961 Object operator()(const CScriptID &scriptID) const { |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1962 Object obj; |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1963 obj.push_back(Pair("isscript", true)); |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1964 CScript subscript; |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1965 pwalletMain->GetCScript(scriptID, subscript); |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1966 std::vector<CTxDestination> addresses; |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1967 txnouttype whichType; |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1968 int nRequired; |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1969 ExtractDestinations(subscript, whichType, addresses, nRequired); |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1970 obj.push_back(Pair("script", GetTxnOutputType(whichType))); |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1971 Array a; |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1972 BOOST_FOREACH(const CTxDestination& addr, addresses) |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1973 a.push_back(CBitcoinAddress(addr).ToString()); |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1974 obj.push_back(Pair("addresses", a)); |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1975 if (whichType == TX_MULTISIG) |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1976 obj.push_back(Pair("sigsrequired", nRequired)); |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1977 return obj; |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1978 } |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1979 }; |
1186
69323e942d0e
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1184
diff
changeset
|
1980 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1981 Value validateaddress(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1982 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1983 if (fHelp || params.size() != 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1984 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1985 "validateaddress <bitcoinaddress>\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1986 "Return information about <bitcoinaddress>."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1987 |
1256
3a687b55c04b
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1220
diff
changeset
|
1988 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
|
1989 bool isValid = address.IsValid(); |
1181
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 Object ret; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1992 ret.push_back(Pair("isvalid", isValid)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1993 if (isValid) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1994 { |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1995 CTxDestination dest = address.Get(); |
1220
e69e63528ec2
Merge remote branch 'upstream/master'
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1186
diff
changeset
|
1996 string currentAddress = address.ToString(); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
1997 ret.push_back(Pair("address", currentAddress)); |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1998 bool fMine = IsMine(*pwalletMain, dest); |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
1999 ret.push_back(Pair("ismine", fMine)); |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
2000 if (fMine) { |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
2001 Object detail = boost::apply_visitor(DescribeAddressVisitor(), dest); |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
2002 ret.insert(ret.end(), detail.begin(), detail.end()); |
1598
057a59e89d51
Support 3 new multisignature IsStandard transactions
Gavin Andresen <gavinandresen@gmail.com>
parents:
1588
diff
changeset
|
2003 } |
2688
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
2004 if (pwalletMain->mapAddressBook.count(dest)) |
2c65e5d626eb
Refactor: split CKeyID/CScriptID/CTxDestination from CBitcoinAddress
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2687
diff
changeset
|
2005 ret.push_back(Pair("account", pwalletMain->mapAddressBook[dest])); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2006 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2007 return ret; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2008 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2009 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2010 Value getwork(const Array& params, bool fHelp) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2011 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2012 if (fHelp || params.size() > 1) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2013 throw runtime_error( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2014 "getwork [data]\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2015 "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
|
2016 " \"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
|
2017 " \"data\" : block data\n" |
1337
447bba2f0a56
deprecate midstate and hash1 in getwork
Nils Schneider <nils.schneider@gmail.com>
parents:
1320
diff
changeset
|
2018 " \"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
|
2019 " \"target\" : little endian hash target\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2020 "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
|
2021 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2022 if (vNodes.empty()) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2023 throw JSONRPCError(-9, "Bitcoin is not connected!"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2024 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2025 if (IsInitialBlockDownload()) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2026 throw JSONRPCError(-10, "Bitcoin is downloading blocks..."); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2027 |
1292
024a12d5558d
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1274
diff
changeset
|
2028 typedef map<uint256, pair<CBlock*, CScript> > mapNewBlock_t; |
2427
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
2029 static mapNewBlock_t mapNewBlock; // FIXME: thread safety |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2030 static vector<CBlock*> vNewBlock; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2031 static CReserveKey reservekey(pwalletMain); |
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 if (params.size() == 0) |
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 // Update block |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2036 static unsigned int nTransactionsUpdatedLast; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2037 static CBlockIndex* pindexPrev; |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
2038 static int64 nStart; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2039 static CBlock* pblock; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2040 if (pindexPrev != pindexBest || |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2041 (nTransactionsUpdated != nTransactionsUpdatedLast && GetTime() - nStart > 60)) |
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 if (pindexPrev != pindexBest) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2044 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2045 // Deallocate old blocks since they're obsolete now |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2046 mapNewBlock.clear(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2047 BOOST_FOREACH(CBlock* pblock, vNewBlock) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2048 delete pblock; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2049 vNewBlock.clear(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2050 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2051 nTransactionsUpdatedLast = nTransactionsUpdated; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2052 pindexPrev = pindexBest; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2053 nStart = GetTime(); |
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 // Create new block |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2056 pblock = CreateNewBlock(reservekey); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2057 if (!pblock) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2058 throw JSONRPCError(-7, "Out of memory"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2059 vNewBlock.push_back(pblock); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2060 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2061 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2062 // Update nTime |
1854
cdea646ab88a
Fix issue #848 : broken mining on testnet
Gavin Andresen <gavinandresen@gmail.com>
parents:
1834
diff
changeset
|
2063 pblock->UpdateTime(pindexPrev); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2064 pblock->nNonce = 0; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2065 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2066 // Update nExtraNonce |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2067 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
|
2068 IncrementExtraNonce(pblock, pindexPrev, nExtraNonce); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2069 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2070 // Save |
1292
024a12d5558d
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1274
diff
changeset
|
2071 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
|
2072 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2073 // Prebuild hash buffers |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2074 char pmidstate[32]; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2075 char pdata[128]; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2076 char phash1[64]; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2077 FormatHashBuffers(pblock, pmidstate, pdata, phash1); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2078 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2079 uint256 hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2080 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2081 Object result; |
1337
447bba2f0a56
deprecate midstate and hash1 in getwork
Nils Schneider <nils.schneider@gmail.com>
parents:
1320
diff
changeset
|
2082 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
|
2083 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
|
2084 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
|
2085 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
|
2086 return result; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2087 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2088 else |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2089 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2090 // Parse parameters |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2091 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
|
2092 if (vchData.size() != 128) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2093 throw JSONRPCError(-8, "Invalid parameter"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2094 CBlock* pdata = (CBlock*)&vchData[0]; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2095 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2096 // Byte reverse |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2097 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
|
2098 ((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
|
2099 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2100 // Get saved block |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2101 if (!mapNewBlock.count(pdata->hashMerkleRoot)) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2102 return false; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2103 CBlock* pblock = mapNewBlock[pdata->hashMerkleRoot].first; |
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 pblock->nTime = pdata->nTime; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2106 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
|
2107 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
|
2108 pblock->hashMerkleRoot = pblock->BuildMerkleTree(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2109 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2110 return CheckWork(pblock, *pwalletMain, reservekey); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2111 } |
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 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2114 |
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
|
2115 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
|
2116 { |
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
|
2117 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
|
2118 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
|
2119 "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
|
2120 "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
|
2121 " \"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
|
2122 " \"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
|
2123 " \"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
|
2124 " \"coinbasevalue\" : maximum allowable input to coinbase transaction, including the generation award and transaction fees\n" |
1758
b76bf0a37f87
Separated COINBASE_FLAGS out into main.h and made RPC getmemorypool return it
Forrest Voight <forrest@forre.st>
parents:
1755
diff
changeset
|
2125 " \"coinbaseflags\" : data that should be included in coinbase so support for new features can be judged\n" |
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
|
2126 " \"time\" : timestamp appropriate for next block\n" |
1759
1236caa4dc39
Added mintime and curtime to RPC getmemorypool
Forrest Voight <forrest@forre.st>
parents:
1758
diff
changeset
|
2127 " \"mintime\" : minimum timestamp appropriate for next block\n" |
1236caa4dc39
Added mintime and curtime to RPC getmemorypool
Forrest Voight <forrest@forre.st>
parents:
1758
diff
changeset
|
2128 " \"curtime\" : current timestamp\n" |
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
|
2129 " \"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
|
2130 "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
|
2131 |
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
|
2132 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
|
2133 { |
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
|
2134 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
|
2135 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
|
2136 |
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
|
2137 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
|
2138 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
|
2139 |
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
|
2140 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
|
2141 |
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
|
2142 // 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
|
2143 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
|
2144 static CBlockIndex* pindexPrev; |
1616
997b708d15b8
Revert "Use standard C99 (and Qt) types for 64-bit integers"
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
1615
diff
changeset
|
2145 static int64 nStart; |
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
|
2146 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
|
2147 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
|
2148 (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
|
2149 { |
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
|
2150 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
|
2151 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
|
2152 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
|
2153 |
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
|
2154 // 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
|
2155 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
|
2156 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
|
2157 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
|
2158 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
|
2159 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
|
2160 } |
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
|
2161 |
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
|
2162 // Update nTime |
1854
cdea646ab88a
Fix issue #848 : broken mining on testnet
Gavin Andresen <gavinandresen@gmail.com>
parents:
1834
diff
changeset
|
2163 pblock->UpdateTime(pindexPrev); |
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
|
2164 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
|
2165 |
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
|
2166 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
|
2167 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
|
2168 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
|
2169 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
|
2170 |
2277
0dcf927bc6b2
Further reduce header dependencies
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2275
diff
changeset
|
2171 CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION); |
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
|
2172 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
|
2173 |
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
|
2174 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
|
2175 } |
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
|
2176 |
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
|
2177 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
|
2178 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
|
2179 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
|
2180 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
|
2181 result.push_back(Pair("coinbasevalue", (int64_t)pblock->vtx[0].vout[0].nValue)); |
1758
b76bf0a37f87
Separated COINBASE_FLAGS out into main.h and made RPC getmemorypool return it
Forrest Voight <forrest@forre.st>
parents:
1755
diff
changeset
|
2182 result.push_back(Pair("coinbaseflags", HexStr(COINBASE_FLAGS.begin(), COINBASE_FLAGS.end()))); |
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
|
2183 result.push_back(Pair("time", (int64_t)pblock->nTime)); |
1759
1236caa4dc39
Added mintime and curtime to RPC getmemorypool
Forrest Voight <forrest@forre.st>
parents:
1758
diff
changeset
|
2184 result.push_back(Pair("mintime", (int64_t)pindexPrev->GetMedianTimePast()+1)); |
1236caa4dc39
Added mintime and curtime to RPC getmemorypool
Forrest Voight <forrest@forre.st>
parents:
1758
diff
changeset
|
2185 result.push_back(Pair("curtime", (int64_t)GetAdjustedTime())); |
1900
7ce608dfe20e
Cleanup JSON-RPC getblock output to be consistent
Luke Dashjr <luke-jr+git@utopios.org>
parents:
1869
diff
changeset
|
2186 result.push_back(Pair("bits", HexBits(pblock->nBits))); |
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
|
2187 |
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
|
2188 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
|
2189 } |
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
|
2190 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
|
2191 { |
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
|
2192 // Parse parameters |
2277
0dcf927bc6b2
Further reduce header dependencies
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2275
diff
changeset
|
2193 CDataStream ssBlock(ParseHex(params[0].get_str()), SER_NETWORK, PROTOCOL_VERSION); |
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
|
2194 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
|
2195 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
|
2196 |
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
|
2197 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
|
2198 } |
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
|
2199 } |
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
|
2200 |
3064
8691af55c386
RPC: add 'getrawmempool', listing all transaction ids in memory pool
Jeff Garzik <jgarzik@exmulti.com>
parents:
2746
diff
changeset
|
2201 Value getrawmempool(const Array& params, bool fHelp) |
8691af55c386
RPC: add 'getrawmempool', listing all transaction ids in memory pool
Jeff Garzik <jgarzik@exmulti.com>
parents:
2746
diff
changeset
|
2202 { |
8691af55c386
RPC: add 'getrawmempool', listing all transaction ids in memory pool
Jeff Garzik <jgarzik@exmulti.com>
parents:
2746
diff
changeset
|
2203 if (fHelp || params.size() != 0) |
8691af55c386
RPC: add 'getrawmempool', listing all transaction ids in memory pool
Jeff Garzik <jgarzik@exmulti.com>
parents:
2746
diff
changeset
|
2204 throw runtime_error( |
8691af55c386
RPC: add 'getrawmempool', listing all transaction ids in memory pool
Jeff Garzik <jgarzik@exmulti.com>
parents:
2746
diff
changeset
|
2205 "getrawmempool\n" |
8691af55c386
RPC: add 'getrawmempool', listing all transaction ids in memory pool
Jeff Garzik <jgarzik@exmulti.com>
parents:
2746
diff
changeset
|
2206 "Returns all transaction ids in memory pool."); |
8691af55c386
RPC: add 'getrawmempool', listing all transaction ids in memory pool
Jeff Garzik <jgarzik@exmulti.com>
parents:
2746
diff
changeset
|
2207 |
8691af55c386
RPC: add 'getrawmempool', listing all transaction ids in memory pool
Jeff Garzik <jgarzik@exmulti.com>
parents:
2746
diff
changeset
|
2208 vector<uint256> vtxid; |
8691af55c386
RPC: add 'getrawmempool', listing all transaction ids in memory pool
Jeff Garzik <jgarzik@exmulti.com>
parents:
2746
diff
changeset
|
2209 mempool.queryHashes(vtxid); |
8691af55c386
RPC: add 'getrawmempool', listing all transaction ids in memory pool
Jeff Garzik <jgarzik@exmulti.com>
parents:
2746
diff
changeset
|
2210 |
8691af55c386
RPC: add 'getrawmempool', listing all transaction ids in memory pool
Jeff Garzik <jgarzik@exmulti.com>
parents:
2746
diff
changeset
|
2211 Array a; |
8691af55c386
RPC: add 'getrawmempool', listing all transaction ids in memory pool
Jeff Garzik <jgarzik@exmulti.com>
parents:
2746
diff
changeset
|
2212 BOOST_FOREACH(const uint256& hash, vtxid) |
8691af55c386
RPC: add 'getrawmempool', listing all transaction ids in memory pool
Jeff Garzik <jgarzik@exmulti.com>
parents:
2746
diff
changeset
|
2213 a.push_back(hash.ToString()); |
8691af55c386
RPC: add 'getrawmempool', listing all transaction ids in memory pool
Jeff Garzik <jgarzik@exmulti.com>
parents:
2746
diff
changeset
|
2214 |
8691af55c386
RPC: add 'getrawmempool', listing all transaction ids in memory pool
Jeff Garzik <jgarzik@exmulti.com>
parents:
2746
diff
changeset
|
2215 return a; |
8691af55c386
RPC: add 'getrawmempool', listing all transaction ids in memory pool
Jeff Garzik <jgarzik@exmulti.com>
parents:
2746
diff
changeset
|
2216 } |
8691af55c386
RPC: add 'getrawmempool', listing all transaction ids in memory pool
Jeff Garzik <jgarzik@exmulti.com>
parents:
2746
diff
changeset
|
2217 |
1627
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2218 Value getblockhash(const Array& params, bool fHelp) |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2219 { |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2220 if (fHelp || params.size() != 1) |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2221 throw runtime_error( |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2222 "getblockhash <index>\n" |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2223 "Returns hash of block in best-block-chain at <index>."); |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2224 |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2225 int nHeight = params[0].get_int(); |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2226 if (nHeight < 0 || nHeight > nBestHeight) |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2227 throw runtime_error("Block number out of range."); |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2228 |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2229 CBlock block; |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2230 CBlockIndex* pblockindex = mapBlockIndex[hashBestChain]; |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2231 while (pblockindex->nHeight > nHeight) |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2232 pblockindex = pblockindex->pprev; |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2233 return pblockindex->phashBlock->GetHex(); |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2234 } |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2235 |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2236 Value getblock(const Array& params, bool fHelp) |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2237 { |
2413
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
2238 if (fHelp || params.size() < 1 || params.size() > 2) |
1627
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2239 throw runtime_error( |
2413
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
2240 "getblock <hash> [decompositions]\n" |
1627
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2241 "Returns details of a block with given block-hash."); |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2242 |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2243 std::string strHash = params[0].get_str(); |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2244 uint256 hash(strHash); |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2245 |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2246 if (mapBlockIndex.count(hash) == 0) |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2247 throw JSONRPCError(-5, "Block not found"); |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2248 |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2249 CBlock block; |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2250 CBlockIndex* pblockindex = mapBlockIndex[hash]; |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2251 block.ReadFromDisk(pblockindex, true); |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2252 |
2413
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
2253 return blockToJSON(block, pblockindex, |
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
2254 (params.size() > 1) ? params[1].get_obj() : emptyobj); |
1627
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2255 } |
1a843331dea9
New RPC commands: getblockhash and getblock
Gavin Andresen <gavinandresen@gmail.com>
parents:
1618
diff
changeset
|
2256 |
2676
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2257 Value sendrawtx(const Array& params, bool fHelp) |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2258 { |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2259 if (fHelp || params.size() < 1 || params.size() > 1) |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2260 throw runtime_error( |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2261 "sendrawtx <hex string>\n" |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2262 "Submits raw transaction (serialized, hex-encoded) to local node and network."); |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2263 |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2264 // parse hex string from parameter |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2265 vector<unsigned char> txData(ParseHex(params[0].get_str())); |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2266 CDataStream ssData(txData, SER_NETWORK, PROTOCOL_VERSION); |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2267 CTransaction tx; |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2268 |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2269 // deserialize binary data stream |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2270 try { |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2271 ssData >> tx; |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2272 } |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2273 catch (std::exception &e) { |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2274 throw JSONRPCError(-22, "TX decode failed"); |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2275 } |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2276 |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2277 // push to local node |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2278 CTxDB txdb("r"); |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2279 if (!tx.AcceptToMemoryPool(txdb)) |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2280 throw JSONRPCError(-22, "TX rejected"); |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2281 |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2282 SyncWithWallets(tx, NULL, true); |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2283 |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2284 // relay to network |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2285 CInv inv(MSG_TX, tx.GetHash()); |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2286 RelayInventory(inv); |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2287 |
2707
fbd40fb39873
Make sendrawtx return txid to be consistent with other send methods.
Gavin Andresen <gavinandresen@gmail.com>
parents:
2688
diff
changeset
|
2288 return tx.GetHash().GetHex(); |
2676
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2289 } |
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2290 |
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
|
2291 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2292 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2293 |
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 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2296 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2297 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2298 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2299 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2300 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2301 // |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2302 // Call Table |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2303 // |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2304 |
2292
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2305 |
2294
bc7f29fbeed5
Expose CRPCTable via bitcoinrpc.h for testing
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2293
diff
changeset
|
2306 static const CRPCCommand vRPCCommands[] = |
2292
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2307 { // name function safe mode? |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2308 // ------------------------ ----------------------- ---------- |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2309 { "help", &help, true }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2310 { "stop", &stop, true }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2311 { "getblockcount", &getblockcount, true }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2312 { "getconnectioncount", &getconnectioncount, true }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2313 { "getdifficulty", &getdifficulty, true }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2314 { "getgenerate", &getgenerate, true }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2315 { "setgenerate", &setgenerate, true }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2316 { "gethashespersec", &gethashespersec, true }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2317 { "getinfo", &getinfo, true }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2318 { "getmininginfo", &getmininginfo, true }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2319 { "getnewaddress", &getnewaddress, true }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2320 { "getaccountaddress", &getaccountaddress, true }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2321 { "setaccount", &setaccount, true }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2322 { "getaccount", &getaccount, false }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2323 { "getaddressesbyaccount", &getaddressesbyaccount, true }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2324 { "sendtoaddress", &sendtoaddress, false }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2325 { "getreceivedbyaddress", &getreceivedbyaddress, false }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2326 { "getreceivedbyaccount", &getreceivedbyaccount, false }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2327 { "listreceivedbyaddress", &listreceivedbyaddress, false }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2328 { "listreceivedbyaccount", &listreceivedbyaccount, false }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2329 { "backupwallet", &backupwallet, true }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2330 { "keypoolrefill", &keypoolrefill, true }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2331 { "walletpassphrase", &walletpassphrase, true }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2332 { "walletpassphrasechange", &walletpassphrasechange, false }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2333 { "walletlock", &walletlock, true }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2334 { "encryptwallet", &encryptwallet, false }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2335 { "validateaddress", &validateaddress, true }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2336 { "getbalance", &getbalance, false }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2337 { "move", &movecmd, false }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2338 { "sendfrom", &sendfrom, false }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2339 { "sendmany", &sendmany, false }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2340 { "addmultisigaddress", &addmultisigaddress, false }, |
3064
8691af55c386
RPC: add 'getrawmempool', listing all transaction ids in memory pool
Jeff Garzik <jgarzik@exmulti.com>
parents:
2746
diff
changeset
|
2341 { "getrawmempool", &getrawmempool, true }, |
2292
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2342 { "getblock", &getblock, false }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2343 { "getblockhash", &getblockhash, false }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2344 { "gettransaction", &gettransaction, false }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2345 { "listtransactions", &listtransactions, false }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2346 { "signmessage", &signmessage, false }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2347 { "verifymessage", &verifymessage, false }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2348 { "getwork", &getwork, true }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2349 { "listaccounts", &listaccounts, false }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2350 { "settxfee", &settxfee, false }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2351 { "getmemorypool", &getmemorypool, true }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2352 { "listsinceblock", &listsinceblock, false }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2353 { "dumpprivkey", &dumpprivkey, false }, |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2354 { "importprivkey", &importprivkey, false }, |
2676
264ca7bc2a8b
JSON-RPC: Add 'sendrawtx' op, for sending pre-built TX's to network
Jeff Garzik <jgarzik@exmulti.com>
parents:
2646
diff
changeset
|
2355 { "sendrawtx", &sendrawtx, false }, |
2292
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2356 }; |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2357 |
2293
6edb3e47a45b
Encapsulate mapCommands in class CRPCTable
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2292
diff
changeset
|
2358 CRPCTable::CRPCTable() |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2359 { |
2292
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2360 unsigned int vcidx; |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2361 for (vcidx = 0; vcidx < (sizeof(vRPCCommands) / sizeof(vRPCCommands[0])); vcidx++) |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2362 { |
2294
bc7f29fbeed5
Expose CRPCTable via bitcoinrpc.h for testing
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2293
diff
changeset
|
2363 const CRPCCommand *pcmd; |
2292
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2364 |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2365 pcmd = &vRPCCommands[vcidx]; |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2366 mapCommands[pcmd->name] = pcmd; |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2367 } |
2787ea03c90c
Encapsulate RPC command dispatch in an array of CRPCCommand's
Jeff Garzik <jeff@garzik.org>
parents:
2280
diff
changeset
|
2368 } |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2369 |
2293
6edb3e47a45b
Encapsulate mapCommands in class CRPCTable
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2292
diff
changeset
|
2370 const CRPCCommand *CRPCTable::operator[](string name) const |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2371 { |
2293
6edb3e47a45b
Encapsulate mapCommands in class CRPCTable
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2292
diff
changeset
|
2372 map<string, const CRPCCommand*>::const_iterator it = mapCommands.find(name); |
6edb3e47a45b
Encapsulate mapCommands in class CRPCTable
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2292
diff
changeset
|
2373 if (it == mapCommands.end()) |
6edb3e47a45b
Encapsulate mapCommands in class CRPCTable
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2292
diff
changeset
|
2374 return NULL; |
6edb3e47a45b
Encapsulate mapCommands in class CRPCTable
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2292
diff
changeset
|
2375 return (*it).second; |
6edb3e47a45b
Encapsulate mapCommands in class CRPCTable
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2292
diff
changeset
|
2376 } |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2377 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2378 // |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2379 // HTTP protocol |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2380 // |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2381 // 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
|
2382 // 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
|
2383 // |
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 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
|
2386 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2387 ostringstream s; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2388 s << "POST / HTTP/1.1\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2389 << "User-Agent: bitcoin-json-rpc/" << FormatFullVersion() << "\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2390 << "Host: 127.0.0.1\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2391 << "Content-Type: application/json\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2392 << "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
|
2393 << "Connection: close\r\n" |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2394 << "Accept: application/json\r\n"; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2395 BOOST_FOREACH(const PAIRTYPE(string, string)& item, mapRequestHeaders) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2396 s << item.first << ": " << item.second << "\r\n"; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2397 s << "\r\n" << strMsg; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2398 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2399 return s.str(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2400 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2401 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2402 string rfc1123Time() |
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 char buffer[64]; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2405 time_t now; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2406 time(&now); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2407 struct tm* now_gmt = gmtime(&now); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2408 string locale(setlocale(LC_TIME, NULL)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2409 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
|
2410 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
|
2411 setlocale(LC_TIME, locale.c_str()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2412 return string(buffer); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2413 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2414 |
2428
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2415 static string HTTPReply(int nStatus, const string& strMsg, bool keepalive) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2416 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2417 if (nStatus == 401) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2418 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
|
2419 "Date: %s\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2420 "Server: bitcoin-json-rpc/%s\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2421 "WWW-Authenticate: Basic realm=\"jsonrpc\"\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2422 "Content-Type: text/html\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2423 "Content-Length: 296\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2424 "\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2425 "<!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
|
2426 "\"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
|
2427 "<HTML>\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2428 "<HEAD>\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2429 "<TITLE>Error</TITLE>\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2430 "<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
|
2431 "</HEAD>\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2432 "<BODY><H1>401 Unauthorized.</H1></BODY>\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2433 "</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
|
2434 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
|
2435 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
|
2436 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
|
2437 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
|
2438 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
|
2439 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
|
2440 else cStatus = ""; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2441 return strprintf( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2442 "HTTP/1.1 %d %s\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2443 "Date: %s\r\n" |
2428
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2444 "Connection: %s\r\n" |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2445 "Content-Length: %d\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2446 "Content-Type: application/json\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2447 "Server: bitcoin-json-rpc/%s\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2448 "\r\n" |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2449 "%s", |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2450 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
|
2451 cStatus, |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2452 rfc1123Time().c_str(), |
2428
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2453 keepalive ? "keep-alive" : "close", |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2454 strMsg.size(), |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2455 FormatFullVersion().c_str(), |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2456 strMsg.c_str()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2457 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2458 |
2428
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2459 int ReadHTTPStatus(std::basic_istream<char>& stream, int &proto) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2460 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2461 string str; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2462 getline(stream, str); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2463 vector<string> vWords; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2464 boost::split(vWords, str, boost::is_any_of(" ")); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2465 if (vWords.size() < 2) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2466 return 500; |
2428
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2467 proto = 0; |
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2468 const char *ver = strstr(str.c_str(), "HTTP/1."); |
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2469 if (ver != NULL) |
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2470 proto = atoi(ver+7); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2471 return atoi(vWords[1].c_str()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2472 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2473 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2474 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
|
2475 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2476 int nLen = 0; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2477 loop |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2478 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2479 string str; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2480 std::getline(stream, str); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2481 if (str.empty() || str == "\r") |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2482 break; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2483 string::size_type nColon = str.find(":"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2484 if (nColon != string::npos) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2485 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2486 string strHeader = str.substr(0, nColon); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2487 boost::trim(strHeader); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2488 boost::to_lower(strHeader); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2489 string strValue = str.substr(nColon+1); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2490 boost::trim(strValue); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2491 mapHeadersRet[strHeader] = strValue; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2492 if (strHeader == "content-length") |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2493 nLen = atoi(strValue.c_str()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2494 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2495 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2496 return nLen; |
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 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2499 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
|
2500 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2501 mapHeadersRet.clear(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2502 strMessageRet = ""; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2503 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2504 // Read status |
2527
396e7905991f
Fix warning about uninitialized value
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2508
diff
changeset
|
2505 int nProto = 0; |
2428
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2506 int nStatus = ReadHTTPStatus(stream, nProto); |
1181
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 // Read header |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2509 int nLen = ReadHTTPHeader(stream, mapHeadersRet); |
2311
20e40ae0d404
Add casts for unavoidable signed/unsigned comparisons
Jeff Garzik <jgarzik@exmulti.com>
parents:
2294
diff
changeset
|
2510 if (nLen < 0 || nLen > (int)MAX_SIZE) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2511 return 500; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2512 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2513 // Read message |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2514 if (nLen > 0) |
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 vector<char> vch(nLen); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2517 stream.read(&vch[0], nLen); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2518 strMessageRet = string(vch.begin(), vch.end()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2519 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2520 |
2428
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2521 string sConHdr = mapHeadersRet["connection"]; |
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2522 |
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2523 if ((sConHdr != "close") && (sConHdr != "keep-alive")) |
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2524 { |
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2525 if (nProto >= 1) |
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2526 mapHeadersRet["connection"] = "keep-alive"; |
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2527 else |
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2528 mapHeadersRet["connection"] = "close"; |
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2529 } |
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2530 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2531 return nStatus; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2532 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2533 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2534 bool HTTPAuthorized(map<string, string>& mapHeaders) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2535 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2536 string strAuth = mapHeaders["authorization"]; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2537 if (strAuth.substr(0,6) != "Basic ") |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2538 return false; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2539 string strUserPass64 = strAuth.substr(6); boost::trim(strUserPass64); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2540 string strUserPass = DecodeBase64(strUserPass64); |
1541
d9bb9c516845
Speed up RPC authentication (reworked pull from Joel Katz)
Gavin Andresen <gavinandresen@gmail.com>
parents:
1533
diff
changeset
|
2541 return strUserPass == strRPCUserColonPass; |
1181
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 |
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 // 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
|
2546 // 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
|
2547 // unspecified (HTTP errors and contents of 'error'). |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2548 // |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2549 // 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
|
2550 // 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
|
2551 // 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
|
2552 // |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2553 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2554 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
|
2555 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2556 Object request; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2557 request.push_back(Pair("method", strMethod)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2558 request.push_back(Pair("params", params)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2559 request.push_back(Pair("id", id)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2560 return write_string(Value(request), false) + "\n"; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2561 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2562 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2563 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
|
2564 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2565 Object reply; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2566 if (error.type() != null_type) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2567 reply.push_back(Pair("result", Value::null)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2568 else |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2569 reply.push_back(Pair("result", result)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2570 reply.push_back(Pair("error", error)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2571 reply.push_back(Pair("id", id)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2572 return write_string(Value(reply), false) + "\n"; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2573 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2574 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2575 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
|
2576 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2577 // Send error reply from json-rpc error object |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2578 int nStatus = 500; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2579 int code = find_value(objError, "code").get_int(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2580 if (code == -32600) nStatus = 400; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2581 else if (code == -32601) nStatus = 404; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2582 string strReply = JSONRPCReply(Value::null, objError, id); |
2428
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2583 stream << HTTPReply(nStatus, strReply, false) << std::flush; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2584 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2585 |
3081
f96d6404041f
Allow clients on the IPv6 loopback as well
Giel van Schijndel <me@mortis.eu>
parents:
3080
diff
changeset
|
2586 bool ClientAllowed(const boost::asio::ip::address& address) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2587 { |
3081
f96d6404041f
Allow clients on the IPv6 loopback as well
Giel van Schijndel <me@mortis.eu>
parents:
3080
diff
changeset
|
2588 // Make sure that IPv4-compatible and IPv4-mapped IPv6 addresses are treated as IPv4 addresses |
f96d6404041f
Allow clients on the IPv6 loopback as well
Giel van Schijndel <me@mortis.eu>
parents:
3080
diff
changeset
|
2589 if (address.is_v6() |
f96d6404041f
Allow clients on the IPv6 loopback as well
Giel van Schijndel <me@mortis.eu>
parents:
3080
diff
changeset
|
2590 && (address.to_v6().is_v4_compatible() |
f96d6404041f
Allow clients on the IPv6 loopback as well
Giel van Schijndel <me@mortis.eu>
parents:
3080
diff
changeset
|
2591 || address.to_v6().is_v4_mapped())) |
f96d6404041f
Allow clients on the IPv6 loopback as well
Giel van Schijndel <me@mortis.eu>
parents:
3080
diff
changeset
|
2592 return ClientAllowed(address.to_v6().to_v4()); |
f96d6404041f
Allow clients on the IPv6 loopback as well
Giel van Schijndel <me@mortis.eu>
parents:
3080
diff
changeset
|
2593 |
f96d6404041f
Allow clients on the IPv6 loopback as well
Giel van Schijndel <me@mortis.eu>
parents:
3080
diff
changeset
|
2594 if (address == asio::ip::address_v4::loopback() |
3083
a7419c10da64
Allow all addresses on the loopback subnet (127.0.0.0/8) not just 127.0.0.1
Giel van Schijndel <me@mortis.eu>
parents:
3082
diff
changeset
|
2595 || address == asio::ip::address_v6::loopback() |
a7419c10da64
Allow all addresses on the loopback subnet (127.0.0.0/8) not just 127.0.0.1
Giel van Schijndel <me@mortis.eu>
parents:
3082
diff
changeset
|
2596 || (address.is_v4() |
a7419c10da64
Allow all addresses on the loopback subnet (127.0.0.0/8) not just 127.0.0.1
Giel van Schijndel <me@mortis.eu>
parents:
3082
diff
changeset
|
2597 // Chech whether IPv4 addresses match 127.0.0.0/8 (loopback subnet) |
a7419c10da64
Allow all addresses on the loopback subnet (127.0.0.0/8) not just 127.0.0.1
Giel van Schijndel <me@mortis.eu>
parents:
3082
diff
changeset
|
2598 && (address.to_v4().to_ulong() & 0xff000000) == 0x7f000000)) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2599 return true; |
3081
f96d6404041f
Allow clients on the IPv6 loopback as well
Giel van Schijndel <me@mortis.eu>
parents:
3080
diff
changeset
|
2600 |
f96d6404041f
Allow clients on the IPv6 loopback as well
Giel van Schijndel <me@mortis.eu>
parents:
3080
diff
changeset
|
2601 const string strAddress = address.to_string(); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2602 const vector<string>& vAllow = mapMultiArgs["-rpcallowip"]; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2603 BOOST_FOREACH(string strAllow, vAllow) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2604 if (WildcardMatch(strAddress, strAllow)) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2605 return true; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2606 return false; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2607 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2608 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2609 // |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2610 // 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
|
2611 // |
3082
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2612 template <typename Protocol> |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2613 class SSLIOStreamDevice : public iostreams::device<iostreams::bidirectional> { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2614 public: |
3082
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2615 SSLIOStreamDevice(asio::ssl::stream<typename Protocol::socket> &streamIn, bool fUseSSLIn) : stream(streamIn) |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2616 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2617 fUseSSL = fUseSSLIn; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2618 fNeedHandshake = fUseSSLIn; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2619 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2620 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2621 void handshake(ssl::stream_base::handshake_type role) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2622 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2623 if (!fNeedHandshake) return; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2624 fNeedHandshake = false; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2625 stream.handshake(role); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2626 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2627 std::streamsize read(char* s, std::streamsize n) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2628 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2629 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
|
2630 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
|
2631 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
|
2632 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2633 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
|
2634 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2635 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
|
2636 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
|
2637 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
|
2638 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2639 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
|
2640 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2641 ip::tcp::resolver resolver(stream.get_io_service()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2642 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
|
2643 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
|
2644 ip::tcp::resolver::iterator end; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2645 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
|
2646 while (error && endpoint_iterator != end) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2647 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2648 stream.lowest_layer().close(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2649 stream.lowest_layer().connect(*endpoint_iterator++, error); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2650 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2651 if (error) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2652 return false; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2653 return true; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2654 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2655 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2656 private: |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2657 bool fNeedHandshake; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2658 bool fUseSSL; |
3082
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2659 asio::ssl::stream<typename Protocol::socket>& stream; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2660 }; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2661 |
2427
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
2662 class AcceptedConnection |
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
2663 { |
3082
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2664 public: |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2665 virtual ~AcceptedConnection() {} |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2666 |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2667 virtual std::iostream& stream() = 0; |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2668 virtual std::string peer_address_to_string() const = 0; |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2669 virtual void close() = 0; |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2670 }; |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2671 |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2672 template <typename Protocol> |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2673 class AcceptedConnectionImpl : public AcceptedConnection |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2674 { |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2675 public: |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2676 AcceptedConnectionImpl( |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2677 asio::io_service& io_service, |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2678 ssl::context &context, |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2679 bool fUseSSL) : |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2680 sslStream(io_service, context), |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2681 _d(sslStream, fUseSSL), |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2682 _stream(_d) |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2683 { |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2684 } |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2685 |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2686 virtual std::iostream& stream() |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2687 { |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2688 return _stream; |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2689 } |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2690 |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2691 virtual std::string peer_address_to_string() const |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2692 { |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2693 return peer.address().to_string(); |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2694 } |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2695 |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2696 virtual void close() |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2697 { |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2698 _stream.close(); |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2699 } |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2700 |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2701 typename Protocol::endpoint peer; |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2702 asio::ssl::stream<typename Protocol::socket> sslStream; |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2703 |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2704 private: |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2705 SSLIOStreamDevice<Protocol> _d; |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2706 iostreams::stream< SSLIOStreamDevice<Protocol> > _stream; |
2427
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
2707 }; |
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
2708 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2709 void ThreadRPCServer(void* parg) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2710 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2711 IMPLEMENT_RANDOMIZE_STACK(ThreadRPCServer(parg)); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2712 try |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2713 { |
2427
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
2714 vnThreadsRunning[THREAD_RPCLISTENER]++; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2715 ThreadRPCServer2(parg); |
2427
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
2716 vnThreadsRunning[THREAD_RPCLISTENER]--; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2717 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2718 catch (std::exception& e) { |
2427
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
2719 vnThreadsRunning[THREAD_RPCLISTENER]--; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2720 PrintException(&e, "ThreadRPCServer()"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2721 } catch (...) { |
2427
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
2722 vnThreadsRunning[THREAD_RPCLISTENER]--; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2723 PrintException(NULL, "ThreadRPCServer()"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2724 } |
2587
b6f65be313c2
Corrected grammar. As per Principle Of Least Surprise.
R E Broadley <rebroad+github@gmail.com>
parents:
2527
diff
changeset
|
2725 printf("ThreadRPCServer exited\n"); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2726 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2727 |
3079
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2728 // Forward declaration required for RPCListen |
3082
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2729 template <typename Protocol, typename SocketAcceptorService> |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2730 static void RPCAcceptHandler(boost::shared_ptr< basic_socket_acceptor<Protocol, SocketAcceptorService> > acceptor, |
3079
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2731 ssl::context& context, |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2732 bool fUseSSL, |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2733 AcceptedConnection* conn, |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2734 const boost::system::error_code& error); |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2735 |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2736 /** |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2737 * Sets up I/O resources to accept and handle a new connection. |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2738 */ |
3082
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2739 template <typename Protocol, typename SocketAcceptorService> |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2740 static void RPCListen(boost::shared_ptr< basic_socket_acceptor<Protocol, SocketAcceptorService> > acceptor, |
3079
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2741 ssl::context& context, |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2742 const bool fUseSSL) |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2743 { |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2744 // Accept connection |
3082
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2745 AcceptedConnectionImpl<Protocol>* conn = new AcceptedConnectionImpl<Protocol>(acceptor->get_io_service(), context, fUseSSL); |
3079
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2746 |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2747 acceptor->async_accept( |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2748 conn->sslStream.lowest_layer(), |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2749 conn->peer, |
3082
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2750 boost::bind(&RPCAcceptHandler<Protocol, SocketAcceptorService>, |
3079
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2751 acceptor, |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2752 boost::ref(context), |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2753 fUseSSL, |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2754 conn, |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2755 boost::asio::placeholders::error)); |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2756 } |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2757 |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2758 /** |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2759 * Accept and handle incoming connection. |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2760 */ |
3082
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2761 template <typename Protocol, typename SocketAcceptorService> |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2762 static void RPCAcceptHandler(boost::shared_ptr< basic_socket_acceptor<Protocol, SocketAcceptorService> > acceptor, |
3079
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2763 ssl::context& context, |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2764 const bool fUseSSL, |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2765 AcceptedConnection* conn, |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2766 const boost::system::error_code& error) |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2767 { |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2768 vnThreadsRunning[THREAD_RPCLISTENER]++; |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2769 |
3090
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2770 // Immediately start accepting new connections, except when we're canceled or our socket is closed. |
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2771 if (error != error::operation_aborted |
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2772 && acceptor->is_open()) |
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2773 RPCListen(acceptor, context, fUseSSL); |
3079
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2774 |
3082
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2775 AcceptedConnectionImpl<ip::tcp>* tcp_conn = dynamic_cast< AcceptedConnectionImpl<ip::tcp>* >(conn); |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2776 |
3079
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2777 // TODO: Actually handle errors |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2778 if (error) |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2779 { |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2780 delete conn; |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2781 } |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2782 |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2783 // Restrict callers by IP. It is important to |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2784 // do this before starting client thread, to filter out |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2785 // certain DoS and misbehaving clients. |
3082
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2786 else if (tcp_conn |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2787 && !ClientAllowed(tcp_conn->peer.address())) |
3079
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2788 { |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2789 // Only send a 403 if we're not using SSL to prevent a DoS during the SSL handshake. |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2790 if (!fUseSSL) |
3082
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2791 conn->stream() << HTTPReply(403, "", false) << std::flush; |
3079
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2792 delete conn; |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2793 } |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2794 |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2795 // start HTTP client thread |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2796 else if (!CreateThread(ThreadRPCServer3, conn)) { |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2797 printf("Failed to create RPC server client thread\n"); |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2798 delete conn; |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2799 } |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2800 |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2801 vnThreadsRunning[THREAD_RPCLISTENER]--; |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2802 } |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2803 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2804 void ThreadRPCServer2(void* parg) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2805 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2806 printf("ThreadRPCServer started\n"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2807 |
1541
d9bb9c516845
Speed up RPC authentication (reworked pull from Joel Katz)
Gavin Andresen <gavinandresen@gmail.com>
parents:
1533
diff
changeset
|
2808 strRPCUserColonPass = mapArgs["-rpcuser"] + ":" + mapArgs["-rpcpassword"]; |
1800
5757cdb0dbfb
Have bitcoind recommend a secure RPC password. Increase invalid password delay.
Gregory Maxwell <greg@xiph.org>
parents:
1792
diff
changeset
|
2809 if (mapArgs["-rpcpassword"] == "") |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2810 { |
1800
5757cdb0dbfb
Have bitcoind recommend a secure RPC password. Increase invalid password delay.
Gregory Maxwell <greg@xiph.org>
parents:
1792
diff
changeset
|
2811 unsigned char rand_pwd[32]; |
5757cdb0dbfb
Have bitcoind recommend a secure RPC password. Increase invalid password delay.
Gregory Maxwell <greg@xiph.org>
parents:
1792
diff
changeset
|
2812 RAND_bytes(rand_pwd, 32); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2813 string strWhatAmI = "To use bitcoind"; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2814 if (mapArgs.count("-server")) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2815 strWhatAmI = strprintf(_("To use the %s option"), "\"-server\""); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2816 else if (mapArgs.count("-daemon")) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2817 strWhatAmI = strprintf(_("To use the %s option"), "\"-daemon\""); |
2640
60b19c042950
Convert UI interface to boost::signals2.
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2627
diff
changeset
|
2818 uiInterface.ThreadSafeMessageBox(strprintf( |
2154
10afdbfc8c58
Use a messagebox to display the error when -server is provided without providing a rpc password
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2152
diff
changeset
|
2819 _("%s, you must set a rpcpassword in the configuration file:\n %s\n" |
10afdbfc8c58
Use a messagebox to display the error when -server is provided without providing a rpc password
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2152
diff
changeset
|
2820 "It is recommended you use the following random password:\n" |
10afdbfc8c58
Use a messagebox to display the error when -server is provided without providing a rpc password
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2152
diff
changeset
|
2821 "rpcuser=bitcoinrpc\n" |
10afdbfc8c58
Use a messagebox to display the error when -server is provided without providing a rpc password
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2152
diff
changeset
|
2822 "rpcpassword=%s\n" |
10afdbfc8c58
Use a messagebox to display the error when -server is provided without providing a rpc password
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2152
diff
changeset
|
2823 "(you do not need to remember this password)\n" |
10afdbfc8c58
Use a messagebox to display the error when -server is provided without providing a rpc password
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2152
diff
changeset
|
2824 "If the file does not exist, create it with owner-readable-only file permissions.\n"), |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2825 strWhatAmI.c_str(), |
2207
34d7dc611b26
Use filesystem::path instead of manual string tinkering
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2205
diff
changeset
|
2826 GetConfigFile().string().c_str(), |
2154
10afdbfc8c58
Use a messagebox to display the error when -server is provided without providing a rpc password
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2152
diff
changeset
|
2827 EncodeBase58(&rand_pwd[0],&rand_pwd[0]+32).c_str()), |
2642
8bc3131c2449
Make testcases build, prevent windows symbol collision
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2640
diff
changeset
|
2828 _("Error"), CClientUIInterface::OK | CClientUIInterface::MODAL); |
2746
246ba5ba6805
introduce a new StartShutdown() function, which starts a thread with Shutdown() if no GUI is used and calls uiInterface.QueueShutdown() if a GUI is used / all direct uiInterface.QueueShutdown() calls are replaced with Shutdown() - this ensures a clean GUI shutdown, even when catching a SIGTERM and allows the BitcoinGUI destructor to get called (which fixes a tray-icon issue and keeps the tray-icon until Bitcoin-Qt exits)
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2723
diff
changeset
|
2829 StartShutdown(); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2830 return; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2831 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2832 |
3079
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2833 const bool fUseSSL = GetBoolArg("-rpcssl"); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2834 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2835 asio::io_service io_service; |
3084
1953e32fd638
Use the QueueShutdown signal to stop accepting new RPC connections
Giel van Schijndel <me@mortis.eu>
parents:
3083
diff
changeset
|
2836 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2837 ssl::context context(io_service, ssl::context::sslv23); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2838 if (fUseSSL) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2839 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2840 context.set_options(ssl::context::no_sslv2); |
2184
51d974a0c243
updated bitcoinrpc.cpp to use make_preferred() and removed double inclusion of boost/filesystem.hpp
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2174
diff
changeset
|
2841 |
51d974a0c243
updated bitcoinrpc.cpp to use make_preferred() and removed double inclusion of boost/filesystem.hpp
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2174
diff
changeset
|
2842 filesystem::path pathCertFile(GetArg("-rpcsslcertificatechainfile", "server.cert")); |
51d974a0c243
updated bitcoinrpc.cpp to use make_preferred() and removed double inclusion of boost/filesystem.hpp
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2174
diff
changeset
|
2843 if (!pathCertFile.is_complete()) pathCertFile = filesystem::path(GetDataDir()) / pathCertFile; |
2207
34d7dc611b26
Use filesystem::path instead of manual string tinkering
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2205
diff
changeset
|
2844 if (filesystem::exists(pathCertFile)) context.use_certificate_chain_file(pathCertFile.string()); |
2184
51d974a0c243
updated bitcoinrpc.cpp to use make_preferred() and removed double inclusion of boost/filesystem.hpp
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2174
diff
changeset
|
2845 else printf("ThreadRPCServer ERROR: missing server certificate file %s\n", pathCertFile.string().c_str()); |
51d974a0c243
updated bitcoinrpc.cpp to use make_preferred() and removed double inclusion of boost/filesystem.hpp
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2174
diff
changeset
|
2846 |
51d974a0c243
updated bitcoinrpc.cpp to use make_preferred() and removed double inclusion of boost/filesystem.hpp
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2174
diff
changeset
|
2847 filesystem::path pathPKFile(GetArg("-rpcsslprivatekeyfile", "server.pem")); |
51d974a0c243
updated bitcoinrpc.cpp to use make_preferred() and removed double inclusion of boost/filesystem.hpp
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2174
diff
changeset
|
2848 if (!pathPKFile.is_complete()) pathPKFile = filesystem::path(GetDataDir()) / pathPKFile; |
2207
34d7dc611b26
Use filesystem::path instead of manual string tinkering
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2205
diff
changeset
|
2849 if (filesystem::exists(pathPKFile)) context.use_private_key_file(pathPKFile.string(), ssl::context::pem); |
2184
51d974a0c243
updated bitcoinrpc.cpp to use make_preferred() and removed double inclusion of boost/filesystem.hpp
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2174
diff
changeset
|
2850 else printf("ThreadRPCServer ERROR: missing server private key file %s\n", pathPKFile.string().c_str()); |
51d974a0c243
updated bitcoinrpc.cpp to use make_preferred() and removed double inclusion of boost/filesystem.hpp
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2174
diff
changeset
|
2851 |
51d974a0c243
updated bitcoinrpc.cpp to use make_preferred() and removed double inclusion of boost/filesystem.hpp
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2174
diff
changeset
|
2852 string strCiphers = GetArg("-rpcsslciphers", "TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH"); |
51d974a0c243
updated bitcoinrpc.cpp to use make_preferred() and removed double inclusion of boost/filesystem.hpp
Philip Kaufmann <phil.kaufmann@t-online.de>
parents:
2174
diff
changeset
|
2853 SSL_CTX_set_cipher_list(context.impl(), strCiphers.c_str()); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2854 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2855 |
3080
0a1544df18af
Add dual IPv4/IPv6 stack support to the RPC server
Giel van Schijndel <me@mortis.eu>
parents:
3079
diff
changeset
|
2856 // Try a dual IPv6/IPv4 socket, falling back to separate IPv4 and IPv6 sockets |
0a1544df18af
Add dual IPv4/IPv6 stack support to the RPC server
Giel van Schijndel <me@mortis.eu>
parents:
3079
diff
changeset
|
2857 const bool loopback = !mapArgs.count("-rpcallowip"); |
0a1544df18af
Add dual IPv4/IPv6 stack support to the RPC server
Giel van Schijndel <me@mortis.eu>
parents:
3079
diff
changeset
|
2858 asio::ip::address bindAddress = loopback ? asio::ip::address_v6::loopback() : asio::ip::address_v6::any(); |
0a1544df18af
Add dual IPv4/IPv6 stack support to the RPC server
Giel van Schijndel <me@mortis.eu>
parents:
3079
diff
changeset
|
2859 ip::tcp::endpoint endpoint(bindAddress, GetArg("-rpcport", 8332)); |
0a1544df18af
Add dual IPv4/IPv6 stack support to the RPC server
Giel van Schijndel <me@mortis.eu>
parents:
3079
diff
changeset
|
2860 |
0a1544df18af
Add dual IPv4/IPv6 stack support to the RPC server
Giel van Schijndel <me@mortis.eu>
parents:
3079
diff
changeset
|
2861 try |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2862 { |
3090
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2863 boost::shared_ptr<ip::tcp::acceptor> acceptor(new ip::tcp::acceptor(io_service)); |
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2864 acceptor->open(endpoint.protocol()); |
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2865 acceptor->set_option(boost::asio::ip::tcp::acceptor::reuse_address(true)); |
3080
0a1544df18af
Add dual IPv4/IPv6 stack support to the RPC server
Giel van Schijndel <me@mortis.eu>
parents:
3079
diff
changeset
|
2866 |
0a1544df18af
Add dual IPv4/IPv6 stack support to the RPC server
Giel van Schijndel <me@mortis.eu>
parents:
3079
diff
changeset
|
2867 // Try making the socket dual IPv6/IPv4 (if listening on the "any" address) |
0a1544df18af
Add dual IPv4/IPv6 stack support to the RPC server
Giel van Schijndel <me@mortis.eu>
parents:
3079
diff
changeset
|
2868 boost::system::error_code v6_only_error; |
3090
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2869 acceptor->set_option(boost::asio::ip::v6_only(loopback), v6_only_error); |
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2870 |
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2871 acceptor->bind(endpoint); |
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2872 acceptor->listen(socket_base::max_connections); |
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2873 |
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2874 RPCListen(acceptor, context, fUseSSL); |
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2875 // Cancel outstanding listen-requests for this acceptor when shutting down |
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2876 uiInterface.QueueShutdown.connect(signals2::slot<void ()>( |
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2877 static_cast<void (ip::tcp::acceptor::*)()>(&ip::tcp::acceptor::close), acceptor.get()) |
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2878 .track(acceptor)); |
3080
0a1544df18af
Add dual IPv4/IPv6 stack support to the RPC server
Giel van Schijndel <me@mortis.eu>
parents:
3079
diff
changeset
|
2879 |
0a1544df18af
Add dual IPv4/IPv6 stack support to the RPC server
Giel van Schijndel <me@mortis.eu>
parents:
3079
diff
changeset
|
2880 // If dual IPv6/IPv4 failed (or we're opening loopback interfaces only), open IPv4 separately |
0a1544df18af
Add dual IPv4/IPv6 stack support to the RPC server
Giel van Schijndel <me@mortis.eu>
parents:
3079
diff
changeset
|
2881 if (loopback || v6_only_error) |
2427
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
2882 { |
3080
0a1544df18af
Add dual IPv4/IPv6 stack support to the RPC server
Giel van Schijndel <me@mortis.eu>
parents:
3079
diff
changeset
|
2883 bindAddress = loopback ? asio::ip::address_v4::loopback() : asio::ip::address_v4::any(); |
0a1544df18af
Add dual IPv4/IPv6 stack support to the RPC server
Giel van Schijndel <me@mortis.eu>
parents:
3079
diff
changeset
|
2884 endpoint.address(bindAddress); |
0a1544df18af
Add dual IPv4/IPv6 stack support to the RPC server
Giel van Schijndel <me@mortis.eu>
parents:
3079
diff
changeset
|
2885 |
3090
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2886 acceptor.reset(new ip::tcp::acceptor(io_service)); |
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2887 acceptor->open(endpoint.protocol()); |
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2888 acceptor->set_option(boost::asio::ip::tcp::acceptor::reuse_address(true)); |
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2889 acceptor->bind(endpoint); |
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2890 acceptor->listen(socket_base::max_connections); |
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2891 |
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2892 RPCListen(acceptor, context, fUseSSL); |
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2893 // Cancel outstanding listen-requests for this acceptor when shutting down |
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2894 uiInterface.QueueShutdown.connect(signals2::slot<void ()>( |
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2895 static_cast<void (ip::tcp::acceptor::*)()>(&ip::tcp::acceptor::close), acceptor.get()) |
b50fa2ffa4bd
Cancel outstanding listen ops for RPC when shutting down
Giel van Schijndel <me@mortis.eu>
parents:
3089
diff
changeset
|
2896 .track(acceptor)); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2897 } |
2427
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
2898 } |
3080
0a1544df18af
Add dual IPv4/IPv6 stack support to the RPC server
Giel van Schijndel <me@mortis.eu>
parents:
3079
diff
changeset
|
2899 catch(boost::system::system_error &e) |
0a1544df18af
Add dual IPv4/IPv6 stack support to the RPC server
Giel van Schijndel <me@mortis.eu>
parents:
3079
diff
changeset
|
2900 { |
0a1544df18af
Add dual IPv4/IPv6 stack support to the RPC server
Giel van Schijndel <me@mortis.eu>
parents:
3079
diff
changeset
|
2901 uiInterface.ThreadSafeMessageBox(strprintf(_("An error occured while setting up the RPC port %i for listening: %s"), endpoint.port(), e.what()), |
0a1544df18af
Add dual IPv4/IPv6 stack support to the RPC server
Giel van Schijndel <me@mortis.eu>
parents:
3079
diff
changeset
|
2902 _("Error"), CClientUIInterface::OK | CClientUIInterface::MODAL); |
3085
4488ca5b1bf8
Merge branch 'master' into async-ipv6-rpc
Giel van Schijndel <me@mortis.eu>
diff
changeset
|
2903 StartShutdown(); |
3080
0a1544df18af
Add dual IPv4/IPv6 stack support to the RPC server
Giel van Schijndel <me@mortis.eu>
parents:
3079
diff
changeset
|
2904 return; |
0a1544df18af
Add dual IPv4/IPv6 stack support to the RPC server
Giel van Schijndel <me@mortis.eu>
parents:
3079
diff
changeset
|
2905 } |
3079
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2906 |
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2907 vnThreadsRunning[THREAD_RPCLISTENER]--; |
3112
1d9c0011eb5a
Revert "*Always* send a shutdown signal to enable custom shutdown actions"
Matt Corallo <matt@bluematt.me>
parents:
3090
diff
changeset
|
2908 while (!fShutdown) |
1d9c0011eb5a
Revert "*Always* send a shutdown signal to enable custom shutdown actions"
Matt Corallo <matt@bluematt.me>
parents:
3090
diff
changeset
|
2909 io_service.run_one(); |
3079
b084a97bfba3
Use asynchronous I/O to handle RPC requests
Giel van Schijndel <me@mortis.eu>
parents:
2676
diff
changeset
|
2910 vnThreadsRunning[THREAD_RPCLISTENER]++; |
2427
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
2911 } |
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
2912 |
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
2913 void ThreadRPCServer3(void* parg) |
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
2914 { |
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
2915 IMPLEMENT_RANDOMIZE_STACK(ThreadRPCServer3(parg)); |
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
2916 vnThreadsRunning[THREAD_RPCHANDLER]++; |
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
2917 AcceptedConnection *conn = (AcceptedConnection *) parg; |
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
2918 |
2428
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2919 bool fRun = true; |
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2920 loop { |
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2921 if (fShutdown || !fRun) |
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2922 { |
3082
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2923 conn->close(); |
2428
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2924 delete conn; |
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2925 --vnThreadsRunning[THREAD_RPCHANDLER]; |
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2926 return; |
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2927 } |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2928 map<string, string> mapHeaders; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2929 string strRequest; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2930 |
3082
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2931 ReadHTTP(conn->stream(), mapHeaders, strRequest); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2932 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2933 // Check authorization |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2934 if (mapHeaders.count("authorization") == 0) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2935 { |
3082
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2936 conn->stream() << HTTPReply(401, "", false) << std::flush; |
2427
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
2937 break; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2938 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2939 if (!HTTPAuthorized(mapHeaders)) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2940 { |
3082
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2941 printf("ThreadRPCServer incorrect password attempt from %s\n", conn->peer_address_to_string().c_str()); |
1800
5757cdb0dbfb
Have bitcoind recommend a secure RPC password. Increase invalid password delay.
Gregory Maxwell <greg@xiph.org>
parents:
1792
diff
changeset
|
2942 /* Deter brute-forcing short passwords. |
5757cdb0dbfb
Have bitcoind recommend a secure RPC password. Increase invalid password delay.
Gregory Maxwell <greg@xiph.org>
parents:
1792
diff
changeset
|
2943 If this results in a DOS the user really |
5757cdb0dbfb
Have bitcoind recommend a secure RPC password. Increase invalid password delay.
Gregory Maxwell <greg@xiph.org>
parents:
1792
diff
changeset
|
2944 shouldn't have their RPC port exposed.*/ |
5757cdb0dbfb
Have bitcoind recommend a secure RPC password. Increase invalid password delay.
Gregory Maxwell <greg@xiph.org>
parents:
1792
diff
changeset
|
2945 if (mapArgs["-rpcpassword"].size() < 20) |
5757cdb0dbfb
Have bitcoind recommend a secure RPC password. Increase invalid password delay.
Gregory Maxwell <greg@xiph.org>
parents:
1792
diff
changeset
|
2946 Sleep(250); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2947 |
3082
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2948 conn->stream() << HTTPReply(401, "", false) << std::flush; |
2427
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
2949 break; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2950 } |
2428
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2951 if (mapHeaders["connection"] == "close") |
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
2952 fRun = false; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2953 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2954 Value id = Value::null; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2955 try |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2956 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2957 // Parse request |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2958 Value valRequest; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2959 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
|
2960 throw JSONRPCError(-32700, "Parse error"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2961 const Object& request = valRequest.get_obj(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2962 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2963 // 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
|
2964 id = find_value(request, "id"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2965 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2966 // Parse method |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2967 Value valMethod = find_value(request, "method"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2968 if (valMethod.type() == null_type) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2969 throw JSONRPCError(-32600, "Missing method"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2970 if (valMethod.type() != str_type) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2971 throw JSONRPCError(-32600, "Method must be a string"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2972 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
|
2973 if (strMethod != "getwork" && strMethod != "getmemorypool") |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2974 printf("ThreadRPCServer method=%s\n", strMethod.c_str()); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2975 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2976 // Parse params |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2977 Value valParams = find_value(request, "params"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2978 Array params; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2979 if (valParams.type() == array_type) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2980 params = valParams.get_array(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2981 else if (valParams.type() == null_type) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2982 params = Array(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2983 else |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2984 throw JSONRPCError(-32600, "Params must be an array"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2985 |
2374
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
2986 Value result = tableRPC.execute(strMethod, params); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
2987 |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
2988 // Send reply |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
2989 string strReply = JSONRPCReply(result, Value::null, id); |
3082
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2990 conn->stream() << HTTPReply(200, strReply, fRun) << std::flush; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2991 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2992 catch (Object& objError) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2993 { |
3082
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2994 ErrorReply(conn->stream(), objError, id); |
2427
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
2995 break; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2996 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2997 catch (std::exception& e) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
2998 { |
3082
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
2999 ErrorReply(conn->stream(), JSONRPCError(-32700, e.what()), id); |
2427
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
3000 break; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3001 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3002 } |
2428
7011ff7102f6
RPC: Support HTTP/1.0 and HTTP/1.1, including the proper use of keep-alives
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2427
diff
changeset
|
3003 |
2427
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
3004 delete conn; |
1b07c236d407
Support multi-threaded JSON-RPC
David Joel Schwartz <davidjoelschwartz@gmail.com>
parents:
2414
diff
changeset
|
3005 vnThreadsRunning[THREAD_RPCHANDLER]--; |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3006 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3007 |
2374
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3008 json_spirit::Value CRPCTable::execute(const std::string &strMethod, const json_spirit::Array ¶ms) const |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3009 { |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3010 // Find method |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3011 const CRPCCommand *pcmd = tableRPC[strMethod]; |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3012 if (!pcmd) |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3013 throw JSONRPCError(-32601, "Method not found"); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3014 |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3015 // Observe safe mode |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3016 string strWarning = GetWarnings("rpc"); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3017 if (strWarning != "" && !GetBoolArg("-disablesafemode") && |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3018 !pcmd->okSafeMode) |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3019 throw JSONRPCError(-2, string("Safe mode: ") + strWarning); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3020 |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3021 try |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3022 { |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3023 // Execute |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3024 Value result; |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3025 { |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3026 LOCK2(cs_main, pwalletMain->cs_wallet); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3027 result = pcmd->actor(params, false); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3028 } |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3029 return result; |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3030 } |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3031 catch (std::exception& e) |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3032 { |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3033 throw JSONRPCError(-1, e.what()); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3034 } |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3035 } |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3036 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3037 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3038 Object CallRPC(const string& strMethod, const Array& params) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3039 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3040 if (mapArgs["-rpcuser"] == "" && mapArgs["-rpcpassword"] == "") |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3041 throw runtime_error(strprintf( |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3042 _("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
|
3043 "If the file does not exist, create it with owner-readable-only file permissions."), |
2207
34d7dc611b26
Use filesystem::path instead of manual string tinkering
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2205
diff
changeset
|
3044 GetConfigFile().string().c_str())); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3045 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3046 // Connect to localhost |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3047 bool fUseSSL = GetBoolArg("-rpcssl"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3048 asio::io_service io_service; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3049 ssl::context context(io_service, ssl::context::sslv23); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3050 context.set_options(ssl::context::no_sslv2); |
3082
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
3051 asio::ssl::stream<asio::ip::tcp::socket> sslStream(io_service, context); |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
3052 SSLIOStreamDevice<asio::ip::tcp> d(sslStream, fUseSSL); |
e5c75ca4f18c
Generalise RPC connection handling code to allow more listening sockets
Giel van Schijndel <me@mortis.eu>
parents:
3081
diff
changeset
|
3053 iostreams::stream< SSLIOStreamDevice<asio::ip::tcp> > stream(d); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3054 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
|
3055 throw runtime_error("couldn't connect to server"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3056 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3057 // HTTP basic authentication |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3058 string strUserPass64 = EncodeBase64(mapArgs["-rpcuser"] + ":" + mapArgs["-rpcpassword"]); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3059 map<string, string> mapRequestHeaders; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3060 mapRequestHeaders["Authorization"] = string("Basic ") + strUserPass64; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3061 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3062 // Send request |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3063 string strRequest = JSONRPCRequest(strMethod, params, 1); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3064 string strPost = HTTPPost(strRequest, mapRequestHeaders); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3065 stream << strPost << std::flush; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3066 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3067 // Receive reply |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3068 map<string, string> mapHeaders; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3069 string strReply; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3070 int nStatus = ReadHTTP(stream, mapHeaders, strReply); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3071 if (nStatus == 401) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3072 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
|
3073 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
|
3074 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
|
3075 else if (strReply.empty()) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3076 throw runtime_error("no response from server"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3077 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3078 // Parse reply |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3079 Value valReply; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3080 if (!read_string(strReply, valReply)) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3081 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
|
3082 const Object& reply = valReply.get_obj(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3083 if (reply.empty()) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3084 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
|
3085 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3086 return reply; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3087 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3088 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3089 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3090 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3091 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3092 template<typename T> |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3093 void ConvertTo(Value& value) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3094 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3095 if (value.type() == str_type) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3096 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3097 // reinterpret string as unquoted json value |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3098 Value value2; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3099 if (!read_string(value.get_str(), value2)) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3100 throw runtime_error("type mismatch"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3101 value = value2.get_value<T>(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3102 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3103 else |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3104 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3105 value = value.get_value<T>(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3106 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3107 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3108 |
2374
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3109 // Convert strings to command-specific RPC representation |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3110 Array RPCConvertValues(const std::string &strMethod, const std::vector<std::string> &strParams) |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3111 { |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3112 Array params; |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3113 BOOST_FOREACH(const std::string ¶m, strParams) |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3114 params.push_back(param); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3115 |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3116 int n = params.size(); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3117 |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3118 // |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3119 // Special case non-string parameter types |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3120 // |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3121 if (strMethod == "setgenerate" && n > 0) ConvertTo<bool>(params[0]); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3122 if (strMethod == "setgenerate" && n > 1) ConvertTo<boost::int64_t>(params[1]); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3123 if (strMethod == "sendtoaddress" && n > 1) ConvertTo<double>(params[1]); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3124 if (strMethod == "settxfee" && n > 0) ConvertTo<double>(params[0]); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3125 if (strMethod == "getreceivedbyaddress" && n > 1) ConvertTo<boost::int64_t>(params[1]); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3126 if (strMethod == "getreceivedbyaccount" && n > 1) ConvertTo<boost::int64_t>(params[1]); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3127 if (strMethod == "listreceivedbyaddress" && n > 0) ConvertTo<boost::int64_t>(params[0]); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3128 if (strMethod == "listreceivedbyaddress" && n > 1) ConvertTo<bool>(params[1]); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3129 if (strMethod == "listreceivedbyaccount" && n > 0) ConvertTo<boost::int64_t>(params[0]); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3130 if (strMethod == "listreceivedbyaccount" && n > 1) ConvertTo<bool>(params[1]); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3131 if (strMethod == "getbalance" && n > 1) ConvertTo<boost::int64_t>(params[1]); |
2413
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
3132 if (strMethod == "getblock" && n > 1) ConvertTo<Object>(params[1]); |
2374
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3133 if (strMethod == "getblockhash" && n > 0) ConvertTo<boost::int64_t>(params[0]); |
2413
55deced142f4
Second parameter to JSON-RPC getblock/gettransaction: decompositions
Luke Dashjr <luke-jr+git@utopios.org>
parents:
2412
diff
changeset
|
3134 if (strMethod == "gettransaction" && n > 1) ConvertTo<Object>(params[1]); |
2374
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3135 if (strMethod == "move" && n > 2) ConvertTo<double>(params[2]); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3136 if (strMethod == "move" && n > 3) ConvertTo<boost::int64_t>(params[3]); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3137 if (strMethod == "sendfrom" && n > 2) ConvertTo<double>(params[2]); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3138 if (strMethod == "sendfrom" && n > 3) ConvertTo<boost::int64_t>(params[3]); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3139 if (strMethod == "listtransactions" && n > 1) ConvertTo<boost::int64_t>(params[1]); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3140 if (strMethod == "listtransactions" && n > 2) ConvertTo<boost::int64_t>(params[2]); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3141 if (strMethod == "listaccounts" && n > 0) ConvertTo<boost::int64_t>(params[0]); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3142 if (strMethod == "walletpassphrase" && n > 1) ConvertTo<boost::int64_t>(params[1]); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3143 if (strMethod == "listsinceblock" && n > 1) ConvertTo<boost::int64_t>(params[1]); |
2708
857c26732733
Use ConvertTo to simplify sendmany/addmultisigaddress argument handling
Gavin Andresen <gavinandresen@gmail.com>
parents:
2707
diff
changeset
|
3144 if (strMethod == "sendmany" && n > 1) ConvertTo<Object>(params[1]); |
857c26732733
Use ConvertTo to simplify sendmany/addmultisigaddress argument handling
Gavin Andresen <gavinandresen@gmail.com>
parents:
2707
diff
changeset
|
3145 if (strMethod == "sendmany" && n > 2) ConvertTo<boost::int64_t>(params[2]); |
857c26732733
Use ConvertTo to simplify sendmany/addmultisigaddress argument handling
Gavin Andresen <gavinandresen@gmail.com>
parents:
2707
diff
changeset
|
3146 if (strMethod == "addmultisigaddress" && n > 0) ConvertTo<boost::int64_t>(params[0]); |
857c26732733
Use ConvertTo to simplify sendmany/addmultisigaddress argument handling
Gavin Andresen <gavinandresen@gmail.com>
parents:
2707
diff
changeset
|
3147 if (strMethod == "addmultisigaddress" && n > 1) ConvertTo<Array>(params[1]); |
857c26732733
Use ConvertTo to simplify sendmany/addmultisigaddress argument handling
Gavin Andresen <gavinandresen@gmail.com>
parents:
2707
diff
changeset
|
3148 |
2374
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3149 return params; |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3150 } |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3151 |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3152 int CommandLineRPC(int argc, char *argv[]) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3153 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3154 string strPrint; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3155 int nRet = 0; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3156 try |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3157 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3158 // Skip switches |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3159 while (argc > 1 && IsSwitchChar(argv[1][0])) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3160 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3161 argc--; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3162 argv++; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3163 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3164 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3165 // Method |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3166 if (argc < 2) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3167 throw runtime_error("too few parameters"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3168 string strMethod = argv[1]; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3169 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3170 // Parameters default to strings |
2374
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3171 std::vector<std::string> strParams(&argv[2], &argv[argc]); |
413c38b8c6b7
Add UI RPC console / debug window
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
2327
diff
changeset
|
3172 Array params = RPCConvertValues(strMethod, strParams); |
1181
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3173 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3174 // Execute |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3175 Object reply = CallRPC(strMethod, params); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3176 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3177 // Parse reply |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3178 const Value& result = find_value(reply, "result"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3179 const Value& error = find_value(reply, "error"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3180 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3181 if (error.type() != null_type) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3182 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3183 // Error |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3184 strPrint = "error: " + write_string(error, false); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3185 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
|
3186 nRet = abs(code); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3187 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3188 else |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3189 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3190 // Result |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3191 if (result.type() == null_type) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3192 strPrint = ""; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3193 else if (result.type() == str_type) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3194 strPrint = result.get_str(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3195 else |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3196 strPrint = write_string(result, true); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3197 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3198 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3199 catch (std::exception& e) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3200 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3201 strPrint = string("error: ") + e.what(); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3202 nRet = 87; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3203 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3204 catch (...) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3205 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3206 PrintException(NULL, "CommandLineRPC()"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3207 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3208 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3209 if (strPrint != "") |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3210 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3211 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
|
3212 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3213 return nRet; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3214 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3215 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3216 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3217 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3218 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3219 #ifdef TEST |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3220 int main(int argc, char *argv[]) |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3221 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3222 #ifdef _MSC_VER |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3223 // Turn off microsoft heap dump noise |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3224 _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3225 _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
|
3226 #endif |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3227 setbuf(stdin, NULL); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3228 setbuf(stdout, NULL); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3229 setbuf(stderr, NULL); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3230 |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3231 try |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3232 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3233 if (argc >= 2 && string(argv[1]) == "-server") |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3234 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3235 printf("server ready\n"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3236 ThreadRPCServer(NULL); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3237 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3238 else |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3239 { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3240 return CommandLineRPC(argc, argv); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3241 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3242 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3243 catch (std::exception& e) { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3244 PrintException(&e, "main()"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3245 } catch (...) { |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3246 PrintException(NULL, "main()"); |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3247 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3248 return 0; |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3249 } |
855f1d50bed7
temp patch for qtui
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff
changeset
|
3250 #endif |
2294
bc7f29fbeed5
Expose CRPCTable via bitcoinrpc.h for testing
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2293
diff
changeset
|
3251 |
bc7f29fbeed5
Expose CRPCTable via bitcoinrpc.h for testing
Pieter Wuille <pieter.wuille@gmail.com>
parents:
2293
diff
changeset
|
3252 const CRPCTable tableRPC; |