NEAR FunctionCall поле `args`
в
near_primitives::views
, поле на
FunctionCall
представлен как
String
тип. Из модели данных цепочки, которая
transaction::Action::FunctionCall
, в его поле есть `Vec.
Вопрос в том, неужели это
args
поле всегда будет содержать допустимую полезную нагрузку JSON в качестве содержимого? Мы предполагаем, что ответ, вероятно,
No
поскольку базовое поле содержит чистые байты.
В каких обстоятельствах это будет допустимая строка JSON, а в каких - в двоичном формате?
Наконец, если двоичный формат возможен (вероятно), как его декодировать? Это в руках разработчиков и может ли быть любой двоичный формат?
Видеть
2 ответа
В большинстве случаев
args
будет строка JSON в кодировке base64.
Вот пример того, как мы декодируем их на стороне NEAR Indexer for Explorer.
ActionView::FunctionCall {
method_name,
args,
gas,
deposit,
} => {
if let Ok(decoded_args) = base64::decode(args) {
if let Ok(mut args_json) = serde_json::from_slice(&decoded_args) {
escape_json(&mut args_json);
arguments["args_json"] = args_json;
}
}
Это в руках разработчиков и может ли быть любой двоичный формат?
да.
Транзакции, связанные с Радужным мостом, имеют аргументы, сериализованные через борщ, которые невозможно декодировать в JSON.
ссылка: https://github.com/near/near-indexer-for-explorer/blob/master/src/models/serializers.rs#L94-L103
вообще не ограничены каким-либо форматом, они просто двоичные капли. Что вы видите в
views.rs
частично сериализованные данные, где args
ожидается, что они будут в кодировке base64, поэтому это
String
(таким образом, это всегда данные base64; будь то JSON, сериализованные данные по Борше или просто необработанный двоичный объект, например изображение PNG)