// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
import "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155URIStorage.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol";
contract MyToken is ERC1155, ERC1155URIStorage, Ownable, ERC1155Supply {
constructor() ERC1155("") {}
function mint(address account, uint256 id, uint256 amount, bytes memory data)
public
onlyOwner
{
_mint(account, id, amount, data);
}
function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
public
onlyOwner
{
_mintBatch(to, ids, amounts, data);
}
// The following functions are overrides required by Solidity.
function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
internal
override(ERC1155, ERC1155Supply)
{
super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
}
}
我在remix....any帮助中得到了这个错误?
发布于 2022-09-16 13:03:03
首先,ERC1155URIStorage和ERC1155Supply继承了ERC1155,因此不需要将ERC1155声明为MyToken合同的另一个父级。
发生此错误是因为ERC1155URIStorage和ERC1155 (通过附加声明和通过ERC1155Supply导入)都定义了具有相同签名的函数:
function uri(uint256 tokenId) public view virtual override returns (string memory)为了解决这个问题,您可能需要再次重写函数,以防您真的需要ERC1155Supply扩展。
function uri(uint256 tokenId) public view override(ERC1155, ERC1155URIStorage) returns (string memory) {
return ERC1155URIStorage.uri(tokenId);
}https://ethereum.stackexchange.com/questions/131078
复制相似问题