0

我们将很快启动合约,我们使用 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; 

我的问题是这些块也是纯*的吗?在我们的薄荷页面中;我正在通过estimateGasminter 的数据计算气体限制。例如,它说 78403,但 metamask 给出了大约 125300 的气体限制。我可以改变这一点,但我想确保这个块是纯的,因为如果不是交易,很可能由于 gas 不足而失败。

*纯=估计气体友好

**github问题:https ://github.com/chiru-labs/ERC721A/issues/147

4

0 回答 0