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..ee9f1914fe6 100644 --- a/packages/bitcore-wallet-service/src/lib/server.ts +++ b/packages/bitcore-wallet-service/src/lib/server.ts @@ -1346,6 +1346,13 @@ 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 +1421,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..ee95a373e89 100644 --- a/packages/bitcore-wallet-service/test/integration/server.js +++ b/packages/bitcore-wallet-service/test/integration/server.js @@ -1661,6 +1661,65 @@ describe('Wallet service', function() { }); + describe('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) { helpers.createAndJoinWallet(1, 1, { @@ -4979,7 +5038,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 +5096,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);