使用 Solidity 和 Truffle 在 Ethereum 區塊鏈開發 ERC-1155 智能合約

做法

建立專案。

1
2
mkdir eth-erc-1155
cd eth-erc-1155

初始化 Truffle 專案。

1
truffle init

修改 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);
};

執行部署。

1
truffle migrate