Join GitHub today
GitHub is home to over 31 million developers working together to host and review code, manage projects, and build software together.Sign up
Copay is a true bitcoin wallet, not an account service. Secure your personal funds with multiple signatures, or just one.
For a list of frequently asked questions please visit the Copay/BitPay FAQ.
What is Copay?
Copay implements a multisig wallet using p2sh addresses. It supports multiple wallets, each with its own configuration, such as 3-of-5 (3 required signatures from 5 participant peers) or 2-of-3. To create a multisig wallet shared between multiple participants, Copay requires the extended public keys of all the wallet participants. Those public keys are then incorporated into the wallet configuration and combined to generate a payment address where funds can be sent into the wallet. Conversely, each participant manages their own private key and that private key is never transmitted anywhere.
To unlock a payment and spend the wallet's funds, a quorum of participant signatures must be collected and assembled in the transaction. The funds cannot be spent without at least the minimum number of signatures required by the wallet configuration (2-of-3, 3-of-5, 6-of-6, etc.). Once a transaction proposal is created, the proposal is distributed among the wallet participants for each to sign the transaction locally. Finally, when the transaction is signed, the last signing participant will broadcast the transaction to the Bitcoin network.
Copay also implements BIP32 to generate new addresses for peers. The public key that each participant contributes to the wallet is a BIP32 extended public key. As additional public keys are needed for wallet operations (to produce new addresses to receive payments into the wallet, for example) new public keys can be derived from the participants' original extended public keys. Once again, it's important to stress that each participant keeps their own private keys locally - private keys are not shared - and are used to sign transaction proposals to make payments from the shared wallet.
For more information regarding how addresses are generated using this procedure, see: Structure for Deterministic P2SH Multisignature Wallets.
Backups and Recovery
Since v1.2 Copay uses BIP39 mnemonics for backing up wallets. The BIP44 standard is used for wallet address derivation. Multisig wallets use P2SH addresses, while non-multisig wallets use P2PKH.
Information about backup and recovery procedures is available at: https://github.com/bitpay/copay/blob/master/backupRecovery.md
Previous versions of Copay used files as backups. See the following section.
It is possible to recover funds from a Copay Wallet without using Copay or the Wallet Service, check the Copay Recovery Tool.
Copay encrypts the backup with the Stanford JS Crypto Library. To extract the private key of your wallet you can use https://bitwiseshiftleft.github.io/sjcl/demo/, copy the backup to 'ciphertext' and enter your password. The resulting JSON will have a key named:
xPrivKey, that is the extended private key of your wallet. That information is enough to sign any transaction from your wallet, so be careful when handling it!
The backup also contains the key
publicKeyRing that holds the extended public keys of the Copayers.
Depending on the key
derivationStrategy, addresses are derived using
BIP44 or BIP45. Wallets created in Copay v1.2 and forward always use BIP44, all previous wallets use BIP45. Also note that since Copay version v1.2, non-multisig wallets use address types Pay-to-PublicKeyHash (P2PKH) while multisig wallets still use Pay-to-ScriptHash (P2SH) (key
addressType at the backup):
|Copay Version||Wallet Type||Derivation Strategy||Address Type|
|>=1.5||Multisig Hardware wallets||BIP44 (root m/48')||P2SH|
Using a tool like Bitcore PlayGround all wallet addresses can be generated. (TIP: Use the
Address section for P2PKH address type wallets and
Multisig Address for P2SH address type wallets). For multisig addresses, the required number of signatures (key
m on the export) is also needed to recreate the addresses.
BIP45 note: All addresses generated at BWS with BIP45 use the 'shared cosigner index' (2147483647) so Copay address indexes look like:
m/45'/2147483647/0/x for main addresses and
m/45'/2147483647/1/y for change addresses.
Since version 1.5, Copay uses the root
m/48' for hardware multisignature wallets. This was coordinated with Ledger and Trezor teams. While the derivation path format is still similar to BIP44, the root was in order to indicate that these wallets are not discoverable by scanning addresses for funds. Address generation for multisignature wallets requires the other copayers extended public keys.
Bitcore Wallet Service
Copay depends on Bitcore Wallet Service (BWS) for blockchain information, networking and Copayer synchronization. A BWS instance can be setup and operational within minutes or you can use a public instance like
https://bws.bitpay.com. Switching between BWS instances is very simple and can be done with a click from within Copay. BWS also allows Copay to interoperate with other wallets like [Bitcore Wallet CLI] (https://github.com/bitpay/bitcore-wallet).