This commit is contained in:
poma 2021-02-11 09:23:18 +03:00
parent c6b442713a
commit 346ffcee3c
No known key found for this signature in database
GPG key ID: BA20CB01FE165657
35 changed files with 852 additions and 8943 deletions

View file

@ -2,7 +2,6 @@ const jsStorage = require('./Storage')
const hasherImpl = require('./MiMC')
class MerkleTree {
constructor(n_levels, defaultElements, prefix, storage, hasher) {
this.prefix = prefix
this.storage = storage || new jsStorage()
@ -15,9 +14,7 @@ class MerkleTree {
this.zero_values.push(current_zero_value)
for (let i = 0; i < n_levels; i++) {
current_zero_value = this.hasher.hash(i, current_zero_value, current_zero_value)
this.zero_values.push(
current_zero_value.toString(),
)
this.zero_values.push(current_zero_value.toString())
}
if (defaultElements) {
let level = 0
@ -28,7 +25,7 @@ class MerkleTree {
level++
let numberOfElementsInLevel = Math.ceil(defaultElements.length / 2)
for (level; level <= this.n_levels; level++) {
for(let i = 0; i < numberOfElementsInLevel; i++) {
for (let i = 0; i < numberOfElementsInLevel; i++) {
const leftKey = MerkleTree.index_to_key(prefix, level - 1, 2 * i)
const rightKey = MerkleTree.index_to_key(prefix, level - 1, 2 * i + 1)
@ -93,14 +90,14 @@ class MerkleTree {
root,
path_elements: traverser.path_elements,
path_index: traverser.path_index,
element
element,
}
}
async update(index, element, insert = false) {
if (!insert && index >= this.totalElements) {
throw Error('Use insert method for new elements.')
} else if(insert && index < this.totalElements) {
} else if (insert && index < this.totalElements) {
throw Error('Use update method for existing elements.')
}
try {
@ -141,13 +138,7 @@ class MerkleTree {
this.current_element = this.hasher.hash(level, left, right)
}
}
let traverser = new UpdateTraverser(
this.prefix,
this.storage,
this.hasher,
element,
this.zero_values
)
let traverser = new UpdateTraverser(this.prefix, this.storage, this.hasher, element, this.zero_values)
await this.traverse(index, traverser)
traverser.key_values_to_put.push({
@ -156,7 +147,7 @@ class MerkleTree {
})
await this.storage.put_batch(traverser.key_values_to_put)
} catch(e) {
} catch (e) {
console.error(e)
}
}
@ -182,7 +173,7 @@ class MerkleTree {
}
getIndexByElement(element) {
for(let i = this.totalElements - 1; i >= 0; i--) {
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