diff --git a/.gitignore b/.gitignore index 7d49510..9771c97 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ lib yarn-error.log .idea .nyc_output +.run diff --git a/src/FixedMerkleTree.ts b/src/FixedMerkleTree.ts index 86ddc4a..057d105 100644 --- a/src/FixedMerkleTree.ts +++ b/src/FixedMerkleTree.ts @@ -1,7 +1,6 @@ import { Element, HashFunction, - Index, MerkleTreeOptions, ProofPath, SerializedTreeState, @@ -147,7 +146,7 @@ export default class MerkleTree { * @param {number} index Leaf index to generate path for * @returns {{pathElements: Object[], pathIndex: number[]}} An object containing adjacent elements and left-right index */ - path(index: Index): ProofPath { + path(index: number): ProofPath { if (isNaN(Number(index)) || index < 0 || index >= this._layers[0].length) { throw new Error('Index out of bounds: ' + index) } @@ -194,8 +193,7 @@ export default class MerkleTree { } getTreeEdge(edgeElement: Element): TreeEdge { - const leaves = this._layers[0] - const edgeIndex = leaves.indexOf(edgeElement) + const edgeIndex = this.indexOf(edgeElement) if (edgeIndex <= -1) { throw new Error('Element not found') } diff --git a/src/PartialMerkleTree.ts b/src/PartialMerkleTree.ts index a461d63..fdf5b14 100644 --- a/src/PartialMerkleTree.ts +++ b/src/PartialMerkleTree.ts @@ -167,7 +167,7 @@ export class PartialMerkleTree { } } - path(index: Element): ProofPath { + path(index: number): ProofPath { if (isNaN(Number(index)) || index < 0 || index >= this._layers[0].length) { throw new Error('Index out of bounds: ' + index) } @@ -205,6 +205,11 @@ export class PartialMerkleTree { } } + proof(element: Element): ProofPath { + const index = this.indexOf(element) + return this.path(index) + } + serialize(): SerializedPartialTreeState { const leaves = this.layers[0].slice(this._edgeLeaf.index) return { diff --git a/src/index.ts b/src/index.ts index 43867a9..78632b0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -38,6 +38,5 @@ export type TreeEdge = { edgePath: ProofPath; edgeIndex: number } -export type Index = Element export type LeafWithIndex = { index: number, data: Element } diff --git a/test/partialMerkleTree.spec.ts b/test/partialMerkleTree.spec.ts index d33292b..cd4ea57 100644 --- a/test/partialMerkleTree.spec.ts +++ b/test/partialMerkleTree.spec.ts @@ -163,6 +163,13 @@ describe('PartialMerkleTree', () => { }) }) + describe('#proof', () => { + it('should return proof for known leaf', () => { + const { partialTree } = getTestTrees(10, [1, 2, 3, 4, 5], 3) + assert.deepEqual(partialTree.proof(4), partialTree.path(3)) + }) + }) + describe('#getters', () => { it('should return capacity', () => { const levels = 10 @@ -207,6 +214,7 @@ describe('PartialMerkleTree', () => { const { partialTree } = getTestTrees(10, [1, 2, 3, 4, 5, 6, 7, 8, 9], 5) should().throw((() => partialTree.path(-1)), 'Index out of bounds: -1') should().throw((() => partialTree.path(10)), 'Index out of bounds: 10') + // @ts-ignore should().throw((() => partialTree.path('qwe')), 'Index out of bounds: qwe') })