NEAR FunctionCall `args` 字段
NEAR FunctionCall `args` field
在near_primitives::views
中,FunctionCall
上的args
字段表示为String
类型。从链数据模型 transaction::Action::FunctionCall
,它的 args
字段有一个`Vec.
问题是,这个 args
字段是否总是包含一个有效的 JSON 负载作为内容?我们假设答案可能是 No
,因为基础字段包含纯字节。
在什么情况下这是一个有效的 JSON 字符串,在什么情况下它是二进制格式?
最后,如果二进制格式是可能的(可能),如何解码它?这是在开发人员手中,可以是任何二进制格式吗?
见
在大多数情况下 args
将是 base64 编码的 JSON 字符串。
这是我们如何在浏览器端的 NEAR 索引器上解码它们的示例。
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;
}
}
Is this in developers hand and could be any binary format?
是的。
与 Rainbow Bridge 相关的交易具有无法解码为 JSON 的 borsh 序列化参数。
参考:https://github.com/near/near-indexer-for-explorer/blob/master/src/models/serializers.rs#L94-L103
args
根本不限于任何格式,它们只是二进制 blob。您在 views.rs
中看到的是部分序列化数据,其中 args
are expected to be in base64 encoding 因此它是一个 String
(因此,它始终是 base64 数据;无论是 JSON,Borsh 序列化数据,或只是原始二进制 blob,例如 PNG 图像)
在near_primitives::views
中,FunctionCall
上的args
字段表示为String
类型。从链数据模型 transaction::Action::FunctionCall
,它的 args
字段有一个`Vec.
问题是,这个 args
字段是否总是包含一个有效的 JSON 负载作为内容?我们假设答案可能是 No
,因为基础字段包含纯字节。
在什么情况下这是一个有效的 JSON 字符串,在什么情况下它是二进制格式?
最后,如果二进制格式是可能的(可能),如何解码它?这是在开发人员手中,可以是任何二进制格式吗?
见
在大多数情况下 args
将是 base64 编码的 JSON 字符串。
这是我们如何在浏览器端的 NEAR 索引器上解码它们的示例。
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;
}
}
Is this in developers hand and could be any binary format?
是的。
与 Rainbow Bridge 相关的交易具有无法解码为 JSON 的 borsh 序列化参数。
参考:https://github.com/near/near-indexer-for-explorer/blob/master/src/models/serializers.rs#L94-L103
args
根本不限于任何格式,它们只是二进制 blob。您在 views.rs
中看到的是部分序列化数据,其中 args
are expected to be in base64 encoding 因此它是一个 String
(因此,它始终是 base64 数据;无论是 JSON,Borsh 序列化数据,或只是原始二进制 blob,例如 PNG 图像)