技能使用指南

mvx_defi_math(MultiversXDeFi金融数学技能)Skill 是什么?

mvx_defi_math 技能专治 MultiversX DeFi 的精度难题:BPS/PPM/WAD/RAY 四级精度选型、半上舍入、安全重缩放与百分比计算,直击粉尘套利与截断损失。本文讲清安装思路、使用步骤、竞品对比与四大落地场景,帮你把舍入方向一次写对。

MultiversXDeFi金融数学技能Skillmvx_defi_math
15 个章节 约 18 分钟阅读 AI 智能生成

MultiversXDeFi 金融数学技能:用 BPS/PPM/WAD/RAY 四级精度与半上舍入,守住链上 DeFi 的每一分精度

核心结论速览

  • 它是什么:mvx_defi_math 是一个面向 MultiversX 链上 DeFi 的金融数学技能,把精度管理、半上舍入、安全重缩放、百分比计算这四类最容易出问题的环节,沉淀成一套可直接复用的模式与 Rust 代码。
  • 它解决什么:ManagedDecimal 默认截断导致系统性价值损失、混合精度未重缩放、费用计算被粉尘存款套利——这些在审计中反复出现的舍入问题,技能都给出了明确对策。
  • 它怎么用:不是让你自己推导公式,而是把业务场景(借贷利息、DEX 定价、质押奖励、金库费用)描述给 AI,由技能输出精度选型、舍入方向判定与可落地的 Rust 实现片段。
  • 它的价值:把「精度该用几级、舍入该朝哪边」这种依赖经验的判断标准化,减少合约上线后的资金损耗与安全暴露。
  • 适合谁用:在 MultiversX 上写 DeFi 合约的 Rust 开发者、做合约审计与代码评审的安全工程师、以及需要快速校验数值模型的协议设计者。

1. 该技能叫什么?如何一键安装 AI 技能提升开发效率?

技能基本信息

项目 内容
技能中文名 MultiversXDeFi 金融数学技能
技能英文名 mvx_defi_math
技能 ID 12576
定位 MultiversX DeFi 的金融数学模式库——精度管理、半上舍入、安全重缩放、百分比计算
技术栈 Rust / MultiversX 智能合约框架(ManagedDecimal、BigUint)

它到底解决什么问题

在 MultiversX 上用 Rust 写 DeFi 合约,几乎所有资金相关的 bug 都归到同一类根因:数值精度处理不当。

  • ManagedDecimal 的默认行为是截断,长期累积会造成系统性价值损失,并且这种损失方向可预测,天然成为攻击者的套利空间;
  • 不同模块各自采用不同精度(手续费按万分比、代币数量按 18 位小数、利息指数按 27 位小数),混合精度却不重缩放是最常见的反模式;
  • 费用计算如果使用截断除法,攻击者可以用大量粉尘小额操作,把每次舍入“剩下的零头”一点点攒走。

这个技能把这些经验固化下来:告诉你该用哪一级精度、舍入该朝哪个方向、中间结果该保留到什么精度,并直接给出对应的 Rust 实现。

一键安装 AI 技能的思路与步骤

「一键安装」的本质,是把这套领域知识作为一个可被 AI 编程助手按需加载的技能包挂载上去,而不是让你每次对话都重新贴一遍规范文档。通用流程如下(具体命令、入口地址与命名以官方说明为准,本文不编造):

  1. 确认安装前提:你使用的是支持 Skill/技能挂载机制的 AI 编程助手客户端,且已登录可用;本地已具备 Rust 与 MultiversX 合约的开发环境(用于后续验证生成的代码)。
  2. 找到技能入口:在客户端的技能市场、技能商店或插件管理页面中检索技能 ID 12576,或直接按英文名 mvx_defi_math / 中文名「MultiversXDeFi 金融数学技能」搜索。
  3. 执行安装:点击安装/启用按钮完成挂载。若使用命令行方式管理技能,请参照官方文档给出的安装指令执行,具体命令以官方说明为准。
  4. 验证是否生效:在对话中提一个只有该技能能准确回答的问题,例如「BPS、PPM、WAD、RAY 分别对应多少位小数、各自适用什么场景?」或「费用计算为什么必须用向上舍入除法?」。如果回复能给出四级精度对照与舍入方向建议,说明技能已正确加载。
  5. 纳入日常流程:把「涉及金额计算的代码,先让技能给出精度与舍入方案,再落笔写实现」写进团队的开发约定。

这种方式的效率提升点在于:安装一次,长期复用。你不需要在每次写利息模型时重新翻审计报告,也不需要凭记忆判断「这里该不该重缩放」。

2. 该技能的主要功能和特点

  • 四级精度体系对照表:BPS(4 位小数,10,000 = 100%,用于费用与简单百分比)、PPM(6 位小数,1,000,000 = 100%,用于细粒度百分比)、WAD(18 位小数,1e18 = 1.0,用于代币数量与价格)、RAY(27 位小数,1e27 = 1.0,用于利息指数、复利与高精度数学)。配套规则是:选用能避免舍入误差的最低精度,中间计算使用比最终结果更高的精度。
  • 半上舍入(half-up)实现:提供 mul_half_up、div_half_up 两个函数,通过在乘积/分子上补 scaled / 2 再整除,把截断带来的系统性偏差压到最小。这是针对「粉尘存款窃取舍入」这类攻击的直接缓解手段。
  • 安全重缩放 rescale_half_up:升精度时直接 rescale,降精度时先加半个因子再除,避免降精度过程中的单向损失。这一条直击「混合精度而不重缩放」的反模式。
  • 百分比计算三条路径:优先使用框架内置的 BigUint::proportion(part, total)(示例中 100% 基准为 100,000);需要手动时提供 apply_bps(除以 10,000)与 apply_ppm(除以 1,000,000)。
  • 舍入攻击向量与缓解对照表:粉尘存款窃取舍入 → 在缩放金额上使用半上舍入;重复小操作 → 设置最小金额并在指数上使用半上舍入;转换中的精度损失 → 中间数学使用 RAY 精度;费用计算中的截断 → 费用向上舍入,让舍入方向对协议有利。
  • 明确的反模式清单:混合精度而不重缩放、费用用截断除法、中间结果停留在低精度(正确做法是计算时用 RAY,最后再降精度)。
  • 领域应用知识库:借贷(利息模型、复利、利用率,RAY 精度)、DEX(价格影响、LP 份额,WAD 精度 + 半上舍入)、质押(奖励分配、份额比率,RAY 指数)、保险库(费用计算、收益,BPS 费用 + 向上舍入除法)。

和普通工具比强在哪:通用计算器或通用大模型能算出「数值是多少」,但回答不了「这个场景该用哪一级精度、舍入该朝哪边、中间结果保留几位」——而这恰恰是链上资金安全的分界线。这个技能提供的是带安全语义的领域决策,不是裸算术。

3. 如何使用该技能?

第 1 步:安装并确认技能已启用。按第 1 部分的方式完成挂载,并用一问一答验证生效。

第 2 步:用「业务场景 + 参与方 + 资金流向」描述需求,而不是直接让 AI 写代码。描述得越像需求文档,输出的精度选型越准。

输入示例:

我在写一个 MultiversX 借贷合约的利息累积逻辑,借款本金按 WAD 存储,利率按年化表示,需要按区块时间做复利累积,最终结算金额要写回账本。请给出精度选型、每一步的舍入方向,以及安全的重缩放写法。

输出说明:技能应给出——利息指数使用 RAY 精度累积复利;本金与价格使用 WAD;跨精度衔接处必须调用 rescale_half_up 而不是裸 rescale;乘除使用 mul_half_up / div_half_up;最后结算落账前再降精度。并会附上类似下面的实现片段:

fn mul_half_up(&self, a: &ManagedDecimal<Self::Api, NumDecimals>, b: &ManagedDecimal<Self::Api, NumDecimals>, precision: NumDecimals) -> ManagedDecimal<Self::Api, NumDecimals> {
    let product = a.rescale(precision).into_raw_units() * b.rescale(precision).into_raw_units();
    let scaled = BigUint::from(10u64).pow(precision as u32);
    let rounded = (product + &scaled / 2u64) / scaled;
    self.to_decimal(rounded, precision)
}

第 3 步:追问「费用场景」时显式说明资金归属。例如「这笔手续费归协议金库,希望舍入方向对协议有利」,技能会推荐向上舍入除法,而不是截断除法。

输入示例:

金库赎回要收千分之三的费用,费用归协议,用户拿到剩余部分。请给出避免粉尘套利的写法。

输出说明:应给出 BPS 精度下的费用计算、向上舍入的费用分支,并提示「设置最小操作金额」和「在缩放金额上使用半上舍入」这两条缓解措施,必要时用框架内置的 proportion() 替代手写公式:

pub const PERCENT_BASE_POINTS: u64 = 100_000;  // 100% = 100_000
let fee = amount.proportion(fee_percent, PERCENT_BASE_POINTS);

第 4 步:让技能做「反模式自检」。把已写好的数值代码贴回去,请它按技能内的反模式清单逐条比对:是否存在混合精度未重缩放、费用是否用了截断除法、中间结果是否停留在低精度。

第 5 步:本地编译与单元测试验证。技能的产出是设计与代码建议,落库前仍需在本地跑通编译与边界值测试(零值、极小值、极大值、精度边界)。

第 6 步:形成团队规范。把「先问精度再写代码」固化为评审检查项,让技能的判断沉淀成流程。

4. 同类型竞品对比分析

方案名称 定位 核心功能 安装/使用门槛 适用场景 优势与不足
mvx_defi_math(本技能) MultiversX DeFi 专用金融数学模式库 四级精度体系、半上舍入、安全重缩放、百分比计算、舍入攻击缓解、反模式清单 低:在支持技能的 AI 助手中挂载即可,无需额外配置运行时 MultiversX 上借贷、DEX、质押、金库的数值逻辑设计与评审 优势:领域贴合度高,直接覆盖 ManagedDecimal 的截断陷阱,带安全语义;不足:聚焦 MultiversX 生态,跨链项目参考价值有限
通用 AI 编程助手(未挂载技能) 通用代码生成与问答 能写 Rust 语法、能解释 BigUint 基本运算 极低:开箱即用 通用 CRUD、脚手架代码 优势:泛化能力强;不足:容易给出「能跑但舍入方向错误」的实现,默认忽略精度体系与攻击向量
通用定点/大数数学库(如 rust_decimal、num-bigint 等) 语言层面的精确数值计算基础库 任意精度整数、定点小数、四舍五入等基础算子 中:需要自行设计精度模型与舍入策略 泛金融计算、离线计算 优势:成熟稳定、性能可控;不足:只提供算子,不提供「该用几级精度、该朝哪舍」的领域决策,DeFi 语义要自己补
其他链的 DeFi 数学库(如 Solidity 生态的定点数学库) 面向 EVM 等链的定点数学实现 高精度乘除、指数运算、对数近似 中:需按目标链语言与 ABI 适配 EVM 系合约开发 优势:在对应生态内成熟;不足:语言与类型系统不同(Solidity 的定点方案无法直接迁移到 ManagedDecimal),跨链复用需重写

结论性建议:如果你的项目在 MultiversX 上,并且涉及真实资金流转,本技能的「精度选型 + 舍入方向」判断是通用库无法替代的部分;通用数学库仍然应该作为底层依赖存在,两者是互补而非替代关系。

5. 该技能的典型应用场景与实际体验情况

场景一:借贷协议的利息累积与利用率模型

  • 角色与痛点:DeFi 协议开发者。利息按时间连续累积,用低精度存储会让复利在高频调用下产生可见偏差,甚至被反复借款/还款的操作薅走零头。
  • 使用方式:把本金精度(WAD)、利率表示、累积频率告知技能,请它输出精度选型与舍入方向;重点确认利息指数用 RAY、跨精度处使用 rescale_half_up。
  • 实际体验:上手门槛低,只要能把场景说清楚就能拿到可用方案。效果最明显的是「中间结果用 RAY、最后降精度」这条建议——很多实现恰恰反过来做。注意事项:降精度的时机必须由业务确定,技能不会替你决定账本字段用几位小数。

场景二:DEX 的价格影响与 LP 份额计算

  • 角色与痛点:做 AMM 的开发者。LP 份额的极小值差异会在大量兑换中被不断放大,而截断除法会让系统持续向某一方向倾斜。
  • 使用方式:说明「价格与数量用 WAD」,请求给出乘法路径的半上舍入实现,并让技能对照「粉尘存款窃取舍入」这条向量做自检。
  • 实际体验:技能直接点明「标准 ManagedDecimal 截断会导致系统性价值损失且可被利用」,这句话本身就是评审时的有力依据。注意事项:半上舍入不是万能药,仍需配合最小金额限制,否则单纯换舍入方式并不能完全挡住高频小额操作。

场景三:质押奖励分配与份额比率

  • 角色与痛点:质押模块开发者。奖励按份额比率分配,尾差留在池子里会形成「无人认领的沉淀」,也可能让最后一个领取者承担额外损失。
  • 使用方式:请求以 RAY 指数表达份额比率,并明确「尾差归属哪一方」的业务规则,技能据此推荐舍入方向。
  • 实际体验:技能对「向上舍入 = 对协议有利」的映射非常清晰,能帮助团队在写代码前就把利益分配规则讲明白。注意事项:一旦选择了对协议有利的舍入方向,需在文档中明示,避免用户侧误解。

场景四:金库费用计算与收益结算

  • 角色与痛点:收益聚合类产品的开发者。手续费通常用千分比/万分比表示,是最容易出现截断除法的地方,也是最容易被粉尘套利的地方。
  • 使用方式:说明费用比例与归属方,技能会推荐 BPS 精度、向上舍入除法,并提示优先使用框架内置的 proportion()。
  • 实际体验:这是四个场景里最快见效的——改动量小、风险明确。注意事项:proportion() 的基准值需与业务约定一致,示例中 100% 基准为 100,000,写代码前务必与团队口径对齐。

6. 该技能能为用户带来的价值

  • 把「靠经验」变成「有依据」:精度选型与舍入方向原本依赖资深工程师的直觉与审计经验,现在可以按场景直接查询,新人也能写出符合安全预期的数值代码。
  • 显著压缩排查成本:舍入类问题的特点是「不报错、只漏钱」,线上极难定位。技能内置的舍入攻击向量表与反模式清单,可以在编码阶段就把问题挡住,而不是等审计或事后对账时才发现。
  • 降低审计沟通成本:代码评审时不再需要长篇解释「为什么这里要加半个因子」,技能给出的模式本身就是行业可沟通的共识语言。
  • 减少可被套利的资金损耗:粉尘存款、重复小操作、转换精度损失这几类向量都有对应的缓解手段,直接对应协议金库中真实流失的资金。
  • 可量化的收益方向:把「每笔操作因截断损失的零头 × 操作频次」与「被粉尘套利搬走的累计差值」作为评估口径,改动越早、调用越频繁,收敛的资金量越大。
  • 长期价值:一套统一的精度约定,会让协议后续新增模块(清算、预言机、跨模块结算)不必重新讨论同一批问题,形成可继承的工程资产。

7. 常见问题 FAQ

Q1:这个技能怎么安装?需要付费吗? 在支持 Skill 机制的 AI 编程助手中,通过技能市场或插件管理页面检索技能 ID 12576,或按英文名 mvx_defi_math 搜索后启用即可。若使用命令行方式管理技能,请参照官方文档执行,具体命令与入口以官方说明为准。关于是否收费、是否有额度限制,本文无法确认,同样以官方说明为准。

Q2:我只做简单的万分比手续费,需要关心 RAY 这种高精度吗? 不需要。技能的规则是「使用能避免舍入误差的最低精度」——简单费用用 BPS(10,000 = 100%)即可。但要注意两点:费用计算应使用向上舍入而非截断除法;如果这个费用后续还要参与复利或指数运算,中间计算应临时提升到 RAY,最后再降回来。

Q3:它和直接用 BigUint / ManagedDecimal 手写计算有什么区别? BigUint 和 ManagedDecimal 只提供算子,默认行为是截断;技能提供的是决策层:这个场景该用哪一级精度、这一步该向上还是半上舍入、中间结果该不该提升精度、哪些写法属于反模式。换句话说,它防的是「代码能编译、测试也过、但资金在缓慢流失」这类问题。

Q4:这个技能适合谁用?不写 Rust 的人有用吗? 主要适合在 MultiversX 上开发 DeFi 合约的 Rust 工程师、做合约审计与代码评审的安全人员、以及需要校验数值模型的协议设计者。从事其他链开发的工程师,也能从「精度分级」「舍入方向影响资金归属」「粉尘套利」这些通用思路上获得参考,但具体代码示例基于 MultiversX 的 ManagedDecimal,不能直接迁移。

Q5:它和 EVM 生态的定点数学库(如 Solidity 的定点库)怎么选? 按目标链选。技能明确面向 MultiversX DeFi 的 ManagedDecimal 体系,属于「领域模式 + 实现建议」;EVM 定点库属于「算子库」。如果项目在 MultiversX 上,用本技能做精度与舍入决策,底层仍可依赖通用大数库;如果项目在 EVM 上,则应选对应生态的定点库,不要把这里的 Rust 片段直接套用。