Value getnewaddress(const Array& params, bool fHelp) { if (fHelp || params.size() > 1) throw runtime_error( "getnewaddress (\"IsMiner\")\n" "\nget a new address\n" "\nArguments:\n" "1. \"IsMiner\" (bool, optional) private key Is used for miner if true will create tow key ,another for miner.\n" "\nExamples:\n" + HelpExampleCli("getnewaddress", "") + HelpExampleCli("getnewaddress", "true") ); EnsureWalletIsUnlocked(); CKey mCkey; mCkey.MakeNewKey(); CKey Minter; bool IsForMiner = false; if (params.size() == 1) { RPCTypeCheck(params, list_of(bool_type)); Minter.MakeNewKey(); IsForMiner = params[0].get_bool(); } CPubKey newKey = mCkey.GetPubKey(); CKeyID keyID = newKey.GetKeyID(); if (IsForMiner) { if (!pwalletMain->AddKey(mCkey, Minter)) throw runtime_error("add key failed "); } else if (!pwalletMain->AddKey(mCkey)) { throw runtime_error("add key failed "); } Object obj; obj.push_back(Pair("addr", keyID.ToAddress())); obj.push_back(Pair("minerpubkey", IsForMiner?Minter.GetPubKey().ToString(): "no" )); return obj; }