Sui 为测试网应用引入安全的本地随机性

realtime news  Jun 14, 2024 15:26  UTC 07:26

1 Min Read

根据Sui 博客的消息,Sui 测试网的开发者现在可以访问由 Sui 验证者生成的新安全随机性来源。这个重要的特性由 sui::random 模块驱动,为平台上的开发者和构建者打开了多种可能性。

链上随机性的应用

链上随机性可以以多种方式使用,从模拟掷骰子到确保公平的票务分配。主要的使用场景包括:

  • 机会游戏:彩票、纸牌游戏和赌场游戏可以利用链上随机性确保公平和透明,允许任何人验证游戏的完整性。
  • 随机抽样:在治理、争议解决和随机审计中有用。它也可以用于选择预言机和去中心化自治组织 (DAO) 的委员会。
  • NFTs:随机性可以创建具有不同稀有度的NFT,为加密收藏品增加独特性和创造性。
  • 竞赛和玩家匹配:随机放置在比赛抽签中,匹配游戏玩家,并确定回合制游戏中的游戏顺序。

确保安全的随机性

为了使链上随机性有效,它必须既不可预测又不可偏向。不可预测性防止攻击者操纵结果,而不偏向性确保没有单一方可以影响随机性生成过程。现有的解决方案由于可预测性和偏向问题往往不尽如人意。

Mysten Labs 开发了一种解决方案,利用阈值密码学和分布式密钥生成 (DKG) 达到这些特性。这一方案由验证者网络支持,允许快速和安全的随机性生成。验证者在每个纪元开始时发起 DKG 协议生成分布式密钥的秘密份额。他们在纪元期间不断使用这些份额生成随机性。

Sui 本地随机性的优势

Sui 的本地随机性解决方案比现有方法更快、更安全。它与共识机制并行运行,在交易排序后立即提供随机值,但在执行之前。此外,Sui 的 Move 编程语言和可编程交易块 (PTBs) 提供强大的组合,同时通过内置的限制和编译器警告防止潜在的操作。

使用 sui::random 模块

sui::random 模块在 Sui 中提供伪随机性访问,支持各种应用。例如,开发者可以实现一个 Move 函数来为抽奖选择随机获胜者:

entry set_winner(game: &mut Raffle, rnd: &Random, ctx: &TxContext) {
    assert!(is_none(game.winner), EWinnerAlreadySet); // winner 是 Option<u32> 类型
    let gen = new_generator(rnd, ctx);
    game.winner = Some(gen.generate_u32_in_range(1, game.num_of_tickets)); // num_of_tickets 是 u32 类型,代表参与者数目
}

此函数确保尚未选择获胜者,初始化一个新的随机生成器,并在票数范围内生成一个随机数。由于 Sui 强大的随机生成保证结果是安全且不可预测的获胜者。

Sui 引入的安全且可扩展的随机性是一个重大进展,使开发者能够构建更稳健和安全的应用。该功能现已在 Sui 测试网上线,鼓励开发者探索其功能并提供反馈。有关更详细的技术信息,请参考链上随机性文档



Read More