You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为Sui编写Move模块时如何生成随机/伪随机数?求技术建议

在Sui Move中生成随机数的实现方案

Move作为确定性编程语言,本身没有原生随机数生成能力,但Sui平台通过内置系统模块提供了适配链上场景的随机数方案,核心依赖sui::random模块。

核心实现方式

  • 导入sui::random和sui::tx_context模块,利用交易上下文(TxContext)生成随机数。
  • 核心函数random::generate_randomness(&mut TxContext)会返回一个vector<u8>类型的随机字节序列,可转换为u64、u32等所需数值类型。

代码示例

module my_project::random_utils {
    use sui::random;
    use sui::tx_context::TxContext;

    // 生成u64类型随机数
    public fun generate_u64_rand(ctx: &mut TxContext): u64 {
        (random::generate_randomness(ctx) as u64)
    }

    // 生成指定范围内的随机数(左闭右开)
    public fun generate_rand_in_range(min: u64, max: u64, ctx: &mut TxContext): u64 {
        assert!(min < max, 0); // 确保最小值小于最大值
        let rand_base = generate_u64_rand(ctx);
        min + (rand_base % (max - min))
    }
}

关键注意事项

  • 随机数基于交易的链上上下文生成(包含交易哈希、区块元数据等不可篡改信息),保证链上环境下的不可预测性。
  • 该函数仅能在交易执行阶段调用,无法离线生成随机数。
  • 如需复杂随机分布,可基于基础随机字节序列扩展,但需注意避免引入统计偏见,确保结果公平性。

内容的提问来源于stack exchange,提问作者MoBerlin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 04:50:17