Copay is an open-source multisig wallet. Each peer is has control of her private keys, that never leave their system.
Copay is implemented in JS client-side. It can work as a:
- web app,
- a webview based mobile app,
- or a node-kit based desktop app.
In all cases, Copay source code is exactly the same.
Copay client relays on a central server or a group of servers to operate.
Copay Server software is open-source, and many open instances are expected to exists. Copay server tasks are: 1)- relay messages between wallet participants 2)- interact with the Bitcoin Network
Servers can not decrypt or forge peer messages given the current authentication-encryption schema. Each message is stored and retrived from the server using the recipent's SIN as only parameter. Messages have a TTL defined by the uploading client, with a limit defined by the server.
When configuring a Copay server, the main options are:
- set the server public or private. If private, download auth pub keys / credentials for the clients.
- use SSL or not.
- date to start syncing (default: now). Insight-api, the module that implements 2), does not need to sync from the beginning of the blockchain, only from the block since the served wallets were created.
- spawn a new full node bitcoind server or use a existing installation (*)
- Maximun TTL for message relaying
(*) could eventually be replaced by a bitcore-based full node or SPV.
Copay-server should be fairly easy to setup, and Linux installation should be as easy as installing a web server. We should expect multiple open copay servers to exists, as today multiple Insight installations are available.
Future Work on the servers:
- Messages could be flushed from the server by the client if the client signs a server given nounce.
- Copay servers could become a true p2p network, in which relayed messages are distributed between all the p2p network participants, with a defined TTL. Clients could connect, upload and download messages to any Copay server p2p network participant, and those messages would be copied in all installations.
The main configuration of Copay Client is the location or locations of the Copay servers, which defaults to two SSL secured Bitpay installations. The only network connection going out from a Copay client in usage is to one or more Copay servers.
Multiple server are supported to remove single point of failures. For the described server functions, the mutiplicity is used as follow:
-
relay messages: Peers uploads messages to all available servers, and check for messages in all available servers. No server-to-server communication is used.
-
blockchain API: all defined servers are queried: 100% agreement is needed for accepting the results. When broadcasting transactions to the network, one server is used to broadcast the transactions and others are queried to check the txid.