const addressZero = '0x0000000000000000000000000000000000000000000000000000000000000000' const options = { hashLeaves: false, sortLeaves: true, sortPairs: true, duplicateOdd: false, isBitcoinTree: false } //check the constraints getRef("trbtn").addEventListener('click', () => { getRef("waiting").innerHTML = ` The tree is being constructed, please wait.` let trid = getRef("trid").value.trim(); txIdList = trid.split(","); merkleTreePath(); }) let tree function merkleTreePath() { let trid = getRef("trid").value.trim().split(","); let txIdList = trid.map(v => `0x${sha256(v.trim())}`); tree = new MerkleTree(txIdList, sha256, options) const merkleRoot = tree.getHexRoot() getRef("waiting").innerHTML = " "; getRef("otp").innerHTML = "Root : "; let id1 = document.querySelector("#otp"); let newDiv = document.createElement('sm-copy') newDiv.value = merkleRoot; id1.appendChild(newDiv); //path const otp1 = document.querySelector("#otp1"); otp1.innerHTML = '' const frag = document.createDocumentFragment() txIdList.forEach((leaf, index) => { const div = document.createElement('div') const newDiv1 = document.createElement('div') newDiv1.innerHTML = `Proof of "${trid[index]}":`; const newDiv = document.createElement('sm-copy') newDiv.value = tree.getHexProof(leaf); div.append(newDiv1, newDiv) frag.append(div); }) otp1.append(frag) // writing into cloud floCloudAPI.sendApplicationData('', merkleRoot).then((value) => { console.log(value) }).catch(err => { console.error(err) }) } //verify path getRef("vrbtn").addEventListener('click', () => { getRef("otp2").classList.remove('hide') getRef('otp2').innerHTML = '' const merkleRoot = getRef("merkle_root").value.trim(); const elementToCheck = getRef('element_to_check').value.trim(); const proof = getRef('proof').value.trim().split(',') floCloudAPI.requestApplicationData(merkleRoot, { mostRecent: true }).then(res => { let isInCloud = `
The Merkle root ${merkleRoot} is ${res.length > 0 ? '' : 'not'} present in the cloud
` let verified const leaf = `0x${sha256(elementToCheck)}` verified = MerkleTree.verify(proof, leaf, merkleRoot, sha256, options) if (verified) { getRef("otp2").classList.remove('failed') getRef("otp2").classList.add('success') } else { getRef("otp2").classList.add('failed') getRef("otp2").classList.remove('success') } getRef("otp2").classList.remove('hide') getRef("otp2").innerHTML = `

${verified ? 'Verified' : 'Verification Failed (Not a member)'}



${isInCloud}`; }).catch(err => { notify(err, 'error') }) })