merkle tree update - getIndexByElement

This commit is contained in:
Alexey 2019-07-18 00:25:16 +03:00
parent b0c896c681
commit 3f3e0534cc
2 changed files with 31 additions and 0 deletions

View File

@ -179,6 +179,16 @@ class MerkleTree {
current_index = Math.floor(current_index / 2) current_index = Math.floor(current_index / 2)
} }
} }
getIndexByElement(element) {
for(let i = this.totalElements - 1; i >= 0; i--) {
const elementFromTree = this.storage.get(MerkleTree.index_to_key(this.prefix, 0, i))
if (elementFromTree === element) {
return i
}
}
return false
}
} }
module.exports = MerkleTree module.exports = MerkleTree

View File

@ -102,6 +102,27 @@ contract('MerkleTreeWithHistory', accounts => {
} }
}) })
it('should find an element', async () => {
const elements = [12, 13, 14, 15, 16, 17, 18, 19, 20]
for(const [, el] of Object.entries(elements)) {
await tree.insert(el)
}
let index = tree.getIndexByElement(13)
index.should.be.equal(1)
index = tree.getIndexByElement(19)
index.should.be.equal(7)
index = tree.getIndexByElement(12)
index.should.be.equal(0)
index = tree.getIndexByElement(20)
index.should.be.equal(8)
index = tree.getIndexByElement(42)
index.should.be.equal(false)
})
it('creation even elements count', async () => { it('creation even elements count', async () => {
const elements = [12, 13, 14, 15, 16, 17] const elements = [12, 13, 14, 15, 16, 17]
for(const [, el] of Object.entries(elements)) { for(const [, el] of Object.entries(elements)) {