我有一个关于智能合约的设计问题。我想创建一个处理 SFT 和 NFT 的端点,并且必须访问那里的属性来计算结果。基本上,用户发送两个 NFT,并且取决于那里的属性,它将接收或不接收新的 NFT。在这两种情况下,我们都会返回用户的 NFT。
在这种情况下,是否可以只向端点发送令牌标识符而不是 NFT(通过支付)并直接从智能合约中检索 NFT 信息?每次从智能合约发回 NFT 似乎都是样板和消耗
我有一个关于智能合约的设计问题。我想创建一个处理 SFT 和 NFT 的端点,并且必须访问那里的属性来计算结果。基本上,用户发送两个 NFT,并且取决于那里的属性,它将接收或不接收新的 NFT。在这两种情况下,我们都会返回用户的 NFT。
在这种情况下,是否可以只向端点发送令牌标识符而不是 NFT(通过支付)并直接从智能合约中检索 NFT 信息?每次从智能合约发回 NFT 似乎都是样板和消耗
为了检索在属性字段中编码的数据,您必须将该数据解码回结构。
假设您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 代币发送到您的合约将被认为是最佳实践。