【发布时间】:2022-01-13 08:30:48
【问题描述】:
我刚刚加入了 Solana 链上计划。 我将制作判断正面或背面的硬币游戏。 我尝试使用 std:: rand 和 get_random crate,但它们不起作用。 如果你有这方面的经验,请告诉我。
我将锚点用于 Solana 链上程序。
【问题讨论】:
-
您好!我没有使用 Solana 的经验,但您应该发布一些代码,以便人们可以更好地帮助您
我刚刚加入了 Solana 链上计划。 我将制作判断正面或背面的硬币游戏。 我尝试使用 std:: rand 和 get_random crate,但它们不起作用。 如果你有这方面的经验,请告诉我。
我将锚点用于 Solana 链上程序。
【问题讨论】:
不幸的是,随机生成器不能在链上工作。 如果你想要一些随机数,你应该从链外得到它。
原因?
假设您使用块哈希或类似的东西进行随机化,因此用户可以通过插入检查有利结果的指令或值来利用它,甚至更糟糕的是,如果它不令人满意,则强制它回滚。
那我们该怎么办?
尝试使用像chainlink vrf(可验证随机函数)这样的预言机
模拟 oracle vrf 服务:
在您的服务器侦听的链上进行交易。如果这笔交易 发生了,让随机数脱链并从你的服务器回调。
锚使用这样的随机数
use rand::rngs::OsRng;
.
.
.
let dummy_a = Keypair::generate(&mut OsRng);
因此,如果您需要类似 UUID 的行为的随机性,您可以使用锚代码存储库中的上述机制,但如果您的案例是掷骰子之类的游戏逻辑,则需要 oracles 或模拟它。
【讨论】: