Sui原生随机数已上线测试网,即将在主网推出

开发者现在可以在Sui测试网应用中,使用由Sui验证节点生成提供的新随机性。

Sui中文小助手
Sui Network CN
Published in
6 days ago

--

经过大量开发,我们在Sui测试网上提供了安全的随机性。这一重要功能由sui::random模块驱动,为Sui上的开发者和构建者开辟了新的可能性。

为什么我们需要链上随机性?

应用程序和项目可以以各种方式使用随机性,从模拟掷骰子到在确保公平的系统中分配票号。链上随机性的用例比人们最初想象的要多。以下是几个关键示例:

1. 概率游戏:最明显的用例是彩票、纸牌游戏、抽卡、战利品箱、抽奖和博彩游戏。链上原生随机性允许这些游戏在不需要玩家信任游戏运营者的情况下运行。游戏的公平性可以由任何人验证,确保透明度和信任。这一用例还扩展到更复杂的游戏,例如确定RPG中的角色是否击中敌人。

2. 随机抽样:从更大群体中选择一个随机子集,这在治理和随机审计等各个领域都很有用。在争议解决中,随机抽样可以用于选择无偏见的陪审团。另一个例子是在预言机和DAO中的随机委员会选择,用于投票和决策过程,以增强公平性和透明度。

3. NFTs:随机性使得创建具有不同稀有度的随机NFT成为可能。例如,一个加密收藏品可能会有各种概率分配的特征。此外,NFT还可以在繁殖场景中包含遗传特征或随机突变,为NFT的设计和使用开创了创意之门。

4. 比赛和玩家匹配:有趣的例子包括随机分配参赛者到锦标赛的对阵表中,为游戏和社交互动匹配玩家,确定回合制游戏的出场顺序,在抽签中挑选获胜者,分配球员到队伍并确定选秀顺序,分配赛事场地和裁判等。

Mysten Labs的Andrew Schran在Sui Basecamp讨论了Sui的原生随机性。

去中心化随机性技术

为了确保链上随机性的安全性,它必须是不可预测且不可操纵的。不可预测性确保没有人在随机值使用之前预测到它们,防止攻击者通过抢先交易或只在结果有利时参与来操纵应用程序。不可操纵性保证没有任何单一方可以影响随机生成过程的结果,防止攻击者利用结果来获得优势。

现有解决方案及其局限性

各种现有解决方案旨在提供安全的随机性,每种方案都有其权衡。使用外部随机性源(如本地/非分布式的可验证随机函数(VRF))很简单,但不是真正的去中心化,因为信任操作VRF的少数节点可能会导致可预测性和偏向性问题,如果源与其他方勾结。可验证延迟函数(VDF)确保在一定时间内无法预测随机性,但对于许多应用来说往往太慢。

其他解决方案使用基于预言机的随机性,如果预言机与节点勾结,可能是可预测且有偏的,并且在安全使用上可能较慢。例如,使用drand(分布式随机信标)需要等待足够远的随机轮次,以确保其不可预测性。

Sui的随机性解决方案

Mysten Labs开发了一种利用阈值密码学和分布式密钥生成(DKG)的解决方案,展示了不可预测、不可操纵且快速的特性。这个解决方案在Sui上作为由验证节点网络支持的随机信标出现。在每个epoch的开始,验证节点启动DKG协议生成分布式密钥的秘密份额。然后,在整个epoch期间,他们使用密钥份额为应用程序生成随机性。

这种原生随机性解决方案比现有的Sui上的解决方案快得多。随机生成与共识机制并行运行,在事务排序后但在执行前快速提供随机值。

此外,Move和可编程交易区块(PTBs)允许强大的组合,同时通过内置限制和编译器警告防止潜在的操纵。虽然有重要的安全防护措施,开发者应确保稳健的程序设计,以避免其他Move函数或PTB命令的检查。

使用sui::random模块

sui::random模块提供Sui中的伪随机性访问,支持各种应用。例如,开发者可以使用此功能实现一个选择抽奖随机获胜者的Move函数。此功能和其他示例的源代码可以在我们的GitHub代码库中找到。

entry set_winner(game: &mut Raffle, rnd: &Random, ctx: &TxContext) {
assert!(is_none(game.winner), EWinnerAlreadySet); // winner is of type Option<u32>
let gen = new_generator(rnd, ctx);
game.winner = Some(gen.generate_u32_in_range(1, game.num_of_tickets)); // num_of_tickets is u32 that represents the number of participants
}

函数set_winner的第二行确保尚未选择获胜者。该函数然后初始化一个新的随机生成器,并在票号范围内生成一个随机数。由于Sui的强大随机生成保证,结果是一个安全且不可预测地选择的获胜者,确保generate_u32_in_range返回的值是随机且不可预测的,只要网络的投票权少于三分之一被破坏。

虽然随机性是由网络全局生成的,而不是每个事务生成的,Sui在每次调用new_generator时从全局随机性派生出一个不可预测且不可操纵的种子伪随机函数族。

Sui上的随机性总结

为Sui引入一个安全且可扩展的随机性来源是一个重要的进步,使开发者能够创建更稳健和安全的应用程序。我们鼓励我们的社区提供反馈并探索使用随机性的新的方法。有关详细的技术信息,请参阅链上随机性文档

这个功能现在在Sui测试网上可用,我们鼓励开发者尝试它,并确保他们的应用准备好在主网上使用安全和强大的随机值。感谢我们的开发者为更安全和高效的Sui生态系统做出的贡献!

关于Sui Network

Sui是基于第一原理重新设计和构建而成的L1公有链,旨在为创作者和开发者提供能够承载Web3中下一个十亿用户的开发平台。Sui上的应用基于Move智能合约语言,并具有水平可扩展性,让开发者能够快速且低成本支持广泛的应用开发。获取更多信息:https://linktr.ee/sui_apac

官网英文Twitter中文TwitterDiscord英文电报群中文电报群

--

--