铸造 NFT 从智能合约需要几个关键步骤,下面是一个完整的指南:
基本步骤
-
选择区块链平台:通常是以太坊(Ethereum)或其他支持智能合约的区块链如 Polygon、BNB Chain 等
-
编写智能合约:
-
使用 ERC-721 或 ERC-1155 标准
-
实现 mint 函数
-
部署合约:
-
使用 Remix、Hardhat 或 Truffle 等工具
-
支付 gas 费部署到区块链
示例 ERC-721 合约代码
// SPDX-License-Identifier: MITpragma solidity ^0.8.0;import "@openzeppelin/contracts/token/ERC721/ERC721.sol";import "@openzeppelin/contracts/utils/Counters.sol";contract MyNFT is ERC721 { using Counters for Counters.Counter; Counters.Counter private _tokenIds; constructor() ERC721("MyNFT", "MNFT") {} function mintNFT(address recipient, string memory tokenURI) public returns (uint256) { _tokenIds.increment(); uint256 newItemId = _tokenIds.current(); _mint(recipient, newItemId); _setTokenURI(newItemId, tokenURI); return newItemId; }}
实际操作流程
设置开发环境:
安装 Node.js 和 npm/yarn
安装 Hardhat 或其他开发框架
编写和测试合约:
npm install @openzeppelin/contracts
部署合约:
// 部署脚本示例const hre = require("hardhat");async function main() { const MyNFT = await hre.ethers.getContractFactory("MyNFT"); const myNFT = await MyNFT.deploy(); await myNFT.deployed(); console.log("MyNFT deployed to:", myNFT.address);}
-
铸造 NFT:
-
调用合约的 mint 函数
-
提供接收者地址和元数据 URI
元数据存储
NFT 通常需要关联元数据,常见存储方式:
-
IPFS(推荐):去中心化存储
-
中心化服务器:简单但不持久
-
Arweave:永久存储解决方案
成本考虑
-
以太坊主网 gas 费较高
-
测试阶段可使用测试网(Rinkeby、Goerli 等)
-
生产环境可考虑 Layer 2 解决方案如 Polygon
安全注意事项
-
使用经过审计的标准合约(如 OpenZeppelin)
-
实现适当的访问控制
-
进行全面的测试
-
考虑重入攻击等安全风险