EOSIO cleos `system canceldelay` 实战指南:取消延迟交易的命令用法与链上实现原理
区块链【免费下载链接】eosAn open source smart contract platform项目地址https://gitcode.com/gh_mirrors/eo/eos点击查看免费下载导读cleos system canceldelay是 EOSIO 生态中用于**取消尚未执行的延迟交易delayed transaction**的标准命令行工具。在节点上提交带--delay-sec延迟参数的交易、或合约通过eosio::check之外的延迟调度机制排队交易后只要交易尚未到达延迟窗口或仍在延迟期间授权账户即可通过本命令将其从链上撤销。读完本文你将掌握cleos system canceldelay的完整参数语义、可复制的实战命令、其底层canceldelayaction 的数据结构与链端授权校验逻辑从而能在自己的测试网或业务场景中准确、安全地管理延迟交易。延迟交易机制简述为什么需要 canceldelay在 EOSIO 区块链中交易可以设置一个delay_sec延迟秒数。当一笔交易的delay_sec 0时节点不会立即执行它而是将其放入生成的交易generated transaction索引中待到delay_until时间点再真正入块执行。从链核心实现看延迟交易会被调度进generated_transaction_multi_index并设置delay_until published delay以及基于全局配置的deferred_trx_expiration_window过期窗口相关调度逻辑见 transaction_context.cpp。延迟交易常见于通过cleos提交交易时附带--delay-sec选项例如多签multisig提案执行前的等待期合约内部使用eosio::transaction延后执行的业务动作需要人为留出反悔窗口的资源操作如代理、转账等。由于延迟交易在真正执行前一直处于待命状态业务上可能因为参数错误、条件变化或安全原因需要撤销它——这就是canceldelay存在的意义。该命令对应的 action 由系统账户eosio提供属于内置系统合约能力在链核心中以SET_APP_HANDLER(eosio, eosio, canceldelay)注册见 controller.cpp因此无需部署任何额外合约即可使用。命令语法与位置参数cleos system canceldelay canceling_account canceling_permission trx_id [OPTIONS]cleos system canceldelay接受三个必填位置参数其语义与canceldelayaction 的字段一一对应参数类型说明canceling_accountTEXT原延迟交易授权authorization中出现的账户名即谁来执行取消canceling_permissionTEXT原延迟交易授权中出现的权限名与canceling_account共同构成取消所需的权限级别trx_idTEXT原始延迟交易的交易 IDTransaction ID命令同时提供与标准 cleos 交易提交一致的选项集。下表基于本仓库命令参考文档 system-canceldelay.md 完整整理选项说明-h, --help打印帮助信息并退出-x, --expiration TEXT设置交易过期前的秒数默认 30 秒-f, --force-unique强制交易唯一会消耗额外带宽并取消防止重复提交同一交易的保护-s, --skip-sign指定不使用钱包中已解锁的密钥对交易进行签名-d, --dont-broadcast不将交易广播到网络仅打印到 stdout-r, --ref-block TEXT设置用于 TAPOSTransaction as Proof-of-Stake的参考区块号或区块 ID-p, --permission TEXT指定授权账户与权限级别格式为accountpermission默认值为canceling_accountcanceling_permission--max-cpu-usage-ms UINT设置交易执行 CPU 预算上限毫秒默认 0 表示不设上限--max-net-usage UINT设置交易网络使用预算上限字节默认 0 表示不设上限--delay-sec UINT设置本笔取消交易的delay_sec秒数默认 0 秒-j, --json以 JSON 格式打印执行结果注意-p/--permission的默认值并非常见的accountactive而是由位置参数推导出的canceling_accountcanceling_permission。这一点在 cleos 源码中通过add_standard_transaction_options_plus_signing(cancel_delay, canceling_accountcanceling_permission)显式声明见 main.cpp。实战用法完整可复制的命令示例1. 创建一笔带延迟的交易准备场景要获得一个可被取消的延迟交易首先需要提交一笔设置了延迟秒数的交易。以最简单的转账为例cleos push action eosio.token transfer [alice, bob, 1.0000 EOS, delay test] \ -p aliceactive \ --delay-sec 300命令输出中会包含这笔交易的transaction_id即后续取消所需的trx_id并且交易不会立即生效而是在 300 秒后进入执行队列。2. 取消这笔延迟交易在延迟窗口内使用原交易授权中的账户与权限执行取消cleos system canceldelay alice active transaction_idalice→canceling_account即原延迟交易授权中的账户active→canceling_permission即原延迟交易授权中的权限transaction_id→ 原延迟交易的交易 ID。若原延迟交易使用非默认权限例如alicepay授权则取消时也必须使用完全一致的accountpermission组合cleos system canceldelay alice pay transaction_id -p aliceactive上面的-p aliceactive用于给这笔取消动作本身签名默认取canceling_accountcanceling_permission即alicepay若你的钱包中没有该权限对应的密钥可显式指定其他有权限的级别。3. 常见调试组合先预览不广播确认 payload 无误cleos system canceldelay alice active transaction_id -d -j在无钱包环境下手动签名配合外部签名流程cleos system canceldelay alice active transaction_id -s --dont-broadcast显式设置交易过期时间避免默认 30 秒窗口内因网络原因提交失败cleos system canceldelay alice active transaction_id -x 120链上实现原理从 CLI 到链端处理的完整链路1. CLI 侧payload 构造cleos中canceldelay子命令定义在 main.cpp 的canceldelay_subcommand结构中。其回调逻辑把三个位置参数组装为一个canceldelayactionauto canceling_auth permission_level{name(canceling_account), name(canceling_permission)}; fc::variant act_payload fc::mutable_variant_object() (canceling_auth, canceling_auth) (trx_id, trx_id); auto accountPermissions get_account_permissions(tx_permission, canceling_auth); send_actions({create_action(accountPermissions, config::system_account_name, canceldelay_n, act_payload)}, signing_keys_opt.get_keys());可以看到该 action 的接收方固定为系统账户config::system_account_name即eosioaction 名为canceldelaypayload 仅含两个字段canceling_auth由账户名 权限名构成的permission_level和trx_id交易授权默认取canceling_auth本身即用谁的权限取消就由谁签名。2. 数据结构canceldelay action 的 ABI 定义canceldelayaction 的数据结构定义于 contract_types.hppstruct canceldelay { permission_level canceling_auth; transaction_id_type trx_id; static account_name get_account() { return config::system_account_name; } static action_name get_name() { return canceldelay_n; } };其中permission_level即{actor, permission}二元组transaction_id_type即 32 字节的交易哈希。系统合约 ABI 也正式注册了该 action见 eosio_contract_abi.cpp 与 eosio_contract_abi.cpp。3. 链端处理内置处理器由于系统合约以内置native方式实现canceldelay的链端处理函数是apply_eosio_canceldelay位于 eosio_contract.cppvoid apply_eosio_canceldelay(apply_context context) { auto cancel context.get_action().data_ascanceldelay(); context.require_authorization(cancel.canceling_auth.actor); const auto trx_id cancel.trx_id; context.cancel_deferred_transaction(transaction_id_to_sender_id(trx_id), account_name()); }其核心动作是require_authorization(canceling_auth.actor)标记并强制要求canceling_auth.actor参与了本 action 的授权将trx_id通过transaction_id_to_sender_id转换为延迟交易的 sender_id调用cancel_deferred_transaction在链上删除对应的待执行延迟交易。4. 授权校验只有原交易授权人才能取消取消操作并非任意账户可为链端会在授权阶段严格校验取消者与原延迟交易之间的绑定关系。校验逻辑见 authorization_manager.cpp 的check_canceldelay_authorization其要点包括单一授权canceldelayaction 只能声明一个 authorization权限满足签名所用的权限必须满足canceling_auth所要求的权限交易存在以trx_id在generated_transaction_multi_index中必须能查找到对应的延迟交易且sender为空账户即系统级延迟交易否则报tx_not_found——即没有该交易 ID 的延迟交易无法取消授权匹配canceling_auth必须出现在原延迟交易内某个 action 的 authorization 列表中否则报错canceling_auth in canceldelay action was not found as authorization in the original delayed transaction。这意味着取消者必须恰好是原延迟交易某个 action 的授权账户与权限不能是任意第三方同时若原交易已经执行完毕或已过期移除取消同样会失败。注意事项与限制时机窗口只有仍处于延迟期尚未执行且未过期的延迟交易可以被取消。交易已入块执行、或超出deferred_trx_expiration_window过期窗口后链上不再保留该交易取消将报cannot cancel trx_id…, there is no deferred transaction with that transaction id。授权一致性canceling_accountcanceling_permission必须与原延迟交易中某个 action 的授权完全一致含权限级别否则校验不通过。延迟交易的延迟交易--delay-sec选项同样适用于canceldelay命令本身——即你可以在取消动作上也叠加延迟但这在大多数场景下没有必要。无需部署合约canceldelay由eosio系统账户的内置处理器提供任何 EOSIO 节点含测试网、本地单节点开箱即用。性能与带宽与普通交易一样取消交易同样受 CPU/网络预算约束可通过--max-cpu-usage-ms与--max-net-usage显式设置上限。延伸阅读本命令所属的完整命令族索引见 system 命令参考其中同样列出了system newaccount、system buyram、system delegatebw等系统合约操作延迟交易的调度与计费逻辑可深入阅读 transaction_context.cpp延迟交易的前置 net 计费与 transaction_context.cppschedule_transaction的入队与过期设置合约侧取消延迟交易的原语cancel_deferred由 WebAssembly 接口暴露定义于 webassembly/transaction.cpp供智能合约在业务逻辑中自行实现同类取消能力。赞分享区块链【免费下载链接】eosAn open source smart contract platform项目地址https://gitcode.com/gh_mirrors/eo/eos点击查看免费下载相关推荐EOSIO 账户创建完全指南cleos create account 命令详解与链上实现原理EOSIO 账户创建完全指南cleos create account 命令详解与链上实现原理 导读 在 EOSIO 区块链中账户是承载资产、权限与智能合约交区块链EOSIO cleos 命令参考全指南链上交互、钱包管理与资源操作实战EOSIO cleos 命令参考全指南链上交互、钱包管理与资源操作实战 本指南以开源智能合约平台 EOSIO 的官方命令参考文档 docs/02_cleos区块链EOSIO cleos system unregprod 命令详解注销区块生产者与链上治理实操EOSIO cleos system unregprod 命令详解注销区块生产者与链上治理实操 本篇技术指南围绕 EOSIO 开源智能合约平台中 cleos区块链上一篇Sunshine游戏串流服务器打造个人游戏云的终极指南下一篇AMD Ryzen调试工具SMU Debug Tool5分钟掌握核心参数调节技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

如何查看AX的Actor与Worker池:kubectl ate命令完全指南

如何查看AX的Actor与Worker池:kubectl ate命令完全指南

如何查看AX的Actor与Worker池:kubectl ate命令完全指南 【免费下载链接】ax Googles open agentic orchestration runtime 项目地址: https://gitcode.com/GitHub_Trending/ax11/ax AX(Agent Executor)是 Google 开源的 Agent 编排运行…

2026/9/24 23:48:33 阅读更多 →
Redis投票系统架构实战:从单机到集群的完整设计

Redis投票系统架构实战:从单机到集群的完整设计

前阵子帮客户上线一场内部评选活动,开票时间一到,几千人同时点投票,后台一张收录票数的表瞬间被行锁和死锁日志刷屏。后来我把整套投票计数迁到了Redis,用ZSet做排行榜、Set做去重、Lua脚本保证一票一投,压测下来单实例…

2026/9/24 23:47:33 阅读更多 →
AI原生应用数据处理:用链式思考构建高效数据链路

AI原生应用数据处理:用链式思考构建高效数据链路

1. 重新理解AI原生应用的数据处理最近各个技术社区都在聊AI原生应用,很多人第一反应是“接个大模型API、写个Prompt、套个向量库”,这确实是最快的demo路径。但真正到了生产环境,你会发现AI原生应用的核心底座依然绕不开一件事:数…

2026/9/24 23:47:33 阅读更多 →

最新新闻

Havoc Framework 实战指南:现代可塑化后渗透 C2 框架的架构、部署与配置全解析

Havoc Framework 实战指南:现代可塑化后渗透 C2 框架的架构、部署与配置全解析

网络安全 【免费下载链接】Havoc The Havoc Framework 项目地址: https://gitcode.com/gh_mirrors/ha/Havoc 点击查看 免费下载 导读:Havoc 是一个由 C5pider 创建的现代可塑(malleable)后渗透 C2(Command and Contro…

2026/9/25 7:21:45 阅读更多 →
confd 发布流程详解:CHANGELOG 自动生成、版本号管理与跨平台二进制构建

confd 发布流程详解:CHANGELOG 自动生成、版本号管理与跨平台二进制构建

后端配置中心运维 【免费下载链接】confd Manage local application configuration files using templates and data from etcd or consul 项目地址: https://gitcode.com/gh_mirrors/co/confd 点击查看 免费下载 confd 的每个正式版本都不是"打个 tag 就完事…

2026/9/25 7:21:44 阅读更多 →
在 AWS Lambda 上部署 GraphQL Playground:基于 Serverless Framework 的完整实战指南

在 AWS Lambda 上部署 GraphQL Playground:基于 Serverless Framework 的完整实战指南

开发工具后端API设计 【免费下载链接】graphql-playground 🎮 GraphQL IDE for better development workflows (GraphQL Subscriptions, interactive docs & collaboration) 项目地址: https://gitcode.com/gh_mirrors/gr/graphql-playground 点击查…

2026/9/25 7:21:44 阅读更多 →
Hippy AI 编程实战指南:Cursor / CodeBuddy / Knot 智能体配置与 Prompt 最佳实践

Hippy AI 编程实战指南:Cursor / CodeBuddy / Knot 智能体配置与 Prompt 最佳实践

跨平台移动开发前端 【免费下载链接】Hippy Hippy is designed to easily build cross-platform dynamic apps. 👏 项目地址: https://gitcode.com/gh_mirrors/hi/Hippy 点击查看 免费下载 本篇指南面向 Hippy 开发者,系统讲解如何借助 AI 编…

2026/9/25 7:21:44 阅读更多 →
trackerslist:75 个公共 BT Tracker 列表,粘贴进去把下载速度拉到 MB 级

trackerslist:75 个公共 BT Tracker 列表,粘贴进去把下载速度拉到 MB 级

trackerslist:75 个公共 BT Tracker 列表,粘贴进去把下载速度拉到 MB 级 【免费下载链接】trackerslist Updated list of public BitTorrent trackers 项目地址: https://gitcode.com/GitHub_Trending/tr/trackerslist 换电脑、重装系统后速度只剩…

2026/9/25 7:21:44 阅读更多 →
Atlas 300V部署YOLO实战:从环境配置到多路视频推理调优

Atlas 300V部署YOLO实战:从环境配置到多路视频推理调优

早两个月我把一张Atlas 300V插进服务器的时候,第一反应是:这卡到底算不算运算加速卡?插上去之后系统里没有nvidia-smi,没有CUDA,连安装包都换了一整套名字。查了一圈才搞明白,它确实是运算加速卡&#xff0…

2026/9/25 7:20:44 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →