not framing witness txs correctly.
This commit is contained in:
parent
38ce14270a
commit
1da30562c4
@ -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) {
|
||||
|
||||
@ -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
|
||||
};
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user