【问题标题】:Returning more than one value in a function of near protocol contract [closed]在近协议合约的函数中返回多个值[关闭]
【发布时间】:2020-11-26 21:59:00
【问题描述】:

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

   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 

【问题讨论】:

    标签: rust nearprotocol rust-wasm


    【解决方案1】:

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

    第二条路径需要在Product 上实现serde::Serialize。您可以在定义 Product 结构时使用派生来做到这一点。

    #[derive(serde::Serialize, serde::Deserialize)]
    pub struct Product {
    ...
    

    【讨论】:

      猜你喜欢
      • 2020-09-09
      • 2014-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      • 1970-01-01
      相关资源
      最近更新 更多