Armory Multi-Signature "Lockboxes" with SimulfundingTesting Bounty - 0.03 BTC per bug (up to 1.5 BTC)
Installers for version 0.92 (pre-release 0.91.99.11-beta): Armory 0.91.99.11-beta for Windows XP, Vista, 7, 8+ 32- and 64-bit Armory 0.91.99.11-beta for MacOSX 10.7+ 64bit Armory 0.91.99.11-beta for Ubuntu 12.04+ 32bit Armory 0.91.99.11-beta for Ubuntu 12.04+ 64bit Armory 0.91.99.11-beta for RaspberryPi (armhf)Offline Bundles: Armory 0.91.99.11-beta Offline Bundle for Ubuntu 12.04 32bit Armory 0.91.99.11-beta Offline Bundle for Ubuntu 12.04 64bit Armory 0.91.99.11-beta Offline Bundle for RaspbianPi (armhf)Signed Hashes: Armory 0.91.99.11-beta: Signed hashes of all installers
Check out our Lockbox tutorials: https://bitcoinarmory.com/using-lockboxes/
EDIT: Thanks to SimonBelmond for sending us a link to this intro Armory multi-sig intro video: http://vimeo.com/96983886EDIT2: We actually redesigned the interface/dashboard, so his video doesn't show what the latest version looks like, though the process is the same
I am pleased to announce that Armory has finally completed the design and initial testing of "multi-signature lockboxes" in Armory. This is the first truly generic, fully-decentralized multi-signature interface available for any cryptocurrency. Armory is innovating multi-sig the same way it innovated offline wallets -- taking a concept that is inherently complex, and making it about as simple as it can be. It is still an advanced tool, but makes available features that haven't existed before!
Not only that, but the interface works seamlessly with hot or cold wallets, alike! To understand how powerful this is, consider that you could independently setup 7 different laptops in five vaults around the world, and a signature is required from physically visiting each one, in order to move any of the money. Yet you can receive money to it and track its balances safely from an online computer (just like a watching-only wallet, it only has public keys). Or you can setup a 2-of-2 with hot Armory wallets and simply improve your security for the funds held by you and your spouse. Or somewhere in between. Really, the flexibility is astounding, and this solution is the "manual transmission" version that requires no third-party services. It could be executed by any number of anonymous parties using nothing but email or pastebin.
The interface enables the following operations (and all work as expected with offline/watch-only wallets):
- Create Lockbox:
- Participants: Provide Public Keys
- Organizer: Collect Keys, Define Lockbox, Distribute
- Participants: Import LOCKBOX definition
- Deposit into lockbox (regular):
- Use regular send-BTC interface
- Deposit (simulfunding, for certain contract types):
- Participants: Create Promissory Notes
- Organizer: Merge Notes to Create Simulfunding Tx
- Participants: Review and Sign Simulfunding Tx
- Spend:
- Organizer: Create Proposed Spend
- Participants: Review and Sign
- Organizer: Collect Signatures & Broadcast
This process uses no centralized servers or third-party services! Instead, it provides you with chunks of ASCII-armored text which can be circulated to participants via email (inline) and/or saved to USB key to be taken to offline computers to retrieve signatures. In the future, Armory Technologies, Inc, will be providing servers to facilitate the data exchanges and simplify the process, though we wanted to make sure that a [usable!] truly decentralized solution was available at all times [Plus, all automated solutions will just build off the manual solution]
Caveats:
- This does not use BIP32 determinstic key chains! A lockbox is like a single multi-sig address. If you do not spend the full amount, change is sent back to the same lockbox. With regular addresses, this is a privacy concern. With lockboxes, the privacy issues are mostly unavoidable: the vast majority of transactions on the network still single-sig, thus a multi-sig change address would be obvious even if a new multisig address was created to receive the change. By the time this matters, Armory will have the BIP-32 linked wallet stuff in place.
- All message formats changed, including those used for regular offline transactions (which are a special case of multisig: 1-of-1). If you upgrade your online system that creates offline transactions, you would have to update your offline computer to be able to read and sign these new transaction messages.
Other notes:
The best way to do testing is to run a couple instances of Armory at the same time. All Armory instances on the same computer can share a single Bitcoin-Core instance, but must have separate --datadir= settings. Additionally, you will have to set a random --interport to avoid Armory detecting the already-open instance and aborting. For instance, I do testing with 3 Armory instances, I run them as follows:
[/list]
python ArmoryQt.py --debug --testnet --datadir=~/.armorytest1 --interport=9913
python ArmoryQt.py --debug --testnet --datadir=~/.armorytest2 --interport=9914
python ArmoryQt.py --debug --testnet --datadir=~/.armorytest3 --interport=9915
The datadir paths must exist before running the above! If you corrupt your databases by accidentally running on the same datadir with different interports, use the --rebuild option to fix it. It only takes a few minute on testnet.
And now for the pretty pictures:Collect public keys from participants to create a lockbox:
Manage multiple lockboxes:
Collect signatures from all devices/parties:
Each user selects a source wallet and destination lockbox to create a promissory note. Then the organizer merges them into a funding transaction to be signed by all funders
Once the promissory notes are collected, the parties have to sign. This works identically to spend-from-lockbox (it's the same dialog). Note that it only shows you the net value difference for each wallet, even though each "funder" is providing both inputs and change. Armory figures it out.
As you can see, the final transaction has three different input wallets, and change back to those wallets as well.