cache values.
This commit is contained in:
parent
a7f3d2aa8f
commit
022de4a91d
@ -456,7 +456,7 @@ Block.prototype.getClaimed = function getClaimed() {
|
|||||||
* @returns {BN}
|
* @returns {BN}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Block.reward = function reward(height, network) {
|
Block.reward = function _reward(height, network) {
|
||||||
var halvings, reward;
|
var halvings, reward;
|
||||||
|
|
||||||
network = bcoin.network.get(network);
|
network = bcoin.network.get(network);
|
||||||
@ -468,11 +468,25 @@ Block.reward = function reward(height, network) {
|
|||||||
if (halvings >= 64)
|
if (halvings >= 64)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
// We need to shift right by `halvings`,
|
||||||
|
// but 50 btc is a 33 bit number, so we
|
||||||
|
// cheat. We only start halving once the
|
||||||
|
// halvings are at least 1.
|
||||||
if (halvings === 0)
|
if (halvings === 0)
|
||||||
return 5000000000;
|
return 5000000000;
|
||||||
|
|
||||||
|
// We can't shift right by 32 bits.
|
||||||
|
// 25m bitcoin is 32 bits, so we
|
||||||
|
// can safely return zero if the
|
||||||
|
// shift will be 32.
|
||||||
|
if (halvings >= 33)
|
||||||
|
return 0;
|
||||||
|
|
||||||
reward = 2500000000 >>> (halvings - 1);
|
reward = 2500000000 >>> (halvings - 1);
|
||||||
|
|
||||||
|
// We could do this to keep this more (or
|
||||||
|
// less?) accurate, but this is infinitely
|
||||||
|
// slower.
|
||||||
// reward = 5000000000;
|
// reward = 5000000000;
|
||||||
// reward = Math.floor(reward / Math.pow(2, halvings));
|
// reward = Math.floor(reward / Math.pow(2, halvings));
|
||||||
|
|
||||||
|
|||||||
@ -9,7 +9,6 @@
|
|||||||
* @module constants
|
* @module constants
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var bn = require('bn.js');
|
|
||||||
var utils = require('../utils');
|
var utils = require('../utils');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -413,7 +412,7 @@ exports.tx = {
|
|||||||
MAX_FEE: exports.COIN / 10,
|
MAX_FEE: exports.COIN / 10,
|
||||||
MIN_RELAY: 10000,
|
MIN_RELAY: 10000,
|
||||||
BARE_MULTISIG: true,
|
BARE_MULTISIG: true,
|
||||||
FREE_THRESHOLD: Math.floor(exports.COIN * 144 / 250),
|
FREE_THRESHOLD: exports.COIN * 144 / 250,
|
||||||
MAX_SIGOPS: exports.block.MAX_SIGOPS / 5,
|
MAX_SIGOPS: exports.block.MAX_SIGOPS / 5,
|
||||||
MAX_SIGOPS_COST: exports.block.MAX_SIGOPS_COST / 5,
|
MAX_SIGOPS_COST: exports.block.MAX_SIGOPS_COST / 5,
|
||||||
COINBASE_MATURITY: 100
|
COINBASE_MATURITY: 100
|
||||||
|
|||||||
@ -80,6 +80,8 @@ function TX(data, block, index) {
|
|||||||
this._raw = data._raw || null;
|
this._raw = data._raw || null;
|
||||||
this._size = data._size || 0;
|
this._size = data._size || 0;
|
||||||
this._witnessSize = data._witnessSize || 0;
|
this._witnessSize = data._witnessSize || 0;
|
||||||
|
this._outputValue = null;
|
||||||
|
this._inputValue = null;
|
||||||
|
|
||||||
for (i = 0; i < data.inputs.length; i++)
|
for (i = 0; i < data.inputs.length; i++)
|
||||||
this.inputs.push(new bcoin.input(data.inputs[i]));
|
this.inputs.push(new bcoin.input(data.inputs[i]));
|
||||||
@ -665,12 +667,18 @@ TX.prototype.getInputValue = function getInputValue() {
|
|||||||
var total = 0;
|
var total = 0;
|
||||||
var i;
|
var i;
|
||||||
|
|
||||||
|
if (this._inputValue != null)
|
||||||
|
return this._inputValue;
|
||||||
|
|
||||||
if (!this.hasCoins())
|
if (!this.hasCoins())
|
||||||
return total;
|
return total;
|
||||||
|
|
||||||
for (i = 0; i < this.inputs.length; i++)
|
for (i = 0; i < this.inputs.length; i++)
|
||||||
total += this.inputs[i].coin.value;
|
total += this.inputs[i].coin.value;
|
||||||
|
|
||||||
|
if (!this.mutable)
|
||||||
|
this._inputValue = total;
|
||||||
|
|
||||||
return total;
|
return total;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -683,9 +691,15 @@ TX.prototype.getOutputValue = function getOutputValue() {
|
|||||||
var total = 0;
|
var total = 0;
|
||||||
var i;
|
var i;
|
||||||
|
|
||||||
|
if (this._outputValue != null)
|
||||||
|
return this._outputValue;
|
||||||
|
|
||||||
for (i = 0; i < this.outputs.length; i++)
|
for (i = 0; i < this.outputs.length; i++)
|
||||||
total += this.outputs[i].value;
|
total += this.outputs[i].value;
|
||||||
|
|
||||||
|
if (!this.mutable)
|
||||||
|
this._outputValue = total;
|
||||||
|
|
||||||
return total;
|
return total;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user