title: 'erc 1155 合約' date: '2023-01-08' tag: ['notes', 'solidity']
ERC 721
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
contract MyToken is ERC721, ERC721URIStorage, Ownable {
using Counters for Counters.Counter;
Counters.Counter private _tokenIdCounter;
constructor() ERC721("MyToken", "MTK") {}
function safeMint(address to, string memory uri) public onlyOwner {
uint256 tokenId = _tokenIdCounter.current();
_tokenIdCounter.increment();
_safeMint(to, tokenId);
_setTokenURI(tokenId, uri);
}
// The following functions are overrides required by Solidity.
function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
super._burn(tokenId);
}
function tokenURI(uint256 tokenId)
public
view
override(ERC721, ERC721URIStorage)
returns (string memory)
{
return super.tokenURI(tokenId);
}
function supportsInterface(bytes4 interfaceId)
public
view
override(ERC721, ERC721URIStorage)
returns (bool)
{
return super.supportsInterface(interfaceId);
}
}
- safemint
- to:自己address, uri: https://alanhc.github.io/nft/opensea-example.json 就可以在 testnet opensea看到 其實也可以不用一個一個設置:可以直接設置baseuri :https://ethereum.stackexchange.com/questions/122404/best-way-to-set-metadata-in-erc721-contract-on-production
erc 1155
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract MyToken is ERC1155, Ownable {
uint256 public constant Rock = 1;
uint256 public constant Paper = 2;
uint256 public constant Scissors = 3;
constructor() ERC1155("https://alanhc.github.io/nft/erc-1155/{id}.json") {
_mint(msg.sender, Rock, 1, "");
_mint(msg.sender, Paper, 1, "");
_mint(msg.sender, Scissors, 1, "");
}
function setURI(string memory newuri) public onlyOwner {
_setURI(newuri);
}
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);
}
}
註記:mint data要設定 0x0000000000000000000000000000000000000000000000000000000000000000