MVX原子借出-执行-验证模式Skill:在一个事务内安全完成借出、回调与还款校验
- 一句话定位:这是一份面向 MultiversX(MultiversX 区块链)智能合约开发的“闪电贷式”原子操作范式,把借出资产、执行外部回调、校验还款三件事固定在一个事务里原子完成。
- 核心资产是清单:技能内置 5 项安全检查——重入防护、分片验证、端点验证、还款验证、防护清理,并配有可直接参考的 Rust 端点示例。
- 解决的是“顺序对了才安全”:原子借出类逻辑最大的风险不是业务公式,而是漏掉某一项检查导致资产被掏空或原子性被破坏。
- 明确了边界:技能直接指出跨分片操作会破坏原子性,属于不适用场景,帮开发者提前避坑。
- 对谁最有用:写 DeFi 合约的 Rust 开发者、做合约代码评审与安全审计的工程师、需要统一团队合约范式的技术负责人。
该技能叫什么?如何一键安装 AI 技能提升开发效率?
基本信息
| 项目 | 内容 |
|---|---|
| 技能中文名 | MVX原子借出-执行-验证模式Skill |
| 技能英文名 | mvx_flash_loan_patterns |
| 技能ID | 12573 |
| 技能类型 | 智能合约开发范式 / 安全编码规范类技能 |
| 技术栈 | MultiversX 智能合约(Rust 编写),涉及端点、存储映射器、同步调用等概念 |
它解决什么问题
在 MultiversX 上实现闪电贷、原子交换、临时授权这类“借出—执行—还回”的逻辑时,业务逻辑本身并不复杂,真正容易出事的是安全校验的顺序与完整性:
- 没有重入防护,嵌套调用会在第一次操作尚未结束时再次进入,余额校验被人为绕过;
- 没有分片验证,目标合约在另一个分片时,同步调用会变成异步执行,原子性被悄悄破坏;
- 回调端点传入内置函数,绕过自建的还款逻辑;
- 用存储值而不是真实的
get_sc_balance来判断还款,账实不符; - 操作标志没有清理,合约被永久卡在“进行中”状态。
这个技能把这些经验固化成一个可复用的模式:借出 → 执行回调 → 验证还款,全部在一个事务内原子完成,并配齐检查清单、示例代码与反模式提醒。
一键安装的思路与步骤
AI 技能的安装通常遵循“找到技能 → 授权/添加到工作区 → 验证生效”的通用路径,具体入口与命令以官方说明为准:
- 确认安装前提:你使用的 AI 编程助手需支持技能(Skill)机制,并且工作区能访问 MultiversX Rust 合约项目;部分环境需要先登录账号或开启技能市场(以官方说明为准)。
- 按标识检索技能:在技能市场或技能列表中,使用技能英文名
mvx_flash_loan_patterns或技能ID12573进行搜索定位,避免被同名的其他技能混淆。 - 一键添加并授权:点击安装/添加,将技能绑定到当前工作区或项目目录;若为团队环境,可由管理员统一开启后分发(以官方说明为准)。
- 验证是否生效:在对话中提出一个典型问题,例如“帮我写一个 MultiversX 闪电贷端点,要做重入防护和同分片校验”,观察回答是否主动给出“五项安全检查清单”、是否提到
require_not_ongoing、require_same_shard、get_sc_balance等关键要素。若回答只给出泛泛的 Solidity 闪电贷思路,说明技能未正确加载,可重新检查绑定范围或技能是否启用。 - 长期使用:把它作为该项目的“编码规范顾问”,在编写、评审、重构合约端点时反复调用。
该技能的主要功能和特点
- 给出完整的原子操作主流程:以
atomic_operation端点为例,展示“取手续费 → 记录操作前余额 → 置位进行中标志 → 同步调用目标 → 校验回调后余额 → 清除标志”的标准顺序,每一步都有存在的理由。 - 五项安全检查清单化:重入防护、分片验证、端点验证、还款验证、防护清理,逐条对应一段可读代码,便于照抄与逐项核对。
- 重入防护有具体实现:通过
operationOngoing存储映射器(SingleValueMapper<bool>)配合require_not_ongoing,在入口处直接拦截嵌套调用。 - 分片验证讲清原因:
require_same_shard通过比较目标地址与合约自身地址所在分片,防止“跨分片同步调用静默变为异步”,技能明确解释这是破坏原子性的根因,而不是只给一段检查代码。 - 端点验证防绕过:用
callback.is_empty()与is_builtin_function双重判断,拒绝空回调与内置函数回调,避免还款逻辑被跳过。 - 还款验证直查真实余额:强调必须用
get_sc_balance比较回调前后的实际余额,并把手续费计入最低还款要求,而不是相信存储里的记录值。 - 内置反模式清单:直接列出三种典型错误写法(用存储值代替真实余额、缺失分片验证、内置函数回调绕过还款),让评审有据可依。
- 明确适用与不适用边界:适用于闪电贷、原子交换、临时授权;不适用于跨分片操作,因为那会破坏原子性——这一点比“多写几个检查”更有价值。
和普通工具相比,它的差异在于:通用代码补全只会补全语法,而它补全的是“顺序”和“遗漏项”。合约安全的关键往往不在能否编译通过,而在是否漏了某一行 require。
如何使用该技能?
下面是一套可直接参考的使用流程,示例均为 MultiversX Rust 合约语境。
第 1 步:明确任务边界
先判断你的需求是否落在适用范围内:
- 适用:闪电贷(借出资产 → 调用目标合约套利/清算 → 归还本息)、原子交换、单次临时授权。
- 不适用:需要跨分片的组合操作。此时应向技能追问替代方案,而不是强行套用。
第 2 步:用自然语言描述需求,让技能产出骨架
输入示例:
“我有一个 MultiversX Rust 合约,想加一个闪电贷端点:用户指定资产、数量、目标合约和回调函数名,我先放款,回调结束后要求归还本金加 30 个基点手续费。请按原子借出-执行-验证模式给出实现,并列出必须的安全检查。”
预期输出:一个 #[endpoint] 端点骨架 + 五项检查清单 + 关键片段解释。
第 3 步:逐项对齐检查清单
对照技能给出的五项检查确认自己的代码:
- 入口是否有
require_not_ongoing(); - 是否校验目标与自身在同一分片;
- 回调是否非空且不是内置函数;
- 回调后是否用
get_sc_balance校验余额不低于“操作前余额 + 手续费”; - 结束路径是否把
operation_ongoing复位为false。
第 4 步:把示例代码改造成项目版本
技能给出的是范式示例,需要替换的点通常包括:手续费取值方式(示例中从 fee_bps 存储读取并按万分之一换算)、原生 EGLD 与 ESDT 代币的处理差异(示例用 single_esdt 指定代币与 nonce)、以及目标调用的参数编码方式。
第 5 步:让技能做一次“反模式体检”
把写好的端点贴回对话,输入示例:
“请按反模式清单检查这段代码:有没有用存储值代替真实余额?有没有缺失分片验证?回调是否可能被内置函数绕过?”
输出通常是指名道姓的风险点与修改建议,可直接转为评审意见。
第 6 步:沉淀为团队规范
把最终版本固化为项目内的模式文档或代码模板,让后续端点在新增时统一复用,避免每位开发者各写一版。
同类型竞品对比分析
| 方案名称 | 定位 | 核心功能 | 安装/使用门槛 | 适用场景 | 优势与不足 |
|---|---|---|---|---|---|
| MVX原子借出-执行-验证模式Skill(本技能) | 面向 MultiversX 的原子借出安全编码范式 | 五项安全检查清单、端点示例、重入/分片/端点/还款校验与反模式提示 | 需接入支持技能机制的 AI 助手,门槛低,自然语言即可调用 | 闪电贷、原子交换、临时授权端点的开发与评审 | 优势:检查项聚焦、顺序明确、带反模式;不足:仅覆盖单一链生态,不含跨分片替代方案 |
| 官方框架文档与示例工程 | 链官方提供的权威说明书 | 完整 API、端点宏、存储映射器、调用方式说明 | 需自行检索与拼装,学习曲线较陡 | 系统性学习、查阅具体 API 定义 | 优势:权威、全面;不足:偏“零件级”,不直接给出安全校验的完整顺序与清单 |
| 通用对话式 AI 助手(不加载技能) | 通用代码生成 | 可直接写 Rust 代码,覆盖面广 | 门槛极低 | 快速得到一版能跑的骨架 | 优势:通用性强;不足:极易给出以太坊式闪电贷写法,遗漏同分片校验、内置函数回调拦截等链特有细节 |
| 智能合约静态分析与审计流程 | 事后检测 | 扫描常见漏洞模式、生成审计报告 | 需接入工具链或委托审计,成本与周期较高 | 上线前安全把关 | 优势:发现真实缺陷;不足:偏事后,且对“业务顺序错误”这类逻辑问题覆盖有限 |
选型建议:把本技能放在“写之前”,静态分析放在“上线前”,两者互补;官方文档作为 API 细节的最终依据。
该技能的典型应用场景与实际体验情况
场景一:DeFi 开发者首次实现闪电贷端点
角色:负责借贷模块的 Rust 合约开发者。痛点是第一次接触原子借出逻辑,不确定检查顺序,担心上线后被重入或跨分片绕过。使用方式是先用自然语言描述业务参数,让技能产出端点骨架与清单,再逐项对齐。实际体验:上手门槛低,不需要额外学习语法;产出的顺序(取余额 → 置标志 → 同步调用 → 校验余额 → 清标志)与官方安全实践方向一致,最省时间的是“为什么必须同分片”的解释,能直接写进设计文档。注意点是示例中的费率、代币类型需按项目替换。
场景二:合约代码评审与安全自查
角色:技术负责人或安全评审人。痛点是评审时靠经验,容易漏项,且意见难以统一。使用方式是把待评审端点交给技能,按反模式清单逐条比对。实际体验:三个反模式(用存储值代替真实余额、缺分片验证、内置函数回调)命中率高,能把模糊的“感觉不安全”变成具体的“第 4 项校验缺失”。注意点是技能只给判断依据,最终结论仍需人工复核业务逻辑。
场景三:原子交换与临时授权的组合设计
角色:做资产兑换或授权类功能的开发者。痛点是多个操作的先后顺序一旦出错,资产会在中间状态被占用。使用方式是以技能的主流程为模板,把“回调内容”替换为兑换或授权动作,保持借出与还款两端的校验不变。实际体验:模板化后改造量小,原子性由“一个事务内完成”这一前提保证。注意点是必须确认目标地址与自身在同一分片,否则要重新设计流程。
场景四:团队规范沉淀与新人培训
角色:团队 TL。痛点是每位新人对安全校验的理解不同,代码风格分散。使用方式是把技能输出的检查清单固化为 PR 评审模板,新人先自检再提交。实际体验:把隐性的经验显性化,减少来回沟通成本。注意点是清单需要随项目实际(如手续费模型、代币种类)做本地化补充。
该技能能为用户带来的价值
- 把安全经验前置:五项检查清单在编码阶段就介入,而不是等到审计或事故复盘,显著降低返工概率。
- 降低链上开发门槛:不熟悉 MultiversX 分片模型与端点机制的开发者,也能通过“为什么必须同分片”这类解释快速建立正确心智模型。
- 减少漏项型风险:原子借出类漏洞多为“少了一行 require”,清单化能有效防止此类遗漏;还款校验强制走真实余额,杜绝账实不符。
- 压缩沟通与评审成本:反模式清单可直接转为 PR 检查项,让评审意见从主观判断变成可对照的条目,团队协作效率明显提升。
- 可复用的长期资产:一次产出的端点范式可沉淀为项目模板,后续新增端点复用,边际成本递减。
- 避免方向性错误:技能明确“跨分片不适用”,能在设计早期就阻止一个注定破坏原子性的方案,这往往比优化代码更省成本。
常见问题 FAQ
Q1:怎么安装这个技能?需要付费吗?
在支持技能机制的 AI 助手中,用英文名 mvx_flash_loan_patterns 或技能ID 12573 检索并添加到工作区即可,具体入口、授权方式与是否收费以官方说明为准。安装后建议用“重入防护 + 同分片校验”的问题验证是否生效。
Q2:它只适用于 MultiversX 吗?我用其他链能参考吗?
技能内容围绕 MultiversX 的端点、存储映射器、分片与同步调用机制展开,尤其是“分片验证”和内置函数回调拦截具有强链特性,直接照搬到其他链可能不成立。可借鉴的是“借出—执行—校验—清理”的顺序思想,具体实现需按目标链重写。
Q3:为什么不支持跨分片?跨分片调用不是也能同步吗?
技能明确指出:跨分片调用会在不同区块中执行,同步调用会静默变为异步,从而破坏“一个事务内原子完成”的前提。因此这类需求需要用其他架构方案解决,而不是靠多加几行校验弥补。
Q4:还款验证为什么强调用 get_sc_balance 而不是存储值?
存储值是合约自己记账的结果,可能被中间调用或异常路径影响,与真实持仓不一致。技能把“用存储值代替真实余额”列为反模式,要求比较回调前后的实际余额,并把手续费计入最低还款额,才能真实反映资产是否回笼。
Q5:它和通用 AI 助手直接写代码有什么区别?
通用助手容易给出以太坊式闪电贷写法,忽略同分片校验、内置函数回调拦截、操作标志清理等链特有细节;本技能把这些固化为清单与反模式,回答更贴近该链的安全实践。建议两者结合:用技能定规范,用静态分析与审计做最终把关。