新闻详情

新闻详情

首页 / 资讯中心 / 详情

EOSIO cleos 解除权限链接实战:用 `set action permission ... NULL` 移除动作的权限绑定(unlinkauth)

发布时间:2026/11/12 11:32:58来源:尧图网络
EOSIO cleos 解除权限链接实战:用 `set action permission ... NULL` 移除动作的权限绑定(unlinkauth)
区块链【免费下载链接】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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/11 13:52:51

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/10 19:42:40

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/12 9:50:02

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/12 9:25:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/11 15:37:39

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/10 17:14:10

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉