You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NEAR区块链上设置NFT价格以符合NEP 171标准规范?

NEP-171标准下NFT价格字段设置方案(基于near-contract-standards)

基础说明

NEP-171标准本身没有强制定义价格字段的存储规则,标准内置的TokenMetadata结构体预留了extra字段用于存放自定义扩展内容,价格信息可以序列化后存入该字段,完全符合NEP-171的兼容性要求。

实现步骤

  • 引入依赖:确保合约中导入near-contract-standards的NFT相关模块
    use near_contract_standards::non_fungible_token::metadata::TokenMetadata;
    use near_sdk::json_types::U128;
    
  • 构造带价格的元数据
    价格统一用yoctoNEAR为单位(1 NEAR = 1e24 yoctoNEAR),避免合约内精度损失,序列化为JSON字符串后存入extra字段:
    // 示例:定价为1 NEAR
    let price_yocto = U128(1_000_000_000_000_000_000_000_000);
    // 序列化到extra字段
    let extra_content = serde_json::json!({
        "price": price_yocto.to_string()
    }).to_string();
    
    // 构造标准TokenMetadata实例
    let nft_metadata = TokenMetadata {
        title: Some("示例NFT".to_string()),
        description: Some("NFT描述信息".to_string()),
        media: Some("ipfs://你的资源CID".to_string()),
        extra: Some(extra_content),
        // 其余可选字段按业务需求赋值,无值则设为None
        media_hash: None,
        copies: Some(1),
        issued_at: None,
        expires_at: None,
        starts_at: None,
        updated_at: None,
        reference: None,
        reference_hash: None,
    };
    
  • 调用铸造方法
    直接使用near-contract-standards提供的nft_mint方法传入构造好的元数据即可完成铸造:
    // 参数依次为:NFT唯一ID、接收者账户ID、元数据实例
    nft_mint("token_001".to_string(), "owner.near".parse().unwrap(), nft_metadata);
    

优化建议

  • 如果后续需要频繁读取价格用于交易逻辑,建议在合约存储中额外维护token_id -> U128的独立价格映射,避免每次都需要解析extra字段的JSON字符串,降低gas开销。
  • 价格更新时需要同步修改extra字段内容和独立存储的价格值,保证公开元数据和合约逻辑用数据的一致性。

内容的提问来源于stack exchange,提问作者Dmytro Soltusyuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 09:57:01