From cba3a1741a8d7874eeb729bd2e1734b1ba712da9 Mon Sep 17 00:00:00 2001 From: Gavin Andresen Date: Sun, 19 Dec 2010 10:39:36 -0500 Subject: [PATCH 01/10] Straw-man for dev process --- README.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 4c8475c8896..f13a79a9876 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,13 @@ -Gavin's Bitcoin patches -======================= +Bitcoin integration/staging tree -Branches here: +Straw-man plan for Bitcoin development (open source vets, please slap me around and help make this better): -* svn : up-to-date mirror of the 'production' Bitcoin (from http://sourceforge.net/projects/bitcoin/). -* monitorreceived : Implements monitortransaction/monitorblocks/gettransaction/getblock RPC commands. -* listtransactions: Implements new JSON-RPC command "listtransactions" (from jgarzik) -* refundtransaction : Implements new JSON-RPC command "refundtransaction" -* master : All of the above, merged together. +Developers work in their own trees, then submit pull requests when they think their feature is ready. + +Requests get discussed (where? bitcoin forums?) and if there's broad consensus they're a good thing, well written, match coding style, etc. then they're merged into the 'master' branch. + +master branch is regularly built and tested (by who? need people willing to be quality assurance testers), and periodically pushed to the subversion repo to become the official, stable, released bitcoin. + + +We'll create feature branches if/when there are major new features being worked on by several people. -Code is hosted at github: http://github.com/gavinandresen/bitcoin-git From 2d96276e243c93add0b0d292ae9f05a54508b6e7 Mon Sep 17 00:00:00 2001 From: Gavin Andresen Date: Mon, 20 Dec 2010 10:36:48 -0500 Subject: [PATCH 02/10] EndModal fix for Mac from piotrp --- ui.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/ui.cpp b/ui.cpp index 1cb922fad62..17ad630832e 100644 --- a/ui.cpp +++ b/ui.cpp @@ -1466,8 +1466,7 @@ CTxDetailsDialog::CTxDetailsDialog(wxWindow* parent, CWalletTx wtx) : CTxDetails void CTxDetailsDialog::OnButtonOK(wxCommandEvent& event) { - Close(); - //Destroy(); + EndModal(false); } @@ -1736,12 +1735,12 @@ void COptionsDialog::OnKillFocusProxy(wxFocusEvent& event) void COptionsDialog::OnButtonOK(wxCommandEvent& event) { OnButtonApply(event); - Close(); + EndModal(false); } void COptionsDialog::OnButtonCancel(wxCommandEvent& event) { - Close(); + EndModal(false); } void COptionsDialog::OnButtonApply(wxCommandEvent& event) @@ -1828,7 +1827,7 @@ CAboutDialog::CAboutDialog(wxWindow* parent) : CAboutDialogBase(parent) void CAboutDialog::OnButtonOK(wxCommandEvent& event) { - Close(); + EndModal(false); } From ddb68acebe0c41e1958a783c38a272ae11671f86 Mon Sep 17 00:00:00 2001 From: Gavin Andresen Date: Mon, 20 Dec 2010 14:44:54 -0500 Subject: [PATCH 03/10] Add address to listtransactions output --- main.cpp | 55 +++++++++++++++++++++++++++++++++++++------------------ main.h | 2 +- rpc.cpp | 44 +++++++++++++++++++++++++++++--------------- 3 files changed, 67 insertions(+), 34 deletions(-) diff --git a/main.cpp b/main.cpp index 8db6c394e8a..b7dfd9fabeb 100644 --- a/main.cpp +++ b/main.cpp @@ -395,9 +395,12 @@ int CWalletTx::GetRequestCount() const } void CWalletTx::GetAmounts(int64& nGenerated, list >& listReceived, - int64& nSent, int64& nFee, string& strSentAccount) const + list >& listSent, int64& nFee, string& strSentAccount) const { - nGenerated = nSent = nFee = 0; + nGenerated = nFee = 0; + listReceived.clear(); + listSent.clear(); + strSentAccount = strFromAccount; if (IsCoinBase()) { @@ -406,24 +409,38 @@ void CWalletTx::GetAmounts(int64& nGenerated, list >& listRe return; } - // Received. Standard client will never generate a send-to-multiple-recipients, + // Compute fee: + int64 nDebit = GetDebit(); + if (nDebit > 0) // debit>0 means we signed/sent this transaction + { + int64 nValueOut = GetValueOut(); + nFee = nDebit - nValueOut; + } + + // Sent/received. Standard client will never generate a send-to-multiple-recipients, // but non-standard clients might (so return a list of address/amount pairs) foreach(const CTxOut& txout, vout) { + string address; + uint160 hash160; vector vchPubKey; - if (ExtractPubKey(txout.scriptPubKey, true, vchPubKey)) - listReceived.push_back(make_pair(PubKeyToAddress(vchPubKey), txout.nValue)); - } + if (ExtractHash160(txout.scriptPubKey, hash160)) + address = Hash160ToAddress(hash160); + else if (ExtractPubKey(txout.scriptPubKey, false, vchPubKey)) + address = PubKeyToAddress(vchPubKey); + else + address = " unknown "; // some type of weird non-standard transaction? - // Sent - int64 nDebit = GetDebit(); - if (nDebit > 0) - { - int64 nValueOut = GetValueOut(); - nFee = nDebit - nValueOut; - nSent = nValueOut - GetChange(); - strSentAccount = strFromAccount; + if (nDebit > 0 && txout.IsChange()) + continue; + + if (nDebit > 0) + listSent.push_back(make_pair(address, txout.nValue)); + + if (txout.IsMine()) + listReceived.push_back(make_pair(address, txout.nValue)); } + } void CWalletTx::GetAccountAmounts(const string& strAccount, int64& nGenerated, int64& nReceived, @@ -431,17 +448,19 @@ void CWalletTx::GetAccountAmounts(const string& strAccount, int64& nGenerated, i { nGenerated = nReceived = nSent = nFee = 0; - int64 allGenerated, allSent, allFee; - allGenerated = allSent = allFee = 0; + int64 allGenerated, allFee; + allGenerated = allFee = 0; string strSentAccount; list > listReceived; - GetAmounts(allGenerated, listReceived, allSent, allFee, strSentAccount); + list > listSent; + GetAmounts(allGenerated, listReceived, listSent, allFee, strSentAccount); if (strAccount == "") nGenerated = allGenerated; if (strAccount == strSentAccount) { - nSent = allSent; + foreach(const PAIRTYPE(string,int64)& s, listSent) + nSent += s.second; nFee = allFee; } CRITICAL_BLOCK(cs_mapAddressBook) diff --git a/main.h b/main.h index 11a5862cb0d..3c7bcb22f0f 100644 --- a/main.h +++ b/main.h @@ -874,7 +874,7 @@ public: } void GetAmounts(int64& nGenerated, list >& listReceived, - int64& nSent, int64& nFee, string& strSentAccount) const; + list >& listSent, int64& nFee, string& strSentAccount) const; void GetAccountAmounts(const string& strAccount, int64& nGenerated, int64& nReceived, int64& nSent, int64& nFee) const; diff --git a/rpc.cpp b/rpc.cpp index 602de73e443..aede2e4c4ce 100644 --- a/rpc.cpp +++ b/rpc.cpp @@ -859,10 +859,11 @@ Value listreceivedbyaccount(const Array& params, bool fHelp) void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDepth, Array& ret) { - int64 nGenerated, nSent, nFee; + int64 nGenerated, nFee; string strSentAccount; list > listReceived; - wtx.GetAmounts(nGenerated, listReceived, nSent, nFee, strSentAccount); + list > listSent; + wtx.GetAmounts(nGenerated, listReceived, listSent, nFee, strSentAccount); bool fAllAccounts = (strAccount == string("*")); @@ -878,15 +879,19 @@ void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDe } // Sent - if ((nSent != 0 || nFee != 0) && (fAllAccounts || strAccount == strSentAccount)) + if ((!listSent.empty() || nFee != 0) && (fAllAccounts || strAccount == strSentAccount)) { - Object entry; - entry.push_back(Pair("account", strSentAccount)); - entry.push_back(Pair("category", "send")); - entry.push_back(Pair("amount", ValueFromAmount(-nSent))); - entry.push_back(Pair("fee", ValueFromAmount(-nFee))); - WalletTxToJSON(wtx, entry); - ret.push_back(entry); + foreach(const PAIRTYPE(string, int64)& s, listSent) + { + Object entry; + entry.push_back(Pair("account", strSentAccount)); + entry.push_back(Pair("address", s.first)); + entry.push_back(Pair("category", "send")); + entry.push_back(Pair("amount", ValueFromAmount(-s.second))); + entry.push_back(Pair("fee", ValueFromAmount(-nFee))); + WalletTxToJSON(wtx, entry); + ret.push_back(entry); + } } // Received @@ -894,15 +899,21 @@ void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDe CRITICAL_BLOCK(cs_mapAddressBook) { foreach(const PAIRTYPE(string, int64)& r, listReceived) - if (mapAddressBook.count(r.first) && (fAllAccounts || mapAddressBook[r.first] == strAccount)) + { + string account; + if (mapAddressBook.count(r.first)) + account = mapAddressBook[r.first]; + if (fAllAccounts || (account == strAccount)) { Object entry; - entry.push_back(Pair("account", mapAddressBook[r.first])); + entry.push_back(Pair("account", account)); + entry.push_back(Pair("address", r.first)); entry.push_back(Pair("category", "receive")); entry.push_back(Pair("amount", ValueFromAmount(r.second))); WalletTxToJSON(wtx, entry); ret.push_back(entry); } + } } } @@ -1007,11 +1018,14 @@ Value listaccounts(const Array& params, bool fHelp) for (map::iterator it = mapWallet.begin(); it != mapWallet.end(); ++it) { const CWalletTx& wtx = (*it).second; - int64 nGenerated, nSent, nFee; + int64 nGenerated, nFee; string strSentAccount; list > listReceived; - wtx.GetAmounts(nGenerated, listReceived, nSent, nFee, strSentAccount); - mapAccountBalances[strSentAccount] -= nSent+nFee; + list > listSent; + wtx.GetAmounts(nGenerated, listReceived, listSent, nFee, strSentAccount); + mapAccountBalances[strSentAccount] -= nFee; + foreach(const PAIRTYPE(string, int64)& s, listSent) + mapAccountBalances[strSentAccount] -= s.second; if (wtx.GetDepthInMainChain() >= nMinDepth) { mapAccountBalances[""] += nGenerated; From 5f88e8887a31db68493334fc8e5652c5dd9cbf89 Mon Sep 17 00:00:00 2001 From: Witchspace Date: Wed, 22 Dec 2010 14:08:00 +0100 Subject: [PATCH 04/10] add -nolisten command line option --- init.cpp | 14 ++++++++++---- net.cpp | 8 +++++--- util.cpp | 2 +- util.h | 1 + 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/init.cpp b/init.cpp index 61ca4d2bd5a..cfb5d8e3304 100644 --- a/init.cpp +++ b/init.cpp @@ -181,7 +181,8 @@ bool AppInit2(int argc, char* argv[]) " -rpcpassword=\t " + _("Password for JSON-RPC connections\n") + " -rpcport= \t\t " + _("Listen for JSON-RPC connections on \n") + " -rpcallowip= \t\t " + _("Allow JSON-RPC connections from specified IP address\n") + - " -rpcconnect= \t " + _("Send commands to node running on \n"); + " -rpcconnect= \t " + _("Send commands to node running on \n") + + " -nolisten \t " + _("Don't accept connections from outside"); #ifdef USE_SSL strUsage += string() + @@ -211,6 +212,8 @@ bool AppInit2(int argc, char* argv[]) fPrintToDebugger = GetBoolArg("-printtodebugger"); fTestNet = GetBoolArg("-testnet"); + + fNoListen = GetBoolArg("-nolisten"); if (fCommandLine) { @@ -290,10 +293,13 @@ bool AppInit2(int argc, char* argv[]) // Bind to the port early so we can tell if another instance is already running. string strErrors; - if (!BindListenPort(strErrors)) + if (!fNoListen) { - wxMessageBox(strErrors, "Bitcoin"); - return false; + if (!BindListenPort(strErrors)) + { + wxMessageBox(strErrors, "Bitcoin"); + return false; + } } // diff --git a/net.cpp b/net.cpp index da7661962e6..a626acd3760 100644 --- a/net.cpp +++ b/net.cpp @@ -643,7 +643,9 @@ void ThreadSocketHandler2(void* parg) FD_ZERO(&fdsetSend); FD_ZERO(&fdsetError); SOCKET hSocketMax = 0; - FD_SET(hListenSocket, &fdsetRecv); + + if(hListenSocket != INVALID_SOCKET) + FD_SET(hListenSocket, &fdsetRecv); hSocketMax = max(hSocketMax, hListenSocket); CRITICAL_BLOCK(cs_vNodes) { @@ -680,7 +682,7 @@ void ThreadSocketHandler2(void* parg) // // Accept new connections // - if (FD_ISSET(hListenSocket, &fdsetRecv)) + if (hListenSocket != INVALID_SOCKET && FD_ISSET(hListenSocket, &fdsetRecv)) { struct sockaddr_in sockaddr; socklen_t len = sizeof(sockaddr); @@ -1344,7 +1346,7 @@ void StartNode(void* parg) #endif printf("addrLocalHost = %s\n", addrLocalHost.ToString().c_str()); - if (fUseProxy || mapArgs.count("-connect")) + if (fUseProxy || mapArgs.count("-connect") || fNoListen) { // Proxies can't take incoming connections addrLocalHost.ip = CAddress("0.0.0.0").ip; diff --git a/util.cpp b/util.cpp index 42256a9d0cb..694f9130450 100644 --- a/util.cpp +++ b/util.cpp @@ -17,7 +17,7 @@ bool fDaemon = false; bool fCommandLine = false; string strMiscWarning; bool fTestNet = false; - +bool fNoListen = false; diff --git a/util.h b/util.h index f57e4010677..c69bf1ce17f 100644 --- a/util.h +++ b/util.h @@ -146,6 +146,7 @@ extern bool fDaemon; extern bool fCommandLine; extern string strMiscWarning; extern bool fTestNet; +extern bool fNoListen; void RandAddSeed(); void RandAddSeedPerfmon(); From 72b9861635dcdb9fd73b84bbb43b3f755bc9f64a Mon Sep 17 00:00:00 2001 From: Witchspace Date: Fri, 24 Dec 2010 10:25:21 +0100 Subject: [PATCH 05/10] don't advertise on IRC if we don't allow external connections --- irc.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/irc.cpp b/irc.cpp index aad9beb76e9..5adaf11658b 100644 --- a/irc.cpp +++ b/irc.cpp @@ -257,8 +257,10 @@ void ThreadIRCSeed(void* parg) void ThreadIRCSeed2(void* parg) { - if (mapArgs.count("-connect")) + /* Dont advertise on IRC if we don't allow incoming connections */ + if (mapArgs.count("-connect") || fNoListen) return; + if (GetBoolArg("-noirc")) return; printf("ThreadIRCSeed started\n"); From f86655fdddb519f59ab70043d0c065aca807b94f Mon Sep 17 00:00:00 2001 From: Gavin Andresen Date: Wed, 5 Jan 2011 09:52:52 -0500 Subject: [PATCH 06/10] Add time to category:move transactions. --- rpc.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/rpc.cpp b/rpc.cpp index aede2e4c4ce..520921972ff 100644 --- a/rpc.cpp +++ b/rpc.cpp @@ -927,6 +927,7 @@ void AcentryToJSON(const CAccountingEntry& acentry, const string& strAccount, Ar Object entry; entry.push_back(Pair("account", acentry.strAccount)); entry.push_back(Pair("category", "move")); + entry.push_back(Pair("time", (boost::int64_t)acentry.nTime)); entry.push_back(Pair("amount", ValueFromAmount(acentry.nCreditDebit))); entry.push_back(Pair("otheraccount", acentry.strOtherAccount)); entry.push_back(Pair("comment", acentry.strComment)); From 80be6e69a92130175da623fbb75552a04d3ff4f8 Mon Sep 17 00:00:00 2001 From: Gavin Andresen Date: Fri, 7 Jan 2011 14:10:08 -0500 Subject: [PATCH 07/10] Add account/address details to gettransaction output --- rpc.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/rpc.cpp b/rpc.cpp index 520921972ff..fa9bda773cf 100644 --- a/rpc.cpp +++ b/rpc.cpp @@ -857,7 +857,7 @@ Value listreceivedbyaccount(const Array& params, bool fHelp) return ListReceived(params, true); } -void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDepth, Array& ret) +void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDepth, bool fLong, Array& ret) { int64 nGenerated, nFee; string strSentAccount; @@ -874,7 +874,8 @@ void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDe entry.push_back(Pair("account", string(""))); entry.push_back(Pair("category", "generate")); entry.push_back(Pair("amount", ValueFromAmount(nGenerated))); - WalletTxToJSON(wtx, entry); + if (fLong) + WalletTxToJSON(wtx, entry); ret.push_back(entry); } @@ -889,7 +890,8 @@ void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDe entry.push_back(Pair("category", "send")); entry.push_back(Pair("amount", ValueFromAmount(-s.second))); entry.push_back(Pair("fee", ValueFromAmount(-nFee))); - WalletTxToJSON(wtx, entry); + if (fLong) + WalletTxToJSON(wtx, entry); ret.push_back(entry); } } @@ -910,7 +912,8 @@ void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDe entry.push_back(Pair("address", r.first)); entry.push_back(Pair("category", "receive")); entry.push_back(Pair("amount", ValueFromAmount(r.second))); - WalletTxToJSON(wtx, entry); + if (fLong) + WalletTxToJSON(wtx, entry); ret.push_back(entry); } } @@ -976,7 +979,7 @@ Value listtransactions(const Array& params, bool fHelp) { CWalletTx *const pwtx = (*it).second.first; if (pwtx != 0) - ListTransactions(*pwtx, strAccount, 0, ret); + ListTransactions(*pwtx, strAccount, 0, true, ret); CAccountingEntry *const pacentry = (*it).second.second; if (pacentry != 0) AcentryToJSON(*pacentry, strAccount, ret); @@ -1063,7 +1066,7 @@ Value gettransaction(const Array& params, bool fHelp) CRITICAL_BLOCK(cs_mapWallet) { if (!mapWallet.count(hash)) - throw JSONRPCError(-5, "Invalid transaction id"); + throw JSONRPCError(-5, "Invalid or non-wallet transaction id"); const CWalletTx& wtx = mapWallet[hash]; int64 nCredit = wtx.GetCredit(); @@ -1074,7 +1077,12 @@ Value gettransaction(const Array& params, bool fHelp) entry.push_back(Pair("amount", ValueFromAmount(nNet - nFee))); if (wtx.IsFromMe()) entry.push_back(Pair("fee", ValueFromAmount(nFee))); + WalletTxToJSON(mapWallet[hash], entry); + + Array details; + ListTransactions(mapWallet[hash], "*", 0, false, details); + entry.push_back(Pair("details", details)); } return entry; From 2eb09b66efba479acd6a7043ac42456c8733dce9 Mon Sep 17 00:00:00 2001 From: Gavin Andresen Date: Mon, 10 Jan 2011 13:54:39 -0500 Subject: [PATCH 08/10] Fix so listaccounts with minconf works. --- rpc.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rpc.cpp b/rpc.cpp index fa9bda773cf..a020ee9bc53 100644 --- a/rpc.cpp +++ b/rpc.cpp @@ -1009,8 +1009,8 @@ Value listaccounts(const Array& params, bool fHelp) "Returns Object that has account names as keys, account balances as values."); int nMinDepth = 1; - if (params.size() > 1) - nMinDepth = params[1].get_int(); + if (params.size() > 0) + nMinDepth = params[0].get_int(); map mapAccountBalances; CRITICAL_BLOCK(cs_mapWallet) @@ -1934,7 +1934,7 @@ int CommandLineRPC(int argc, char *argv[]) if (strMethod == "sendfrom" && n > 2) ConvertTo(params[2]); if (strMethod == "sendfrom" && n > 3) ConvertTo(params[3]); if (strMethod == "listtransactions" && n > 1) ConvertTo(params[1]); - if (strMethod == "listaccounts" && n > 1) ConvertTo(params[1]); + if (strMethod == "listaccounts" && n > 0) ConvertTo(params[0]); // Execute Object reply = CallRPC(strMethod, params); From fa446a563e4dab12ed68daf0832652b1bf133a21 Mon Sep 17 00:00:00 2001 From: Gavin Andresen Date: Thu, 13 Jan 2011 20:04:56 -0500 Subject: [PATCH 09/10] Fix setaccount/getaccountaddress interaction bug See https://github.com/bitcoin/bitcoin/issues#issue/29 --- rpc.cpp | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/rpc.cpp b/rpc.cpp index 520921972ff..2ed4e5370f3 100644 --- a/rpc.cpp +++ b/rpc.cpp @@ -315,15 +315,9 @@ Value getnewaddress(const Array& params, bool fHelp) } -Value getaccountaddress(const Array& params, bool fHelp) +string GetAccountAddress(string strAccount, bool bForceNew=false) { - if (fHelp || params.size() != 1) - throw runtime_error( - "getaccountaddress \n" - "Returns the current bitcoin address for receiving payments to this account."); - - // Parse the account first so we don't generate a key if there's an error - string strAccount = AccountFromValue(params[0]); + string strAddress; CRITICAL_BLOCK(cs_mapWallet) { @@ -350,7 +344,7 @@ Value getaccountaddress(const Array& params, bool fHelp) } // Generate a new key - if (account.vchPubKey.empty()) + if (account.vchPubKey.empty() || bForceNew) { account.vchPubKey = GetKeyFromKeyPool(); string strAddress = PubKeyToAddress(account.vchPubKey); @@ -359,11 +353,26 @@ Value getaccountaddress(const Array& params, bool fHelp) } walletdb.TxnCommit(); - return PubKeyToAddress(account.vchPubKey); + strAddress = PubKeyToAddress(account.vchPubKey); } + return strAddress; +} + +Value getaccountaddress(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 1) + throw runtime_error( + "getaccountaddress \n" + "Returns the current bitcoin address for receiving payments to this account."); + + // Parse the account first so we don't generate a key if there's an error + string strAccount = AccountFromValue(params[0]); + + return GetAccountAddress(strAccount); } + Value setaccount(const Array& params, bool fHelp) { if (fHelp || params.size() < 1 || params.size() > 2) @@ -376,6 +385,17 @@ Value setaccount(const Array& params, bool fHelp) if (params.size() > 1) strAccount = AccountFromValue(params[1]); + // Detect when changing the account of an address that is the 'unused current key' of another account: + CRITICAL_BLOCK(cs_mapAddressBook) + { + if (mapAddressBook.count(strAddress)) + { + string strOldAccount = mapAddressBook[strAddress]; + if (strAddress == GetAccountAddress(strOldAccount)) + GetAccountAddress(strOldAccount, true); + } + } + SetAddressBookName(strAddress, strAccount); return Value::null; } From 04a9217dcf8c1c73e30b89e886c199522c4bbe9d Mon Sep 17 00:00:00 2001 From: David FRANCOIS Date: Fri, 14 Jan 2011 20:55:36 +0100 Subject: [PATCH 10/10] Add the -keypool option description to help output --- init.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/init.cpp b/init.cpp index cfb5d8e3304..e114d807278 100644 --- a/init.cpp +++ b/init.cpp @@ -182,6 +182,7 @@ bool AppInit2(int argc, char* argv[]) " -rpcport= \t\t " + _("Listen for JSON-RPC connections on \n") + " -rpcallowip= \t\t " + _("Allow JSON-RPC connections from specified IP address\n") + " -rpcconnect= \t " + _("Send commands to node running on \n") + + " -keypool= \t " + _("Set key pool size to \n") + " -nolisten \t " + _("Don't accept connections from outside"); #ifdef USE_SSL