test passing.
This commit is contained in:
parent
397fc8607f
commit
8e1de31797
|
@ -897,15 +897,10 @@ TransactionBuilder.prototype._mergeInputSigP2sh = function(input, s0, s1) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('[TransactionBuilder.js.887:diff:]',diff); //TODO
|
|
||||||
// Add signatures
|
// Add signatures
|
||||||
for (var j in diff) {
|
for (var j in diff) {
|
||||||
var newSig = diff[j];
|
var newSig = diff[j];
|
||||||
var order = this._getNewSignatureOrder(newSig.prio, s0, p2sh.txSigHash, pubkeys);
|
var order = this._getNewSignatureOrder(newSig.prio, s0, p2sh.txSigHash, pubkeys);
|
||||||
|
|
||||||
if (this._getSighashType(newSig.chunk) !== this.signhash)
|
|
||||||
throw new Error('signhash type mismatch at merge');
|
|
||||||
|
|
||||||
s0.chunks.splice(order + 1, 0, newSig.chunk);
|
s0.chunks.splice(order + 1, 0, newSig.chunk);
|
||||||
}
|
}
|
||||||
s0.updateBuffer();
|
s0.updateBuffer();
|
||||||
|
@ -918,12 +913,27 @@ TransactionBuilder.prototype._getSighashType = function(sig) {
|
||||||
return sig[sig.length-1];
|
return sig[sig.length-1];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
TransactionBuilder.prototype._checkSignHash = function(s1) {
|
||||||
|
var l = s1.chunks.length-1;
|
||||||
|
|
||||||
|
for(var i=0; i<l; i++) {
|
||||||
|
|
||||||
|
if (i==0 && s1.chunks[i] === 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (this._getSighashType(s1.chunks[i]) !== this.signhash)
|
||||||
|
throw new Error('signhash type mismatch at merge p2sh');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// TODO this could be on Script class
|
// TODO this could be on Script class
|
||||||
TransactionBuilder.prototype._mergeInputSig = function(index, s0buf, s1buf) {
|
TransactionBuilder.prototype._mergeInputSig = function(index, s0buf, s1buf) {
|
||||||
if (buffertools.compare(s0buf, s1buf) === 0)
|
if (buffertools.compare(s0buf, s1buf) === 0)
|
||||||
return s0buf;
|
return s0buf;
|
||||||
|
|
||||||
console.log('[TransactionBuilder.js.925]'); //TODO
|
|
||||||
var s0 = new Script(s0buf);
|
var s0 = new Script(s0buf);
|
||||||
var s1 = new Script(s1buf);
|
var s1 = new Script(s1buf);
|
||||||
var l0 = s0.chunks.length;
|
var l0 = s0.chunks.length;
|
||||||
|
@ -933,25 +943,21 @@ console.log('[TransactionBuilder.js.925]'); //TODO
|
||||||
if (l0 && l1 && ((l0 < 2 && l1 > 2) || (l1 < 2 && l0 > 2)))
|
if (l0 && l1 && ((l0 < 2 && l1 > 2) || (l1 < 2 && l0 > 2)))
|
||||||
throw new Error('TX sig types mismatch in merge');
|
throw new Error('TX sig types mismatch in merge');
|
||||||
|
|
||||||
console.log('[TransactionBuilder.js.935]', l0, l1); //TODO
|
if ((!l0 && !l1) || (l0 && !l1))
|
||||||
if ((!l0 && !l1) || (l0 && !l1) || (!l0 && l1))
|
return s0buf;
|
||||||
|
|
||||||
|
this._checkSignHash(s1);
|
||||||
|
|
||||||
|
if ((!l0 && l1))
|
||||||
return s1buf;
|
return s1buf;
|
||||||
|
|
||||||
|
|
||||||
console.log('[TransactionBuilder.js.940]'); //TODO
|
|
||||||
|
|
||||||
// Get the pubkeys
|
// Get the pubkeys
|
||||||
var input = this.inputMap[index];
|
var input = this.inputMap[index];
|
||||||
var type = input.scriptPubKey.classify();
|
var type = input.scriptPubKey.classify();
|
||||||
|
|
||||||
console.log('[TransactionBuilder.js.941]'); //TODO
|
|
||||||
//p2pubkey or p2pubkeyhash
|
//p2pubkey or p2pubkeyhash
|
||||||
if (type === Script.TX_PUBKEYHASH || type === Script.TX_PUBKEY) {
|
if (type === Script.TX_PUBKEYHASH || type === Script.TX_PUBKEY) {
|
||||||
var s = new Script(s1buf);
|
var s = new Script(s1buf);
|
||||||
|
|
||||||
if (this._getSighashType(s.chunks[0]) !== this.signhash)
|
|
||||||
throw new Error('signhash type mismatch at merge');
|
|
||||||
|
|
||||||
log.debug('Merging two signed inputs type:' +
|
log.debug('Merging two signed inputs type:' +
|
||||||
input.scriptPubKey.getRawOutType() + '. Signatures differs. Using the first version.');
|
input.scriptPubKey.getRawOutType() + '. Signatures differs. Using the first version.');
|
||||||
return s0buf;
|
return s0buf;
|
||||||
|
@ -960,8 +966,6 @@ console.log('[TransactionBuilder.js.941]'); //TODO
|
||||||
throw new Error('Script type:' + input.scriptPubKey.getRawOutType() + 'not supported at #merge');
|
throw new Error('Script type:' + input.scriptPubKey.getRawOutType() + 'not supported at #merge');
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('[TransactionBuilder.js.957]'); //TODO
|
|
||||||
|
|
||||||
return this._mergeInputSigP2sh(input, s0, s1);
|
return this._mergeInputSigP2sh(input, s0, s1);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -969,7 +973,6 @@ console.log('[TransactionBuilder.js.957]'); //TODO
|
||||||
TransactionBuilder.prototype._mergeTx = function(tx) {
|
TransactionBuilder.prototype._mergeTx = function(tx) {
|
||||||
var v0 = this.tx;
|
var v0 = this.tx;
|
||||||
var v1 = tx;
|
var v1 = tx;
|
||||||
console.log('[TransactionBuilder.js.966:var:]'); //TODO
|
|
||||||
|
|
||||||
var l = v0.ins.length;
|
var l = v0.ins.length;
|
||||||
if (l !== v1.ins.length)
|
if (l !== v1.ins.length)
|
||||||
|
@ -977,7 +980,6 @@ console.log('[TransactionBuilder.js.966:var:]'); //TODO
|
||||||
|
|
||||||
this.inputsSigned = 0;
|
this.inputsSigned = 0;
|
||||||
for (var i = 0; i < l; i++) {
|
for (var i = 0; i < l; i++) {
|
||||||
console.log('[TransactionBuilder.js.974:for:]',i); //TODO
|
|
||||||
var i0 = v0.ins[i];
|
var i0 = v0.ins[i];
|
||||||
var i1 = v1.ins[i];
|
var i1 = v1.ins[i];
|
||||||
|
|
||||||
|
@ -987,7 +989,6 @@ console.log('[TransactionBuilder.js.974:for:]',i); //TODO
|
||||||
if (buffertools.compare(i0.o, i1.o) !== 0)
|
if (buffertools.compare(i0.o, i1.o) !== 0)
|
||||||
throw new Error('TX .o in mismatch in merge. Input:', i);
|
throw new Error('TX .o in mismatch in merge. Input:', i);
|
||||||
|
|
||||||
console.log('[TransactionBuilder.js.984]'); //TODO
|
|
||||||
i0.s = this._mergeInputSig(i, i0.s, i1.s);
|
i0.s = this._mergeInputSig(i, i0.s, i1.s);
|
||||||
this.vanilla.scriptSig[i]= i0.s.toString('hex');
|
this.vanilla.scriptSig[i]= i0.s.toString('hex');
|
||||||
|
|
||||||
|
|
|
@ -1108,21 +1108,17 @@ describe('TransactionBuilder', function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
it.only('should check signhash in p2sh/merge', function() {
|
it('should check signhash in p2sh/merge', function() {
|
||||||
var b = getP2shBuilder(1);
|
var b = getP2shBuilder(1);
|
||||||
var k1 = testdata.dataUnspentSign.keyStringsP2sh.slice(0,1);
|
var k1 = testdata.dataUnspentSign.keyStringsP2sh.slice(0,1);
|
||||||
var k2 = testdata.dataUnspentSign.keyStringsP2sh.slice(1,2);
|
var k2 = testdata.dataUnspentSign.keyStringsP2sh.slice(1,2);
|
||||||
var k3 = testdata.dataUnspentSign.keyStringsP2sh.slice(2,3);
|
|
||||||
b.isFullySigned().should.equal(false);
|
b.isFullySigned().should.equal(false);
|
||||||
b.sign(k1);
|
b.sign(k1);
|
||||||
var tx = b.build();
|
var tx = b.build();
|
||||||
tx.isComplete().should.equal(false);
|
tx.isComplete().should.equal(false);
|
||||||
b = TransactionBuilder.fromObj(b.toObj());
|
|
||||||
|
|
||||||
var b2 = getP2shBuilder(1, {signhash: bitcore.Transaction.SIGHASH_NONE });
|
var b2 = getP2shBuilder(1, {signhash: bitcore.Transaction.SIGHASH_NONE });
|
||||||
b2.sign(k2);
|
b2.sign(k2);
|
||||||
|
|
||||||
console.log('[test.TransactionBuilder.js.1124]'); //TODO
|
|
||||||
(function() { b2.merge(b)}).should.throw();
|
(function() { b2.merge(b)}).should.throw();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1139,7 +1135,7 @@ console.log('[test.TransactionBuilder.js.1124]'); //TODO
|
||||||
|
|
||||||
var b2 = getP2shBuilder(1, {remainderOut: {address:'mrPnbY1yKDBsdgbHbS7kJ8GVm8F66hWHLE' }});
|
var b2 = getP2shBuilder(1, {remainderOut: {address:'mrPnbY1yKDBsdgbHbS7kJ8GVm8F66hWHLE' }});
|
||||||
b2.sign(k2);
|
b2.sign(k2);
|
||||||
(function() { b2.merge(b)}).should.throw('asdds');
|
(function() { b2.merge(b)}).should.throw('NTXID');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue