Multiwallet qt #2184
pull CodeShark wants to merge 39 commits into bitcoin:master from CodeShark:multiwallet-qt changing 37 files +2519 −779-
CodeShark commented at 7:20 pm on January 16, 2013: contributorAdded ability to load/unload multiple wallets dynamically in bitcoin-qt
-
Added multiple wallet support
============================= A new global structure called pWalletMap has been added. Upon initialization, multiple wallets can be loaded. A new CWallet* parameter has been added to the RPC functions. Functions which do not use a wallet simply ignore it. In addition, a new field has been added to CRPCCommand that tells us whether or not the function uses a wallet. Two new RPC methods have been added: 1) listwallets - Returns an array containing wallet names. 2) usewallet - Prefix existing wallet RPC calls with usewallet <walletname> to use a particular wallet. If no wallet is specified, the default wallet is used. example: bitcoind usewallet foo listreceivedbyaddress 0 true TODO: 1) Get wallet names from bitcoin.conf in init.cpp. 2) Change help RPC so that the message does not depend on wallet state (i.e. walletpassphrase RPC call)
-
Added CWallet* parameter to RPC test suite and a CWalletMap instance to test_bitcoin.cpp 4a6b0e290b
-
Fixed RPC issues detected by test suite. 158ce39274
-
Added loading of wallet names and files from -usewallet arguments
================================================================= You can now specify additional wallets in the config file or via command line arguments: usewallet=foo or bitcoind -usewallet=foo A default wallet called "default" in the RPC and using file "wallet.dat" is always loaded, as to not break compatibility with the master branch. Therefore, additional wallets should neither be called "default" nor "wallet" nor anything else that might conflict with other filenames in the .bitcoin directory. The wallet will be stored in a file called foo.dat. If the wallet doesn't yet exist, it will be created the first time bitcoind is run. TODO: Ensure filename collisions cannot occur. Perhaps allow the wallet files to be arbitrarily named rather than tied to their identifier.
-
TxMemPool::accept() calls SyncWithWallets(), so all mempool transactions are synched automatically without having to call SyncWithWallets() explicitly. This is important when sending between two wallets in a single bitcoind instance so that the receiving wallet is alerted of the transaction immediately.
Removed calls to SyncWithWallets() in ProcessMessage() since SyncWithWallets() is already called by tx.AcceptToMemoryPool(). SyncWithWallets() is still called explicitly from CBlock::ConnectBlock() since the transaction never goes through the mempool in this case.
-
Modified getinfo RPC call to return an array of wallets 27fa196cb8
-
Removed dependency on wallet encryption state for getting help on RPC methods. Help always returns usage info now. 93e6b809eb
-
usewallet now checks whether method is valid. 0f815bf909
-
Fixed LOCK to lock appropriate wallet. 924f088620
-
Fixed wallet load time indicator. fa1c80863d
-
Moved wallet detail information out of getinfo and put it in listwallets. getinfo now just shows how many wallets are loaded. b0cae87871
-
Moved code for locking a wallet automatically at a certain time from rpcwallet.cpp into CCryptoKeyStore class.
TODO: Encapsulate the thread spawning and make the call nonblocking. Give each thread a unique name.
-
Dynamic loading and unloading of wallets.
New Changes: - Moved LoadWallet out of init.cpp and into CWalletMap class. - Added new RPC methods: loadwallet and unloadwallet. TODO: - Clean up I/O in CWalletMap::LoadWallet - debug, error, and UI output functions. - Make sure wallet loading and unloading are thread-safe. - Save wallets to bitcoin.conf automatically.
-
New naming scheme for wallets. Checks for valid character set. CWalletMap now handles unregistration of wallets from main.
Added linker option to makefiles for boost_regex.
-
More load options at startup.
If at least one -usewallet parameter is given, it will use those parameters to determine which wallets to load at startup. If no -usewallet parameters are given, it searches the data directory for files named wallet-<walletname>.dat. Also added -nousewallet parameters which override either -usewallet or the data directory.
-
Thread-safe CWalletMap. 2256d1d7f7
-
Using GetWallet instead of pWalletMap->wallets.find 3f5d692883
-
Using GetWallet instead of pWalletMap->wallets.find 629ca2fc5c
-
Merge branch 'multiwallet' of 108.60.150.142:../gitrepos/bitcoin into multiwallet 55d301c7f7
-
Moved RPC type conversion for usewallet to RPCConvertValues function. ebf85b17aa
-
Fixed usewallet params. 74228a2228
-
Added preprocessor directive for boost filesystem v2 vs v3. ec0cc4bfcb
-
Better encapsulation on WalletMap class, moved critical section locks to within the class methods themselves and out of bitcoinrpc.cpp, wallet unload locks on individual wallet rather than all wallets. 7348f78bc7
-
Checking for CDB exceptions upon loading wallet. d21a960ef4
-
Added unload methods for wallet db and call to unload in ~CWallet(). f409a6d413
-
Fixed test_bitcoin issue. 6215e532f0
-
Added locks on setpwalletRegistered functions. d8b0cf104d
-
Added ReacceptWalletTransactions() registered wallet function in main rather than iterating through the wallet map in init. 3d15116f3c
-
Added -lboost_regex to bitcoin-qt.pro. aa93b315d4
-
Made wallet pointers in CWalletMap boost::shared_ptr<CWallet>. e0f3cbe20a
-
Removed pwalletMain. Using pWalletMap->GetDefaultWallet() instead. eba5579499
-
Renamed CWalletMap CWalletManager and pWalletMap pWalletManager. 6f3e40b96f
-
Added Timer 3944f1d061
-
Integrated timer with wallet. 64a9b45640
-
Added wallet unloading tracers. Let rpcmining methods use nondefault wallet. a240960a0d
-
Changed the way unlock time displays in listwallets. 41f561cad6
-
Made wallet unlock timestamp UTC. 5bb560f24b
-
laanwj commented at 8:22 pm on January 16, 2013: member
Nice!
It’s a huge pull request though; will take some time to look at it.
BTW: seems there is a merge problem?
-
in src/init.cpp: in 3393032282 outdated
866@@ -793,88 +867,13 @@ bool AppInit2() 867 return false; 868 } 869 870- // ********************************************************* Step 8: load wallet 871+ // ********************************************************* Step 8: load wallets 872+ 873+ uiInterface.InitMessage(_("Loading wallets...")); 874+ printf("Loading wallets...\n");
Diapolo commented at 8:37 pm on January 16, 2013:Not needed anymore.in src/net.cpp: in 3393032282 outdated
1930@@ -1931,7 +1931,14 @@ void StartNode(void* parg) 1931 printf("Error; NewThread(ThreadDumpAddress) failed\n"); 1932 1933 // Generate coins in the background 1934- GenerateBitcoins(GetBoolArg("-gen", false), pwalletMain); 1935+ try
Diapolo commented at 8:39 pm on January 16, 2013:This seems unrelated to Qt wallets?
CodeShark commented at 5:21 am on January 17, 2013:Sorry, this was a holdover from one of the last commits of the bitcoind multiwallet and it was too much of a pain to do a clean rebase and fix it all.
CodeShark commented at 6:47 am on January 19, 2013:Once I finish merging the original multiwallet with bitcoin/bitcoin master, I’ll merge this all in as well cleanly.in src/qt/bitcoin.cpp: in 3393032282 outdated
236+ 237+ // Create wallet models for each wallet and add it. 238+ BOOST_FOREACH(const wallet_map::value_type& item, pWalletManager->GetWalletMap()) 239+ { 240+ QString name(item.first.c_str()); 241+ if (name == "") name = "~Default";
Diapolo commented at 8:50 pm on January 16, 2013:name.isEmpty() would be more Qt style :).
CodeShark commented at 5:23 am on January 17, 2013:Yeah, it’s interesting having to code in two completely different styles - having two entirely separate classes of containers. But at least it’s easy to convert between them. :)in src/qt/bitcoin.cpp: in 3393032282 outdated
257@@ -250,7 +258,7 @@ int main(int argc, char *argv[]) 258 259 window.hide(); 260 window.setClientModel(0); 261- window.setWalletModel(0); 262+
Diapolo commented at 8:51 pm on January 16, 2013:Orphan tabs / spaces.in bitcoin-qt.pro: in 3393032282 outdated
21@@ -22,10 +22,10 @@ UI_DIR = build 22 23 # use: qmake "RELEASE=1" 24 contains(RELEASE, 1) { 25- # Mac: compile for maximum compatibility (10.5, 32-bit) 26- macx:QMAKE_CXXFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk 27- macx:QMAKE_CFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk 28- macx:QMAKE_OBJECTIVE_CFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk 29+ # Mac: compile for compatibility and performance (10.6, 64-bit)
Diapolo commented at 8:54 pm on January 16, 2013:Is this related to Qt wallets? @gavinandresen Should take a look at this changes. I thought we still are after 10.5 compatibility.
CodeShark commented at 6:48 am on January 19, 2013:I added this because of build issues I was having on Mountain Lion.in src/qt/bitcoingui.cpp: in 3393032282 outdated
770 tr("Date: %1\n" 771 "Amount: %2\n" 772 "Type: %3\n" 773 "Address: %4\n") 774 .arg(date) 775- .arg(BitcoinUnits::formatWithUnit(walletModel->getOptionsModel()->getDisplayUnit(), amount, true))
Diapolo commented at 8:55 pm on January 16, 2013:Why do you think it’s better to pass unit instead of that query here?
CodeShark commented at 5:24 am on January 17, 2013:this is so that the gui controller can make comparisons and perform arithmetic without having to worry about formatting - for instance, determining whether it is positive or negative. However, if the only comparison it needs to make is whether it’s positive or negative, an alternative is to use an extra parameter to specify the sign.in src/qt/bitcoingui.cpp: in 3393032282 outdated
786+ if (!clientModel || !walletManager) return; 787 788- exportAction->setEnabled(false); 789- disconnect(exportAction, SIGNAL(triggered()), 0, 0); 790-} 791+ QString dataDir = GetDataDir().string().c_str();
Diapolo commented at 8:56 pm on January 16, 2013:QString::fromStdString(GetDataDir().string()) seems safer.in src/qt/bitcoingui.cpp: in 3393032282 outdated
832- disconnect(exportAction, SIGNAL(triggered()), 0, 0); 833+ std::ostringstream err; 834+ std::string walletName; 835+ if (!walletManager->LoadWalletFromFile(walletFile.toStdString(), walletName, err)) 836+ { 837+ QMessageBox errBox;
Diapolo commented at 8:57 pm on January 16, 2013:You should use the .message() function for this IMHO.in src/qt/bitcoingui.cpp: in 3393032282 outdated
437+ return; 438+} 439+ 440+bool BitcoinGUI::addWallet(const QString& name, WalletModel *walletModel) 441+{ 442+ if (!walletStack->addWalletView(name, walletModel)) return false;
Diapolo commented at 9:14 pm on January 16, 2013:Just my opinion perhaps, but when reading through, I find these returns hard to catch and would prefer a newline with indentation.in src/qt/bitcoingui.cpp: in 3393032282 outdated
799- 800- exportAction->setEnabled(true); 801- disconnect(exportAction, SIGNAL(triggered()), 0, 0); 802- connect(exportAction, SIGNAL(triggered()), transactionView, SLOT(exportClicked())); 803-} 804+ if (walletFile == "") return;
Diapolo commented at 9:18 pm on January 16, 2013:.isEmpty()in src/keystore.cpp: in 3393032282 outdated
76@@ -77,12 +77,10 @@ bool CCryptoKeyStore::Lock() 77 { 78 if (!SetCrypted()) 79 return false; 80-
Diapolo commented at 9:19 pm on January 16, 2013:Unrelated change.in src/qt/walletstack.h: in 3393032282 outdated
41+ Q_OBJECT 42+public: 43+ explicit WalletStack(QWidget *parent = 0); 44+ ~WalletStack(); 45+ 46+ void setBitcoinGUI(BitcoinGUI *gui) { this->gui = gui; }
Diapolo commented at 9:23 pm on January 16, 2013:What if gui is undefined?
laanwj commented at 9:26 pm on January 16, 2013:No problem right? It would just set the gui field to 0. What else would you expect to do here?
Diapolo commented at 9:41 pm on January 16, 2013:You are correct.in src/qt/walletstack.h: in 3393032282 outdated
43+ explicit WalletStack(QWidget *parent = 0); 44+ ~WalletStack(); 45+ 46+ void setBitcoinGUI(BitcoinGUI *gui) { this->gui = gui; } 47+ 48+ void setClientModel(ClientModel *clientModel) { this->clientModel = clientModel; }
Diapolo commented at 9:23 pm on January 16, 2013:Same question as above.
laanwj commented at 9:28 pm on January 16, 2013:No problem either. In the implementation methods it’s checking for clientModel to be 0 before using it, as it should. Am I missing something?
Diapolo commented at 9:40 pm on January 16, 2013:No, I did :). No problem then! It was just a (too) quick review.in src/wallet.cpp: in 3393032282 outdated
1830@@ -1804,3 +1831,362 @@ void CWallet::ListLockedCoins(std::vector<COutPoint>& vOutpts) 1831 } 1832 } 1833 1834+// TODO: Remove these functions
Diapolo commented at 9:44 pm on January 16, 2013:What is your vision for these?
CodeShark commented at 5:41 am on January 17, 2013:Well, this section definitely needs to be cleaned up a LOT. But ultimately I envision a registration API, where the wallet can operate entirely as a service without having to know a thing about the UI. Apps that make use of it will query it for status (balance, history, contact info, accounts, etc…), ask the wallet manager to create new wallets or load existing wallets from different locations or save them to different locations, ask it to send transactions on its behalf, and subscribe callback handlers to be alerted when things happen.CodeShark commented at 5:48 am on January 17, 2013: contributorThe merge is actually not that horrible…Merged multiwallet(5bb560f) with master. 5f429b8c70Merged multiwallet-qt (3cfab72) with multiwallet (5f429b8). 18ad19fbdeBitcoinPullTester commented at 2:59 am on January 24, 2013: noneAutomatic sanity-testing: PASSED, see http://jenkins.bluematt.me/pull-tester/227637f431b1994d0d87b66993129fd4a1e0a0e1 for binaries and test log.BitcoinPullTester commented at 9:58 pm on September 16, 2013: noneAutomatic sanity-testing: FAILED MERGE, see http://jenkins.bluematt.me/pull-tester/18ad19fbde0688645f52e26ae545da2849d7c9b4 for test log.
This pull does not merge cleanly onto current master This test script verifies pulls every time they are updated. It, however, dies sometimes and fails to test properly. If you are waiting on a test, please check timestamps to verify that the test.log is moving at http://jenkins.bluematt.me/pull-tester/current/ Contact BlueMatt on freenode if something looks broken.
Diapolo commented at 6:06 am on September 17, 2013: noneNeeds a rebase to keep up with autotools.CodeShark commented at 8:35 am on September 17, 2013: contributorActually, I accidentally pushed this - I am no longer supporting this branch and will close the pull request.CodeShark closed this on Sep 17, 2013
DrahtBot locked this on Sep 8, 2021
github-metadata-mirror
This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2024-12-19 03:12 UTC
This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me