如何从智能合约端点读取 Elrond NFT 属性
How to read Elrond NFT attributes from smartcontract endpoint
我有一个关于智能合约的设计问题。
我想创建一个处理 SFT 和 NFT 的端点,并且必须访问那里的属性来计算结果。
基本上,用户发送两个 NFT,并且根据它们的属性,它是否会收到一个新的 NFT。
在这两种情况下,我们 return 用户的 NFT。
在这种情况下,是否可以只向端点发送令牌标识符而不是 NFT(通过 payable)并直接从智能合约中检索 NFT 信息?
每次从智能合约发回 NFT 似乎是样板文件和 gaz 消耗
为了检索在属性字段中编码的数据,您必须将该数据解码回结构。
假设您定义了结构 YourStruct
,如下所示:
#[derive(NestedEncode, NestedDecode, TopEncode, TopDecode, TypeAbi)]
pub struct YourStruct<M: ManagedTypeApi> {
pub name: ManagedBuffer<M>,
pub timestamp: u64,
pub amount: BigUint<M>,
}
然后要检索它,在您的端点中您可以执行如下操作:
let nft_info = self.blockchain().get_esdt_token_data(
&self.blockchain().get_sc_address(),
&token_identifier,
token_nonce,
);
let attributes = nft_info.decode_attributes::<YourStruct<Self::Api>>()?;
关于你的第二个问题,我认为这取决于你的具体用例。但将这些 NFT 代币发送到您的合约被认为是最佳做法。
我有一个关于智能合约的设计问题。 我想创建一个处理 SFT 和 NFT 的端点,并且必须访问那里的属性来计算结果。 基本上,用户发送两个 NFT,并且根据它们的属性,它是否会收到一个新的 NFT。 在这两种情况下,我们 return 用户的 NFT。
在这种情况下,是否可以只向端点发送令牌标识符而不是 NFT(通过 payable)并直接从智能合约中检索 NFT 信息? 每次从智能合约发回 NFT 似乎是样板文件和 gaz 消耗
为了检索在属性字段中编码的数据,您必须将该数据解码回结构。
假设您定义了结构 YourStruct
,如下所示:
#[derive(NestedEncode, NestedDecode, TopEncode, TopDecode, TypeAbi)]
pub struct YourStruct<M: ManagedTypeApi> {
pub name: ManagedBuffer<M>,
pub timestamp: u64,
pub amount: BigUint<M>,
}
然后要检索它,在您的端点中您可以执行如下操作:
let nft_info = self.blockchain().get_esdt_token_data(
&self.blockchain().get_sc_address(),
&token_identifier,
token_nonce,
);
let attributes = nft_info.decode_attributes::<YourStruct<Self::Api>>()?;
关于你的第二个问题,我认为这取决于你的具体用例。但将这些 NFT 代币发送到您的合约被认为是最佳做法。