如何获取ESDT对应NFT品牌下全量NFT列表及通过rust SDK批量发EGLD
解答内容
概念澄清:NFT品牌与ESDT的区别
你所说的NFT品牌就是链上的NFT Collection,它不等同于ESDT,但是属于ESDT标准体系的一部分:ESDT是MultiversX链的原生代币标准,覆盖了同质化代币、半同质化代币、NFT、MetaESDT等多种代币类型,NFT Collection本质是标记了NonFungible属性的特殊ESDT品类,每一枚单独的NFT都是该Collection下带有唯一nonce编号的具体实例。
获取指定Collection下所有已发行NFT的方法
你可以直接通过链上节点的查询接口,过滤你创建的Collection的唯一标识符,拉取该标识符下所有带有有效nonce的NFT实例即可。如果是你自己发行的Collection,也可以直接遍历你发行时生成的所有nonce编号,每个编号对应唯一NFT。
Rust SDK 编程获取NFT列表的实现
使用MultiversX Rust SDK操作时,核心逻辑是调用网关的账户代币查询接口,按Collection标识符筛选即可,参考代码片段如下:
use multiversx_sdk::gateway::GatewayProxy; use multiversx_sdk::wallet::Address; async fn fetch_collection_nfts( collection_identifier: &str, collection_owner: &Address ) -> Result<Vec<EsdtToken>, Box<dyn std::error::Error>> { // 初始化网关,网关地址替换为你使用的节点地址即可 let gateway = GatewayProxy::new("替换为你的MultiversX网关地址".to_string()); let all_owner_tokens = gateway.get_account_esdts(collection_owner).await?; // 筛选对应Collection的NFT实例 let collection_nfts = all_owner_tokens .into_iter() .filter(|token| { token.token_identifier == collection_identifier && token.token_type == "NonFungible" }) .collect(); Ok(collection_nfts) }
其中collection_identifier就是你创建NFT品牌时生成的唯一串号,格式一般为XXX-abc123。
批量给NFT持有者发送EGLD的高效方案
最高效的实现是用MultiversX原生支持的批量转账功能,比单独逐笔发交易的成本和耗时低一个数量级:
- 先从你获取到的NFT列表中,提取每枚NFT的当前持有者地址,先做去重处理,避免给同一地址重复转账
- 把去重后的地址列表按每100个一组拆分,这是单笔批量转账支持的最大地址数
- 每组构造一笔批量EGLD转账交易,单组交易仅需支付一次基础gas费,确认速度和单笔转账完全一致。
内容的提问来源于stack exchange,提问作者Moebius
相关产品推荐
相关产品推荐

