【问题标题】:How to get random number in Solana on-chain program?如何在 Solana 链上程序中获取随机数?
【发布时间】:2022-01-13 08:30:48
【问题描述】:

我刚刚加入了 Solana 链上计划。 我将制作判断正面或背面的硬币游戏。 我尝试使用 std:: rand 和 get_random crate,但它们不起作用。 如果你有这方面的经验,请告诉我。

我将锚点用于 Solana 链上程序。

【问题讨论】:

  • 您好!我没有使用 Solana 的经验,但您应该发布一些代码,以便人们可以更好地帮助您

标签: random contract solana


【解决方案1】:

不幸的是,随机生成器不能在链上工作。 如果你想要一些随机数,你应该从链外得到它。

原因?

假设您使用块哈希或类似的东西进行随机化,因此用户可以通过插入检查有利结果的指令或值来利用它,甚至更糟糕的是,如果它不令人满意,则强制它回滚。

那我们该怎么办?

  1. 尝试使用像chainlink vrf(可验证随机函数)这样的预言机

  2. 模拟 oracle vrf 服务:

在您的服务器侦听的链上进行交易。如果这笔交易 发生了,让随机数脱链并从你的服务器回调。

锚使用这样的随机数

use rand::rngs::OsRng;
.
.
.
let dummy_a = Keypair::generate(&mut OsRng);

因此,如果您需要类似 UUID 的行为的随机性,您可以使用锚代码存储库中的上述机制,但如果您的案例是掷骰子之类的游戏逻辑,则需要 oracles 或模拟它。

【讨论】:

    猜你喜欢
    • 2021-12-20
    • 1970-01-01
    • 2022-08-20
    • 2020-01-26
    • 2014-08-09
    • 2021-12-02
    • 2012-04-12
    • 2018-01-22
    • 2010-09-16
    相关资源
    最近更新 更多