Contract-Development

如何為 ERC1155 生成新令牌?

  • August 4, 2021

開發 ERC1155 合約,如何為新代幣生成地址?

我需要創建一個 API 函式,例如function createToken() returns (address). 如何?

我應該只使用從 1 開始的遞增值嗎?

我需要創建一個 API 函式,如函式 createToken() 返回(地址)。

您應該返回 a uint256(而不是address),因為 ERC1155 中的代幣由 id 表示:這些代幣不是具有地址的合約。

我應該只使用從 1 開始的遞增值嗎?

是的,這就是 ERC1155 的參考實現所做的。(第一個_id是 1,只是增加 1。)

// Creates a new token type and assings _initialSupply to minter
function create(uint256 _initialSupply, string calldata _uri) external returns(uint256 _id) {

   _id = ++nonce;
   creators[_id] = msg.sender;
   balances[_id][msg.sender] = _initialSupply;

   // Transfer event with mint semantic
   emit TransferSingle(msg.sender, address(0x0), msg.sender, _id, _initialSupply);

   if (bytes(_uri).length > 0)
       emit URI(_uri, _id);
}

參考實現在列出的 ERC1155 參考中:https ://github.com/ethereum/EIPs/blob/master/EIPS/eip-1155.md#references

起初eip1155的介面沒有你提供的方法。我們需要使用一些介面或合約實例來創建新的,但是通過這個協議必須可以添加任何合約。(通用介面不存在)

如何為新令牌生成地址?

讓我們看看,所有合約在發佈時都會獲得地址。如果你通過另一個合約來做這件事,它將被創建為內部交易(不是官方的乙太坊節點只檢測到)。

我需要創建一個 API 函式,例如function createToken() returns (address). 如何?

也許做這樣的功能addToken(address _token) public hasRights() returns (id);。通過 web3 部署合約,然後在回調中呼叫你的方法: (instContract) => instERC1155.addToken(instContract.options.address) .send({ gas: 0x, gasPrice: 0x, from: 0x })

我應該只使用從 1 開始的遞增值嗎?

是的,您可以使用安全儲存模式 +mapping (id => address)作為雜湊表。

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