메인 콘텐츠로 건너뛰기
MagicBlock은 VRF Program을 통해 랜덤 기능을 제공합니다. 이는 오라클 네트워크를 사용해 무작위 값을 계산하고 검증하는 Solana VRF 구현입니다. 이 프로토콜은 RFC 9381을 따르며, Curve25519의 Ristretto 그룹과 Schnorr 스타일 서명을 활용해 증명을 생성합니다. 통합 세부 사항은 Technical Details 페이지를 참고하세요. 랜덤 요청이 들어오면 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 서명자 신원에 암호학적으로 결합됩니다. 여러분의 콜백은 다음 제약으로 이를 강제합니다.
#[account(address = ephemeral_vrf_sdk::consts::VRF_PROGRAM_IDENTITY)]
pub vrf_program_identity: Signer<'info>,
공식 MagicBlock 오라클만 이 콜백을 트리거할 수 있으므로 위조되거나 조작된 결과를 막을 수 있습니다. 잘못된 증명은 자동으로 실패하며, 다른 프로그램이 이 요청을 선점 실행할 수도 없습니다. EphemeralVrf는 InvalidProof, Unauthorized 같은 조건을 검사하므로 잘못된 서명이나 권한 없는 호출자는 게임 로직이 실행되기 전에 거부됩니다.