NFT铸币中的硬核Gas节省(第二部分):签名与Merkle树

本文探讨了在NFT铸造过程中节省Gas费用的三种机制:使用映射存储地址、使用私钥签名并在链上验证、使用Merkle树。文章并通过Solidity代码示例展示了每种方法的实现,并分析了从Gas成本角度来看哪种方法最优。

NFT 铸造中的极致 Gas 节省(第二部分):Merkle Trees 与签名

本系列的第一部分在这里。如果你看到付费墙,请点击此链接

当进行空投或进行私募(即只有特定地址被允许购买代币或铸造 NFT)时,有三种流行的机制来仅允许特定地址列表进行购买:

  • 将地址存储在映射中
  • 使用私钥对地址进行签名并在链上验证签名
  • 使用 Merkle 证明

以下是这些替代方案在 Solidity 中的实现:

Medium

function benchmark1Mapping() external {
    require(allowList[msg.sender] == 1, "not allowed");
   // 业务逻辑
}

function benchmark2PublicSignature(bytes calldata _signature) external {
    require(
        allowListSigningAddress ==
            keccak256(
                abi.encodePacked(
                    "\x19Ethereum Signed Message:\n32",
                    bytes32(uint256(uint160(msg.sender)))
                )
            ).recover(_signature),
        "not allowed"
    );
    // 业务逻辑
}

function benchmark3MerkleTree(bytes32[] calldata merkleProof) external {
    require(
        MerkleProof.verify(merkleProof,
            merkleRoot,
            keccak256(
                abi.encodePacked(msg.sender))),
        "not allowed");
    // 业务逻辑
}

查看原始代码 privateSale.mdGitHub 托管

在第一个函数中,我们检查调用者是否是 allowList 映射的成员。在后两个函数中,调用者发送一些证明,表明 msg.sender 被允许执行交易。

实验很简单。从 Gas 成本的角度来看,这三种方法中哪一种最好?

Merkle 树机制

  • 原文链接: medium.com/donkeverse/ha...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
jeffrey-scholz
jeffrey-scholz
江湖只有他的大名,没有他的介绍。