структура кодирования в polkadot.js api

#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 в js

4. Это кажется многообещающим. Если я правильно понимаю: struct -> string (используя JSON.stringify), string -> bytearray (используя stringToU8a). Для ее декодирования какую библиотеку rust мне следует использовать?

5. хм, не уверен насчет serde. насколько я знаю, она не no-std совместима с wasm. я думаю, вы можете подождать, пока ребята из parity не возьмут это на себя, или вы можете спросить по общедоступному каналу matrix.