Calculate the size of floData and add it to the bufferwriter initial size

This commit is contained in:
Sky Young 2018-10-20 12:15:30 -06:00
parent 36f88b398f
commit 4d7b920048
2 changed files with 26 additions and 6 deletions

View File

@ -698,7 +698,22 @@ TX.prototype.signatureHashV1 = function signatureHashV1(index, prev, value, type
}
}
const size = 156 + prev.getVarSize();
// Calculate the size of the transaction including the Flo Data
let fOmitTxComment = !!(type & hashType.OMIT_TX_COMMENT);
let floDataSize = 0
if (!fOmitTxComment){
let bufferLength = Buffer.from(this.strFloData).length;
if (this.strFloData.length > 0){
floDataSize += encoding.sizeVarint(bufferLength);
floDataSize += bufferLength
} else {
floDataSize += encoding.sizeVarint(0);
}
}
const size = 156 + prev.getVarSize() + floDataSize;
const bw = StaticWriter.pool(size);
bw.writeU32(this.version);
@ -712,14 +727,14 @@ TX.prototype.signatureHashV1 = function signatureHashV1(index, prev, value, type
bw.writeBytes(outputs);
bw.writeU32(this.locktime);
var fOmitTxComment = !!(type & hashType.OMIT_TX_COMMENT);
// Add the FloData to the transaction
if (this.version >= 2 && !fOmitTxComment) {
bw.writeVarBytes(Buffer.from(this.strFloData));
}
// Remove the OMIT_TX_COMMENT flag if included
type &= ~hashType.OMIT_TX_COMMENT;
bw.writeU32(type);
return digest.hash256(bw.render());

View File

@ -1175,14 +1175,19 @@ Script.prototype.execute = function execute(stack, flags, tx, index, value, vers
try {
hash = tx.signatureHash(index, subscript, value, type, version);
res = checksig(hash, sig, key);
} catch (e) {}
} catch (e) {
// Having issues with signatures? Log this error then!
}
if (!res){
type ^= Script.hashType.OMIT_TX_COMMENT;
try {
hash = tx.signatureHash(index, subscript, value, type, version);
res = checksig(hash, sig, key);
} catch (e) {}
} catch (e) {
// Having issues with signatures? Log this error then!
throw new ScriptError('CHECKSIGVERIFY_ERROR', e)
}
}
}