bitpay / wallet

Bitpay Wallet (formerly Copay) is a secure Bitcoin and other crypto currencies wallet platform for both desktop and mobile devices.
http://bitpay.com/wallet
MIT License
3.81k stars 1.74k forks source link

Dead Man Switch Wallet #4641

Open jojkaart opened 8 years ago

jojkaart commented 8 years ago

We're considering a new model for storing our company coins and after the discussion we ended up with wanting to use the Escrow model from BIP 65. https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki

Basically, we'd like to make a 4-of-5 multisig wallet with a timelock, say 6 months, after which the wallet will transform into being spendable with only the first key of the multisig, which would be kept with a third party.

Is there any chance of Copay supporting such a model? It'd require a slightly different script than the standard one and some UI work for setting it up.

dabura667 commented 8 years ago

Copay is a consumer facing wallet, so probably not.

If you want to make a pull request you're more than welcome to.

gabegattis commented 8 years ago

It is an interesting use case, but not something that Copay is likely to support.

This would require changes to BWS, as BWS makes assumptions about the type of scripts it is dealing with. If we were to make things like this possible, we would want to make BWS ignorant of script types. The problem with that is that BWS handles the responsibility of selecting utxos as inputs for new transactions, and would need to know about scripts in order to do that properly. If you ever wanted to do anything fancy like this, you would have to move the utxo selection logic down to the client, and just use BWS as a way of sending transaction proposals.

The architecture of BWS just isn't really meant for use cases like this. If BWS was more modular, it might be easier, but, for now, I don't think it is very practical.

If you still want to implement a feature like this, you could create a bitcore service to index these types of outputs in a convenient way, and then implement a custom client for signing the txs.

jojkaart commented 8 years ago

I could see this kind of a wallet being popular with individuals as well. Especially for arranging for what happens to your coins if you happen to die and don't want to give anyone direct access to your coins while you live. This would allow you to keep your coins secured as you want and then transfer them over automatically to a separate wallet stored with your will after the timelock expires.

Of course, if it's architecturally difficult, I can see why you would be reluctant to implement it.

jojkaart commented 8 years ago

I'm not sure why BWS would need to understand script types if each wallet only ever used one type of a script.

gabegattis commented 8 years ago

The client has to be able to produce a valid input script to redeem your utxos. Since BWS is doing the UTXO selection, and not the client, BWS must only select utxos that the client is capable of creating a properly signed redeem script for. We don't want BWS to send the client something non-standard that it doesn't know how to handle.

If the client performed the UTXO selection instead of BWS, then it wouldn't be a big deal. The client would still need a way to retrieve all of the existing utxos, but that is not a difficult problem to solve. As long as you are using p2sh, bitcore/insight can provide you with all the utxos for that p2sh address without caring about what type of script would be required to redeem the utxos. BWS does actually allow the client to do its own utxo selection, so you could conceivably use BWS just for coordinating transaction proposals between the copayers. BWS might not understand how to validate the signatures, so that might require some refactoring.

If you want to implement something like this, I would suggest forking BWC or implementing a custom client to talk to the BWS api. If you can figure out an elegant way of handling non-standard scripts, we might consider merging that back in.

caveman1973 commented 7 years ago

I was expecting something like using a special key that deletes your wallets in case you're being forced to reveal your password to open the app.

A great implementation would be to delete ALL BUT a single wallet (with a small amount).

OR

Different pin codes. One reveals the wallets, another the dummy wallet (with small amount).

AndresDMG commented 6 years ago

good afternoon, I have a problem with my wallet multising copay tell you we created a wallet 4-4 but unfortunately one of the people died and we can not withdraw the balance we have I appreciate any help you can give me thanks. (sorry google translator)