本文探讨了在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 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!