EOS 网络带宽(NET)解除质押完全指南:cleos system undelegatebw 实战解析
区块链【免费下载链接】eosAn open source smart contract platform项目地址https://gitcode.com/gh_mirrors/eo/eos点击查看免费下载在 EOS 主网与基于 eosio 的链上账户通过质押stake系统代币获得 CPU 与 NET网络带宽资源而资源不再需要时则通过解除质押undelegate回收代币。本指南基于当前仓库gh_mirrors/eo/eos中的官方 how-to 文档docs/02_cleos/02_how-to-guides/how-to-undelegate-NET.md系统讲解cleos system undelegatebw命令的用法、参数、执行结果解读及其底层实现原理。读完本文你将能够独立完成「把委托给其他账户的 NET 带宽撤回」这一完整操作并理解该命令如何映射为链上的eosio::undelegatebw动作。目标解除账户或应用委托出去的资源Undelegate resource for an account or application。需要特别警惕的是只有最初委托delegate资源的那个账户才有权限解除该笔资源的质押。也就是说如果账户alice把 NET 带宽委托给了账户bob那么只有alice作为from参数能够发起撤回bob无权代替操作。开始之前前置条件在执行解除 NET 质押之前请确认满足以下条件安装当前受支持的cleos版本cleos是与链交互的命令行客户端位于本仓库的 programs/cleos 目录核心实现在 main.cpp。请确保版本与所连接节点兼容。确保已部署参考系统合约系统资源CPU/NET 带宽质押由eosio.contracts仓库中的参考系统合约管理。本仓库unittests下保留了预编译的 eosio.system 合约 ABI 用于测试实际部署请以官方发布的 eosio.system 合约为准。理解以下基础概念什么是账户account什么是网络带宽network bandwidth即 NET什么是 CPU 带宽CPU bandwidth。核心步骤一条命令解除 NET 质押原文档给出的实战示例是从账户alice解除 0.01 SYS 的网络带宽将其撤回给账户bobcleos system undelegatebw bob alice 0 SYS 0.01 SYS执行后你会看到类似下面的输出executed transaction: e7e7edb6c5556de933f9d663fea8b4a9cd56ece6ff2cebf056ddd0835efa6606 184 bytes 452 us # eosio eosio::undelegatebw {from:alice,receiver:bob,unstake_net_quantity:0.01 EOS,unstake_cpu_qu... warning: transaction executed locally, but may not be confirmed by the network yet ]逐字段解读这段输出executed transaction: txid交易哈希可在区块浏览器中查询该交易的详情184 bytes交易原始字节大小452 us本地执行耗时微秒# eosio eosio::undelegatebw交易调用了eosio账户上的undelegatebw动作其中{from:alice,receiver:bob,unstake_net_quantity:0.01 EOS,...}为动作参数注意示例输出中的 token 符号显示为EOS是节点侧配置的符号显示命令中应使用你所在链的符号如SYSwarning: transaction executed locally, but may not be confirmed by the network yet警告信息表示交易已在本地节点执行但尚未被网络确认出块属正常现象稍后可查询交易确认状态。命令位置参数详解该命令共 4 个位置参数定义于仓库 programs/cleos/main.cpp与官方命令参考 system-undelegatebw.md 一致位置参数类型含义fromTEXT解除带宽质押的账户必须是原委托者receiverTEXT被撤回带宽的账户即当初的接收者unstake_net_quantityTEXT要解除的网络带宽质押数量如0.01 SYSunstake_cpu_quantityTEXT要解除的 CPU 带宽质押数量如0 SYS在示例中fromalice、receiverbob语义为alice把之前委托给bob的 NET 带宽解除质押并撤回给自己。若只想解除 NET 而不动 CPU将 CPU 数量填0 SYS即可反之亦然参见姊妹篇 how-to-undelegate-CPU.md。常用选项Optionscleos system undelegatebw继承 cleos 标准交易选项常用如下-h, --help打印帮助信息并退出-x, --expiration TEXT设置交易过期时间秒默认 30s-f, --force-unique强制交易唯一会消耗额外带宽取消对重复发送相同交易的保护-s, --skip-sign跳过签名不使用钱包中的已解锁密钥签名-d, --dont-broadcast不广播到网络仅打印到标准输出-r, --ref-block TEXT设置用于 TAPOSTransaction as Proof-of-Stake的参考区块号或区块 ID-p, --permission TEXT授权的账户与权限级别格式accountpermission默认accountactive--max-cpu-usage-ms UINT交易执行 CPU 预算上限毫秒默认 0 表示不限制--max-net-usage UINT交易网络用量预算上限字节默认 0 表示不限制--delay-sec UINT设置延迟交易秒数默认 0s-j, --json以 JSON 格式打印结果。实际签名与广播所需密钥由本机 keosd 钱包提供若未指定--permission默认使用fromactive权限见源码 main.cpp。底层原理cleos 如何构造这笔交易从源码结构看cleos system undelegatebw由undelegate_bandwidth_subcommand子命令类实现programs/cleos/main.cpp其工作流程可以概括为定义 4 个必填位置参数from、receiver、unstake_net_quantity、unstake_cpu_quantity并附加标准交易选项与签名选项默认权限fromactive回调函数中将两个数量字符串通过to_asset()转换为asset类型构造动作负载fc::variant act_payload fc::mutable_variant_object() (from, from_str) (receiver, receiver_str) (unstake_net_quantity, to_asset(unstake_net_amount)) (unstake_cpu_quantity, to_asset(unstake_cpu_amount));以fromactive权限构造动作并发送到系统账户eosioconfig::system_account_name动作名为undelegatebwauto accountPermissions get_account_permissions(tx_permission, {name(from_str), config::active_name}); send_actions({create_action(accountPermissions, config::system_account_name, undelegatebw_n, act_payload)}, signing_keys_opt.get_keys());即cleos system undelegatebw本质上是对链上eosio::undelegatebw动作的一层 CLI 封装。系统合约eosio.system收到该动作后会校验from是否为资源所有者、检查可用余额并执行实际的资源释放与代币归还逻辑——该逻辑属于eosio.contracts仓库的 eosio.system 合约实现。测试验证单元测试中的 unstake 封装本仓库的单元测试框架对undelegatebw动作也做了封装可用于验证命令的调用形态。在 unittests/eosio_system_tester.hpp 中action_result unstake( const account_name from, const account_name to, const asset net, const asset cpu ) { return push_action( name(from), undelegatebw_n, mvo() (from, from) (receiver, to) (unstake_net_quantity, net) (unstake_cpu_quantity, cpu) ); }可以看到测试封装的动作参数与 CLI 的 4 个位置参数一一对应且以from账户身份push_action发送——再次印证了「必须由原委托者发起」的权限约束。此外eosio_system_tester.hpp 中还有同时包含delegatebw、voteproducer与undelegatebw多动作交易的构造示例展示了在实际测试中如何先质押再解除质押的完整流程。关联操作与延伸阅读委托质押带宽cleos system delegatebw是解除质押的逆操作参考 how-to-delegate-net-resource.md 与 how-to-delegate-CPU-resource.md命令参考见 system-delegatebw.md查询带宽委托情况cleos system listbw account可查看某账户当前的 CPU/NET 委托明细命令参考见 system-listbw.md解除 CPU 质押操作方式与本文完全一致区别仅在于把数量填入unstake_cpu_quantity详见 how-to-undelegate-CPU.md完整命令参考undelegatebw的全部位置参数与选项见 system-undelegatebw.md概念背景资源质押、购买 RAM 等资源模型相关的介绍可参考 docs/01_nodeos/07_concepts 目录下的文档。注意事项与常见误区只有原委托者可以解除这是该操作最核心的权限限制。若from不是当初delegatebw的发起者系统合约将拒绝该交易符号以所在链为准命令中的 token 符号如SYS应与当前链的核心符号一致示例输出中显示的EOS仅是节点配置的显示符号数量可部分解除unstake_net_quantity与unstake_cpu_quantity可以分别指定支持只解除 NET、只解除 CPU 或两者同时解除数量填0 SYS表示不解除该部分资源不会立即生效解除质押的带宽不会瞬间释放系统合约通常存在 3 天的赎回等待期视链配置而定在此期间相关带宽仍不可用确保钱包已解锁交易需要签名请先确保 keosd 钱包已解锁且包含from账户的私钥否则会提示签名失败。通过本文的讲解你可以安全地使用cleos system undelegatebw完成 NET 带宽的解除质押操作并理解其从 CLI 参数解析、动作构造到链上执行的完整链路。赞分享区块链【免费下载链接】eosAn open source smart contract platform项目地址https://gitcode.com/gh_mirrors/eo/eos点击查看免费下载相关推荐EOSIO cleos 命令详解用 cleos system newaccount 一步完成账户创建、RAM 购买与带宽质押EOSIO cleos 命令详解用 cleos system newaccount 一步完成账户创建、RAM 购买与带宽质押 导读 cleos system区块链EOSIO 委托网络带宽NET资源cleos system delegatebw 操作指南与底层原理EOSIO 委托网络带宽NET资源cleos system delegatebw 操作指南与底层原理 导读 本文基于本仓库eo/eos中《How to区块链使用 cleos system delegatebw 为 EOS 账户委托 CPU 带宽资源含源码级解析使用 cleos system delegatebw 为 EOS 账户委托 CPU 带宽资源含源码级解析 本指南以仓库文档 how to delegate区块链创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考