From e98656f3b2a38b07883c3a5d805b5abb1f5e5a5c Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Fri, 12 Dec 2014 17:06:03 -0300 Subject: [PATCH 1/3] make build executable --- browser-extensions/chrome/build.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 browser-extensions/chrome/build.sh diff --git a/browser-extensions/chrome/build.sh b/browser-extensions/chrome/build.sh old mode 100644 new mode 100755 From 7d608c254fe39a6424a261dd3058d8e52b8cecfa Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Fri, 12 Dec 2014 17:06:17 -0300 Subject: [PATCH 2/3] fix reset config --- js/services/configService.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/services/configService.js b/js/services/configService.js index 2bc032826..41c2de9dc 100644 --- a/js/services/configService.js +++ b/js/services/configService.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.services').factory('configService', function($timeout, localstorageService, gettextCatalog) { +angular.module('copayApp.services').factory('configService', function($timeout, localstorageService, gettextCatalog, defaults) { var root = {}; root.set = function(opts, cb) { @@ -31,7 +31,7 @@ angular.module('copayApp.services').factory('configService', function($timeout, }; root.reset = function(cb) { - config = copay.defaultConfig; + config = defauls; localstorageService.removeItem('config', cb); }; From cf2e13fc62ec2e2e1758245e0b2a5501151c51e3 Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Fri, 12 Dec 2014 17:06:30 -0300 Subject: [PATCH 3/3] fix signature for nreq>2 --- js/models/TxProposal.js | 19 +++++++++++++------ js/models/Wallet.js | 3 ++- test/TxProposal.js | 11 +++++++++-- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/js/models/TxProposal.js b/js/models/TxProposal.js index 8f4fe53c7..973924454 100644 --- a/js/models/TxProposal.js +++ b/js/models/TxProposal.js @@ -233,6 +233,7 @@ TxProposal.prototype._addSignatureAndVerify = function(signatures) { var ret = []; var tx = self.builder.build(); + var inputsFullySigned = 0; var newScriptSigs = []; _.each(tx.ins, function(input, index) { var scriptSig = new Script(input.s); @@ -268,14 +269,16 @@ TxProposal.prototype._addSignatureAndVerify = function(signatures) { }); var insertAt = 0; - while ( !_.isUndefined(currentPrios[insertAt]) && prio > currentPrios[insertAt] ) + while (!_.isUndefined(currentPrios[insertAt]) && prio > currentPrios[insertAt]) insertAt++; // Insert it! (1 is OP_0!) scriptSig.chunks.splice(1 + insertAt, 0, sig); scriptSig.updateBuffer(); - + if (info.nreq == currentKeys.length + 1) { + inputsFullySigned++; + } newScriptSigs.push(scriptSig.buffer); }); preconditions.checkState(newScriptSigs.length === tx.ins.length); @@ -284,9 +287,11 @@ TxProposal.prototype._addSignatureAndVerify = function(signatures) { _.each(tx.ins, function(input, index) { input.s = newScriptSigs[index]; - // TODO just to keep TransactionBuilder - self.builder.inputsSigned++; + // just to keep TransactionBuilder updated + if (tx.ins.length == inputsFullySigned) + self.builder.inputsSigned++; }); + this.resetCache(); }; @@ -312,9 +317,9 @@ TxProposal.prototype.addSignature = function(copayerId, signatures) { preconditions.checkArgument(signatures.length === tx.ins.length, 'Wrong number of signatures given'); this._addSignatureAndVerify(signatures); - this._setSigned(copayerId); - return false; + this._setSigned(copayerId); + return true; }; /** @@ -508,11 +513,13 @@ TxProposal.infoFromRedeemScript = function(s) { if (!redeemScript) throw new Error('Bad scriptSig (no redeemscript)'); + var nreq = nreq = redeemScript.chunks[0] - 80; //see OP_2-OP_16 var pubkeys = redeemScript.capture(); if (!pubkeys || !pubkeys.length) throw new Error('Bad scriptSig (no pubkeys)'); return { + nreq: nreq, keys: pubkeys, script: redeemScript, }; diff --git a/js/models/Wallet.js b/js/models/Wallet.js index 2180b7895..e9b073f5d 100644 --- a/js/models/Wallet.js +++ b/js/models/Wallet.js @@ -499,7 +499,8 @@ Wallet.prototype._processIncomingNewTxProposal = function(txp, cb) { self._processTxProposalPayPro(txp, function(err) { if (err) return cb(err); - self._setTxProposalSeen(txp); + // Disabled, not been shown on the UX now. + //self._setTxProposalSeen(txp); var tx = txp.builder.build(); if (tx.isComplete() && !txp.getSent()) diff --git a/test/TxProposal.js b/test/TxProposal.js index af81b4d79..e79348375 100644 --- a/test/TxProposal.js +++ b/test/TxProposal.js @@ -80,6 +80,7 @@ describe('TxProposal', function() { amountSatStr: '123', }]), }; + builder.inputsSigned =0; return builder; }; @@ -338,6 +339,7 @@ describe('TxProposal', function() { sigs[0][1].should.equal(SIG1); }); }); + describe('#addSignature', function() { it('should add signatures maintaing pubkeys order', function() { var txp = dummyProposal({ @@ -353,8 +355,13 @@ describe('TxProposal', function() { keysSorted.should.deep.equal(keys); }); - - + it('should add signatures to incomplete txs ', function() { + var txp = dummyProposal({ + nsig:1 + }); + txp.addSignature('pepe', [SIG1]); + txp.builder.inputsSigned.should.be.equal(0); + }); it('should fail with invalid signatures', function() { var txp = dummyProposal({