Solana链上程序如何获取随机数?
How to get random number in Solana on-chain program?
我刚刚加入了 Solana 链上程序。
我打算制作判断正面或背面的硬币游戏。
我尝试使用 std::rand 和 get_random crate 但它们不起作用。
如果你有这方面的经验,请告诉我。
我使用 Solana 链上程序的锚点。
不幸的是,随机生成器无法在链上运行。
如果你想要一些随机数,你应该从链外获得它。
原因?
假设您使用块散列或类似的东西进行随机分配,因此用户可以通过插入一条指令或值来检查有利结果甚至更糟,如果结果不令人满意则强制回滚。
那我们该怎么办呢?
尝试使用像 chainlink vrf(可验证随机函数)这样的预言机
模拟oracle vrf服务:
在您的服务器监听的链上进行交易。如果这笔交易
发生了,在链下生成随机数并从您的服务器回调它。
主播像这样使用随机数
use rand::rngs::OsRng;
.
.
.
let dummy_a = Keypair::generate(&mut OsRng);
因此,如果您需要类似 UUID 行为的随机性,您可以使用锚代码存储库中的上述机制,但如果您的情况是像掷骰子这样的游戏逻辑,则需要预言机或模拟它。
我刚刚加入了 Solana 链上程序。 我打算制作判断正面或背面的硬币游戏。 我尝试使用 std::rand 和 get_random crate 但它们不起作用。 如果你有这方面的经验,请告诉我。
我使用 Solana 链上程序的锚点。
不幸的是,随机生成器无法在链上运行。 如果你想要一些随机数,你应该从链外获得它。
原因?
假设您使用块散列或类似的东西进行随机分配,因此用户可以通过插入一条指令或值来检查有利结果甚至更糟,如果结果不令人满意则强制回滚。
那我们该怎么办呢?
尝试使用像 chainlink vrf(可验证随机函数)这样的预言机
模拟oracle vrf服务:
在您的服务器监听的链上进行交易。如果这笔交易 发生了,在链下生成随机数并从您的服务器回调它。
主播像这样使用随机数
use rand::rngs::OsRng;
.
.
.
let dummy_a = Keypair::generate(&mut OsRng);
因此,如果您需要类似 UUID 行为的随机性,您可以使用锚代码存储库中的上述机制,但如果您的情况是像掷骰子这样的游戏逻辑,则需要预言机或模拟它。