如何在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
相关产品推荐
相关产品推荐

