Erc-721
將 ERC721 代幣部署到多個地址
如何將我的許多 ERC721 代幣轉移到多個地址?
我的ERC721:
function mintUniqueTokenTo ( address _to, uint256 _tokenId, string _tokenURI // Store, receipient's name, grade and program details ) public { super.mint(_to, _tokenId); super._setTokenURI(_tokenId, _tokenURI); }
鑄造一個代幣很容易:
nftInstance.mintUniqueTokenTo(address, tokenId, tokenURI)
對於許多收件人,我想創建一個分發契約,但solidity 不能接受字元串數組。所以我不能將tokenIds和tokenURIs傳遞給它
addresses[]; //List of receipients of my NFT tokens tokenIds[]; tokenURIs[];
所以這就是我卡住的地方。我的方法錯了嗎?
有幾種方法可以設置 ERC721“令牌元數據 URI”。
1.在程式碼中計算URI
由於我們將“addresses”和“tokenIds”作為數組傳遞,我們可以通過連接“base_uri”+目前 tokenId 來計算 URI 字元串,然後設置它。
- 創建自己的數據序列化/反序列化程式碼。 ======================
正如您所注意到的 Solidity 的 ABI(應用程序二進制介面)不支持處理嵌套/多級數組。
由於一個字元串已經是一個字節數組,(前 32 個字節包含長度 uint256 0x00 到 0x20 / 下一個 0x20 到任何包含實際數據)我們可以編寫一個自定義數據解析器,無論是純solidity 還是solidity 彙編。
這個解析器可以只處理 tokenURI,甚至可以組合我們需要的所有參數(地址/tokenId/tokenURI)。
查看Zoom Src / Zoom Docs,了解如何直接在裝配中完成此操作。
希望這可以幫助。
Su Squares的程式碼包括這個塊:
/// @notice A distinct Uniform Resource Identifier (URI) for a given asset. /// @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC /// 3986. The URI may point to a JSON file that conforms to the "ERC721 /// Metadata JSON Schema". function tokenURI(uint256 _tokenId) external view mustBeValidToken(_tokenId) returns (string _tokenURI) { _tokenURI = "https://tenthousandsu.com/erc721/00000.json"; bytes memory _tokenURIBytes = bytes(_tokenURI); _tokenURIBytes[33] = byte(48+(_tokenId / 10000) % 10); _tokenURIBytes[34] = byte(48+(_tokenId / 1000) % 10); _tokenURIBytes[35] = byte(48+(_tokenId / 100) % 10); _tokenURIBytes[36] = byte(48+(_tokenId / 10) % 10); _tokenURIBytes[37] = byte(48+(_tokenId / 1) % 10); }
在這種方法中,URI 是動態計算的。您可以對 URI 使用類似的方法,這允許您將數組方法用於您自己的
mintUniqueTokensTo
函式。^ 這假設您正在使用中等數量的造幣廠操作。例如,OpenSea 最近引入了限制為 30 項的捆綁傳輸(請參見此處的其中之一)。如果您正在做比這更大的事情,您需要一個更具可擴展性的解決方案。我們可以討論這些,但這超出了這個問題的範圍。