Merge branch 'williamberman-master'
* williamberman-master: changed recursive createHashes into loop
This commit is contained in:
commit
e681ded3ee
71
index.js
71
index.js
|
@ -39,52 +39,53 @@ class MerkleTree {
|
||||||
}
|
}
|
||||||
|
|
||||||
createHashes(nodes) {
|
createHashes(nodes) {
|
||||||
if (nodes.length === 1) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
const layerIndex = this.layers.length
|
while (nodes.length !== 1) {
|
||||||
|
|
||||||
this.layers.push([])
|
const layerIndex = this.layers.length
|
||||||
|
|
||||||
for (let i = 0; i < nodes.length - 1; i += 2) {
|
this.layers.push([])
|
||||||
const left = nodes[i]
|
|
||||||
const right = nodes[i+1]
|
|
||||||
let data = null
|
|
||||||
|
|
||||||
if (this.isBitcoinTree) {
|
for (let i = 0; i < nodes.length - 1; i += 2) {
|
||||||
data = Buffer.concat([reverse(left), reverse(right)])
|
const left = nodes[i]
|
||||||
} else {
|
const right = nodes[i+1]
|
||||||
data = Buffer.concat([left, right])
|
let data = null
|
||||||
|
|
||||||
|
if (this.isBitcoinTree) {
|
||||||
|
data = Buffer.concat([reverse(left), reverse(right)])
|
||||||
|
} else {
|
||||||
|
data = Buffer.concat([left, right])
|
||||||
|
}
|
||||||
|
|
||||||
|
let hash = this.hashAlgo(data)
|
||||||
|
|
||||||
|
// double hash if bitcoin tree
|
||||||
|
if (this.isBitcoinTree) {
|
||||||
|
hash = reverse(this.hashAlgo(hash))
|
||||||
|
}
|
||||||
|
|
||||||
|
this.layers[layerIndex].push(hash)
|
||||||
}
|
}
|
||||||
|
|
||||||
let hash = this.hashAlgo(data)
|
// is odd number of nodes
|
||||||
|
if (nodes.length % 2 === 1) {
|
||||||
|
let data = nodes[nodes.length-1]
|
||||||
|
let hash = data
|
||||||
|
|
||||||
// double hash if bitcoin tree
|
// is bitcoin tree
|
||||||
if (this.isBitcoinTree) {
|
if (this.isBitcoinTree) {
|
||||||
hash = reverse(this.hashAlgo(hash))
|
// Bitcoin method of duplicating the odd ending nodes
|
||||||
|
data = Buffer.concat([reverse(data), reverse(data)])
|
||||||
|
hash = this.hashAlgo(data)
|
||||||
|
hash = reverse(this.hashAlgo(hash))
|
||||||
|
}
|
||||||
|
|
||||||
|
this.layers[layerIndex].push(hash)
|
||||||
}
|
}
|
||||||
|
|
||||||
this.layers[layerIndex].push(hash)
|
nodes = this.layers[layerIndex]
|
||||||
}
|
}
|
||||||
|
|
||||||
// is odd number of nodes
|
|
||||||
if (nodes.length % 2 === 1) {
|
|
||||||
let data = nodes[nodes.length-1]
|
|
||||||
let hash = data
|
|
||||||
|
|
||||||
// is bitcoin tree
|
|
||||||
if (this.isBitcoinTree) {
|
|
||||||
// Bitcoin method of duplicating the odd ending nodes
|
|
||||||
data = Buffer.concat([reverse(data), reverse(data)])
|
|
||||||
hash = this.hashAlgo(data)
|
|
||||||
hash = reverse(this.hashAlgo(hash))
|
|
||||||
}
|
|
||||||
|
|
||||||
this.layers[layerIndex].push(hash)
|
|
||||||
}
|
|
||||||
|
|
||||||
this.createHashes(this.layers[layerIndex])
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "merkletreejs",
|
"name": "merkletreejs",
|
||||||
"version": "0.0.7",
|
"version": "0.0.9",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -347,8 +347,7 @@
|
||||||
"crypto-js": {
|
"crypto-js": {
|
||||||
"version": "3.1.9-1",
|
"version": "3.1.9-1",
|
||||||
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.9-1.tgz",
|
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.9-1.tgz",
|
||||||
"integrity": "sha1-/aGedh/Ad+Af+/3G6f38WeiAbNg=",
|
"integrity": "sha1-/aGedh/Ad+Af+/3G6f38WeiAbNg="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"decamelize": {
|
"decamelize": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
|
|
Loading…
Reference in New Issue