MultiversX陷阱识别Skill mvx_sharp_edges

这个技能用于识别MultiversX区块链平台中的常见陷阱和非显而易见问题,帮助开发者避免在智能合约开发中遇到的异步调用失败、Gas管理、存储优化、令牌精度、合约升级和区块信息使用等方面的错误。关键词:MultiversX, 智能合约, 陷阱, WASM, Gas, 异步调用, 区块链开发。

智能合约 0 次安装 0 次浏览 更新于 3/21/2026

名称: mvx_sharp_edges 描述: 识别MultiversX特定的WASM、Gas限制和异步调用失败中的奇怪行为。

MultiversX 尖锐边缘

此技能提醒您注意常导致错误的非显而易见行为、"陷阱"和平台特定怪癖。

1. 异步回调与回滚

  • 边缘: 当异步调用失败时,执行#[callback]
  • 尖锐逻辑:
    • 如果您未实现回调,资金将返回到合约,但原始交易中的状态更改不会自动回滚。
    • 缓解措施: 您必须在回调中手动回滚状态,如果子调用失败(或谨慎使用同步back_transfers)。

2. Gas限制与Gas耗尽(OOG)

  • 边缘: OOG引发特定错误,但如果未处理,可能使系统处于部分状态。
  • 尖锐逻辑:
    • 跨分片OOG: 如果目标分片耗尽Gas,交易失败,但发送分片已处理转账。回调以错误触发。

3. 存储映射器与Rust类型

  • 边缘: VecMapper不是Vec
  • 尖锐逻辑:
    • Vec将所有内容加载到WASM内存中(内存峰值)。
    • VecMapper不加载任何内容,直到您调用get(i)
    • 错误: 使用Vec表示所有用户列表 = 用户增长时OOG。

4. 令牌小数精度

  • 边缘: ESDT可以有0-18位小数。
  • 尖锐逻辑:
    • 硬编码10^18表示“一个令牌”是错误的。
    • 始终获取decimals或要求标准18位小数令牌。

5. 可升级性

  • 边缘: #[init]在升级时不调用。#[upgrade]被调用。
  • 尖锐逻辑:
    • 如果您添加新的存储映射器,必须在#[upgrade]中初始化它。
    • 更改现有映射器的存储布局(例如struct字段顺序)会损坏数据。

6. 视图中的区块信息

  • 边缘: get_block_timestamp_millis() / get_block_timestamp_seconds()#[view]中(链下模拟)可能返回0或与链上不同的值。自Supernova(0.6秒轮次)以来,更推荐使用get_block_timestamp_millis()TimestampMillis以获得亚秒精度。
  • 尖锐逻辑:
    • 不要依赖区块信息进行关键的链下视图逻辑。