ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

cleos convert unpack_transaction 命令详解:将打包交易还原为明文签名 JSON

cleos convert unpack_transaction 命令详解:将打包交易还原为明文签名 JSON 区块链【免费下载链接】eosAn open source smart contract platform项目地址https://gitcode.com/gh_mirrors/eo/eos点击查看免费下载cleos convert unpack_transaction是 EOSeosio 开源智能合约平台客户端工具 cleos 中convert子命令族的一员用于把网络上传输的打包交易packed transactionJSON 还原为人类可读的明文签名交易 JSON是调试交易、核对签名数据与检查链上交易内容的实用工具。读完本文你将掌握该命令的完整语法、参数含义、输入输出格式以及其底层基于packed_transaction_v0的反序列化解包原理并能与pack_transaction等配套命令组合使用。命令概述packed 与 plain 两种形态在 EOS 网络协议中一笔已签名交易在节点间传播、入库和落盘时通常以紧凑打包packed形态存在签名列表、压缩方式、打包后的交易体packed_trx与打包后的上下文无关数据packed_context_free_data以十六进制字符串承载便于高效传输与存储。而开发者阅读、调试交易时需要的是展开后的明文签名 JSONplain signed JSON其中包含expiration、ref_block_num、actions等可读字段。unpack_transaction正是完成这一由密到明转换的命令它是cleos convert子命令族pack_transaction、unpack_transaction、pack_action_data、unpack_action_data中与 pack_transaction 互逆的一环整体族命令概览见 convert 命令索引。命令语法与参数cleos convert unpack_transaction transaction [--unpack-action-data]位置参数Positionals参数类型说明transactionTEXT打包交易 JSON即包含packed_trx字段、可选包含compression等字段的 JSON 字符串必填选项Options选项说明-h, --help打印帮助信息并退出--unpack-action-data解包交易内的全部 action data需要与nodeos交互用于获取合约 ABI使用示例完整命令实战直接传入一个打包交易 JSON 字符串即可完成解包cleos convert unpack_transaction { signatures: [ SIG_K1_KmRbWahefwxs6uyCGNR6wNRjw7cntEeFQhNCbyg8S92Kbp7zdSSVGTD2QS7pNVWgcU126zpxaBp9CwUxFpRwSnfkjd46bS ], compression: none, packed_context_free_data: , packed_trx: 8468635b7f379feeb95500000000010000000000ea305500409e9a2264b89a010000000000ea305500000000a8ed3232660000000000ea305500a6823403ea30550100000001000240cc0bf90a5656c8bb81f0eb86f49f89613c5cd988c018715d4646c6bd0ad3d8010000000100000001000240cc0bf90a5656c8bb81f0eb86f49f89613c5cd988c018715d4646c6bd0ad3d80100000000 }输入 JSON 中的各字段含义如下signatures已附加到交易上的签名列表SIG_K1_前缀表明使用 K1 曲线签名compression交易体的压缩方式取值为none或zlib对应源码packed_transaction_v0::compression_type枚举见 libraries/chain/include/eosio/chain/transaction.hpppacked_context_free_data打包后的上下文无关数据context-free data十六进制串此处为空packed_trx按二进制协议序列化后的交易体十六进制串是解包的主体。输出结果逐字段解析命令执行后将输出如下明文签名交易 JSON{ expiration: 2018-08-02T20:24:36, ref_block_num: 14207, ref_block_prefix: 1438248607, max_net_usage_words: 0, max_cpu_usage_ms: 0, delay_sec: 0, context_free_actions: [], actions: [{ account: eosio, name: newaccount, authorization: [{ actor: eosio, permission: active } ], data: 0000000000ea305500a6823403ea30550100000001000240cc0bf90a5656c8bb81f0eb86f49f89613c5cd988c018715d4646c6bd0ad3d8010000000100000001000240cc0bf90a5656c8bb81f0eb86f49f89613c5cd988c018715d4646c6bd0ad3d801000000 } ], transaction_extensions: [], signatures: [ SIG_K1_KmRbWahefwxs6uyCGNR6wNRjw7cntEeFQhNCbyg8S92Kbp7zdSSVGTD2QS7pNVWgcU126zpxaBp9CwUxFpRwSnfkjd46bS ], context_free_data: [] }各输出字段对应交易头与交易体的组成部分类型定义见 libraries/chain/include/eosio/chain/transaction.hppexpiration交易过期时间time_point_sec超过该时间后交易不再允许被打包进区块ref_block_num/ref_block_prefix参考区块号与参考区块 ID 低 32 位用于防重放max_net_usage_words本交易网络带宽用量上限按 8 字节字为单位计数max_cpu_usage_ms本交易 CPU 用量上限毫秒delay_sec延迟交易秒数延迟期内可被取消context_free_actions上下文无关动作列表本例为空actions动作列表本例为一次eosio::newaccount建号动作authorization指明由eosioactive授权data为动作参数的打包十六进制数据transaction_extensions交易扩展字段signatures签名列表与输入保持一致context_free_data解包后的上下文无关数据数组每个上下文无关动作对应一项。--unpack-action-data连动作参数一起解码默认情况下unpack_transaction只还原交易结构动作data仍以十六进制字符串呈现。若希望将data进一步解码为可读的 JSON 参数对象需加上--unpack-action-data选项cleos convert unpack_transaction packed transaction json --unpack-action-data该选项要求 cleos 与nodeos建立连接以获取合约 ABI才能把data字节流按 ABI 解码为字段化的 JSON。从源码实现看这一分支正是通过abi_serializer::to_variant完成的见 programs/cleos/main.cpp。底层原理packed_transaction_v0 的解包路径cleos 侧的反序列化调用链unpack_transaction在 cleos 中的实现位于 programs/cleos/main.cpp将输入 JSON 解析为fc::variantjson_from_file_or_string因此参数既可以是内联 JSON 字符串也可以指向包含 JSON 的文件路径通过fc::from_variantpacked_transaction_v0反序列化为packed_transaction_v0对象若失败则抛出transaction_type_exception提示 Invalid packed transaction format调用get_signed_transaction()取出内部缓存的signed_transaction未加--unpack-action-data时直接以signed_transaction序列化输出否则经abi_serializer::to_variant将动作 data 一并解码最终以fc::json::to_pretty_string输出美化后的 JSON。链端数据结构的支撑packed_transaction_v0定义于 libraries/chain/include/eosio/chain/transaction.hpp其存储字段为signatures、compression、packed_context_free_data、packed_trx并在构造时通过local_pack_transaction()生成打包体反序列化构造后内部缓存解包后的signed_transactionunpacked_trx与trx_idget_signed_transaction()直接返回该缓存。解包动作的核心逻辑在 libraries/chain/transaction.cpplocal_unpack_transaction()调用unpack_transaction(packed_trx, compression)将打包字节流还原为signed_transaction并重新计算trx_idlocal_unpack_context_free_data()将packed_context_free_data解包进context_free_data数组pack_transaction()/unpack_transaction()均按compression分支处理none直接读写字节流zlib则先做 zlib 压缩/解压遇到未知压缩算法会抛出unknown_transaction_compression。由此可以推断unpack_transaction命令等价于在链端节点内部对收到交易的解包路径只是将结果以 JSON 形式呈现在客户端侧因此非常适合离线验证一笔交易的完整内容。配套命令组合使用unpack_transaction通常与convert族其他命令配合形成完整的工作流参见 convert 命令索引命令作用与 unpack_transaction 的关系pack_transaction明文签名 JSON → 打包 JSON逆操作用于生成可广播的紧凑形态unpack_transaction打包 JSON → 明文签名 JSON本文主角pack_action_dataJSON 动作数据 → 十六进制 packed data可配合--unpack-action-data做往返验证unpack_action_data十六进制 packed data → JSON 动作数据单独解码单个动作的 data 字段典型排障场景从区块或日志中复制一条packed_trx先用unpack_transaction还原交易结构再用unpack_action_data指定account与name后单独解码某个动作的参数即可完整还原一笔交易的语义而无需部署任何合约或编写解析代码。注意事项与常见问题输入必须是合法 JSONunpack_transaction使用 JSON 解析器读取输入格式错误会直接报错反序列化失败时错误信息会回显原始输入数据便于排查字段不可缺失位置参数transaction为必填缺少时会提示用法并退出--unpack-action-data依赖 nodeos该选项需要与运行中的nodeos交互获取 ABI离线环境下请省略该选项仅查看交易结构compression字段要如实填写若打包交易使用了zlib压缩而输入中误填为none解包会因字节流无法解析而失败从链上获取的打包交易通常可从区块工具如eosio-blocklog或 RPC 响应中直接取得包含compression字段的完整 JSON大交易耗时cleos 内部对 ABI 解析设置了最大执行时间abi_serializer_max_time超大交易在--unpack-action-data模式下可能超时此时可去掉该选项分步处理。参考实现路径命令注册与回调实现programs/cleos/main.cpppacked_transaction_v0/signed_transaction/transaction_header数据结构libraries/chain/include/eosio/chain/transaction.hpp打包/解包底层实现含 zlib 分支libraries/chain/transaction.cpp命令族总览docs/02_cleos/03_command-reference/convert/index.md赞分享区块链【免费下载链接】eosAn open source smart contract platform项目地址https://gitcode.com/gh_mirrors/eo/eos点击查看免费下载相关推荐cosign bundle upgrade 命令详解将 Sigstore Protobuf 签名包升级到 v0.3cosign bundle upgrade 命令详解将 Sigstore Protobuf 签名包升级到 v0.3 本指南以 cosign 仓库中 cosig供应链安全云原生应用安全WSABuilds 实战指南用目录联接mklink /J把 WSA 移动或安装到其他分区/磁盘WSABuilds 实战指南用目录联接mklink /J把 WSA 移动或安装到其他分区/磁盘 本篇指南介绍如何将 Windows Subsystem f区块链freqtrade convert-db 详解交易数据库跨系统迁移命令与源码原理freqtrade convert db 详解交易数据库跨系统迁移命令与源码原理 本篇基于 docs/commands/convert db.md https金融科技后端机器学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表