区块链【免费下载链接】eosAn open source smart contract platform项目地址https://gitcode.com/gh_mirrors/eo/eos点击查看免费下载导读在 EOSIO 区块链上权限链接permission link机制允许账户为某个智能合约的具体 action 单独指定一个最低授权权限从而把合约调用的鉴权从默认的active/owner权限中剥离出来。本文以 eos 仓库中的官方操作指南为基础讲解如何通过cleos set action permission命令配合关键字NULL解除unlink一个已链接的权限级别并深入仓库源码揭示该命令在cleos客户端、链上unlinkauth原生动作与authorization_manager校验逻辑中的完整执行链路。读完本文你将能独立完成为指定合约动作解除权限绑定、恢复默认授权行为的完整操作并理解解除操作的底层原理与失败场景。前置条件Before you begin在动手解除权限链接之前需要满足以下条件安装当前受支持的cleos版本cleos随 EOSIO 软件一同分发安装 EOSIO 即会同时安装cleos与keosd两个命令行工具安装指引见 docs/00_install/index.md。理解以下基础概念账户AccountEOSIO 上的身份实体所有权限与合约动作都挂载在账户之下权限级别Permission Level账户内部的授权层级最常用的是owner、active也可以自定义子权限如customp动作Action智能合约暴露的可调用操作例如转账合约的transfer动作。核心概念什么是解除权限链接EOSIO 的权限链接是一张动作 → 最低权限的映射表。当你执行cleos set action permission alice hodlcontract transfer customp -p aliceactive时链上实际产生的是一个eosio::linkauth动作其数据为{account:alice,code:hodlcontract,type:transfer,requirement:customp}含义是只有持有不低于customp权限的签名才被允许以账户alice的身份调用hodlcontract合约的transfer动作。解除权限链接就是把这张映射删除此后该动作不再有专门的最低权限要求恢复为 EOSIO 的默认行为——即由调用时使用的权限直接决定能否执行通常对应账户的active权限。与之对应的操作是建立权限链接完整的操作指南见 docs/02_cleos/02_how-to-guides/how-to-link-permission.md。链接与解除使用同一条命令区别仅在于最后一个位置参数是权限名还是NULL。命令总览与参数说明解除权限链接使用的命令是cleos set action permission完整命令格式如下cleos set action permission [OPTIONS] account code type requirement其中参数类型是否必填说明accountTEXT必填要设置/删除权限动作链接的账户codeTEXT必填拥有该动作代码的合约账户即合约部署所在的账户typeTEXT必填动作名称。注意权限必须按动作逐个设置requirementTEXT必填传入NULL表示删除链接传入权限名表示设置或更新该动作所需的最低权限常用选项选项说明-h, --help打印帮助信息并退出-x, --expiration设置交易过期时间秒默认 30 秒-p, --permission授权本次操作所用的账户与权限级别格式为accountpermission默认accountactive-j, --json以 JSON 格式打印结果-d, --dont-broadcast不广播交易到网络仅打印到 stdout--return-packed与--dont-broadcast配合使用输出打包后的交易-r, --ref-block设置用于 TAPOS 的参考区块号或区块 ID--max-cpu-usage-ms交易执行的 CPU 用量上限毫秒默认 0 表示不限制--max-net-usage交易的网络用量上限字节默认 0 表示不限制--delay-sec设置交易的延迟秒数默认 0 秒完整的官方命令参考文档见 docs/02_cleos/03_command-reference/set/set-action-permission.md。解除权限链接的标准步骤以下步骤演示如何解除账户alice对合约hodlcontract的transfer动作的权限链接cleos set action permission alice hodlcontract transfer NULL各参数含义alice 持有被解除权限链接的账户名hodlcontract 拥有该智能合约代码的合约账户名transfer 要解除链接的动作名NULL 删除该动作上已有的权限链接。如果不显式指定-p命令默认以aliceactive作为授权签名。更严谨的写法是显式声明授权权限cleos set action permission alice hodlcontract transfer NULL -p aliceactive该命令执行成功后会在终端打印类似如下的输出executed transaction: 50fe754760a1b8bd0e56f57570290a3f5daa509c090deb54c81a721ee7048201 120 bytes 242 us # eosio eosio::unlinkauth {account:alice,code:hodlcontract,type:transfer}可以看到链上实际执行的是eosio::unlinkauth原生动作载荷中只有account、code、type三个字段不再包含requirement字段——这正是解除链接与建立链接linkauth带requirement字段在链上数据层面的本质区别。解除链接后发生了什么解除成功后transfer动作不再受自定义最低权限的约束对合约动作的调用将回到默认授权流程若alice是普通用户账户调用时使用其active权限即可正常执行若alice是合约账户且该动作是合约自己发起的如内联动作则不再需要链接到eosio.code权限按常规授权处理。底层原理cleos 如何把NULL变成unlinkauthcleos set action permission的实现在 programs/cleos/main.cpp 中核心逻辑位于set_action_permission_subcommand结构体programs/cleos/main.cpp#L959-L988permissions-callback([this] { name account name(accountStr); name code name(codeStr); name type name(typeStr); bool is_delete boost::iequals(requirementStr, null); if (is_delete) { send_actions({create_unlinkauth(account, code, type)}, signing_keys_opt.get_keys()); } else { name requirement name(requirementStr); send_actions({create_linkauth(account, code, type, requirement)}, signing_keys_opt.get_keys()); } });这段代码揭示了几个关键细节NULL的判断是大小写不敏感的客户端使用boost::iequals(requirementStr, null)做忽略大小写的字符串比较因此NULL、null、Null均被识别为删除操作并据此构建unlinkauth动作NULL不允许作为权限名使用一旦命中删除分支requirement字符串就不会再被解析为name类型避免与真实权限名混淆构建动作由辅助函数完成create_unlinkauthprograms/cleos/main.cpp#L768-L771会构造一个chain::action其authorization取自get_account_permissions(tx_permission, {account, config::active_name})即默认使用目标账户的active权限作为本交易的授权声明。链上校验authorization_manager 如何验证解除操作unlinkauth动作在链上由系统合约eosio处理。在 eos 仓库中动作处理器通过宏注册于 libraries/chain/controller.cpp#L278-L279SET_APP_HANDLER( eosio, eosio, linkauth ); SET_APP_HANDLER( eosio, eosio, unlinkauth );对应的鉴权检查实现在 libraries/chain/authorization_manager.cpp 的check_unlinkauth_authorizationlibraries/chain/authorization_manager.cpp#L412-L424中void authorization_manager::check_unlinkauth_authorization( const unlinkauth unlink, const vectorpermission_level auths )const { EOS_ASSERT( auths.size() 1, irrelevant_auth_exception, unlink action should only have one declared authorization ); const auto auth auths[0]; EOS_ASSERT( auth.actor unlink.account, irrelevant_auth_exception, the owner of the linked permission needs to be the actor of the declared authorization ); const auto unlinked_permission_name lookup_linked_permission(unlink.account, unlink.code, unlink.type); EOS_ASSERT( unlinked_permission_name, transaction_exception, cannot unlink non-existent permission link of account ${account} for actions matching ${code}::${action}, ... ); }从中可以提炼出解除操作在链上必须满足的三条硬性规则只能有一个授权声明unlinkauth动作必须且只能带一个authorization授权者必须是链接归属账户授权声明的actor必须等于unlink.account即只有账户本人或其授权的子权限签名才能解除自己账户下的链接链接必须真实存在若该账户对该动作本就没有权限链接交易会被transaction_exception拒绝并报错cannot unlink non-existent permission link——这解释了为什么对从未链接过的动作重复执行NULL操作会失败而不是静默成功。此外同文件中的check_linkauth_authorizationlibraries/chain/authorization_manager.cpp#L375-L410还对建立链接设置了限制在fix_linkauth_restriction协议特性生效后不能对eosio系统合约的updateauth、deleteauth、linkauth、unlinkauth、canceldelay等敏感系统动作设置最低权限链接。这也意味着这些系统动作同样不应也不被允许被随意链接后再解除相关限制会直接影响你规划权限链接方案的边界。常见场景与注意事项解除后权限恢复默认解除链接只删除动作 → 最低权限的映射不会删除任何权限本身。若要删除自定义权限应使用cleos set account permission见 docs/02_cleos/03_command-reference/set/set-account-permission.md或cleos set account permission ... NULL的权限删除用法。对未链接的动作执行解除会失败正如链上校验规则所述cannot unlink non-existent permission link是正常防护不属于命令执行错误。区分解除链接与删除权限两者是不同层级的操作——前者只影响单个合约动作的鉴权映射后者影响账户的整个权限结构误删权限可能导致账户失去控制能力操作前应谨慎核对账户与权限名。大小写不敏感但建议规范书写客户端按忽略大小写的方式识别NULL社区与官方文档统一使用大写NULL以保持可读性。合约内联动作场景如果某合约动作此前被链接到eosio.code以便合约以自身身份发起内联动作解除链接后该内联调用将不再被该最低权限放行需改用其他授权方式如直接使用active。相关资源官方操作指南本文主题文档docs/02_cleos/02_how-to-guides/how-to-unlink-permission.md建立权限链接指南docs/02_cleos/02_how-to-guides/how-to-link-permission.md命令参考docs/02_cleos/03_command-reference/set/set-action-permission.mdcleos 客户端实现programs/cleos/main.cpp链上鉴权校验libraries/chain/authorization_manager.cpp动作处理器注册libraries/chain/controller.cpp赞分享区块链【免费下载链接】eosAn open source smart contract platform项目地址https://gitcode.com/gh_mirrors/eo/eos点击查看免费下载相关推荐notebooklm-py 的 Web batchexecute RPC 参考混淆方法 ID、线格式 Payload 与 UI 选择器对照notebooklm py 的 Web batchexecute RPC 参考混淆方法 ID、线格式 Payload 与 UI 选择器对照 本文基于 docs区块链EOS 多签账户配置实战使用 cleos set account permission 构建多重签名权限EOS 多签账户配置实战使用 cleos set account permission 构建多重签名权限 导读 本指南讲解如何在 EOS 区块链上通过 cle区块链EOSIO 账户密钥更新实战使用 cleos 修改账户权限密钥EOSIO 账户密钥更新实战使用 cleos 修改账户权限密钥 本指南以 eos 仓库官方 How To 文档 how to update account k区块链创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
CentOS磁盘扩容实战:LVM、分区、挂载与fstab全攻略 磁盘满了这件事,基本每个搞过 Linux 运维的人都躲不掉。我上个月刚处理完一台 CentOS 老服务器的根分区告警,使用率飙到 97%,监控连续报警,业务日志写不进去。这次扩容过程踩了不少坑,也把几年前积累的一些经验重新捡了… · 2026/9/24 18:22:48
Harbor与Hadess制品管理对比:Docker部署及Nginx升级实战 做了这么多年后端,我越来越觉得“制品管理”这件事是被大多数团队低估的基础设施。项目多了以后,镜像散落在各个服务器上,哪个版本部署在哪儿全靠聊天记录,出了问题根本没法追溯。后来我认真调研并实践过几款制品管理工具… · 2026/9/24 18:22:48
OpenStack实例生命周期管理:Terminate与Pause/Resume操作全解 玩 OpenStack(33):Terminate 和 Pause/Resume Instance,实例生命周期里的“刹车”与“拆解”我做了几年 OpenStack 运维之后发现一个很有意思的现象:新手最爱研究的是怎么创建实例,怎么把一台虚拟机从镜像拉… · 2026/9/24 18:22:36
Word打开显示只读的6大原因与精准修复方案 1. 为什么Word一打开就“锁住”了?这不是Bug,是系统在悄悄告诉你某些事 你双击一个Word文档,界面右上角赫然写着“只读”,编辑光标变成灰色,CtrlS毫无反应——这种瞬间被剥夺编辑权的体验,几乎每个办公族都… · 2026/9/24 19:35:49
WinPE启动盘制作与Windows纯净安装实战指南 1. 这不是“装系统”,是重建你对Windows底层控制权的起点很多人点开这个标题,第一反应是:“我又不是电脑小白,还用得着学PE?”——这话我十年前也说过。直到某天凌晨三点,客户服务器蓝屏报错0x0000007B&… · 2026/9/24 19:35:49
VS Code Python解释器选择与虚拟环境配置完全指南 昨天有个刚转Python的同事跑过来,脸色很不好看:“我在VS Code里明明选了Python 3.11解释器,为什么跑起来还是老版本?装OpenCV也一直报错,网上搜了半天都说是解释器问题,可我选的就是对的啊。”我看了一眼他… · 2026/9/24 19:35:49
VECM向量误差修正模型实战:从协整检验到滚动监控的Python落地指南 简介:这份资源面向宏观经济与金融时间序列分析的学习者和研究者,聚焦向量误差修正模型(VECM)的MATLAB实现,用于处理多变量非平稳数据间的长期均衡与短期调整关系。压缩包共4个文件,均为m脚本,整… · 2026/9/24 19:35:49
ByteBuddy泛型签名陷阱:同名T并非同一个变量 前阵子在一个基于 ByteBuddy 的动态 DAO 框架里做泛型返回类型解析,我踩了一个非常隐蔽的坑。日志里没有任何异常,没有 NPE,也没有 ClassCastException,只有反射拿回来的泛型信息完全不符合预期。更抓狂的是:方法上有个… · 2026/9/24 19:35:43
JupyterLab迁移指南:多文件管理、代码补全与内核管理实践 把 Jupyter Notebook 换成 JupyterLab 这件事,我拖了很久,真上手之后才后悔没早点做。JupyterLab 是 Notebook 官方的下一代工作台,在同一个网页界面里集成了 notebook、代码编辑器、终端和文件管理,专门解决 Notebook 在项目变大… · 2026/9/24 19:35:43
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44