如何从智能合约端点读取 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 代币发送到您的合约被认为是最佳做法。