#elrond
#элронд
Вопрос:
Я пытаюсь получить данные одной структуры и данные списка этой структуры в методах просмотра в смарт-контракте. Структура будет выглядеть примерно так:
#[derive(NestedEncode, NestedDecode, TopEncode, TopDecode, TypeAbi, Clone)] pub struct Streamlt;M: ManagedTypeApigt; { pub id: u64, pub payment: BigUintlt;Mgt;, pub enddate: u64, pub receiver: ManagedAddresslt;Mgt;, }
Один вид был бы похож на:
#[view(getStream)] fn get_stream(amp;self, id: u64) -gt; Streamlt;Self::Apigt; { let payment = self.payment( id.clone() ).get().clone(); let enddate = self.enddate( id.clone() ).get().clone(); let receiver = self.receiver( id.clone() ).get().clone(); Stream { id, payment, enddate, receiver, } }
в тестах мандоса я ожидал бы чего-то вроде:
"expect": { "out": [ "u64:1", "100,000,000,000", "u64:200,000", "address:my_address" ] ],
но в тесте я всегда получаю некодированный байтовый результат, такой как:
Want: ["u64:1", "100,000,000,000", "u64:200,000", "address:my_address"]. Have: [0x000000000000000100000005174876e8000000000000030d406d795f616464726573735f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f]
Я также пробовал различные типы возврата , такие как ManagedMultiResultVec
, ManagedMultiResultVec
или MultiResult
с ManagedVec
в целом. Но, похоже, все это дает мне такой результат.
Я также не смог выяснить, как я могу получить и декодировать такой результат в DApp в машинописном виде с помощью библиотеки erdjs.
Может ли кто-нибудь сказать мне, что я пропустил?
Ответ №1:
В мандосе вы должны ожидать этого как вне:
["u64:1|biguint:100,000,000,000|u64:200,000|address:my_address"]
Или
{ "0id": "u64:1", "1payment": "biguint:100,000,000,000", "2enddate": "u64:200,000", "3receiver": "address:my_address" }
Я думаю, что это должно быть правильно.
И в Dapp вам нужен файл ABI контракта, и вам нужно сделать что-то вроде:
const result = ...; // do transaction here const abi = await SmartContractAbi.fromAbiPath('...abi.json'); result.setEndpointDefinition(abi.getEndpoint('get_stream')); console.log(result.unpackOutput());
Оттуда вы сможете понять, как преобразовать результат.
Комментарии:
1. сработало лике обаяние. ты герой 🙂