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

当进行空投或进行私募(即只有特定地址被允许购买代币或铸造 NFT)时,有三种流行的机制来仅允许特定地址列表进行购买:
以下是这些替代方案在 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.md 由 GitHub 托管
在第一个函数中,我们检查调用者是否是 allowList 映射的成员。在后两个函数中,调用者发送一些证明,表明 msg.sender 被允许执行交易。
实验很简单。从 Gas 成本的角度来看,这三种方法中哪一种最好?
- 原文链接: medium.com/donkeverse/ha...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
 
                如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!