如何為 ERC1155 生成新令牌?
開發 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)
作為雜湊表。