Blockchain

將 BULK 的 ERC721 代幣轉移到單個地址

  • June 3, 2022

我想知道將許多(例如 1000 個)ERC721 代幣轉移到單個地址的編碼氣體有效方式是什麼。我已經嘗試過下面的方法,但我想要更有效的方法。

   function bulkTransfer(uint256[] tokenIds, address _to) public onlyOwner {
       uint256 length = tokenIds.length;
       for (uint256 i = 0; i < length; i++) {
           _transfer(owner, _to, tokenIds[i]);
       }
   }

假設所有者在該數組中持有所有這些令牌。

您可以添加這些省氣方法:

function bulkTransfer(uint256[] tokenIds, address _to) external onlyOwner {
       for (uint256 i; i < tokenIds.length;) {
           _transfer(msg.sender, _to, tokenIds[I]);
           unchecked { i++ }
       }
}

這是我所做的:

  • 將可見性更改為外部
  • 刪除長度變數。因為從 calldata 讀取並不那麼昂貴。
  • 更改i=0i. 因為 uint 的預設值已經是 0。
  • 刪除i++並添加unchecked { i++ }. 這意味著,“堅固,相信我,不會有溢出/下溢”。
  • 更改ownermsg.sender. 因為我們不想每次都從儲存中讀取。由於函式是onlyOwner, msg.sender 應該是所有者。

我已經實現並將其部署在這裡https://nft.life

你可以看到很多人都用過。它是免費和開源的。

引用自:https://ethereum.stackexchange.com/questions/129475