做法
建立專案。
1 2
| mkdir eth-erc-1155 cd eth-erc-1155
|
初始化 Truffle 專案。
修改 truffle-config.js
檔。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| module.exports = { networks: { development: { host: '127.0.0.1', port: 7545, network_id: '*', }, }, compilers: { solc: { version: '0.8.13', }, }, };
|
新增 .gitignore
檔。
1 2 3
| /node_modules /build .env
|
新增 ERC1155NFT.sol
檔。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| // SPDX-License-Identifier: MIT pragma solidity ^0.8.13;
import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155URIStorage.sol"; import "@openzeppelin/contracts/utils/Strings.sol";
contract ERC1155NFT is ERC1155URIStorage, Ownable { mapping(address => uint8) balances;
uint256 tokenCount = 0;
constructor() ERC1155("") {}
function mintNFT(string memory _tokenURI) public returns (uint256) { require(balances[msg.sender] < 100); balances[msg.sender]++; tokenCount++; _mint(msg.sender, tokenCount, 10, ""); _setURI(tokenCount, string(abi.encodePacked(_tokenURI, Strings.toString(tokenCount)))); return tokenCount; } }
|
新增 migrations/2_deploy_contracts.js
檔。
1 2 3 4 5
| const ERC1155NFT = artifacts.require("ERC1155NFT");
module.exports = (deployer) => { deployer.deploy(ERC1155NFT); };
|
執行部署。