entry.push_back(Pair("txid", wtx.GetHash().GetHex()));
entry.push_back(Pair("time", (int64_t)wtx.GetTxTime()));
entry.push_back(Pair("timereceived", (int64_t)wtx.nTimeReceived));
- BOOST_FOREACH(const PAIRTYPE(string,string)& item, wtx.mapValue)
+ for (const auto& item : wtx.mapValue)
entry.push_back(Pair(item.first, item.second));
}
++it)
{
const CWalletTx& wtx = (*it).second;
- BOOST_FOREACH(const CTxOut& txout, wtx.vout)
+ for (const CTxOut& txout : wtx.vout)
if (txout.scriptPubKey == scriptPubKey)
bKeyUsed = true;
}
// Find all addresses that have the given account
Array ret;
- BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress, string)& item, pwalletMain->mapAddressBook)
+ for (const auto& item : pwalletMain->mapAddressBook)
{
const CBitcoinAddress& address = item.first;
const string& strName = item.second;
return Value::null;
Array mergedHashes;
- BOOST_FOREACH(const uint256 txHash, listMerged)
+ for (const uint256 txHash : listMerged)
mergedHashes.push_back(txHash.GetHex());
return mergedHashes;
throw JSONRPCError(RPC_WALLET_UNLOCK_NEEDED, "Error: Please enter the wallet passphrase with walletpassphrase first.");
string strError = pwalletMain->SendMoney(scriptPubKey, nAmount, wtx);
- if (strError != "")
+ if (!strError.empty())
throw JSONRPCError(RPC_WALLET_ERROR, strError);
return wtx.GetHash().GetHex();
Array jsonGroupings;
map<CBitcoinAddress, int64_t> balances = pwalletMain->GetAddressBalances();
- BOOST_FOREACH(set<CBitcoinAddress> grouping, pwalletMain->GetAddressGroupings())
+ for (set<CBitcoinAddress> grouping : pwalletMain->GetAddressGroupings())
{
Array jsonGrouping;
- BOOST_FOREACH(CBitcoinAddress address, grouping)
+ for (CBitcoinAddress address : grouping)
{
Array addressInfo;
addressInfo.push_back(address.ToString());
ss << strMessageMagic;
ss << strMessage;
- CKey key;
+ CPubKey key;
if (!key.SetCompactSignature(Hash(ss.begin(), ss.end()), vchSig))
return false;
- return (key.GetPubKey().GetID() == keyID);
+ return (key.GetID() == keyID);
}
const CWalletTx& wtx = (*it).second;
if (wtx.IsCoinBase() || wtx.IsCoinStake() || !wtx.IsFinal())
continue;
- BOOST_FOREACH(const CTxOut& txout, wtx.vout)
+ for (const CTxOut& txout : wtx.vout)
{
CBitcoinAddress addressRet;
if (!ExtractAddress(*pwalletMain, txout.scriptPubKey, addressRet))
void GetAccountAddresses(string strAccount, set<CBitcoinAddress>& setAddress)
{
- BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress, string)& item, pwalletMain->mapAddressBook)
+ for (const auto& item : pwalletMain->mapAddressBook)
{
const CBitcoinAddress& address = item.first;
const string& strName = item.second;
if (wtx.IsCoinBase() || wtx.IsCoinStake() || !wtx.IsFinal())
continue;
- BOOST_FOREACH(const CTxOut& txout, wtx.vout)
+ for (const CTxOut& txout : wtx.vout)
{
CBitcoinAddress address;
if (ExtractAddress(*pwalletMain, txout.scriptPubKey, address) && IsMine(*pwalletMain, address) && setAddress.count(address))
Value getbalance(const Array& params, bool fHelp)
{
- if (fHelp || params.size() > 2)
+ if (fHelp || params.size() > 3)
throw runtime_error(
"getbalance [account] [minconf=1] [watchonly=0]\n"
"If [account] is not specified, returns the server's total available balance.\n"
wtx.GetAmounts(allGeneratedImmature, allGeneratedMature, listReceived, listSent, allFee, strSentAccount, filter);
if (wtx.GetDepthInMainChain() >= nMinDepth)
{
- BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress,int64_t)& r, listReceived)
+ for (const auto& r : listReceived)
nBalance += r.second;
}
- BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress,int64_t)& r, listSent)
+ for (const auto& r : listSent)
nBalance -= r.second;
nBalance -= allFee;
nBalance += allGeneratedMature;
// Parse address
CScript scriptPubKey;
- string strAddress = params[0].get_str();
+ string strAddress = params[1].get_str();
CBitcoinAddress address(strAddress);
if (address.IsValid())
// Send
string strError = pwalletMain->SendMoney(scriptPubKey, nAmount, wtx);
- if (strError != "")
+ if (!strError.empty())
throw JSONRPCError(RPC_WALLET_ERROR, strError);
return wtx.GetHash().GetHex();
vector<pair<CScript, int64_t> > vecSend;
int64_t totalAmount = 0;
- BOOST_FOREACH(const Pair& s, sendTo)
+ for (const Pair& s : sendTo)
{
CBitcoinAddress address(s.name_);
if (!address.IsValid())
"(got %" PRIszu " keys, but need at least %d to redeem)", keys.size(), nRequired));
if (keys.size() > 16)
throw runtime_error("Number of addresses involved in the multisignature address creation > 16\nReduce the number");
- std::vector<CKey> pubkeys;
+ std::vector<CPubKey> pubkeys;
pubkeys.resize(keys.size());
for (unsigned int i = 0; i < keys.size(); i++)
{
if (!pwalletMain->GetPubKey(keyID, vchPubKey))
throw runtime_error(
strprintf("no full public key for address %s",ks.c_str()));
- if (!vchPubKey.IsValid() || !pubkeys[i].SetPubKey(vchPubKey))
+ if (!vchPubKey.IsValid())
throw runtime_error(" Invalid public key: "+ks);
+ pubkeys[i] = vchPubKey;
}
// Case 2: hex public key
else if (IsHex(ks))
{
CPubKey vchPubKey(ParseHex(ks));
- if (!vchPubKey.IsValid() || !pubkeys[i].SetPubKey(vchPubKey))
+ if (!vchPubKey.IsValid())
throw runtime_error(" Invalid public key: "+ks);
+ pubkeys[i] = vchPubKey;
}
else
{
if (nDepth < nMinDepth)
continue;
- BOOST_FOREACH(const CTxOut& txout, wtx.vout)
+ for (const CTxOut& txout : wtx.vout)
{
CTxDestination address;
if (!ExtractDestination(txout.scriptPubKey, address) || !IsMine(*pwalletMain, address))
// Reply
Array ret;
map<string, tallyitem> mapAccountTally;
- BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress, string)& item, pwalletMain->mapAddressBook)
+ for (const auto& item : pwalletMain->mapAddressBook)
{
const CBitcoinAddress& address = item.first;
const string& strAccount = item.second;
bool involvesWatchonly = wtx.IsFromMe(MINE_WATCH_ONLY);
// Generated blocks assigned to account ""
- if ((nGeneratedMature+nGeneratedImmature) != 0 && (fAllAccounts || strAccount == ""))
+ if ((nGeneratedMature+nGeneratedImmature) != 0 && (fAllAccounts || strAccount.empty()))
{
Object entry;
entry.push_back(Pair("account", string("")));
// Sent
if ((!listSent.empty() || nFee != 0) && (fAllAccounts || strAccount == strSentAccount))
{
- BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress, int64_t)& s, listSent)
+ for (const auto& s : listSent)
{
Object entry;
entry.push_back(Pair("account", strSentAccount));
// Received
if (listReceived.size() > 0 && wtx.GetDepthInMainChain() >= nMinDepth)
{
- BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress, int64_t)& r, listReceived)
+ for (const auto& r : listReceived)
{
string account;
if (pwalletMain->mapAddressBook.count(r.first))
map<string, int64_t> mapAccountBalances;
- BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress, string)& entry, pwalletMain->mapAddressBook) {
+ for (const auto& entry : pwalletMain->mapAddressBook) {
if (IsMine(*pwalletMain, entry.first)) // This address belongs to me
mapAccountBalances[entry.second] = 0;
}
list<pair<CBitcoinAddress, int64_t> > listSent;
wtx.GetAmounts(nGeneratedImmature, nGeneratedMature, listReceived, listSent, nFee, strSentAccount, includeWatchonly);
mapAccountBalances[strSentAccount] -= nFee;
- BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress, int64_t)& s, listSent)
+ for (const auto& s : listSent)
mapAccountBalances[strSentAccount] -= s.second;
if (wtx.GetDepthInMainChain() >= nMinDepth)
{
mapAccountBalances[""] += nGeneratedMature;
- BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress, int64_t)& r, listReceived)
+ for (const auto& r : listReceived)
if (pwalletMain->mapAddressBook.count(r.first))
mapAccountBalances[pwalletMain->mapAddressBook[r.first]] += r.second;
else
list<CAccountingEntry> acentries;
CWalletDB(pwalletMain->strWalletFile).ListAccountCreditDebit("*", acentries);
- BOOST_FOREACH(const CAccountingEntry& entry, acentries)
+ for (const CAccountingEntry& entry : acentries)
mapAccountBalances[entry.strAccount] += entry.nCreditDebit;
Object ret;
- BOOST_FOREACH(const PAIRTYPE(string, int64_t)& accountBalance, mapAccountBalances) {
+ for (const auto& accountBalance : mapAccountBalances) {
ret.push_back(Pair(accountBalance.first, ValueFromAmount(accountBalance.second)));
}
return ret;
{
nWalletUnlockTime = nMyWakeTime;
- do
+ for ( ; ; )
{
if (nWalletUnlockTime==0)
break;
Sleep(nToSleep);
ENTER_CRITICAL_SECTION(cs_nWalletUnlockTime);
- } while(1);
+ };
if (nWalletUnlockTime)
{
obj.push_back(Pair("isscript", false));
if (mine == MINE_SPENDABLE) {
pwalletMain->GetPubKey(keyID, vchPubKey);
- obj.push_back(Pair("pubkey", HexStr(vchPubKey.Raw())));
+ obj.push_back(Pair("pubkey", HexStr(vchPubKey.begin(), vchPubKey.end())));
obj.push_back(Pair("iscompressed", vchPubKey.IsCompressed()));
}
return obj;
obj.push_back(Pair("script", GetTxnOutputType(whichType)));
obj.push_back(Pair("hex", HexStr(subscript.begin(), subscript.end())));
Array a;
- BOOST_FOREACH(const CTxDestination& addr, addresses)
+ for (const CTxDestination& addr : addresses)
a.push_back(CBitcoinAddress(addr).ToString());
obj.push_back(Pair("addresses", a));
if (whichType == TX_MULTISIG)
CMalleableKeyView view;
bool isMine = pwalletMain->GetMalleableView(mpk, view);
ret.push_back(Pair("ismine", isMine));
+ ret.push_back(Pair("PubkeyPair", mpk.ToString()));
if (isMine)
ret.push_back(Pair("KeyView", view.ToString()));
return Value::null;
}
+Value resendwallettransactions(const Array& params, bool fHelp)
+{
+ if (fHelp || params.size() != 0)
+ throw runtime_error(
+ "resendwallettransactions\n"
+ "Immediately re-broadcast unconfirmed wallet transactions to all peers.\n"
+ "Intended only for testing; the wallet code periodically re-broadcasts\n"
+ "automatically.\n"
+ "Returns array of transaction ids that were re-broadcast.\n"
+ );
+
+ LOCK2(cs_main, pwalletMain->cs_wallet);
+
+ std::vector<uint256> txids = pwalletMain->ResendWalletTransactionsBefore(GetTime());
+ Array result;
+ for (const uint256& txid : txids)
+ {
+ result.push_back(txid.ToString());
+ }
+ return result;
+}
+
+
// Make a public-private key pair
Value makekeypair(const Array& params, bool fHelp)
{
bool fCompressed;
CSecret vchSecret = key.GetSecret(fCompressed);
+ CPubKey vchPubKey = key.GetPubKey();
result.push_back(Pair("Secret", HexStr<CSecret::iterator>(vchSecret.begin(), vchSecret.end())));
- result.push_back(Pair("PublicKey", HexStr(key.GetPubKey().Raw())));
+ result.push_back(Pair("PublicKey", HexStr(vchPubKey.begin(), vchPubKey.end())));
return result;
}
"newmalleablekey\n"
"Make a malleable public/private key pair.\n");
- if (!(fDebug || fTestNet) && GetTime() < SMALLDATA_SWITCH_TIME)
- throw runtime_error("This feature has been disabled for mainNet clients");
-
// Parse the account first so we don't generate a key if there's an error
string strAccount;
if (params.size() > 0)
{
if (fHelp || params.size() > 2 || params.size() == 0)
throw runtime_error(
- "adjustmalleablepubkey <Malleable public key data>\n"
- "Calculate new public key using provided malleable public key data.\n");
+ "adjustmalleablepubkey <Malleable address, key view or public key pair>\n"
+ "Calculate new public key using provided data.\n");
- string pubKeyPair = params[0].get_str();
+ string strData = params[0].get_str();
CMalleablePubKey malleablePubKey;
- if (pubKeyPair.size() == 136) {
- malleablePubKey.setvch(ParseHex(pubKeyPair));
- } else
- malleablePubKey.SetString(pubKeyPair);
+ do
+ {
+ CBitcoinAddress addr(strData);
+ if (addr.IsValid() && addr.IsPair())
+ {
+ // Initialize malleable pubkey with address data
+ malleablePubKey = CMalleablePubKey(addr.GetData());
+ break;
+ }
+ CMalleableKeyView viewTmp(strData);
+ if (viewTmp.IsValid())
+ {
+ // Shazaam, we have a valid key view here.
+ malleablePubKey = viewTmp.GetMalleablePubKey();
+ break;
+ }
+ if (malleablePubKey.SetString(strData))
+ break; // A valid public key pair
+
+ throw runtime_error("Though your data seems a valid Base58 string, we were unable to recognize it.");
+ }
+ while(false);
CPubKey R, vchPubKeyVariant;
malleablePubKey.GetVariant(R, vchPubKeyVariant);
Object result;
- result.push_back(Pair("R", HexStr(R.Raw())));
- result.push_back(Pair("PubkeyVariant", HexStr(vchPubKeyVariant.Raw())));
+ result.push_back(Pair("R", HexStr(R.begin(), R.end())));
+ result.push_back(Pair("PubkeyVariant", HexStr(vchPubKeyVariant.begin(), vchPubKeyVariant.end())));
result.push_back(Pair("KeyVariantID", CBitcoinAddress(vchPubKeyVariant.GetID()).ToString()));
return result;
pwalletMain->ListMalleableViews(keyViewList);
Array result;
- BOOST_FOREACH(const CMalleableKeyView &keyView, keyViewList)
+ for (const CMalleableKeyView &keyView : keyViewList)
{
result.push_back(keyView.ToString());
}