メインコンテンツへスキップ
ランダム値は Curve25519 の Ristretto group 上に構築された VRF によって生成され、RFC 9381 に記載された Schnorr ライクな署名で証明されます。proof と出力は、MagicBlock VRF signer PDA からの署名付き callback により rollup へ返されます。あなたのプログラムは caller を検証し、その後ゲームロジックでランダムネスを使用します。 random_u32random_u8_with_rangerandom_bool のような helper utilities により、[u8; 32] の出力を簡単に実用的な値へ変換できます。request と consume の手順は ephemeral execution window 内で行われるため、ユーザーは外部サーバーに依存せず、検証可能な公平性を備えたリアルタイム結果を得られます。

フロー

フローは “Request for randomness” から始まります。
  1. あなたのプログラムは CPI で MagicBlock VRF program を呼び出し、queue に request を追加します。
  2. ランダムネス request が queue に入ると、oracle が request を取り出してランダムネス計算を行います。
  3. 完了すると、結果と proof が MagicBlock VRF program に返されます。proof の検証後、VRF program は事前定義された関数を通じてあなたのプログラムへ callback し、ランダムネスを “consume” します。
MagicBlock の VRF Program はオープンソースで監査済みです。製品概要については Solana VRF 概要を参照してください。

オラクルキュー

すべてのランダムネス request は、**オラクルキュー(oracle queue)**アカウント(RequestRandomnessParamsoracle_queue フィールド)を指定します。他のすべての Solana アカウントと同様にこのキューも Solana 上に存在しますが、**委任された(delegated)**キューは ephemeral rollup の内部からのみ直接書き込み可能で、委任されていないキューはベースレイヤーで直接書き込み可能です。トランザクションが実行される場所に合ったキューからランダムネスをリクエストしてください——Solana ではベースレイヤーのキューを、ephemeral rollup 内部では委任されたキューを使用します。可能な限りアドレスをハードコードせず、ephemeral_vrf_sdk::consts の定数を参照してください。
ネットワークベースレイヤーキュー委任されたキュー(ephemeral rollup)
MainnetDEFAULT_QUEUE
Cuj97ggrhhidhbu39TijNVqE74xvKJ69gDervRUXAxGh
DEFAULT_EPHEMERAL_QUEUE
5hBR571xnXppuCPveTrctfTU7tJLSN94nq7kv7FRK5Tc
DevnetDEFAULT_QUEUE
Cuj97ggrhhidhbu39TijNVqE74xvKJ69gDervRUXAxGh
DEFAULT_EPHEMERAL_QUEUE
5hBR571xnXppuCPveTrctfTU7tJLSN94nq7kv7FRK5Tc
LocalnetDEFAULT_TEST_QUEUE
GKE6d7iv8kCBrsxr78W3xVdjGLLLJnxsGiuzrsZCGEvb
DEFAULT_EPHEMERAL_TEST_QUEUE
Sc9MJUngNbQXSXGP3F67KvKwVnhaYn6kcioxXNVowYT
Mainnet と Devnet は同じデフォルトキューアドレスを使用します——異なるのは接続するクラスターだけです。Localnet は専用のテストキューを使用し、これはローカルバリデーターが Devnet から複製します。DEFAULT_TEST_QUEUE / DEFAULT_EPHEMERAL_TEST_QUEUE 定数は VRF SDK に同梱されています。

Audit

監査レポート全文を読む

Quickstart

ランダムネス機能の追加方法を学ぶ