# 8月29日日记

By [R0chGh0st](https://paragraph.com/@r0ckgh0st) · 2022-08-29

---

今日工作
----

（1）撸空投，SHM链的swap，基本就是swap以下，add一下，发推特就可以领faucet

[https://www.swapped.finance/](https://www.swapped.finance/)

（2）参与了galaxy的一个活动，可以领取oat，刚开始领取的时候报错：

err: 1004:Get total claim count from formula fail; 2)err: 10000:failed to get cred output with cred id 185951744732864512; err: rpc error: code = Unknown desc = 10000: rpc error: code = Unavailable desc = no healthy upstream

后来经过官方提示，**删除了galaxy站点的cookie后**，恢复正常

[https://galaxy.eco/Biteye/campaign/GC6zSUtVBn](https://galaxy.eco/Biteye/campaign/GC6zSUtVBn)

（3）研究了一下基于默克尔树的白名单验证方法，参考的是下面这篇文章：

[https://medium.com/@ItsCuzzo/using-merkle-trees-for-nft-whitelists-523b58ada3f9](https://medium.com/@ItsCuzzo/using-merkle-trees-for-nft-whitelists-523b58ada3f9)

其实默克尔树我们都很熟悉，他在以往也用于做过这样的权限认证工作，比如用户的机顶盒权限验证，用户作为叶子结点，需要对外提供一组Hash，只要能提供到，就可以通过节点验证，我实现了原型代码，如下所示，基本理解了默克尔树的构造方案，没有自行构造一棵树，而是用库生成的。

    let hre = require("hardhat");
    let { MerkleTree } = require("merkletreejs");
    let { keccak256 } = require("keccak256");
    
    let whitelistAddress =
      ["0xcd404712d55d839902a9f4b5935f514829378728",
        "0xCCC26c4d84e997904Dc204d83ea912278C8b60a2",
        "0x72dA088a22D1ebcD790765977b09741bE0AB2819",
        "0xc02055721cD6a553Ac58487ABD1E085CFeF24521",
        "0x9f63389D0eb66FCc9D9631Cc5D0FcFe594DCb749",
        "0xb75f07A2749a312496788a7b73fDD386EA529F2B"];
    
    let leafNodes = whitelistAddress.map(addr => hre.ethers.utils.keccak256(addr))
    
    
    console.log(leafNodes);
    
    let Merkle_Tree = new MerkleTree(leafNodes, hre.ethers.utils.keccak256)//, { SortPairs: true });
    
    console.log(Merkle_Tree.toString());
    
    let hashing_proof = leafNodes[0];
    console.log(Merkle_Tree.getHexProof(hashing_proof));
    

执行效果如下图所示，第一组输出是对每一个地址计算的keccak256结果，第二组输出是一组树，第三组输出是验证钱包地址0xcd404712d55d839902a9f4b5935f514829378728所需要构造的叶子hash信息，叶节点与其兄弟节点合并可以计算出父节点hash，以此类推最终计算获得根hash，通过验证根hash的一致性来验证：

![](https://storage.googleapis.com/papyrus_images/fedb414420a07b5d40ee597f7691ba34281375f7be644b954855b4d4b354d8ea.png)

（4）完善论文，补充引言及引用论文，使文章更加完善，基本完成任务。

今日反思
----

之前参加会议的会议费还没有报销，今天正好老师在，应该早一点去询问一下走哪个项目报销，这样不被动，以后要更主动一点。

---

*Originally published on [R0chGh0st](https://paragraph.com/@r0ckgh0st/8-29)*
