mcpField
N
nft-development

nft-development

github.com/pluginagentmarketplace开发144 次安装42 周前更新
代码仓库

关于 nft-development

这项技能提供 NFT 开发指导,涵盖代币标准、元数据、市场集成和链上生成艺术,面向设计并构建 NFT 合约与系列的开发者。

主要功能

  1. 01比较 ERC-721、ERC-721A、ERC-1155 和 DN404
  2. 02设计 NFT 元数据
  3. 03介绍 OpenSea 与版税
  4. 04生成链上 SVG 艺术
  5. 05说明 Gas 优化与常见问题

适用场景

  1. 01为 NFT 系列选择代币标准
  2. 02设计 NFT 元数据结构
  3. 03为合约添加版税支持
  4. 04排查元数据与铸造问题

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/pluginagentmarketplace/custom-plugin-blockchain --skill nft-development

安装后在 Claude Code 中输入/nft-development确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/
config.yaml
schema.json
references/
GUIDE.md
PATTERNS.md
scripts/
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-721APFP 藏品~100k~120k
ERC-1155游戏物品~50k~80k

常见问题

问题原因解决方案
元数据未显示tokenURI 错误验证 JSON,检查 CORS
Gas 过高使用标准 ERC-721批量铸造时使用 ERC-721A
未支付版税市场忽略版税使用 operator filter
揭晓失败base URI 错误先在测试网上测试

故障排除

“OpenSea 上未显示元数据”
  1. 确认 tokenURI 返回有效 JSON
  2. 检查 IPFS 网关是否可访问
  3. 通过 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.02025-01面向生产级,包含标准和链上功能
1.0.02024-12初始发布

评论

支持 Markdown