not framing witness txs correctly.

This commit is contained in:
Christopher Jeffrey 2016-03-14 21:24:53 -07:00
parent 38ce14270a
commit 1da30562c4
3 changed files with 26 additions and 14 deletions

View File

@ -516,7 +516,7 @@ Framer.witnessTX = function _witnessTX(tx) {
+ 2
+ utils.sizeIntv(tx.inputs.length) + inputSize
+ utils.sizeIntv(tx.outputs.length) + outputSize
+ utils.sizeIntv(witnesses.length) + witnessSize
+ witnessSize
+ 4);
off += utils.write32(p, tx.version, off);
@ -554,9 +554,8 @@ Framer.witnessBlockSize = function witnessBlockSize(block) {
var size = 0;
var i;
for (i = 0; i < block.txs.length; i++) {
for (i = 0; i < block.txs.length; i++)
size += Framer.witnessTXSize(block.txs[i]);
}
return size;
};
@ -564,7 +563,10 @@ Framer.witnessBlockSize = function witnessBlockSize(block) {
Framer.witnessTXSize = function witnessTXSize(tx) {
var off = 0;
var size = 0;
var i, witness;
var i, j, witness;
if (!tx.hasWitness())
return size;
for (i = 0; i < tx.inputs.length; i++) {
witness = tx.inputs[i].witness;
@ -574,13 +576,13 @@ Framer.witnessTXSize = function witnessTXSize(tx) {
size += utils.sizeIntv(witness.items.length);
for (i = 0; i < witness.items.length; i++) {
chunk = witness.items[i];
for (j = 0; j < witness.items.length; j++) {
chunk = witness.items[j];
size += utils.sizeIntv(chunk.length) + chunk.length;
}
}
return size;
return size + 2;
};
Framer.witness = function _witness(witness) {

View File

@ -480,13 +480,11 @@ Parser.parseTX = function parseTX(p) {
var inCount, txIn, tx;
var outCount, txOut;
var version, locktime, i;
var raw, block;
var raw;
p = new BufferReader(p);
p.start();
block = p.offset !== 0;
if (Parser.isWitnessTX(p))
return Parser.parseWitnessTX(p);
@ -510,18 +508,29 @@ Parser.parseTX = function parseTX(p) {
locktime = p.readU32();
// raw = p.endData();
return {
version: version,
flag: 1,
inputs: txIn,
outputs: txOut,
locktime: locktime,
_witnessSize: 0,
// _raw: raw,
// _size: raw.length
_size: p.end()
};
};
Parser.isWitnessTX = function isWitnessTX(p) {
if (Buffer.isBuffer(p)) {
if (p.length < 12)
return false;
return p[4] === 0 && p[5] !== 0;
}
p = new BufferReader(p);
if (p.left() < 12)
@ -536,13 +545,11 @@ Parser.parseWitnessTX = function parseWitnessTX(p) {
var marker, flag;
var version, locktime, i;
var witnessSize = 0;
var raw, block;
var raw;
p = new BufferReader(p);
p.start();
block = p.offset !== 0;
version = p.readU32();
marker = p.readU8();
flag = p.readU8();
@ -577,14 +584,16 @@ Parser.parseWitnessTX = function parseWitnessTX(p) {
locktime = p.readU32();
// raw = p.endData();
return {
version: version,
marker: marker,
flag: flag,
inputs: txIn,
outputs: txOut,
locktime: locktime,
// _raw: raw,
// _size: raw.length,
_size: p.end(),
_witnessSize: witnessSize + 2
};

View File

@ -25,6 +25,7 @@ function TX(data, block, index) {
this.type = 'tx';
this.version = data.version || 1;
this.flag = data.flag || 1;
this.inputs = [];
this.outputs = [];
this.locktime = data.locktime || 0;