ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

使用 cleos system delegatebw 为 EOS 账户委托 CPU 带宽资源(含源码级解析)

使用 cleos system delegatebw 为 EOS 账户委托 CPU 带宽资源(含源码级解析) 区块链【免费下载链接】eosAn open source smart contract platform项目地址https://gitcode.com/gh_mirrors/eo/eos点击查看免费下载本指南以仓库文档 how-to-delegate-CPU-resource.md 为核心讲解如何在 EOS本仓库为 EOSIO 开源智能合约平台中通过cleos system delegatebw命令从一个账户向另一个账户委托 CPU 带宽资源。读完本文你将掌握delegatebw命令的完整参数、真实输出解读、委托与撤销委托的实战命令以及该命令在 cleos 客户端与 eosio.system 系统合约中的底层实现链路。1. 为什么需要委托 CPU 带宽在 EOSIO 区块链中账户执行智能合约如转账、投票、调用合约接口需要消耗两类带宽资源CPU 带宽CPU bandwidth合约代码执行所需的计算资源与账户抵押stake的代币数量成正比NET 带宽NET bandwidth交易数据在网络中传输所需的吞吐资源。账户通过抵押staking代币来获得这两类资源的配额。而委托delegate则允许一个账户from把自己的代币抵押给另一个账户receiver使接收方无需自己持有大量代币也能获得可用的带宽配额。这在以下场景非常实用开发者为应用账号如 DApp 合约账号抵押 CPU保证用户操作不因带宽不足而失败新账户在初始阶段没有代币由他人代为抵押获得执行交易的能力。本仓库的相关指南还包含 NET 带宽委托how-to-delegate-net-resource.md、同时抵押 NET 与 CPUhow-to-stake-resource.md以及撤销委托how-to-undelegate-CPU.md、how-to-undelegate-NET.md可互相配合阅读。2. 开始之前Before you begin原文档列出了执行本操作前必须满足的准备工作熟悉命令及其参数阅读cleos system delegatebw命令参考理解每个位置参数与选项的含义安装 cleoscleos随 EOSIO 软件一同分发安装 EOSIO 后即自带cleos可执行文件部署参考系统合约确保用于管理系统资源的参考系统合约eosio.system、eosio.token等源自eosio.contracts仓库已部署到链上。本仓库的单元测试中携带了 eosio.system 合约的 ABI 副本见 unittests/contracts/eosio.system/eosio.system.abi可据此核对delegatebw动作的结构定义理解基础概念账户account及其在链上的作用、CPU 带宽与 NET 带宽在 EOSIO 区块链中的含义。注意delegatebw是cleos system子命令组中的命令实际发送的是对系统账户eosio上delegatebw动作action的调用因此只有在系统合约已部署并生效的环境中才能成功执行。3. 核心命令与参数3.1 命令语法委托 CPU 带宽的核心命令格式如下cleos system delegatebw from receiver stake_net_quantity stake_cpu_quantity各位置参数的含义参数含义from发起委托、从中扣除代币的源账户receiver接收被委托带宽的目标账户stake_net_quantity为 NET 带宽抵押的代币数量TEXT格式为资产字符串stake_cpu_quantity为 CPU 带宽抵押的代币数量TEXT格式为资产字符串其中stake_net_quantity与stake_cpu_quantity可按需传0 SYS表示该项不抵押两者都传 0 则不会产生有效委托。3.2 命令参考中的完整选项来自system-delegatebw.md命令参考-h,--help打印帮助信息并退出-x,--expirationTEXT设置交易过期秒数默认 30 秒-f,--force-unique强制交易唯一会消耗额外带宽用于防止意外重复提交同一交易-s,--skip-sign指定不使用已解锁钱包中的密钥签名交易-d,--dont-broadcast不向网络广播交易仅打印到 stdout常用于离线预检-r,--ref-blockTEXT设置用于 TAPOSTransaction as Proof-of-Stake的参考区块号或区块 ID-p,--permissionTEXT授权账户与权限级别格式为accountpermission默认accountactive--max-cpu-usage-msUINT为交易执行设置 CPU 使用上限毫秒默认 0 表示不设限--max-net-usageUINT为交易设置网络使用上限字节默认 0 表示不设限--delay-secUINT设置延迟秒数默认 0 秒-j,--json以 JSON 格式打印结果。3.3 源码中的实现cleos 侧在 cleos 源码 programs/cleos/main.cpp 中delegate_bandwidth_subcommand结构体完整定义了该子命令的解析逻辑四个位置参数from、receiver、stake_net_quantity、stake_cpu_quantity均被标记为-required()缺一不可额外支持--buyram以代币购买 RAM、--buy-ram-bytes按字节购买 RAM与--transfer把投票权及取回抵押代币的权利一并转移给接收方三个选项其中--buyram与--buy-ram-bytes不能同时使用回调中构造动作负载act_payload含from、receiver、stake_net_quantity、stake_cpu_quantity、transfer五个字段并通过create_action(accountPermissions, config::system_account_name, delegatebw_n, act_payload)向系统账户eosio发起delegatebw动作权限默认使用fromactive代码中add_standard_transaction_options_plus_signing(delegate_bandwidth, fromactive)。对应地eosio.system合约 ABIunittests/contracts/eosio.system/eosio.system.abi中delegatebw结构体的字段为字段ABI 类型说明fromname委托源账户receivername接收账户stake_net_quantityasset用于 NET 带宽的抵押资产stake_cpu_quantityasset用于 CPU 带宽的抵押资产transferbool是否转移投票权与取回权4. 实战从 bob 向 alice 委托 CPU 带宽原文档给出的核心示例是从账户bob向账户alice委托0.01 SYS的 CPU 带宽。cleos system delegatebw bob alice 0 SYS 0.01 SYS字段说明bob委托源账户代币从该账户扣除alice接收被委托 CPU 带宽的账户0 SYSNET 带宽抵押 00.01 SYSCPU 带宽抵押 0.01 个 SYS 代币。成功执行后的典型输出executed transaction: 5487afafd67bf459a20fcc2dbc5d0c2f0d1f10e33123eaaa07088046fd18e3ae 192 bytes 503 us # eosio eosio::delegatebw {from:bob,receiver:alice,stake_net_quantity:0.0000 SYS,stake_cpu_quantity:0.0100 SYS... # eosio.token eosio.token::transfer {from:bob,to:eosio.stake,quantity:0.0010 SYS,memo:stake bandwidth} # bob eosio.token::transfer {from:bob,to:eosio.stake,quantity:0.0010 SYS,memo:stake bandwidth} # eosio.stake eosio.token::transfer {from:bob,to:eosio.stake,quantity:0.0010 SYS,memo:stake bandwidth}逐行解读eosio eosio::delegatebw系统合约记录委托行为负载与 ABI 中delegatebw结构体一一对应from、receiver、stake_net_quantity、stake_cpu_quantity这是整个委托的核心动作eosio.token eosio.token::transfer紧随其后的代币转账动作将抵押代币从bob转入托管账户eosio.stakememo 为stake bandwidth表明这是一笔带宽抵押转账输出同时展示了bob账户余额扣减与该转账在eosio.stake账户入账的完整链路确认代币已被锁入托管账户而非直接转移给alice。由此可以看出委托带宽的实质是抵押转账 系统合约记账两步动作代币进入eosio.stake托管账户而带宽配额通过eosio.system合约记录在receiver名下。5. 委托的组合用法与自委托5.1 只委托 NET / 只委托 CPU / 两者同时原文档及配套指南 how-to-stake-resource.md 给出了三种典型组合以bob为付费方、alice为受益方# 只抵押 NET 带宽alice 获得 0.01 SYS 的 NET 配额 cleos system delegatebw bob alice 0.01 SYS 0 SYS # 只抵押 CPU 带宽alice 获得 0.01 SYS 的 CPU 配额 cleos system delegatebw bob alice 0 SYS 0.01 SYS # 同时抵押 NET 与 CPUalice 获得 0.01 SYS NET 0.02 SYS CPU 配额 cleos system delegatebw bob alice 0.01 SYS 0.02 SYS需要注意参数顺序第三个位置参数永远是 NET 数量第四个位置参数永远是 CPU 数量即使只想委托 CPU也必须在第三个位置显式写0 SYS。5.2 账户可以委托给自己原文档特别说明账户可以为自己抵押资源。以上示例中的bob可以替换为alice前提是alice持有足够的 SYS 代币即账户为自己抵押带宽这在启动新账号或自建节点时很常见。5.3--transfer选项的影响从源码programs/cleos/main.cpp与 ABI 可知delegatebw动作还包含transfer布尔字段默认值为false。当通过--transfer置为true时接收方同时获得投票权与取回undelegate该笔抵押的权利否则取回权保留在from账户手中这正是撤销委托时只有原委托账户可以撤销的原因之一。6. 撤销委托反向操作当不再需要委托的带宽时可使用cleos system undelegatebw撤销cleos system undelegatebw bob alice 0 SYS 0.01 SYS参数含义与delegatebw对应from为撤销方receiver为被撤销方unstake_net_quantity/unstake_cpu_quantity为要撤销的 NET / CPU 数量。原文档how-to-undelegate-CPU.md特别提醒只有最初发起委托的账户才有权撤销该笔委托。撤销的典型输出executed transaction: e7e7edb6c5556de933f9d663fea8b4a9cd56ece6ff2cebf056ddd0835efa6606 184 bytes 452 us # eosio eosio::undelegatebw {from:alice,receiver:bob,unstake_net_quantity:0.0000 EOS,unstake_cpu_qu... warning: transaction executed locally, but may not be confirmed by the network yet对应的 cleos 侧实现位于 programs/cleos/main.cpp 的undelegate_bandwidth_subcommand位置参数为from、receiver、unstake_net_quantity、unstake_cpu_quantity均为必填并同样默认以fromactive权限签名后向系统账户发送undelegatebw动作。注意撤销后的代币通常需要经过延迟期才能取回本仓库文档未对具体延迟时长作出承诺请以部署的系统合约配置为准。7. 参数细节与注意事项资产字符串格式stake_net_quantity与stake_cpu_quantity必须使用 EOSIO 资产格式数量 空格 符号如0.01 SYS即使为 0 也要写全例如0 SYS不能省略符号四个位置参数全部必填从 cleos 源码可以看到这四个参数均被标记为 required缺失任一参数命令将直接报错签名权限默认使用fromactive权限签名可通过-p指定其他权限级别预演与离线检查结合-d不广播与-jJSON 输出可以先在本地查看将发送的动作内容确认无误后再正式广播RAM 与带宽的区别delegatebw处理的是 CPU/NET 抵押如需为接收账户购买 RAM可搭配同一子命令中的--buyram/--buy-ram-bytes选项详见源码 programs/cleos/main.cpp但两者不能同时使用。8. 仓库中的测试佐证委托带宽逻辑在本仓库有充分的可执行验证单元测试辅助类unittests/eosio_system_tester.hpp 中封装了delegate_bandwidth辅助方法通过push_action(name(from), delegatebw_n, ...)构造并执行delegatebw动作参数即from、receiver、stake_net_quantity、stake_cpu_quantity与命令行行为一致启动序列测试unittests/bootseq_tests.cpp 在链启动boot流程中直接调用delegatebw动作进行初始资源分配其后同文件第 155 行通过undelegatebw验证撤销路径ABI 契约unittests/contracts/eosio.system/eosio.system.abi 中delegatebw结构体与动作表定义第 1521 行提供了链上动作与本文命令参数一一对应的契约依据集成测试仓库测试脚本如 tests/Node.py在构建多节点测试环境时也会使用delegatebw完成资源分配验证其在真实节点间的可用性。9. 相关文档导航命令参考system-delegatebw、system-undelegatebw委托与撤销系列如何委托 NET 带宽、如何抵押 NET 与 CPU、如何撤销 CPU 委托、如何撤销 NET 委托安装环境安装 EOSIO源码位置cleos 主程序、eosio.system 合约 ABI、系统合约测试辅助类赞分享区块链【免费下载链接】eosAn open source smart contract platform项目地址https://gitcode.com/gh_mirrors/eo/eos点击查看免费下载相关推荐Authelia crypto pair mldsa 命令详解ML-DSA 后量子密钥对生成的 CLI 参考与源码剖析Authelia crypto pair mldsa 命令详解ML DSA 后量子密钥对生成的 CLI 参考与源码剖析 authelia crypto pai区块链EOSIO 使用 cleos system buyram 为账户购买 RAM 实战指南EOSIO 使用 cleos system buyram 为账户购买 RAM 实战指南 本篇指南讲解如何通过 EOSIO 自带的命令行工具 cleos 使用区块链Wand-EnhancerWeMod 破解工具指南Wand EnhancerWeMod 破解工具指南 Wand Enhancer 是一款开源的 WeMod 破解工具通过在本地改写 WeMod/Wand 客户区块链创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表