我要提问
ARTICLE DETAIL

资讯详情

前沿编程新知与开发实战干货的深度解读。

EOS 智能合约平台 cleos system delegatebw 命令详解:CPU/NET 带宽质押(Staking)完整实战指南

EOS 智能合约平台 cleos system delegatebw 命令详解:CPU/NET 带宽质押(Staking)完整实战指南 区块链【免费下载链接】eosAn open source smart contract platform项目地址https://gitcode.com/gh_mirrors/eo/eos点击查看免费下载导读cleos system delegatebw是 EOS 智能合约平台eo/eos 仓库中通过命令行将代币质押stake为 CPU 带宽与 NET 带宽的核心命令。在 EOSIO 资源模型中账户执行交易需消耗 CPU 与 NET 资源而这两种资源正是通过该命令把代币委托给目标账户获得的。本文以 docs/02_cleos/03_command-reference/system/system-delegatebw.md 为主体骨架结合仓库内 programs/cleos/main.cpp 的 CLI 实现、eosio.system.abi 的智能合约 ABI 定义以及 eosio_system_tester.hpp 的单元测试从位置参数、选项、实战示例到底层 action 构造原理为你提供一份可复制、可运行的完整参考。一、命令概述什么是带宽委托Delegate Bandwidth在 EOSIO 资源模型中账户执行转账、部署合约、投票等链上操作时需要消耗两类带宽资源NET 带宽Network Bandwidth与交易数据大小字节数挂钩的网络吞吐资源用于限制账户在一段时间内可提交的交易数据总量CPU 带宽CPU Bandwidth与交易执行时间毫秒挂钩的计算资源用于限制账户在一段时间内可消耗的 CPU 执行时间。账户可通过cleos system delegatebw将代币质押给某个账户可以是自己也可以是其他账户质押的代币不直接花费而是锁定在系统合约中为receiver账户换取相应的带宽配额。这是 EOSIO 资源模型的基础操作其链上动作action名称为delegatebw由系统合约eosio 账户执行。命令语法如下cleos system delegatebw [OPTIONS] from receiver stake_net_quantity stake_cpu_quantity其中四个位置参数均为必填可选参数通过[OPTIONS]传入。二、位置参数Positional Arguments详解参数类型说明fromTEXT发起带宽委托的账户即质押代币、提供资源的账户receiverTEXT接收带宽的账户获得 CPU/NET 配额的目标账户stake_net_quantityTEXT用于 NET 带宽质押的 EOS 代币数量如1.0000 EOSstake_cpu_quantityTEXT用于 CPU 带宽质押的 EOS 代币数量如1.0000 EOS要点说明四个位置参数在 programs/cleos/main.cpp 中通过 CLI11 均标记为-required()缺一不可from与receiver既可以是不同账户A 为 B 质押也可以是同一账户自己为自己质押详见下文实战示例stake_net_quantity与stake_cpu_quantity为 asset 类型带精度与符号字符串中必须包含代币符号如EOS或SYS且精度须与链上代币一致。例如在单元测试 eosio_system_tester.hpp 中即使用core_from_string(10.0000)形式传入带 4 位小数的资产量。三、选项Options详解3.1 通用交易选项以下选项与 cleos 其他system子命令保持一致由add_standard_transaction_options_plus_signing统一注入见 programs/cleos/main.cpp选项参数类型说明-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.2 委托专属选项--buyram / --buy-ram-bytes / --transfer与大多数cleos system子命令不同delegatebw还额外支持三个专属选项源码见 programs/cleos/main.cpp选项参数类型说明--buyramTEXT同时为receiver购买 RAM 的代币数量--buy-ram-bytesUINT同时为receiver购买指定字节数的 RAM--transfer-将投票权与解质押权一并转移给receivertrue 时质押给接收方的代币不再归from所有from无权将其解绑重要限制源码 programs/cleos/main.cpp 中显式断言--buyram与--buy-ram-bytes不能同时设置ERROR: --buyram and --buy-ram-bytes cannot be set at the same time若设置了--buyramcleos 会在delegatebwaction 之后追加一个buyramaction若设置了--buy-ram-bytes则追加一个buyrambytesaction从而将质押带宽 购买 RAM合并为一条多 action 交易见 programs/cleos/main.cpp。--transfer对应链上 action 结构体中的transfer布尔字段在测试辅助函数stake_with_transfer中被显式置为true见 eosio_system_tester.hpp。四、实战示例如何质押 CPU / NET 带宽以下示例改编自仓库内实战指南 how-to-stake-resource.md代币符号以该指南使用的SYS为例。4.1 仅为接收方质押 NET 带宽由bob账户出资为alice账户质押0.01 SYS的 NET 带宽cleos system delegatebw alice bob 0.01 SYS 0 SYS各参数含义alice 获得 NET 带宽的账户bob 支付0.01 SYS用于质押 NET 带宽的账户0.01 SYS 质押到 NET 带宽的 SYS 数量0 SYS 质押到 CPU 带宽的 SYS 数量此处为 0。执行成功后终端会输出类似如下的执行摘要executed transaction: 5487afafd67bf459a20fcc2dbc5d0c2f0d1f10e33123eaaa07088046fd18e3ae 192 bytes 503 us # eosio eosio::delegatebw {from:bob,receiver:alice,stake_net_quantity:0.01 SYS,stake_cpu_quanti... # eosio.token eosio.token::transfer {from:bob,to:eosio.stake,quantity:0.01 SYS,memo:stake bandwidth} # alice eosio.token::transfer {from:bob,to:eosio.stake,quantity:0.01 SYS,memo:stake bandwidth} # eosio.stake eosio.token::transfer {from:bob,to:eosio.stake,quantity:0.01 SYS,memo:stake bandwidth}从输出可以看到交易内部的真实调用链eosio::delegatebw动作触发后代币从bob转账至中间托管账户eosio.stakememo 为stake bandwidth。4.2 仅为接收方质押 CPU 带宽cleos system delegatebw alice bob 0 SYS 0.01 SYS含义bob为alice质押0.01 SYS到 CPU 带宽NET 质押量为 0。4.3 同时质押 NET 与 CPU 带宽cleos system delegatebw alice bob 0.01 SYS 0.02 SYS含义bob为alice同时质押0.01 SYS到 NET、0.02 SYS到 CPU 带宽。这是最常用的组合式质押方式也是部署合约、参与投票前的标准资源准备步骤。4.4 账户自质押Stake to Self账户可以将带宽质押给自己。将上述示例中的bob全部替换为alice即可前提是alice账户持有足够的 SYS 代币。例如cleos system delegatebw alice alice 0.01 SYS 0.02 SYS即alice为自己质押 NET 与 CPU 带宽。在单元测试中stake(acnt, net, cpu)的默认实现正是调用stake(acnt, acnt, net, cpu)完成自质押见 eosio_system_tester.hpp。4.5 指定权限、延迟与 JSON 输出cleos system delegatebw alice bob 0.01 SYS 0.02 SYS \ -p bobactive \ --delay-sec 60 \ -j-p bobactive显式指定以bobactive权限签名默认即fromactive见 programs/cleos/main.cpp 的默认参数fromactive--delay-sec 60交易延迟 60 秒后生效-j以 JSON 格式输出执行结果便于脚本解析。五、源码级原理从命令到链上 Action5.1 cleos 端的命令解析与 Action 构造cleos system delegatebw的完整实现位于 programs/cleos/main.cpp 的delegate_bandwidth_subcommand结构体通过 CLI11 注册子命令delegatebw描述文案为 Delegate bandwidth并依次注册from、receiver、stake_net_quantity、stake_cpu_quantity四个必填位置参数注册--buyram、--buy-ram-bytes、--transfer专属选项并通过add_standard_transaction_options_plus_signing注入全套标准交易选项与签名密钥选项在回调中构造 action 负载payloadfc::variant act_payload fc::mutable_variant_object() (from, from_str) (receiver, receiver_str) (stake_net_quantity, to_asset(stake_net_amount)) (stake_cpu_quantity, to_asset(stake_cpu_amount)) (transfer, transfer);使用create_action(accountPermissions, config::system_account_name, delegatebw_n, act_payload)将动作发往系统账户eosio若同时指定了--buyram或--buy-ram-bytes则在动作序列末尾追加buyram/buyrambytesaction最后通过send_actions一次性广播。也就是说一次cleos system delegatebw调用最终在链上表现为一个发往eosio系统合约的delegatebw动作 可选的一个buyram/buyrambytes动作。5.2 链上 ABI 定义delegatebw 结构在系统合约 ABI 文件 unittests/contracts/eosio.system/eosio.system.abi 中delegatebw结构体定义如下{ name: delegatebw, base: , fields: [ { name: from, type: name }, { name: receiver, type: name }, { name: stake_net_quantity, type: asset }, { name: stake_cpu_quantity, type: asset }, { name: transfer, type: bool } ] }可见链上delegatebw动作共 5 个字段from、receiver为账户名name两个质押数量为资产assettransfer为布尔值——与 cleos 端构造的 payload 一一对应。该结构体还在 ABI 的actions表中注册见 eosio.system.abi供序列化与反序列化使用。5.3 测试验证stake 与 stake_with_transfer仓库单元测试 eosio_system_tester.hpp 提供了两个直接封装delegatebw的辅助函数可作为理解参数语义的参考action_result stake( const account_name from, const account_name to, const asset net, const asset cpu ) { return push_action( name(from), delegatebw_n, mvo() (from, from) (receiver, to) (stake_net_quantity, net) (stake_cpu_quantity, cpu) (transfer, 0 ) ); } action_result stake_with_transfer( const account_name from, const account_name to, const asset net, const asset cpu ) { return push_action( name(from), delegatebw_n, mvo() (from, from) (receiver, to) (stake_net_quantity, net) (stake_cpu_quantity, cpu) (transfer, true ) ); }其中stake_with_transfer将transfer置为true对应命令行中的--transfer选项质押给接收方的代币连同投票权与解质押权一并转移给接收方。此外测试框架在创建带资源账户create_account_with_resources时也会构造包含buyrambytesdelegatebw的多 action 交易为新建账户预置 NET/CPU 资源见 eosio_system_tester.hpp这正是质押带宽 购买 RAM组合用法的真实落地场景。六、关联操作查询与解绑带宽带宽委托并非单向操作实际使用中常与以下命令配合场景命令参考文档查询账户的带宽委托与质押明细cleos system listbwsystem-listbw.md解除 NET/CPU 带宽质押cleos system undelegatebwsystem-undelegatebw.md为他人解除 NET 带宽质押cleos system undelegatebw from receiver unstake_net_quantity unstake_cpu_quantityhow-to-undelegate-NET.md为自己解除 CPU 带宽质押同上from与receiver相同how-to-unstake-CPU.mdundelegatebw与delegatebw的参数结构对称from、receiver、两个资产数量见 system-undelegatebw.md其 cleos 实现同样位于 programs/cleos/main.cpp构造发往eosio的undelegatebw动作。注意解绑后代币不会立即回到账户余额而是进入系统合约规定的解锁流程若质押时使用了--transfer则只有接收方才有权发起解绑。七、注意事项与最佳实践质押数量必须为正且格式合法stake_net_quantity与stake_cpu_quantity需符合 asset 格式数量 空格 符号如1.0000 EOS且精度与代币精度一致否则 cleos 解析to_asset会报错NET/CPU 可分别质押可将某个方向设为0 EOS实现只质押 CPU 或只质押 NET--transfer需谨慎一旦转移from将失去对质押代币的解绑权与相关投票权--buyram与--buy-ram-bytes互斥二者同时设置会直接报错终止离线检查使用-d不广播先查看构造出的交易内容确认 action 负载无误后再去掉-d正式广播配合-j可获得 JSON 格式结果便于自动化集成权限控制默认以fromactive签名也可通过-p显式指定其他权限级别。八、总结cleos system delegatebw是 EOSIO 资源模型中最核心的 CLI 入口之一。通过本文你可以掌握四个必填位置参数from、receiver、stake_net_quantity、stake_cpu_quantity与全部标准交易选项的准确语义三个专属选项--buyram、--buy-ram-bytes、--transfer的行为差异与互斥约束从命令行到链上eosio::delegatebwaction 的完整调用链programs/cleos/main.cpp以及 ABI 结构eosio.system.abi结合 how-to-stake-resource.md 的完整实战示例与 eosio_system_tester.hpp 的测试封装理解transfer标志及组合购买 RAM 的真实用法。无论是为新账户准备资源、为 DApp 运营调配 CPU/NET 配额还是深度理解 EOSIO 资源质押机制本文给出的命令、参数与源码依据均可直接用于实际开发与排障。赞分享区块链【免费下载链接】eosAn open source smart contract platform项目地址https://gitcode.com/gh_mirrors/eo/eos点击查看免费下载相关推荐EOSIO 资源质押指南使用 cleos system delegatebw 质押 NET 与 CPU 带宽EOSIO 资源质押指南使用 cleos system delegatebw 质押 NET 与 CPU 带宽 本指南以 EOSIO 开源智能合约平台本仓库区块链EOS 网络带宽NET解除质押完全指南cleos system undelegatebw 实战解析EOS 网络带宽NET解除质押完全指南cleos system undelegatebw 实战解析 在 EOS 主网与基于 eosio 的链上账户通过质区块链使用 cleos system delegatebw 为 EOS 账户委托 CPU 带宽资源含源码级解析使用 cleos system delegatebw 为 EOS 账户委托 CPU 带宽资源含源码级解析 本指南以仓库文档 how to delegate区块链上一篇R3nzSkin国服特供版3分钟掌握英雄联盟免费换肤核心技术下一篇如何5分钟搞定Windows和Office永久激活终极免费解决方案指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表