Возврат нескольких значений в функции контракта, близкого к протоколу
Я пытаюсь вернуть две переменные в смарт-контракте ближнего протокола
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
Кроме того, можно ли вернуть структуру напрямую? например
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
повреждены из-за конфликтов префиксов или состояние контракта было повторно использовано из-за повторного развертывания.
Второй путь требует serde::Serialize
будет реализовано на Product
. Вы можете сделать это с помощью derive при определенииProduct
структура.
#[derive(serde::Serialize, serde::Deserialize)]
pub struct Product {
...