关于 nft-development
这项技能提供 NFT 开发指导,涵盖代币标准、元数据、市场集成和链上生成艺术,面向设计并构建 NFT 合约与系列的开发者。
主要功能
- 01比较 ERC-721、ERC-721A、ERC-1155 和 DN404
- 02设计 NFT 元数据
- 03介绍 OpenSea 与版税
- 04生成链上 SVG 艺术
- 05说明 Gas 优化与常见问题
适用场景
- 01为 NFT 系列选择代币标准
- 02设计 NFT 元数据结构
- 03为合约添加版税支持
- 04排查元数据与铸造问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ pluginagentmarketplace/ custom-plugin-blockchain --skill nft-development安装后在 Claude Code 中输入/nft-development确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/config.yamlschema.jsonreferences/GUIDE.mdPATTERNS.mdscripts/validate.py详细介绍
NFT 开发技能
通过代币标准、元数据设计、市场集成和链上生成艺术,掌握 NFT 开发。
快速开始
# Invoke this skill for NFT development
Skill("nft-development", topic="standards", standard="ERC721A")
涵盖主题
1. 代币标准
选择合适的标准:
- ERC-721:标准 NFT,每个 ID 对应一个代币
- ERC-721A:针对批量铸造优化 Gas
- ERC-1155:多代币、半同质化代币
- DN404:可拆分 NFT 混合标准
2. 元数据设计
构建 NFT 数据:
- 链上:Base64 JSON、SVG
- IPFS:基于内容寻址的存储
- Arweave:永久存储
- 动态:不断演变的特征
3. 市场集成
上架并出售 NFT:
- OpenSea:Seaport 协议
- 版税:EIP-2981
- Operator Filter:版税执行
- 藏品验证:元数据标准
4. 链上艺术
使用 Solidity 生成艺术:
- SVG 生成:动态形状
- 基于种子:确定性随机性
- 特征:稀有度分布
- Base64:Data URI 编码
代码示例
ERC-721A 铸造
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import "erc721a/contracts/ERC721A.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract MyNFT is ERC721A, Ownable {
uint256 public constant MAX_SUPPLY = 10000;
uint256 public constant PRICE = 0.08 ether;
error MaxSupplyReached();
error InsufficientPayment();
constructor() ERC721A("MyNFT", "MNFT") Ownable(msg.sender) {}
function mint(uint256 quantity) external payable {
if (_totalMinted() + quantity > MAX_SUPPLY) revert MaxSupplyReached();
if (msg.value < PRICE * quantity) revert InsufficientPayment();
_mint(msg.sender, quantity);
}
function _startTokenId() internal pure override returns (uint256) {
return 1;
}
}
链上 SVG
function tokenURI(uint256 tokenId) public view returns (string memory) {
uint256 seed = seeds[tokenId];
string memory svg = string(abi.encodePacked(
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400">',
'<rect width="400" height="400" fill="#', _getColor(seed), '"/>',
'<circle cx="200" cy="200" r="80" fill="#', _getColor(seed >> 24), '"/>',
'</svg>'
));
string memory json = string(abi.encodePacked(
'{"name":"Art #', tokenId.toString(),
'","image":"data:image/svg+xml;base64,', Base64.encode(bytes(svg)), '"}'
));
return string(abi.encodePacked(
"data:application/json;base64,",
Base64.encode(bytes(json))
));
}
EIP-2981 版税
import "@openzeppelin/contracts/token/common/ERC2981.sol";
contract NFTWithRoyalty is ERC721A, ERC2981 {
constructor() {
_setDefaultRoyalty(msg.sender, 500); // 5%
}
function supportsInterface(bytes4 interfaceId)
public view override(ERC721A, ERC2981)
returns (bool)
{
return super.supportsInterface(interfaceId);
}
}
元数据架构
ERC-721 标准
{
"name": "Cool NFT #1",
"description": "A very cool NFT",
"image": "ipfs://QmXxx.../1.png",
"animation_url": "ipfs://QmXxx.../1.mp4",
"external_url": "https://example.com/1",
"attributes": [
{ "trait_type": "Background", "value": "Blue" },
{ "trait_type": "Rarity", "value": "Legendary" },
{ "display_type": "number", "trait_type": "Power", "value": 100 }
]
}
标准对比
| 标准 | 最适用于 | Gas(铸造 1 个) | Gas(铸造 5 个) |
|---|---|---|---|
| ERC-721 | 简单 NFT | ~100k | ~500k |
| ERC-721A | PFP 藏品 | ~100k | ~120k |
| ERC-1155 | 游戏物品 | ~50k | ~80k |
常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 元数据未显示 | tokenURI 错误 | 验证 JSON,检查 CORS |
| Gas 过高 | 使用标准 ERC-721 | 批量铸造时使用 ERC-721A |
| 未支付版税 | 市场忽略版税 | 使用 operator filter |
| 揭晓失败 | base URI 错误 | 先在测试网上测试 |
故障排除
“OpenSea 上未显示元数据”
- 确认 tokenURI 返回有效 JSON
- 检查 IPFS 网关是否可访问
- 通过 API 刷新元数据:
curl "https://api.opensea.io/api/v2/chain/ethereum/contract/{addr}/nfts/{id}/refresh"
“批量铸造耗尽 Gas”
- 使用 ERC-721A 代替 ERC-721
- 将每笔交易的批次大小限制为 10-20 个
“未执行版税”
实现 operator filter:
import "operator-filter-registry/src/DefaultOperatorFilterer.sol";
function setApprovalForAll(address op, bool approved)
public override onlyAllowedOperatorApproval(op)
{
super.setApprovalForAll(op, approved);
}
Gas 优化
| 技术 | 节省量 |
|---|---|
| ERC721A 批处理 | 批量操作可节省约 80% |
| Merkle 白名单 | 比 mapping 节省约 50% |
| 紧凑存储 | 每个存储槽约节省 20k |
| 自定义错误 | 每个错误约节省 200 |
交叉引用
- 绑定 Agent:
07-nft-development - 相关技能:
solidity-development、web3-frontend
资源
- ERC-721:eips.ethereum.org/EIPS/eip-721
- ERC-721A:erc721a.org
- OpenSea 元数据:docs.opensea.io/docs/metadata-standards
版本历史
| 版本 | 日期 | 变更 |
|---|---|---|
| 2.0.0 | 2025-01 | 面向生产级,包含标准和链上功能 |
| 1.0.0 | 2024-12 | 初始发布 |
评论
支持 Markdown