MultiversX入口点分析器Skill:一键摸清智能合约的公共攻击面
- 它是什么:一款面向 MultiversX(原 Elrond)Rust 智能合约的安全分析技能,英文名
mvx_entry_points,技能 ID 为 12575,专门枚举并评估合约中所有对外暴露的入口点。 - 核心能力:自动识别
#[endpoint]、#[view]、#[payable]、#[init]、#[upgrade]、#[callback]等multiversx_sc宏标注,并按风险等级分类,输出标准化的入口点清单表与攻击表面总结。 - 最大差异:它不是笼统的“代码审查”,而是紧扣 MultiversX 合约框架的宏语义,把“谁能调用、是否收钱、碰哪些存储”一次性标注清楚。
- 最适合谁:MultiversX 链上合约开发者、安全审计人员、以及接手陌生合约代码的团队。
- 上手成本:只需一段合约代码和一次对话式提问,无需额外部署扫描服务。
1. 该技能叫什么?如何下载安装 AI 技能提升开发效率?
技能基本信息
| 项目 | 内容 |
|---|---|
| 技能中文名 | MultiversX入口点分析器Skill |
| 技能英文名 | mvx_entry_points |
| 技能ID | 12575 |
| 所属领域 | 区块链安全 / 智能合约代码审计 |
| 技术栈依赖 | Rust、multiversx_sc 框架宏体系 |
它解决什么问题
在 MultiversX 上,智能合约用 Rust 编写,通过 multiversx_sc 提供的过程宏来标记“外部可调用函数”。攻击者能接触到的全部表面,就是这个宏标注的集合。但真实项目里这些标注散落在 lib.rs、admin.rs、views.rs 等多个文件中,靠肉眼逐个核对,极易漏掉一个没加访问控制的 #[endpoint],或者一个没校验代币 ID 的 #[payable] 函数——而这两类疏漏往往直接对应“资金被拿走”的结局。
mvx_entry_points 的价值就在于:把这个靠人眼扫代码的枯燥动作,变成一次结构化、有清单、有风险分级、有完成标准的分析流程。
如何“一键安装”并接入 AI 工作流
AI 技能(Skill)的通用接入思路是“在支持技能的 AI 客户端中启用该技能,之后用自然语言唤起它”。具体到本技能,建议按以下步骤操作:
- 确认安装前提:你需要一个支持 AI 技能(Skill)加载机制的 AI 客户端或开发环境;同时准备好待分析的合约工程(包含
src/目录下的.rs源文件),或直接把合约代码粘贴进对话。全程无需在链上部署合约,也不需要连接节点。 - 找到技能入口:在客户端的技能市场、技能管理面板或插件列表中,使用技能名称
mvx_entry_points或技能 ID12575进行检索并安装启用(具体入口位置与启用方式以官方说明为准)。 - 验证是否生效:安装后发起一次简单测试,例如输入“请用 mvx_entry_points 分析这段合约的入口点:
#[endpoint] fn stake(...)”,如果返回结果出现“入口点清单表格 + 攻击表面总结”这种标准输出结构,说明技能已被正确加载。 - 遇到无法加载的情况:先检查客户端版本是否支持技能机制、技能是否处于启用状态、以及当前会话是否允许读取本地文件,这些是最常见的三类原因(详细排障路径以官方说明为准)。
2. 该技能的主要功能和特点
功能一:全量入口点识别
技能会扫描代码中所有通过 multiversx_sc 宏暴露出来的函数,覆盖六类标注:
#[endpoint]:公共写入函数,属于高风险,因为它会改变链上状态;#[view]:公共读取函数,通常为低风险(但技能会提示“若在链上被其他合约调用则需重新评估”);#[payable]:可接收 EGLD / ESDT 的函数,属于关键风险,直接关系资金处理;#[init]:构造函数,部署时执行,影响全部初始状态;#[upgrade]:升级处理程序,关键风险,迁移逻辑一旦出错就是全局性事故;#[callback]:异步调用回调,容易被遗漏但同样是外部触发路径。
功能二:按风险类型分级审查
技能把入口点拆成三类分别给检查要点:
- 非支付端点:问三件事——有没有
require!断言?谁可以调用(是否仅 owner)?风险是未授权的状态更改。 - 支付端点(
#[payable]):重点核查是否使用self.call_value().all()或self.call_value().single()读取转账值、是否校验amount > 0、是否验证代币 ID。风险是资金被窃取或接收伪造代币。 - 视图函数:核查是否存在“名义只读、实际改状态”的情况(Rust 允许内部可变性,这类滥用并非不可能)。
功能三:四步标准化分析工作流
列出全部入口点 → 标注访问控制(OnlyOwner / Whitelisted / Public)→ 标注值处理属性(Refusable / Payable)→ 追踪每个入口点触碰的存储映射器(Mapper),形成数据流关系。
功能四:直指两类具体攻击
- 权限提升:敏感端点是否被意外公开;
- 拒绝服务(DoS):公共端点是否向
UnorderedSetMapper无限制插入数据,导致存储无限膨胀。
功能五:固定格式产出,可直接进审计报告
输出分为“入口点清单表”和“攻击表面总结”两块,后者包含总端点数量、关键/高/中/低四级统计、未检查的支付端点列表、无访问控制的公共状态变更函数列表,以及 Mandos 测试场景中缺失的端点。技能还内置了完成标准:每一条宏标注都必须出现在清单中、每条都有风险分类、总结必须填充、任何未做代币校验的支付端点必须被标记——相当于给分析结果加了一道自检。
和普通工具比强在哪
通用 AI 代码助手也能“读代码”,但它不懂 multiversx_sc 的宏语义,容易把 #[view] 和 #[endpoint] 混为一谈;传统 EVM 生态的静态分析工具(面向 Solidity)根本不识别 Rust 宏;纯人工审计则耗时且依赖经验。本技能的差异点是:链特定语义 + 固定输出结构 + 明确完成标准,让结果可比、可复核、可交接。
3. 如何使用该技能?
第 1 步:准备输入
准备好合约源码。可以整体上传工程,也可以按文件粘贴。若合约规模较大,建议至少提供包含宏标注的文件(常见为 src/lib.rs、src/admin.rs、src/views.rs)。
第 2 步:唤起技能并说明目标
示例输入:
请使用 mvx_entry_points 分析这个 MultiversX 合约的入口点,重点检查所有
#[payable]函数是否有代币校验和金额校验,并输出入口点清单表和攻击表面总结。
第 3 步:读取入口点清单
技能会返回类似下表的成果(这是技能内置的示例格式):
| # | 端点 | 类型 | 支付 | 访问控制 | 风险级别 | 存储接触 | 位置 |
|---|---|---|---|---|---|---|---|
| 1 | stake | endpoint | EGLD | Public | Critical | user_stake, total_staked | src/lib.rs:42 |
| 2 | claim | endpoint | No | Public | High | user_rewards | src/lib.rs:87 |
| 3 | set_fee | endpoint | No | #[only_owner] | Medium | fee_percent | src/admin.rs:12 |
| 4 | get_balance | view | No | Public | Low | - | src/views.rs:5 |
| 5 | init | init | No | Deploy only | Critical | all mappers | src/lib.rs:1 |
每一行都能直接映射到“谁可以调用 / 收不收钱 / 动了哪块存储 / 在第几行”,定位成本几乎为零。
第 4 步:查看攻击表面总结
输出示例:
总端点:5 关键(支付/初始化/升级):2 高(改变状态,公共):1 中(改变状态,受限):1 低(视图):1 未检查的支付端点:stake(未校验代币 ID) 公共改变状态无访问控制:claim Mandos 场景中缺少的端点:set_fee
这份总结最适合直接贴进团队评审会议或审计报告的“风险概览”章节。
第 5 步:按提示修复并复检
根据“未检查的支付端点”“无访问控制的公共端点”两条清单逐项修改,然后再次调用技能,确认这些条目消失。若技能提示“Mandos 场景中缺少的端点”,说明测试覆盖不全,应补充对应测试场景。
第 6 步:纳入版本流程
建议在每次提交涉及端点变更的 PR 时跑一次,让入口点清单随代码一起演进。
4. 同类型竞品对比分析
| 方案名称 | 定位 | 核心功能 | 安装/使用门槛 | 适用场景 | 优势与不足 |
|---|---|---|---|---|---|
| mvx_entry_points(本技能) | MultiversX 合约入口点专项分析 | 宏识别、风险分级、访问控制标注、存储接触追踪、标准清单与攻击面总结 | 低:启用技能后用自然语言提问即可,需提供源码 | 上线前自查、审计初筛、代码评审、接手陌生合约 | 优势:懂 multiversx_sc 宏语义,输出结构化、有完成标准;不足:聚焦入口点维度,不覆盖完整业务逻辑漏洞 |
| 通用 AI 代码助手(直接对话) | 泛化代码理解与问答 | 代码解释、改写、缺陷提示 | 极低:粘贴代码即可 | 快速理解陌生代码 | 优势:通用性强;不足:不熟悉 MultiversX 宏体系,容易漏判 #[payable]、#[callback],输出格式不固定,难以横向比较 |
| EVM 生态静态分析工具(如面向 Solidity 的扫描器) | 智能合约自动化漏洞扫描 | 漏洞模式匹配、符号执行等 | 中:需搭建工具链、适配编译器版本 | Solidity 合约安全扫描 | 优势:自动化程度高、规则库成熟;不足:不解析 Rust 宏,无法直接用于 MultiversX 合约 |
| 人工安全审计 | 深度人工代码审查 | 业务逻辑、经济模型、边界条件全面评估 | 高:成本高、周期长 | 高价值合约的正式审计 | 优势:深度最强、能发现设计级缺陷;不足:昂贵且慢,人工枚举入口点易遗漏,适合与本技能配合做前置提效 |
选型建议:日常自查和 PR 评审用本技能;EVM 项目继续用对应生态工具;正式上主网前的高价值合约,用本技能做前置梳理,再交人工审计做深度覆盖。
5. 该技能的典型应用场景与实际体验情况
场景一:合约开发者上线前自查
- 角色与痛点:独立开发者或小团队写完质押合约,不确定有没有把管理员函数误写成公开
#[endpoint]。 - 使用方式:把
src/全量源码交给技能,要求输出清单表 + 攻击面总结。 - 实际体验:上手几乎零成本,不需要配置任何环境;一次性看到所有端点的访问控制列,
set_fee这类本应#[only_owner]的函数如果显示Public,一眼就能发现。注意事项:源码必须完整提供,只贴片段会导致“Mandos 场景缺失”类提示失真。
场景二:安全审计人员的初筛环节
- 角色与痛点:审计员拿到一份几万行的陌生合约,需要先画出攻击面地图再决定深挖方向。
- 使用方式:先用技能生成入口点清单与风险统计,把 Critical / High 条目作为优先深入对象。
- 实际体验:把“人工枚举宏标注”这个最机械的环节交给技能后,审计精力可以集中在资金流和业务逻辑上。技能对“未检查的支付端点”的强制标记,正好对应审计里最容易出问题的地方。注意事项:清单是线索而非结论,仍需人工确认每个
require!的实际语义是否充分。
场景三:团队代码评审与知识交接
- 角色与痛点:老项目交接时,新人不知道哪些函数可以被外部调用,只能逐个文件翻。
- 使用方式:让技能输出带文件行号的入口点清单表,作为文档沉淀下来。
- 实际体验:表格里的“存储接触”列尤其有用,能快速建立“哪个端点改哪张表”的映射关系。注意事项:代码重构后需重跑,清单才会与实际一致。
场景四:支付端点专项复查(DeFi 类合约)
- 角色与痛点:合约接收 EGLD / ESDT,担忧某个
#[payable]函数没校验代币 ID,导致伪造代币被接受。 - 使用方式:直接提问“列出所有
#[payable]端点,并检查是否使用了self.call_value()读值、是否校验amount > 0与代币 ID”。 - 实际体验:技能会明确指向上述三项检查点,输出“未检查的支付端点:无”或具体名单,判断干脆。注意事项:ESDT 多代币场景建议逐一代币核对,不要只看汇总行。
6. 该技能能为用户带来的价值
提升效率:把“逐个文件搜索宏标注、人工记录行号、手写风险表格”的过程压缩为一次提问,原本需要半天到一天的入口点梳理,可在数分钟内得到初版清单,并且每次重跑结果结构一致。
降低门槛:不需要熟悉 multiversx_sc 全部宏语义,也不需要掌握符号执行等重型分析技术,只要会用自然语言描述需求,就能得到接近审计级格式的产出。对刚进入 MultiversX 生态的 Rust 开发者尤其友好。
减少漏审风险:技能内置的完成标准强制覆盖 #[endpoint]、#[view]、#[payable]、#[init]、#[upgrade]、#[callback] 六大类,人工最容易漏的正是 #[callback] 和 #[upgrade] 这两类“低频但致命”的入口,而这恰恰是资金与迁移逻辑的关键风险点。
长期价值:入口点清单可随代码版本持续沉淀,逐步形成项目的“攻击面台账”。在安全事件频发的链上环境里,一份持续更新、带风险分级的对外接口清单,本身就是团队最重要的安全资产之一;对新成员来说,也是最快的合约结构入门材料。
7. 常见问题 FAQ
Q1:这个技能怎么安装?需要付费吗?
A:在支持 AI 技能机制的客户端中,通过技能名称 mvx_entry_points 或技能 ID 12575 检索并启用即可,安装前提与启用方式以官方说明为准。是否收费、有无免费额度同样以官方说明为准,本文不对价格做任何承诺。
Q2:它能直接替我完成安全审计吗?
A:不能,也不该这样定位。它聚焦“入口点枚举 + 风险分级 + 支付端点标记”,是审计的前置地图而非终审结论。业务逻辑漏洞、经济模型缺陷、跨合约组合风险,仍需人工深度分析。合理用法是用它把机械枚举做掉,把人力留给高价值判断。
Q3:只支持 MultiversX 合约吗?Solidity 项目能用吗?
A:技能是围绕 multiversx_sc 的宏体系(#[endpoint]、#[view]、#[payable]、#[init]、#[upgrade]、#[callback])设计的,面向 MultiversX 的 Rust 智能合约。Solidity 合约没有这套宏,应使用 EVM 生态对应的分析工具。
Q4:代码规模很大,需要全部提供吗?
A:建议尽量完整。技能的完成标准要求每一条相关宏标注都进入清单,若只提供部分文件,清理出的入口点会不完整,还可能误报“Mandos 场景中缺少的端点”。若必须分批,可按入口点所在文件分组,并在提问时说明“本轮仅分析 src/admin.rs”,多轮结果再合并。
Q5:它和通用 AI 代码助手读同一份代码,差别在哪?
A:差别在“知道该看什么”。通用助手可能把 #[view] 和 #[endpoint] 都当作普通函数描述;本技能会区分读/写、是否接收 EGLD / ESDT、访问控制是谁、碰了哪些 Mapper,并按固定的清单表与攻击面总结输出,还附带完成标准自检。结果可比较、可交接,这是通用对话难以稳定提供的。