Remove _validMerkleTree caching
This commit is contained in:
parent
a478e39524
commit
bb0efd2108
|
@ -60,7 +60,6 @@ function MerkleBlock(arg) {
|
||||||
throw new TypeError('Unrecognized argument for MerkleBlock');
|
throw new TypeError('Unrecognized argument for MerkleBlock');
|
||||||
}
|
}
|
||||||
_.extend(this,info);
|
_.extend(this,info);
|
||||||
this._validMerkleTree = null;
|
|
||||||
this._flagBitsUsed = 0;
|
this._flagBitsUsed = 0;
|
||||||
this._hashesUsed = 0;
|
this._hashesUsed = 0;
|
||||||
return this;
|
return this;
|
||||||
|
@ -144,18 +143,15 @@ MerkleBlock.prototype.toJSON = function toJSON() {
|
||||||
MerkleBlock.prototype.validMerkleTree = function validMerkleTree() {
|
MerkleBlock.prototype.validMerkleTree = function validMerkleTree() {
|
||||||
$.checkState(_.isArray(this.flags), 'MerkleBlock flags is not an array');
|
$.checkState(_.isArray(this.flags), 'MerkleBlock flags is not an array');
|
||||||
$.checkState(_.isArray(this.hashes), 'MerkleBlock hashes is not an array');
|
$.checkState(_.isArray(this.hashes), 'MerkleBlock hashes is not an array');
|
||||||
if(_.isBoolean(this._validMerkleTree)) {
|
|
||||||
return this._validMerkleTree;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Can't have more hashes than numTransactions
|
// Can't have more hashes than numTransactions
|
||||||
if(this.hashes.length > this.numTransactions) {
|
if(this.hashes.length > this.numTransactions) {
|
||||||
return this._setValidMerkleTree(false);
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Can't have more flag bits than num hashes
|
// Can't have more flag bits than num hashes
|
||||||
if(this.flags.length * 8 < this.hashes.length) {
|
if(this.flags.length * 8 < this.hashes.length) {
|
||||||
return this._setValidMerkleTree(false);
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var height = 0;
|
var height = 0;
|
||||||
|
@ -167,9 +163,9 @@ MerkleBlock.prototype.validMerkleTree = function validMerkleTree() {
|
||||||
this._hashesUsed = 0;
|
this._hashesUsed = 0;
|
||||||
var root = this._traverseMerkleTree(height, 0);
|
var root = this._traverseMerkleTree(height, 0);
|
||||||
if(this._hashesUsed !== this.hashes.length) {
|
if(this._hashesUsed !== this.hashes.length) {
|
||||||
return this._setValidMerkleTree(false);
|
false;
|
||||||
}
|
}
|
||||||
return this._setValidMerkleTree(BufferUtil.equals(root, this.header.merkleRoot));
|
return BufferUtil.equals(root, this.header.merkleRoot);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Traverse a the tree in this MerkleBlock, validating it along the way
|
/** Traverse a the tree in this MerkleBlock, validating it along the way
|
||||||
|
@ -229,17 +225,6 @@ MerkleBlock.prototype.hasTransaction = function hasTransaction(tx) {
|
||||||
|| this.hashes.indexOf(revHash) !== -1);
|
|| this.hashes.indexOf(revHash) !== -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {Bool} - set the merkle tree validity
|
|
||||||
* @returns {Bool} - return true/false
|
|
||||||
* @private
|
|
||||||
*/
|
|
||||||
MerkleBlock.prototype._setValidMerkleTree = function(valid) {
|
|
||||||
this._validMerkleTree = valid;
|
|
||||||
return valid;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Buffer} - MerkleBlock data
|
* @param {Buffer} - MerkleBlock data
|
||||||
* @returns {Object} - An Object representing merkleblock data
|
* @returns {Object} - An Object representing merkleblock data
|
||||||
|
|
|
@ -129,19 +129,9 @@ describe('MerkleBlock', function() {
|
||||||
data.JSON.forEach(function(json) {
|
data.JSON.forEach(function(json) {
|
||||||
var b = MerkleBlock(JSON.stringify(json));
|
var b = MerkleBlock(JSON.stringify(json));
|
||||||
b.validMerkleTree().should.equal(true);
|
b.validMerkleTree().should.equal(true);
|
||||||
b._validMerkleTree.should.equal(true);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should respect _validMerkleTrees', function() {
|
|
||||||
var b = MerkleBlock(blockJSON);
|
|
||||||
b._validMerkleTree = false;
|
|
||||||
b.validMerkleTree().should.equal(false);
|
|
||||||
b._validMerkleTree = true;
|
|
||||||
b._validMerkleTree.should.equal(true);
|
|
||||||
b.validMerkleTree().should.equal(true);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should not validate merkleblocks with too many hashes', function() {
|
it('should not validate merkleblocks with too many hashes', function() {
|
||||||
var b = MerkleBlock(JSON.stringify(data.JSON[0]));
|
var b = MerkleBlock(JSON.stringify(data.JSON[0]));
|
||||||
// Add too many hashes
|
// Add too many hashes
|
||||||
|
|
Loading…
Reference in New Issue