Merge pull request #2129 from matiu/bug/signatures

Bug/signatures
This commit is contained in:
Gustavo Maximiliano Cortez 2014-12-12 17:16:24 -03:00
commit f6e79526ff
5 changed files with 26 additions and 11 deletions

0
browser-extensions/chrome/build.sh Normal file → Executable file
View File

View File

@ -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,
};

View File

@ -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())

View File

@ -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);
};

View File

@ -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({