2

我有一个关于智能合约的设计问题。我想创建一个处理 SFT 和 NFT 的端点,并且必须访问那里的属性来计算结果。基本上,用户发送两个 NFT,并且取决于那里的属性,它将接收或不接收新的 NFT。在这两种情况下,我们都会返回用户的 NFT。

在这种情况下,是否可以只向端点发送令牌标识符而不是 NFT(通过支付)并直接从智能合约中检索 NFT 信息?每次从智能合约发回 NFT 似乎都是样板和消耗

4

1 回答 1

3

为了检索在属性字段中编码的数据,您必须将该数据解码回结构。

假设您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 代币发送到您的合约将被认为是最佳实践。

于 2021-11-29T17:27:48.310 回答