2

我正在尝试在近协议智能合约中返回两个变量

   pub fn get_product(&self, product_id: u128) -> (String, bool) {
        let product = self.product_map.get(&product_id).unwrap();
        (product.product_details_hash, product.product_expired)
    }

Javascript代码:

let hash = await nearcontract.contract.get_product({ product_id: 1 })

它给出了一个错误

Cannot deserialize value with Borsh

另外,是否可以直接返回 struct ?例如

 pub fn get_product(&self, product_id: u128) -> Product {
        let product = self.product_map.get(&product_id).unwrap();
        product
    }

它也给出了错误:

the trait `avrit::create_profile::_IMPL_SERIALIZE_FOR_Input::_serde::Serialize` is not implemented for `avrit::avritstructs::Product 
4

1 回答 1

2

您的第一条路径应该可以正常工作。这Cannot deserialize value with Borsh可能是product_map由于前缀冲突而损坏,或者合同状态由于重新部署而被重用。

第二条路径需要serde::SerializeProduct. 您可以在定义Product结构时使用派生来执行此操作。

#[derive(serde::Serialize, serde::Deserialize)]
pub struct Product {
...
于 2020-08-06T15:48:36.017 回答