not framing witness txs correctly.
This commit is contained in:
parent
38ce14270a
commit
1da30562c4
@ -516,7 +516,7 @@ Framer.witnessTX = function _witnessTX(tx) {
|
|||||||
+ 2
|
+ 2
|
||||||
+ utils.sizeIntv(tx.inputs.length) + inputSize
|
+ utils.sizeIntv(tx.inputs.length) + inputSize
|
||||||
+ utils.sizeIntv(tx.outputs.length) + outputSize
|
+ utils.sizeIntv(tx.outputs.length) + outputSize
|
||||||
+ utils.sizeIntv(witnesses.length) + witnessSize
|
+ witnessSize
|
||||||
+ 4);
|
+ 4);
|
||||||
|
|
||||||
off += utils.write32(p, tx.version, off);
|
off += utils.write32(p, tx.version, off);
|
||||||
@ -554,9 +554,8 @@ Framer.witnessBlockSize = function witnessBlockSize(block) {
|
|||||||
var size = 0;
|
var size = 0;
|
||||||
var i;
|
var i;
|
||||||
|
|
||||||
for (i = 0; i < block.txs.length; i++) {
|
for (i = 0; i < block.txs.length; i++)
|
||||||
size += Framer.witnessTXSize(block.txs[i]);
|
size += Framer.witnessTXSize(block.txs[i]);
|
||||||
}
|
|
||||||
|
|
||||||
return size;
|
return size;
|
||||||
};
|
};
|
||||||
@ -564,7 +563,10 @@ Framer.witnessBlockSize = function witnessBlockSize(block) {
|
|||||||
Framer.witnessTXSize = function witnessTXSize(tx) {
|
Framer.witnessTXSize = function witnessTXSize(tx) {
|
||||||
var off = 0;
|
var off = 0;
|
||||||
var size = 0;
|
var size = 0;
|
||||||
var i, witness;
|
var i, j, witness;
|
||||||
|
|
||||||
|
if (!tx.hasWitness())
|
||||||
|
return size;
|
||||||
|
|
||||||
for (i = 0; i < tx.inputs.length; i++) {
|
for (i = 0; i < tx.inputs.length; i++) {
|
||||||
witness = tx.inputs[i].witness;
|
witness = tx.inputs[i].witness;
|
||||||
@ -574,13 +576,13 @@ Framer.witnessTXSize = function witnessTXSize(tx) {
|
|||||||
|
|
||||||
size += utils.sizeIntv(witness.items.length);
|
size += utils.sizeIntv(witness.items.length);
|
||||||
|
|
||||||
for (i = 0; i < witness.items.length; i++) {
|
for (j = 0; j < witness.items.length; j++) {
|
||||||
chunk = witness.items[i];
|
chunk = witness.items[j];
|
||||||
size += utils.sizeIntv(chunk.length) + chunk.length;
|
size += utils.sizeIntv(chunk.length) + chunk.length;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return size;
|
return size + 2;
|
||||||
};
|
};
|
||||||
|
|
||||||
Framer.witness = function _witness(witness) {
|
Framer.witness = function _witness(witness) {
|
||||||
|
|||||||
@ -480,13 +480,11 @@ Parser.parseTX = function parseTX(p) {
|
|||||||
var inCount, txIn, tx;
|
var inCount, txIn, tx;
|
||||||
var outCount, txOut;
|
var outCount, txOut;
|
||||||
var version, locktime, i;
|
var version, locktime, i;
|
||||||
var raw, block;
|
var raw;
|
||||||
|
|
||||||
p = new BufferReader(p);
|
p = new BufferReader(p);
|
||||||
p.start();
|
p.start();
|
||||||
|
|
||||||
block = p.offset !== 0;
|
|
||||||
|
|
||||||
if (Parser.isWitnessTX(p))
|
if (Parser.isWitnessTX(p))
|
||||||
return Parser.parseWitnessTX(p);
|
return Parser.parseWitnessTX(p);
|
||||||
|
|
||||||
@ -510,18 +508,29 @@ Parser.parseTX = function parseTX(p) {
|
|||||||
|
|
||||||
locktime = p.readU32();
|
locktime = p.readU32();
|
||||||
|
|
||||||
|
// raw = p.endData();
|
||||||
|
|
||||||
return {
|
return {
|
||||||
version: version,
|
version: version,
|
||||||
|
flag: 1,
|
||||||
inputs: txIn,
|
inputs: txIn,
|
||||||
outputs: txOut,
|
outputs: txOut,
|
||||||
locktime: locktime,
|
locktime: locktime,
|
||||||
_witnessSize: 0,
|
_witnessSize: 0,
|
||||||
// _raw: raw,
|
// _raw: raw,
|
||||||
|
// _size: raw.length
|
||||||
_size: p.end()
|
_size: p.end()
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
Parser.isWitnessTX = function isWitnessTX(p) {
|
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);
|
p = new BufferReader(p);
|
||||||
|
|
||||||
if (p.left() < 12)
|
if (p.left() < 12)
|
||||||
@ -536,13 +545,11 @@ Parser.parseWitnessTX = function parseWitnessTX(p) {
|
|||||||
var marker, flag;
|
var marker, flag;
|
||||||
var version, locktime, i;
|
var version, locktime, i;
|
||||||
var witnessSize = 0;
|
var witnessSize = 0;
|
||||||
var raw, block;
|
var raw;
|
||||||
|
|
||||||
p = new BufferReader(p);
|
p = new BufferReader(p);
|
||||||
p.start();
|
p.start();
|
||||||
|
|
||||||
block = p.offset !== 0;
|
|
||||||
|
|
||||||
version = p.readU32();
|
version = p.readU32();
|
||||||
marker = p.readU8();
|
marker = p.readU8();
|
||||||
flag = p.readU8();
|
flag = p.readU8();
|
||||||
@ -577,14 +584,16 @@ Parser.parseWitnessTX = function parseWitnessTX(p) {
|
|||||||
|
|
||||||
locktime = p.readU32();
|
locktime = p.readU32();
|
||||||
|
|
||||||
|
// raw = p.endData();
|
||||||
|
|
||||||
return {
|
return {
|
||||||
version: version,
|
version: version,
|
||||||
marker: marker,
|
|
||||||
flag: flag,
|
flag: flag,
|
||||||
inputs: txIn,
|
inputs: txIn,
|
||||||
outputs: txOut,
|
outputs: txOut,
|
||||||
locktime: locktime,
|
locktime: locktime,
|
||||||
// _raw: raw,
|
// _raw: raw,
|
||||||
|
// _size: raw.length,
|
||||||
_size: p.end(),
|
_size: p.end(),
|
||||||
_witnessSize: witnessSize + 2
|
_witnessSize: witnessSize + 2
|
||||||
};
|
};
|
||||||
|
|||||||
@ -25,6 +25,7 @@ function TX(data, block, index) {
|
|||||||
|
|
||||||
this.type = 'tx';
|
this.type = 'tx';
|
||||||
this.version = data.version || 1;
|
this.version = data.version || 1;
|
||||||
|
this.flag = data.flag || 1;
|
||||||
this.inputs = [];
|
this.inputs = [];
|
||||||
this.outputs = [];
|
this.outputs = [];
|
||||||
this.locktime = data.locktime || 0;
|
this.locktime = data.locktime || 0;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user