我们将很快启动合约,我们使用 ERC721A ( https://github.com/chiru-labs/ERC721A ) 作为基础。
我们的 mint 函数的逻辑不依赖于合约状态(除了检查 totalSupply 等),所以我们可以说它是一个“纯*函数”。
在 erc721 上有一个_safeMint
执行下面的代码块:
uint256 startTokenId = _currentIndex;
if (to == address(0)) revert MintToZeroAddress();
if (quantity == 0) revert MintZeroQuantity();
_beforeTokenTransfers(address(0), to, startTokenId, quantity);
// Overflows are incredibly unrealistic.
// balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
// updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
unchecked {
_addressData[to].balance += uint64(quantity);
_addressData[to].numberMinted += uint64(quantity);
_ownerships[startTokenId].addr = to;
_ownerships[startTokenId].startTimestamp = uint64(block.timestamp);
uint256 updatedIndex = startTokenId;
uint256 end = updatedIndex + quantity;
do {
emit Transfer(address(0), to, updatedIndex++);
} while (updatedIndex != end);
}
_currentIndex = updatedIndex;
我的问题是这些块也是纯*的吗?在我们的薄荷页面中;我正在通过estimateGas
minter 的数据计算气体限制。例如,它说 78403,但 metamask 给出了大约 125300 的气体限制。我可以改变这一点,但我想确保这个块是纯的,因为如果不是交易,很可能由于 gas 不足而失败。
*纯=估计气体友好
**github问题:https ://github.com/chiru-labs/ERC721A/issues/147