Uh, using mmap() or similar on Windows would let you access the blockchain through virtual memory, loading it from disk as needed.
Could this resolve your issue ?
Is this really a solution? I thought you still needed the full address space of the file in order to use mmap (i.e. 1 GB or RAM for a 1GB file) but that mmap prevents you from needing to read it all from disk until you actually access it. If I have it wrong, please let me know. The other issue was with portability. Since mmap is linux-specific, I would have to do something completely different for Windows, and I was trying to avoid platform-specific code. But if I have this wrong, maybe it will be an easy upgrade after all
very interesting, one note would be if you're allowing paper backups to integrate a QR reader into the app to recgonize a scaned image of your backup when you want to recover it!
My primary goal for putting the QR code there was so that your computer could easily transfer a wallet to your phone, if someone were to make a smartphone app. While it is annoying to type in the root/chain codes... it should be a rare event, and I selected a character set that is easy to type.
On the other hand, I have a two-factor authentication scheme nearly ready-to-go, requiring only 2-of-2 transactions
without a third-party, but I need a phone app to do. The computer would generate both wallets and the phone would scan the paper QR code and then be used for signing only (no blockchain). Armory will delete the private keys on the computer but keep a watching-only version, then move all your money into a 2-of-2 transaction requiring both computer and phone. More details in
this thread...
However, while the low-level code is well-commented, I haven't really done any high-level documentation of how to do high-level stuff -- for now you'll have to settle for looking at unittest.py until I get around to making a walk-thru of the high-level interface.
Donated a few btc for having unit tests and comments. Sounds like great work, will check it out when it's in alpha.
Thanks! I don't know if there's a way to do a project of this order of magnitude without testing and comments. I'm constantly having to go back to code I haven't touched in months, and tweak it, or remind myself how the interface works. On that note, the entire wallet file format is described in the
PyBtcWallet class comments. If anyone wants to see how the wallet file is constructed, it should all be described there. The address format is described in the
PyBtcAddress serialize function.
I'm going to work on build instructions right now. But for those of you jumping ahead
please checkout the qtdev branch of the repo. Virtually no GUI development has been merged into master yet.
This is great. I'm also interested in why you did it. After all there are several open source bitcoin clients that could need patches for these features. Hope you get and accept the support to push this client to a bright future.
Bitcoin is my calling. It combines every one of my strongest skills (cryptography, math, programming, data structures, algorithm optimization, GUI design). I started this project 6 months ago, and was disappointed with the utter lack of python support. I quickly figured out that anything blockchain related is devastatingly slow in python, but I was determined to do it anyway (and hence the C++/SWIG layer). After participating in the forums, I realized just how many features were missing from it that I knew
exactly how to implement. It would've been a tremendous amount of work to gut someone else's project (there were very few), and it might not even be quicker! Maybe I'm just stubborn and like doing things my own way...
On the other hand, if you want C++ blockchain-only tools, the implementation I ended up with is the absolute fastest thing possible for reading and scanning the blockchain. It's not verifying the blockchain, but in terms of collecting unspent outputs and computing balances, I don't think any single-threaded app could be any faster (0.65s to get the balance of a wallet with the blockchain in RAM, 10-15s if it's a cold-start from disk). And of course, multi-threading this process is in my long-term plans