メインコンテンツへスキップ
MagicBlock は VRF Program を通じて乱数機能を提供しています。これは、オラクルネットワークを使ってランダム値を計算および検証する Solana VRF 実装です。プロトコルは RFC 9381 に従い、Curve25519 の Ristretto グループと Schnorr 形式の署名を使って証明を生成します。統合の詳細は技術詳細ページを参照してください。 乱数リクエストが発生すると、VRF プログラムは複数の入力から一意な hashId を計算し、それをオンチェーンのオラクルキューに保存します。
    let combined_hash = hashv(&[
        &args.caller_seed,
        &slot.to_le_bytes(),
        &slothash,
        &args.callback_discriminator,
        &args.callback_program_id.to_bytes(),
        &time.to_le_bytes(),
        &idx.to_le_bytes(),
    ]);
検証済みオラクルは、この一意なキュー項目に秘密鍵で署名します。生成された署名、つまり randomness proof はオンチェーンで検証できます。 randomness proof は入力 caller_seed と MagicBlock の VRF 署名者 ID に暗号学的に結びついています。コールバック側では次の制約でこれを強制します。
#[account(address = ephemeral_vrf_sdk::consts::VRF_PROGRAM_IDENTITY)]
pub vrf_program_identity: Signer<'info>,
公式の MagicBlock オラクルだけがコールバックを発火できるため、偽造や改ざんされた結果を防げます。無効な証明は自動的に失敗し、他のプログラムがリクエストをフロントランすることもできません。 EphemeralVrf は InvalidProofUnauthorized のような条件を検査するため、不正な署名や未認可の呼び出し元はゲームロジックが動く前に拒否されます。