mirror of https://github.com/BTCPrivate/copay.git
use libsass, deprecate ruby, simplify installation (#4206)
* use libsass, deprecate ruby, simplify installation * update installation instructions, readme formatting
This commit is contained in:
parent
98471e952a
commit
f1c03b8a49
20
Gruntfile.js
20
Gruntfile.js
|
@ -1,5 +1,9 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
module.exports = function(grunt) {
|
module.exports = function(grunt) {
|
||||||
|
|
||||||
|
require('load-grunt-tasks')(grunt);
|
||||||
|
|
||||||
// Project Configuration
|
// Project Configuration
|
||||||
grunt.initConfig({
|
grunt.initConfig({
|
||||||
pkg: grunt.file.readJSON('package.json'),
|
pkg: grunt.file.readJSON('package.json'),
|
||||||
|
@ -82,7 +86,7 @@ module.exports = function(grunt) {
|
||||||
sourceMapStyle: 'link' // embed, link, inline
|
sourceMapStyle: 'link' // embed, link, inline
|
||||||
},
|
},
|
||||||
angular: {
|
angular: {
|
||||||
src: [
|
src: [
|
||||||
'bower_components/qrcode-generator/js/qrcode.js',
|
'bower_components/qrcode-generator/js/qrcode.js',
|
||||||
'bower_components/qrcode-decoder-js/lib/qrcode-decoder.js',
|
'bower_components/qrcode-decoder-js/lib/qrcode-decoder.js',
|
||||||
'bower_components/moment/min/moment-with-locales.js',
|
'bower_components/moment/min/moment-with-locales.js',
|
||||||
|
@ -238,20 +242,6 @@ module.exports = function(grunt) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
grunt.loadNpmTasks('grunt-contrib-concat');
|
|
||||||
grunt.loadNpmTasks('grunt-contrib-copy');
|
|
||||||
grunt.loadNpmTasks('grunt-contrib-watch');
|
|
||||||
grunt.loadNpmTasks('grunt-contrib-uglify');
|
|
||||||
grunt.loadNpmTasks('grunt-angular-gettext');
|
|
||||||
grunt.loadNpmTasks('grunt-browserify');
|
|
||||||
grunt.loadNpmTasks('grunt-exec');
|
|
||||||
grunt.loadNpmTasks('grunt-karma');
|
|
||||||
grunt.loadNpmTasks('grunt-karma-coveralls');
|
|
||||||
grunt.loadNpmTasks('grunt-node-webkit-builder');
|
|
||||||
grunt.loadNpmTasks('grunt-contrib-compress');
|
|
||||||
grunt.loadNpmTasks('grunt-string-replace');
|
|
||||||
grunt.loadNpmTasks('grunt-contrib-sass');
|
|
||||||
|
|
||||||
grunt.registerTask('default', ['nggettext_compile', 'exec:version', 'exec:coinbase', 'browserify', 'sass', 'concat', 'copy:icons']);
|
grunt.registerTask('default', ['nggettext_compile', 'exec:version', 'exec:coinbase', 'browserify', 'sass', 'concat', 'copy:icons']);
|
||||||
grunt.registerTask('prod', ['default', 'uglify']);
|
grunt.registerTask('prod', ['default', 'uglify']);
|
||||||
grunt.registerTask('translate', ['nggettext_extract']);
|
grunt.registerTask('translate', ['nggettext_extract']);
|
||||||
|
|
57
README.md
57
README.md
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
Copay is an easy-to-use, open-source, multiplatform, multisignature, secure bitcoin wallet platform for both individuals and companies. Copay uses [Bitcore Wallet Service](https://github.com/bitpay/bitcore-wallet-service) (BWS) for peer synchronization and network interfacing.
|
Copay is an easy-to-use, open-source, multiplatform, multisignature, secure bitcoin wallet platform for both individuals and companies. Copay uses [Bitcore Wallet Service](https://github.com/bitpay/bitcore-wallet-service) (BWS) for peer synchronization and network interfacing.
|
||||||
|
|
||||||
Binary versions of Copay are available for download at [Copay.io](https://copay.io/#download). Copay Binaries are signed with the key copay@bitpay.com [See here for details](https://github.com/bitpay/copay#how-to-verify-copay-signatures)
|
Binary versions of Copay are available for download at [Copay.io](https://copay.io/#download). Copay Binaries are signed with the key `copay@bitpay.com` – See the section [`How to Verify Copay Signatures`](https://github.com/bitpay/copay#how-to-verify-copay-signatures) for details.
|
||||||
|
|
||||||
## Main Features
|
## Main Features
|
||||||
|
|
||||||
|
@ -27,35 +27,25 @@ Binary versions of Copay are available for download at [Copay.io](https://copay.
|
||||||
- Multiple languages supported
|
- Multiple languages supported
|
||||||
- Available for [iOS](https://itunes.apple.com/us/app/copay/id951330296), [Android](https://play.google.com/store/apps/details?id=com.bitpay.copay&hl=en), [Windows Phone](http://www.windowsphone.com/en-us/store/app/copay-wallet/4372479b-a064-4d18-8bd3-74a3bdb81c3a), [Chrome App](https://chrome.google.com/webstore/detail/copay/cnidaodnidkbaplmghlelgikaiejfhja?hl=en), [Linux](https://github.com/bitpay/copay/releases/latest), [Windows](https://github.com/bitpay/copay/releases/latest) and [OS X](https://github.com/bitpay/copay/releases/latest) devices
|
- Available for [iOS](https://itunes.apple.com/us/app/copay/id951330296), [Android](https://play.google.com/store/apps/details?id=com.bitpay.copay&hl=en), [Windows Phone](http://www.windowsphone.com/en-us/store/app/copay-wallet/4372479b-a064-4d18-8bd3-74a3bdb81c3a), [Chrome App](https://chrome.google.com/webstore/detail/copay/cnidaodnidkbaplmghlelgikaiejfhja?hl=en), [Linux](https://github.com/bitpay/copay/releases/latest), [Windows](https://github.com/bitpay/copay/releases/latest) and [OS X](https://github.com/bitpay/copay/releases/latest) devices
|
||||||
|
|
||||||
## Installation
|
## Install For Development
|
||||||
|
|
||||||
Clone the source:
|
Clone the repo and open the directory:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
git clone https://github.com/bitpay/copay.git
|
git clone https://github.com/bitpay/copay.git
|
||||||
cd copay
|
cd copay
|
||||||
```
|
```
|
||||||
|
|
||||||
Install [bower](http://bower.io/) and [grunt](http://gruntjs.com/getting-started) if you haven't already:
|
Ensure you have [Node](https://nodejs.org/) installed, then install and start Copay:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
npm install -g bower
|
|
||||||
npm install -g grunt-cli
|
|
||||||
```
|
|
||||||
|
|
||||||
Build Copay:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sudo gem install sass
|
|
||||||
bower install
|
|
||||||
npm install
|
npm install
|
||||||
grunt
|
|
||||||
npm start
|
npm start
|
||||||
```
|
```
|
||||||
|
|
||||||
Then visit `localhost:3000` in your browser.
|
Visit [`localhost:3000`](http://localhost:3000/) to view the app.
|
||||||
|
|
||||||
> **Note:** Other browser extensions could have access to Copay internal data and compromise the user's private key when running Copay as a web page. For optimal security, you should disable all third-party browser extensions when using Copay in this manner.
|
> **Note:** This method should only be used for development purposes. When running Copay in a normal browser environment, browser extensions and other malicious code might have access to internal data and private keys. For production use, see the latest official [releases](https://github.com/bitpay/copay/releases/).
|
||||||
|
|
||||||
## Build Copay App Bundles
|
## Build Copay App Bundles
|
||||||
|
|
||||||
|
@ -71,7 +61,7 @@ Then visit `localhost:3000` in your browser.
|
||||||
|
|
||||||
##### Notes for Xcode 7.0
|
##### Notes for Xcode 7.0
|
||||||
|
|
||||||
###### ATS support
|
###### ATS support
|
||||||
|
|
||||||
Before starting Copay from Xcode, add these lines to "Custom iOS Target Properties":
|
Before starting Copay from Xcode, add these lines to "Custom iOS Target Properties":
|
||||||
|
|
||||||
|
@ -142,7 +132,7 @@ For more information regarding how addresses are generated using this procedure,
|
||||||
|
|
||||||
## Copay Backups and Recovery
|
## Copay 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.
|
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
|
Information about backup and recovery procedures is available at: https://github.com/bitpay/copay/blob/master/backupRecovery.md
|
||||||
|
|
||||||
|
@ -151,12 +141,12 @@ 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](https://github.com/bitpay/copay-recovery).
|
It is possible to recover funds from a Copay Wallet without using Copay or the Wallet Service, check the [Copay Recovery Tool](https://github.com/bitpay/copay-recovery).
|
||||||
|
|
||||||
|
|
||||||
## Wallet Export format
|
## Wallet Export Format
|
||||||
|
|
||||||
Copay encrypts the backup with the [Stanford JS Crypto Library](http://bitwiseshiftleft.github.io/sjcl/). 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!
|
Copay encrypts the backup with the [Stanford JS Crypto Library](http://bitwiseshiftleft.github.io/sjcl/). 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.
|
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
|
Depending on the key `derivationStrategy`, addresses are derived using
|
||||||
[BIP44](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki) or [BIP45](https://github.com/bitcoin/bips/blob/master/bip-0045.mediawiki). 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):
|
[BIP44](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki) or [BIP45](https://github.com/bitcoin/bips/blob/master/bip-0045.mediawiki). 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 |
|
| Copay Version | Wallet Type | Derivation Strategy | Address Type |
|
||||||
|
@ -190,12 +180,12 @@ https://chrome.google.com/webstore/detail/trezor-chrome-extension/jcjjhjgimijdko
|
||||||
To create or join a wallet using Ledger or Trezor go to:
|
To create or join a wallet using Ledger or Trezor go to:
|
||||||
|
|
||||||
Add Wallet -> Create or Join -> Advanced options -> Wallet Seed -> select Trezor or Ledger
|
Add Wallet -> Create or Join -> Advanced options -> Wallet Seed -> select Trezor or Ledger
|
||||||
|
|
||||||
Both devices support multiple accounts, so you can use them for multiple wallets. Select the account and then click on create or join.
|
Both devices support multiple accounts, so you can use them for multiple wallets. Select the account and then click on create or join.
|
||||||
|
|
||||||
It is also possible to import a wallet from a device using:
|
It is also possible to import a wallet from a device using:
|
||||||
Add Wallet -> Import -> Hardware wallet
|
Add Wallet -> Import -> Hardware wallet
|
||||||
|
|
||||||
Here it is also necesary to select the account number.
|
Here it is also necesary to select the account number.
|
||||||
|
|
||||||
When creating or joining a wallet, Copay will ask for two public keys for the device. One public keys is used for the wallet itself and the other is used as an entropy source to create a private / public key pair for signing requests to the Wallet Service.
|
When creating or joining a wallet, Copay will ask for two public keys for the device. One public keys is used for the wallet itself and the other is used as an entropy source to create a private / public key pair for signing requests to the Wallet Service.
|
||||||
|
@ -204,7 +194,7 @@ Every time you need to sign a transaction, the device will be needed to perform
|
||||||
|
|
||||||
Finally, in case you lose the device and you have the 24 word seed for the device, you can recover access to your funds using Copay, see: https://github.com/bitpay/copay/blob/master/backupRecovery.md#hardware-wallets
|
Finally, in case you lose the device and you have the 24 word seed for the device, you can recover access to your funds using Copay, see: https://github.com/bitpay/copay/blob/master/backupRecovery.md#hardware-wallets
|
||||||
|
|
||||||
|
|
||||||
## Translations
|
## Translations
|
||||||
Copay uses standard gettext PO files for translations and [Crowdin](https://crowdin.com/project/copay) as the front-end tool for translators. To join our team of translators, please create an account at [Crowdin](https://crowdin.com) and translate the Copay documentation and application text into your native language.
|
Copay uses standard gettext PO files for translations and [Crowdin](https://crowdin.com/project/copay) as the front-end tool for translators. To join our team of translators, please create an account at [Crowdin](https://crowdin.com) and translate the Copay documentation and application text into your native language.
|
||||||
|
|
||||||
|
@ -227,34 +217,35 @@ This will download all partial and complete language translations while also cle
|
||||||
|
|
||||||
*Gracias totales!*
|
*Gracias totales!*
|
||||||
|
|
||||||
## Release schedules
|
## Release Schedules
|
||||||
Copay uses the `MAJOR.MINOR.BATCH` convention for versioning. Any release that adds features should modify the MINOR or MAJOR number.
|
Copay uses the `MAJOR.MINOR.BATCH` convention for versioning. Any release that adds features should modify the MINOR or MAJOR number.
|
||||||
|
|
||||||
### Bug Fixing Releases
|
### Bug Fixing Releases
|
||||||
|
|
||||||
We release bug fixes as soon as possible for all platforms. Usually around a week after patches, a new release is made with language translation updates (like 1.1.4 and then 1.1.5). There is no coordination so all platforms are updated at the same time.
|
We release bug fixes as soon as possible for all platforms. Usually around a week after patches, a new release is made with language translation updates (like 1.1.4 and then 1.1.5). There is no coordination so all platforms are updated at the same time.
|
||||||
|
|
||||||
### Minor and Major releases
|
### Minor and Major Releases
|
||||||
- t+0: tag the release 1.2 and "text lock" (meaning only non-text related bug fixes. Though this rule is sometimes broken, it's good to make a rule.)
|
- t+0: tag the release 1.2 and "text lock" (meaning only non-text related bug fixes. Though this rule is sometimes broken, it's good to make a rule.)
|
||||||
- t+7: testing for 1.2 is finished, translation is also finished, and 1.2.1 is tagged with all translations along with bug fixes made in the last week.
|
- t+7: testing for 1.2 is finished, translation is also finished, and 1.2.1 is tagged with all translations along with bug fixes made in the last week.
|
||||||
- t+7: iOS is submitted for 1.2.1. All other platforms are submitted with auto-release off.
|
- t+7: iOS is submitted for 1.2.1. All other platforms are submitted with auto-release off.
|
||||||
- t + (~17): All platforms 1.2.1 are released when Apple approves the iOS application update.
|
- t + (~17): All platforms 1.2.1 are released when Apple approves the iOS application update.
|
||||||
|
|
||||||
## How to verify Copay signatures
|
## How to Verify Copay Signatures
|
||||||
|
|
||||||
|
1. Download the `copay@bitpay.com` public key (`gpg --recv-keys 1112CFA1`)
|
||||||
|
2. Download Copay binary (`$FILENAME`) and signature file (`$FILENAME.sig`)
|
||||||
|
3. Verify the signature by running:
|
||||||
|
|
||||||
1. Download copay@bitpay.com public key (`gpg --recv-keys 1112CFA1`)
|
|
||||||
1. Download Copay binary ($FILENAME) and signature file ($FILENAME.sig)
|
|
||||||
1. Check it by running:
|
|
||||||
``` bash
|
``` bash
|
||||||
$ gpg --verify \
|
$ gpg --verify \
|
||||||
$FILENAME.sig \
|
$FILENAME.sig \
|
||||||
$FILENAME
|
$FILENAME
|
||||||
|
|
||||||
# It should say:
|
# It should return:
|
||||||
"Good signature from "Copay (visit copay.io) <copay@bitpay.com>"
|
Good signature from "Copay (visit copay.io) <copay@bitpay.com>"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Public Key for Copay binaries
|
### Public Key for Copay Binaries
|
||||||
Instead of importing the public key from a public server (like gnu's) you can grab it from here:
|
Instead of importing the public key from a public server (like gnu's) you can grab it from here:
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
10
package.json
10
package.json
|
@ -58,21 +58,26 @@
|
||||||
"shelljs": "^0.3.0"
|
"shelljs": "^0.3.0"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"preinstall": "bower install",
|
||||||
|
"postinstall": "npm run build",
|
||||||
|
"build": "grunt",
|
||||||
"start": "node app.js",
|
"start": "node app.js",
|
||||||
"test": "./node_modules/.bin/grunt test-coveralls"
|
"test": "./node_modules/.bin/grunt test-coveralls",
|
||||||
|
"clean": "git clean -dfx"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"adm-zip": "^0.4.7",
|
"adm-zip": "^0.4.7",
|
||||||
"angular": "1.4.6",
|
"angular": "1.4.6",
|
||||||
"angular-mocks": "1.4.10",
|
"angular-mocks": "1.4.10",
|
||||||
"bhttp": "^1.2.1",
|
"bhttp": "^1.2.1",
|
||||||
|
"bower": "^1.7.9",
|
||||||
"chai": "^3.5.0",
|
"chai": "^3.5.0",
|
||||||
"cordova": "5.4.1",
|
"cordova": "5.4.1",
|
||||||
"cordova-android": "5.1.1",
|
"cordova-android": "5.1.1",
|
||||||
"grunt-contrib-sass": "^1.0.0",
|
|
||||||
"grunt-karma": "^1.0.0",
|
"grunt-karma": "^1.0.0",
|
||||||
"grunt-karma-coveralls": "^2.5.4",
|
"grunt-karma-coveralls": "^2.5.4",
|
||||||
"grunt-node-webkit-builder": "^1.0.2",
|
"grunt-node-webkit-builder": "^1.0.2",
|
||||||
|
"grunt-sass": "^1.2.0",
|
||||||
"grunt-string-replace": "^1.2.1",
|
"grunt-string-replace": "^1.2.1",
|
||||||
"karma": "^0.13.22",
|
"karma": "^0.13.22",
|
||||||
"karma-chai": "^0.1.0",
|
"karma-chai": "^0.1.0",
|
||||||
|
@ -83,6 +88,7 @@
|
||||||
"karma-mocha-reporter": "^2.0.3",
|
"karma-mocha-reporter": "^2.0.3",
|
||||||
"karma-phantomjs-launcher": "^1.0.0",
|
"karma-phantomjs-launcher": "^1.0.0",
|
||||||
"karma-sinon": "^1.0.5",
|
"karma-sinon": "^1.0.5",
|
||||||
|
"load-grunt-tasks": "^3.5.0",
|
||||||
"mocha": "^2.4.5",
|
"mocha": "^2.4.5",
|
||||||
"phantomjs-prebuilt": "^2.1.7",
|
"phantomjs-prebuilt": "^2.1.7",
|
||||||
"xcode": "^0.8.2"
|
"xcode": "^0.8.2"
|
||||||
|
|
Loading…
Reference in New Issue