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)

Другие вопросы по тегам