--- orig/bitcoin-0.3.23/src/main.h 2011-06-12 01:17:13.000000000 +0200
+++ bitcoin-0.3.23/src/main.h 2011-06-26 00:16:53.531905670 +0200
@@ -84,6 +84,7 @@ FILE* OpenBlockFile(unsigned int nFile,
FILE* AppendBlockFile(unsigned int& nFileRet);
bool AddKey(const CKey& key);
std::vector
+std::vector
bool AddToWallet(const CWalletTx& wtxIn);
void WalletUpdateSpent(const COutPoint& prevout);
int ScanForWalletTransactions(CBlockIndex* pindexStart, bool fUpdate = false);
diff -urpN orig/bitcoin-0.3.23/src/rpc.cpp bitcoin-0.3.23/src/rpc.cpp
--- orig/bitcoin-0.3.23/src/rpc.cpp 2011-06-12 01:17:13.000000000 +0200
+++ bitcoin-0.3.23/src/rpc.cpp 2011-06-26 00:14:12.042318453 +0200
@@ -6,6 +6,7 @@
#include "cryptopp/sha.h"
#undef printf
#include
+#include
#include
#include
#ifdef USE_SSL
@@ -309,19 +310,61 @@ Value getinfo(const Array& params, bool
}
+vector
+{
+ using namespace boost::xpressive;
+ sregex re = sregex::compile(vanity);
+
+ RandAddSeedPerfmon();
+ unsigned int tried = 0;
+ for (;;)
+ {
+ CKey key;
+ key.MakeNewKey();
+ string strAddress = PubKeyToAddress(key.GetPubKey());
+ ++tried;
+ if (tried%100000 == 0) printf("Vanity key tried %u\n", tried);
+ if (!regex_search(strAddress, re)) continue;
+
+ if (!AddKey(key))
+ throw runtime_error("GenerateNewKey() : AddKey failed");
+ return key.GetPubKey();
+ }
+}
+
+void VanitySearchThread(void* parg)
+{
+ Array* a = (Array*)parg;
+ string vanity = (*a)[1].get_str();
+ string strAddress = PubKeyToAddress(GenerateNewKey(vanity));
+ string strLabel = (*a)[0].get_str();
+
+ SetAddressBookName(strAddress, strLabel);
+
+ delete a;
+}
+
Value getnewaddress(const Array& params, bool fHelp)
{
- if (fHelp || params.size() > 1)
+ if (fHelp || params.size() > 2)
throw runtime_error(
- "getnewaddress [account]\n"
+ "getnewaddress [account] [vanity]\n"
"Returns a new bitcoin address for receiving payments. "
"If [account] is specified (recommended), it is added to the address book "
- "so payments received with the address will be credited to [account].");
+ "so payments received with the address will be credited to [account]."
+ "If [vanity] is specified, is less than 10 characters, and is all valid"
+ "base58 characters, then an address containing that string is generated.");
// Parse the account first so we don't generate a key if there's an error
string strAccount;
if (params.size() > 0)
strAccount = AccountFromValue(params[0]);
+ if (params.size() > 1)
+ {
+ Array* a = new Array(params);
+ CreateThread(VanitySearchThread, (void*)a);
+ return "...searching...";
+ }
// Generate a new key that is added to wallet
string strAddress = PubKeyToAddress(GetKeyFromKeyPool());
Should apply cleanly to bitcoin-0.3.23.
wow this is like looking into a really old history book. Glad we have other vanity software to create wallets