From 9d34033197aa3dd6753da58d9a44a77ac36ed296 Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Thu, 7 Nov 2019 17:31:36 -0300 Subject: [PATCH 1/4] add noCashAddr tests and verifier tests --- .../test/verifier.test.js | 73 +++++++++++++++++++ .../bitcore-wallet-service/src/lib/server.ts | 16 ++-- .../test/integration/server.js | 67 ++++++++++++++++- 3 files changed, 146 insertions(+), 10 deletions(-) create mode 100644 packages/bitcore-wallet-client/test/verifier.test.js diff --git a/packages/bitcore-wallet-client/test/verifier.test.js b/packages/bitcore-wallet-client/test/verifier.test.js new file mode 100644 index 00000000000..ed7ed81bed4 --- /dev/null +++ b/packages/bitcore-wallet-client/test/verifier.test.js @@ -0,0 +1,73 @@ +'use strict'; + +var _ = require('lodash'); +var chai = chai || require('chai'); +var sinon = sinon || require('sinon'); +var should = chai.should(); + +var { Verifier } = require('../ts_build/lib/verifier'); +var { Key } = require('../ts_build/lib/key'); + + +const aKey = Key.fromMnemonic('abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about'); + +describe('Verifier', function () { + + describe('checkAddress', function () { + + it('should verify a BTC address', () => { + + let cred = aKey.createCredentials(null, { coin: 'btc', network: 'livenet', account: 0, n: 1}); + cred.addWalletInfo( + 'id', + 'name', + 1, + 1, + 'copayer', + ); + + Verifier.checkAddress(cred, { + address: '1LqBGSKuX5yYUonjxT5qGfpUsXKYYWeabA', + path: 'm/0/0', + publicKeys: ['03aaeb52dd7494c361049de67cc680e83ebcbbbdbeb13637d92cd845f70308af5e'], + }).should.be.true; + }) + + it('should verify a ETH address', () => { + let cred = aKey.createCredentials(null, { coin: 'eth', network: 'livenet', account: 0, n: 1}); + cred.addWalletInfo( + 'id', + 'name', + 1, + 1, + 'copayer', + ); + + Verifier.checkAddress(cred, { + address: '0x9858EfFD232B4033E47d90003D41EC34EcaEda94', + path: 'm/0/0', + publicKeys: ['0237b0bb7a8288d38ed49a524b5dc98cff3eb5ca824c9f9dc0dfdb3d9cd600f299'], + }).should.be.true; + }) + }); + + describe('checkCopayers', function () { + + it('should verify copayers', () => { + let cred = aKey.createCredentials(null, { coin: 'btc', network: 'livenet', account: 0, n: 1}); + cred.addWalletInfo( + 'id', + 'name', + 1, + 1, + 'copayer', + ); + Verifier.checkCopayers(cred, { + address: '0x9858EfFD232B4033E47d90003D41EC34EcaEda94', + path: 'm/0/0', + publicKeys: ['0237b0bb7a8288d38ed49a524b5dc98cff3eb5ca824c9f9dc0dfdb3d9cd600f299'], + }).should.be.true; + }); + }); +}); + diff --git a/packages/bitcore-wallet-service/src/lib/server.ts b/packages/bitcore-wallet-service/src/lib/server.ts index 5df50f666eb..5fd1e892ce9 100644 --- a/packages/bitcore-wallet-service/src/lib/server.ts +++ b/packages/bitcore-wallet-service/src/lib/server.ts @@ -1346,6 +1346,15 @@ export class WalletService { return cb('Bad xPub'); } + + if (wallet.coin == 'bch' && opts.noCashAddr) { + address.address = BCHAddressTranslator.translate( + address.address, + 'copay' + ); + } + + this._store( wallet, address, @@ -1414,13 +1423,6 @@ export class WalletService { if (err) { return cb(err); } - - if (wallet.coin == 'bch' && opts.noCashAddr) { - address.address = BCHAddressTranslator.translate( - address.address, - 'copay' - ); - } return cb(err, address); }); }); diff --git a/packages/bitcore-wallet-service/test/integration/server.js b/packages/bitcore-wallet-service/test/integration/server.js index f533e4f26a0..7d58483beed 100644 --- a/packages/bitcore-wallet-service/test/integration/server.js +++ b/packages/bitcore-wallet-service/test/integration/server.js @@ -1423,7 +1423,7 @@ describe('Wallet service', function() { }); }); - describe('#createAddress', function() { + describe.only('#createAddress', function() { var server, wallet; describe('shared wallets (BIP44)', function() { @@ -1660,6 +1660,64 @@ describe('Wallet service', function() { }); }); + describe.only('1-1 wallet (BIP44/BCH)', function() { + beforeEach(function(done) { + helpers.createAndJoinWallet(1, 1, { + coin: 'bch', + }, function(s, w) { + server = s; + wallet = w; + done(); + }); + }); + + it('should create address', function(done) { + server.createAddress({}, function(err, address) { + should.not.exist(err); + should.exist(address); + address.walletId.should.equal(wallet.id); + address.network.should.equal('livenet'); + address.address.should.equal('qrg04mz8h67j9dck3f3f3sa560taep87yqnwra9ak6'); + address.isChange.should.be.false; + address.path.should.equal('m/0/0'); + address.type.should.equal('P2PKH'); + address.coin.should.equal('bch'); + server.getNotifications({}, function(err, notifications) { + should.not.exist(err); + var notif = _.find(notifications, { + type: 'NewAddress' + }); + should.exist(notif); + notif.data.address.should.equal(address.address); + done(); + }); + }); + }); + + + it('should create address (no cash addr)', function(done) { + server.createAddress({noCashAddr:true}, function(err, address) { + should.not.exist(err); + should.exist(address); + address.walletId.should.equal(wallet.id); + address.network.should.equal('livenet'); + address.address.should.equal('CbWsiNjh18ynQYc5jfYhhespEGrAaW8YUq'); + address.isChange.should.be.false; + address.path.should.equal('m/0/0'); + address.type.should.equal('P2PKH'); + address.coin.should.equal('bch'); + server.getNotifications({}, function(err, notifications) { + should.not.exist(err); + var notif = _.find(notifications, { + type: 'NewAddress' + }); + should.exist(notif); + notif.data.address.should.equal(address.address); + done(); + }); + }); + }); + }); describe('1-1 wallet (BIP44/BCH/Testnet)', function() { beforeEach(function(done) { @@ -4979,7 +5037,9 @@ describe('#createTX ETH Only tests', () => { tx.feePerKb.should.equal(123e2); should.not.exist(tx.feeLevel); var publishOpts = helpers.getProposalSignatureOpts(tx, TestData.copayers[0].privKey_1H_0); - s.publishTx(publishOpts, function(err) { + publishOpts.noCashAddr = true; + s.publishTx(publishOpts, function(err, txp) { + txp.changeAddress.address.should.equal('CWwtFMy3GMr5qMEtvEdUDjePfShzkJXCnh'); s.getPendingTxs({ noCashAddr: true }, function(err, txs) { should.not.exist(err); txs.length.should.equal(1); @@ -5035,7 +5095,8 @@ describe('#createTX ETH Only tests', () => { should.not.exist(tx.feeLevel); var publishOpts = helpers.getProposalSignatureOpts(tx, TestData.copayers[0].privKey_1H_0); - s.publishTx(publishOpts, function(err) { + s.publishTx(publishOpts, function(err, txp) { + txp.changeAddress.address.should.equal('CWwtFMy3GMr5qMEtvEdUDjePfShzkJXCnh'); s.getPendingTxs({ noCashAddr: true }, function(err, txs) { should.not.exist(err); From 0032d09e752f65bcae360a4e940c6c74a8cdd616 Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Thu, 7 Nov 2019 17:32:10 -0300 Subject: [PATCH 2/4] . --- packages/bitcore-wallet-service/test/integration/server.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/bitcore-wallet-service/test/integration/server.js b/packages/bitcore-wallet-service/test/integration/server.js index 7d58483beed..ce9aa8f3014 100644 --- a/packages/bitcore-wallet-service/test/integration/server.js +++ b/packages/bitcore-wallet-service/test/integration/server.js @@ -1660,6 +1660,7 @@ describe('Wallet service', function() { }); }); + describe.only('1-1 wallet (BIP44/BCH)', function() { beforeEach(function(done) { helpers.createAndJoinWallet(1, 1, { From 5cf61a04890d07385a6b027d837d6c489d728f59 Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Thu, 7 Nov 2019 17:42:13 -0300 Subject: [PATCH 3/4] rm only --- packages/bitcore-wallet-service/test/integration/server.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/bitcore-wallet-service/test/integration/server.js b/packages/bitcore-wallet-service/test/integration/server.js index ce9aa8f3014..ee95a373e89 100644 --- a/packages/bitcore-wallet-service/test/integration/server.js +++ b/packages/bitcore-wallet-service/test/integration/server.js @@ -1423,7 +1423,7 @@ describe('Wallet service', function() { }); }); - describe.only('#createAddress', function() { + describe('#createAddress', function() { var server, wallet; describe('shared wallets (BIP44)', function() { @@ -1661,7 +1661,7 @@ describe('Wallet service', function() { }); - describe.only('1-1 wallet (BIP44/BCH)', function() { + describe('1-1 wallet (BIP44/BCH)', function() { beforeEach(function(done) { helpers.createAndJoinWallet(1, 1, { coin: 'bch', From 11cbc20ec4134ea23ffb76525be5676e7496be8d Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Thu, 7 Nov 2019 17:51:19 -0300 Subject: [PATCH 4/4] lint --- packages/bitcore-wallet-service/src/lib/server.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/bitcore-wallet-service/src/lib/server.ts b/packages/bitcore-wallet-service/src/lib/server.ts index 5fd1e892ce9..ee9f1914fe6 100644 --- a/packages/bitcore-wallet-service/src/lib/server.ts +++ b/packages/bitcore-wallet-service/src/lib/server.ts @@ -1346,7 +1346,6 @@ export class WalletService { return cb('Bad xPub'); } - if (wallet.coin == 'bch' && opts.noCashAddr) { address.address = BCHAddressTranslator.translate( address.address, @@ -1354,7 +1353,6 @@ export class WalletService { ); } - this._store( wallet, address,