Skip to main content
MagicBlock предоставляет случайность через VRF Program — реализацию VRF на Solana, которая использует сеть оракулов для вычисления и проверки случайных значений. Протокол следует RFC 9381, используя группу Ristretto Curve25519 и подписи в стиле Schnorr для доказательств. Для деталей интеграции см. страницу «Технические детали». При запросе случайности программа VRF вычисляет уникальный hashId на основе различных входных данных и сохраняет его в onchain очереди оракулов:
    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(),
    ]);
Проверенные оракулы подписывают уникальные элементы очереди своим приватным ключом, а полученная подпись или доказательство случайности может быть проверена в сети: Доказательство случайности криптографически связано с входным caller_seed и идентичностью подписанта VRF от MagicBlock. Ваш обратный вызов обеспечивает это с помощью:
#[account(address = ephemeral_vrf_sdk::consts::VRF_PROGRAM_IDENTITY)]
pub vrf_program_identity: Signer<'info>,
Обратный вызов может инициировать только официальный оракул MagicBlock, что предотвращает подделку или манипуляцию результатами. Недействительные доказательства автоматически отклоняются, а другие программы не могут опережать запрос. EphemeralVrf проверяет условия, такие как InvalidProof и Unauthorized, поэтому неправильные подписи или неавторизованные вызовы отклоняются до выполнения логики вашей игры.