Add merkleTree generation helpers

This commit is contained in:
Serkan Reis 2024-04-02 12:59:43 +03:00
parent 004b102540
commit fd65316d1f
2 changed files with 34 additions and 0 deletions

View File

@ -23,8 +23,11 @@
"@cosmos-kit/leap": "^2.4.3",
"@cosmos-kit/leap-metamask-cosmos-snap": "^0.3.3",
"@cosmos-kit/react": "^2.9.3",
"crypto-js": "4.1.1",
"@types/crypto-js": "4.2.1",
"@fontsource/jetbrains-mono": "^4",
"@fontsource/roboto": "^4",
"merkletreejs": "0.3.11",
"@leapwallet/cosmos-snap-provider": "0.1.24",
"@pinata/sdk": "^1.1.26",
"@popperjs/core": "^2",

31
utils/merkleTree.ts Normal file
View File

@ -0,0 +1,31 @@
import sha256 from 'crypto-js/sha256'
import { MerkleTree } from 'merkletreejs'
export class WhitelistMerkleTree {
tree: MerkleTree
constructor(members: string[]) {
this.tree = new MerkleTree(
members.map((member) => sha256(member)),
sha256,
{
// sort: true,
// hashLeaves: false,
// sortLeaves: true,
sortPairs: true,
},
)
}
getMerkleRoot() {
return this.tree.getRoot().toString('hex')
}
getMerkleProof(member: string) {
console.log('this.tree.getProof(sha256(member).toString()): ', this.tree.getProof(sha256(member).toString()))
return this.tree.getProof(sha256(member).toString()).map((item) => item.data.toString('hex'))
}
verify(proof: string[], member: string) {
return this.tree.verify(proof, sha256(member).toString(), this.tree.getRoot())
}
}