Blockchain
將 BULK 的 ERC721 代幣轉移到單個地址
我想知道將許多(例如 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=0
為i
. 因為 uint 的預設值已經是 0。- 刪除
i++
並添加unchecked { i++ }
. 這意味著,“堅固,相信我,不會有溢出/下溢”。- 更改
owner
為msg.sender
. 因為我們不想每次都從儲存中讀取。由於函式是onlyOwner
, msg.sender 應該是所有者。
我已經實現並將其部署在這裡https://nft.life。
你可以看到很多人都用過。它是免費和開源的。