tx: .maxSize() method
This commit is contained in:
parent
17d0903a35
commit
cf2e0042ff
@ -70,7 +70,7 @@ TX.prototype.input = function input(i, index) {
|
|||||||
|
|
||||||
var input = {
|
var input = {
|
||||||
out: {
|
out: {
|
||||||
tx: i.tx || null,
|
tx: (i.out ? i.out.tx : i.tx) || null,
|
||||||
hash: hash,
|
hash: hash,
|
||||||
index: i.out ? i.out.index : i.index,
|
index: i.out ? i.out.index : i.index,
|
||||||
},
|
},
|
||||||
@ -180,6 +180,36 @@ TX.prototype.verify = function verify() {
|
|||||||
}, this);
|
}, this);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
TX.prototype.maxSize = function maxSize() {
|
||||||
|
// Create copy with 0-script inputs
|
||||||
|
var copy = this.clone();
|
||||||
|
copy.inputs.forEach(function(input) {
|
||||||
|
input.script = [];
|
||||||
|
});
|
||||||
|
|
||||||
|
var size = copy.render().length;
|
||||||
|
|
||||||
|
// Add size for signatures and public keys
|
||||||
|
copy.inputs.forEach(function(input) {
|
||||||
|
var s = input.out.tx.outputs[input.out.index].script;
|
||||||
|
if (bcoin.script.isPubkeyhash(s)) {
|
||||||
|
// Signature + len
|
||||||
|
size += 74;
|
||||||
|
// Pub key + len
|
||||||
|
size += 34;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Multisig
|
||||||
|
// Empty byte
|
||||||
|
size += 1;
|
||||||
|
// Signature + len
|
||||||
|
size += 74;
|
||||||
|
});
|
||||||
|
|
||||||
|
return size;
|
||||||
|
};
|
||||||
|
|
||||||
TX.prototype.toJSON = function toJSON() {
|
TX.prototype.toJSON = function toJSON() {
|
||||||
// Compact representation
|
// Compact representation
|
||||||
var ts = new Array(4);
|
var ts = new Array(4);
|
||||||
|
|||||||
@ -67,7 +67,9 @@ describe('Wallet', function() {
|
|||||||
.input(src, 0)
|
.input(src, 0)
|
||||||
.out(w.getAddress(), 5460);
|
.out(w.getAddress(), 5460);
|
||||||
|
|
||||||
|
var maxSize = tx.maxSize();
|
||||||
w.sign(tx);
|
w.sign(tx);
|
||||||
|
assert(tx.render().length <= maxSize);
|
||||||
assert(tx.verify());
|
assert(tx.verify());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user