#rust #substrate #polkadot-js
#Ржавчина #подложка #polkadot-js
Вопрос:
У меня есть вопрос относительно интерфейса polkadot.js api. Предположим, у меня есть структура
pub struct B {
b: i32,
}
pub struct A {
a: Vec<u8>,
b: B,
}
Я хочу закодировать структуру A в массив байтов, а затем передать ее в вызове отправки субстрата, затем я декодирую ее из массива байтов. Что такое API для достижения этого?
Короче говоря:
frontend in polkadot.js api: encode structure to Vec<u8>
backend in substrate module dispatch call: decode Vec<u8> back to struct.
Я не нашел соответствующих API и примеров на polkadot.js документ. Спасибо!
Комментарии:
1. Насколько я знаю, в серверной части (узел на основе субстрата) они рассматриваются
custom types
. При подключении к вашему api (во внешнем интерфейсе) вам необходимо передать определение пользовательского типа, чтобы polkadot-js знал, как его декодировать и кодировать, когда вы отправляете его в цепочку. посмотрите здесь и здесь2. Я знаю, как использовать пользовательские типы. Причина, по которой я хочу кодировать / декодировать самостоятельно, заключается в том, что будет сложно вставить структуру во ввод внешнего вызова. Итак, мой план состоит в том, чтобы использовать вспомогательную функцию (в js) для непосредственного кодирования структуры в Vec<u8>
3. хм, я думаю, вам нужно ее сериализовать, я задавал тот же вопрос, желая сохранить строку json, а затем использовать ее для сборки Vec<u8>, против чего все они (ребята из parity) советовали. для пользовательских вещей я использую
stringToU8a
вспомогательную функцию JSON.stringify then изimport { stringToU8a } from '@polkadot/util'
. если я не ошибаюсь, если вы закодируете это с помощьюstringToHex
того же пакета, вы можете декодировать его на серверной части и получить Vec<u8>, поскольку это именно Uin8Array в js4. Это кажется многообещающим. Если я правильно понимаю: struct -> string (используя JSON.stringify), string -> bytearray (используя stringToU8a). Для ее декодирования какую библиотеку rust мне следует использовать?
5. хм, не уверен насчет serde. насколько я знаю, она не
no-std
совместима с wasm. я думаю, вы можете подождать, пока ребята из parity не возьмут это на себя, или вы можете спросить по общедоступному каналу matrix.