ARTICLE DETAIL

资讯详情

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

EOSIO 账户密钥更新实战:使用 cleos 修改账户权限密钥

EOSIO 账户密钥更新实战:使用 cleos 修改账户权限密钥 区块链【免费下载链接】eosAn open source smart contract platform项目地址https://gitcode.com/gh_mirrors/eo/eos点击查看免费下载本指南以 eos 仓库官方 How-To 文档 how-to-update-account-keys.md 为核心骨架完整讲解如何用cleos命令行工具为一个 EOSIO 区块链账户更换密钥从生成新密钥对、导入钱包到通过cleos set account permission更新active权限并验证结果。读完本文你将掌握账户权限模型下更换密钥的标准四步流程并能结合源码理解其底层updateauth动作的校验逻辑与安全约束。文档定位与适用场景该 How-To 指南解决的是 EOSIO 账户密钥轮换key rotation这一高频运维需求当账户私钥泄露、团队成员变动或需要提升安全等级时管理员需要在不重建账户的前提下将账户权限如active绑定的公钥替换为新密钥。文档以alice账户为例演示更新其active权限密钥的完整过程。文中引用的三个命令参考文档均已转换为仓库根目录相对路径分别是cleos create key 命令参考 —— 生成新密钥对cleos wallet import 命令参考 —— 将新私钥导入钱包以便签名cleos set account permission 命令参考 —— 提交链上权限更新。开始前的准备在动手更新密钥前需要满足以下条件安装受支持的cleos版本。cleos随 EOSIO 软件一同分发安装 EOSIO 即会同时安装cleos与keosd两个命令行工具参见 安装 EOSIO。拥有一个 EOSIO 账户并能访问该账户的私钥。这一步是更新权限的授权基础后续的权限变更交易需要由账户所有者权限签名。此外从实操角度还需确认本地钱包wallet已创建、处于打开open且解锁unlocked状态因为cleos wallet import与交易签名都依赖钱包中保存的密钥详见 钱包与 keosd 使用说明能连接到目标区块链节点cleos默认连接本地http://127.0.0.1:8888。理解权限层级为什么用-p aliceowner授权在 EOSIO 的权限模型中每个账户默认包含两个内置权限owner和active且active是owner的子权限。权限层级决定了授权的传递关系要修改某一权限本身必须用该权限的父权限来签名。因此更新active权限密钥时需要用aliceowner授权即-p aliceowner若要更新owner权限密钥则需要账户自身私钥owner无父权限。这一层级约束在链上实现中有强制校验详见下文「链上校验逻辑」一节其根源在于 libraries/chain/eosio_contract.cpp 中apply_eosio_updateauth的断言逻辑。整体流程概览更新账户密钥共四步全部通过cleos完成步骤命令作用1cleos create key --to-console生成新密钥对2cleos wallet import --private-key 私钥将新私钥导入本地钱包3cleos set account permission alice active 公钥 -p aliceowner在链上更新active权限4cleos get account alice验证账户权限是否更新成功下面逐一展开。步骤一生成新的密钥对cleos create key --to-console参数说明--to-console指示cleos create key命令把生成的私钥/公钥直接打印到终端。示例输出Private key: 5KDNWQvY2seBPVUz7MiiaEDGTwACfuXu78bwZu7w2UDM9A3u3Fs Public key: EOS5zG7PsdtzQ9achTdRtXwHieL7yyigBFiJDRAQonqBsfKyL3XhC关于cleos create key的补充说明依据 create/key.md该命令创建新密钥对既可以把结果打印到屏幕也可以写入文件--file与--to-console二者必须且只能选择其一。完整选项包括-h,--help帮助、--r1使用 R1 曲线生成密钥适用于 iPhone 设备默认使用比特币生态的 K1 曲线、-f,--file 文件名将密钥写入指定文件。生产环境建议将密钥写入文件而非打印到终端避免终端历史记录泄露私钥cleos create key --file my_keys.txt示例输出saving keys to my_keys.txt随后可查看文件内容cat my_keys.txt示例输出Private key: 5KWcfnGao5K6WV65Zgjd1xvpugRUeKwb6oxzmwaS1tPE2Ef4qzo Public key: EOS7oDiBtzSHtShprGFmXm9JLnwxhcPeDyhww3tXDvVATDYtciLGG步骤二将新私钥导入钱包cleos wallet import --private-key 5KDNWQvY2seBPVUz7MiiaEDGTwACfuXu78bwZu7w2UDM9A3u3Fs参数说明--private-key 5KDNWQvY2seBPVUz7MiiaEDGTwACfuXu78bwZu7w2UDM9A3u3Fs指定要导入的、WIF 格式的私钥。示例输出imported private key for: EOS5zG7PsdtzQ9achTdRtXwHieL7yyigBFiJDRAQonqBsfKyL3XhC关于cleos wallet import的补充说明依据 wallet/import.md该命令将私钥导入钱包如果keosd尚未运行命令会自动拉起keosd进程。完整选项-n, --name 钱包名指定导入到哪个钱包默认钱包名为default、--private-key WIF 私钥。前置条件目标钱包必须处于打开且解锁状态若钱包已锁定需先用cleos wallet unlock解锁。也可以交互式导入直接执行cleos wallet import不带--private-key命令会提示你输入私钥。若需导入到指定钱包可使用命名参数形式cleos wallet import --name my_wallet --private-key 5KDNWQvY2seBPVUz7MiiaEDGTwACfuXu78bwZu7w2UDM9A3u3Fs示例输出imported private key for: EOS5zG7PsdtzQ9achTdRtXwHieL7yyigBFiJDRAQonqBsfKyL3XhC导入成功后后续cleos set account permission提交交易时即可用钱包中的新私钥完成签名这一步也可先用cleos wallet keys核对钱包中的公钥集合。步骤三在链上更新active权限密钥cleos set account permission alice active EOS5zG7PsdtzQ9achTdRtXwHieL7yyigBFiJDRAQonqBsfKyL3XhC -p aliceowner参数说明alice 要更新密钥的账户名active 要更新密钥的权限名EOS5zG7PsdtzQ9achTdRtXwHieL7yyigBFiJDRAQonqBsfKyL3XhC 新的公钥-p aliceowner 用于授权这笔交易的权限级别因为active的父权限是owner。示例输出executed transaction: ab5752ecb017f166d56e7f4203ea02631e58f06f2e0b67103b71874f608793e3 160 bytes 231 us # eosio eosio::updateauth {account:alice,permission:active,parent:owner,auth:{threshold:1,keys:[{key:E...底层原理这笔命令究竟做了什么从源码结构看cleos set account permission最终构造并广播的是系统合约的eosio::updateauth动作。在 programs/cleos/main.cpp 中可以看到对应的动作构造函数chain::action create_updateauth(const name account, const name permission, const name parent, const authority auth) { return action { get_account_permissions(tx_permission, {account,config::active_name}), updateauth{account, permission, parent, auth}}; }即updateauth{account, permission, parent, auth}四个字段账户名、权限名、父权限名、新的权限结构threshold 阈值、keys 公钥列表等。示例输出中的eosio eosio::updateauth即表示该动作由eosio系统合约执行交易体里携带了{account:alice,permission:active,parent:owner,auth:{...}}的完整载荷。同时cleos端还负责把传入的「公钥字符串 / JSON 字符串 / JSON 文件名」统一解析为合法的authority结构见 main.cpp 的parse_json_authority_or_key若传入的是合法公钥字符串则包装为单公钥权威threshold1若传入 JSON则校验 keys/accounts/waits 的排序与阈值是否可满足。链上校验逻辑更新权限有哪些硬性约束eosio::updateauth在链上由 libraries/chain/eosio_contract.cpp 的apply_eosio_updateauth处理其中包含多项安全约束权限名不能为空且不能以eosio.开头该前缀被系统保留权限不能设置自己为父权限active的父权限必须是ownerowner权限不能有父权限除owner外的其他权限必须有非空父权限若新的权威结构中包含延迟等待waits其wait_sec不能超过链上配置的max_transaction_delay权限存在则更新其 authority不存在则创建新权限所以同一命令既可更新既有权限也可创建自定义权限权限更新会产生 RAM 用量差异链上通过context.add_ram_usage(...)对账户 RAM 进行计费增大时占用更多 RAM缩小时退还。这些校验确保用户无法通过cleos set account permission破坏权限层级结构也解释了为何文档示例中必须用aliceowner而非aliceactive来授权。set account permission的其他实用选项依据 set-account-permission.md该命令还支持以下能力authority 参数三种形态公钥字符串如上例、JSON 字符串、或包含 authority 定义的 JSON 文件名传null则删除该权限对应deleteauth动作parent 位置参数创建新权限时指定父权限名默认值为active--add-code/--remove-code为权限增加/移除eosio.code权限用于智能合约账户通过active权限发起内联动作事务级选项-x,--expiration过期时间默认 30 秒、--delay-sec延迟秒数默认 0、-d,--dont-broadcast仅打印不上链、-j,--jsonJSON 输出、--max-cpu-usage-ms与--max-net-usage资源预算上限、-r,--ref-blockTAPOS 引用块等。步骤四验证账户密钥已更新cleos get account alice参数说明alice为要查询的账户名。示例输出permissions: owner 1: 1 EOS6c5UjmyRsZSdikLbpAoMdg4V7FQwvdhep3KMxUifzmpDnoLVPe active 1: 1 EOS5zG7PsdtzQ9achTdRtXwHieL7yyigBFiJDRAQonqBsfKyL3XhC memory: quota: xxx used: 2.66 KiB net bandwidth: used: xxx available: xxx limit: xxx cpu bandwidth: used: xxx available: xxx limit: xxx在输出中核对permissions部分active权限的公钥应已变为步骤一中生成的新公钥示例中的EOS5zG7PsdtzQ9achTdRtXwHieL7yyigBFiJDRAQonqBsfKyL3XhC而owner权限的密钥保持不变说明更新成功。注意更新active密钥后旧私钥立即失效任何仍使用旧密钥签名的交易都会被拒绝因此请确保新私钥已安全备份。进阶eosio.code权限与自定义权限同一命令还可用于更复杂的权限场景依据 set-account-permission.md 中的示例为合约账户添加eosio.code权限使合约账户能以active权限调用内联动作cleos set account permission alice active --add-code -p aliceactive创建自定义权限例如为 alice 增加名为customp的权限父权限为activecleos set account permission alice customp EOS58wmANoBtT7RdPgMRCGDb37tcCQswfwVpj6NzC55D247tTMU9D active -p aliceactive示例输出executed transaction: 69c5297571ce3503edb9a1fd8a2f2a5cc1805ad19197a8751ca09093487c3cf8 160 bytes 134 us # eosio eosio::updateauth {account:alice,permission:customp,parent:active,auth:{threshold:1,keys:[{key:EOS...这说明同一个updateauth动作同时承载了「更新既有权限」与「创建新权限」两种职责与上文apply_eosio_updateauth中「权限存在则修改、不存在则创建」的分支逻辑完全吻合。总结通过本指南的四步流程——cleos create key生成新密钥对、cleos wallet import导入私钥、cleos set account permission以父权限授权提交updateauth动作、cleos get account验证结果——你可以安全地为 EOSIO 账户完成密钥轮换。掌握这一流程的底层原理权限层级、eosio::updateauth链上校验、RAM 计费后你还可以举一反三地使用cleos set account permission管理自定义权限、部署eosio.code权限满足更复杂的账户权限管理需求。赞分享区块链【免费下载链接】eosAn open source smart contract platform项目地址https://gitcode.com/gh_mirrors/eo/eos点击查看免费下载相关推荐N46Whisper5个步骤让日语视频字幕制作效率提升300%N46Whisper5个步骤让日语视频字幕制作效率提升300% 还在为日语视频的字幕制作而头疼吗N46Whisper是一款基于AI语音识别技术的日语字幕自动AI 应用语音notebooklm-py 的 Web batchexecute RPC 参考混淆方法 ID、线格式 Payload 与 UI 选择器对照notebooklm py 的 Web batchexecute RPC 参考混淆方法 ID、线格式 Payload 与 UI 选择器对照 本文基于 docs区块链EOSIO 使用 cleos system buyram 为账户购买 RAM 实战指南EOSIO 使用 cleos system buyram 为账户购买 RAM 实战指南 本篇指南讲解如何通过 EOSIO 自带的命令行工具 cleos 使用区块链创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表