在近协议合约的函数中返回多个值[关闭]
Posted
技术标签:
【中文标题】在近协议合约的函数中返回多个值[关闭]【英文标题】: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
【问题讨论】:
【参考方案1】:您的第一条路径应该可以正常工作。 Cannot deserialize value with Borsh
可能来自 product_map
由于前缀冲突而损坏,或者合约状态由于重新部署而被重用。
第二条路径需要在Product
上实现serde::Serialize
。您可以在定义 Product
结构时使用派生来做到这一点。
#[derive(serde::Serialize, serde::Deserialize)]
pub struct Product
...
【讨论】:
以上是关于在近协议合约的函数中返回多个值[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
当我想查看智能合约函数的返回值时,为啥需要 .call()?
使用 PyQt5“更新”从具有多个参数的函数中销毁返回值 [关闭]