> ## Documentation Index
> Fetch the complete documentation index at: https://docs.magicblock.gg/llms.txt
> Use this file to discover all available pages before exploring further.

# 기술 세부 사항

> Solana VRF가 MagicBlock과 통합되는 방식

랜덤 값은 Curve25519의 Ristretto group 위에 구축된 VRF를 통해 생성되며, [RFC 9381](https://datatracker.ietf.org/doc/html/rfc9381)에 설명된 Schnorr 유사 서명을 사용해 증명됩니다. proof와 출력은 MagicBlock VRF signer PDA의 서명된 callback으로 rollup에 반환됩니다. 여러분의 프로그램은 caller를 검증한 뒤 게임 로직에서 랜덤니스를 사용합니다.

`random_u32`, `random_u8_with_range`, `random_bool` 같은 helper utilities를 사용하면 `[u8; 32]` 출력을 실사용 가능한 값으로 쉽게 변환할 수 있습니다. request와 consume 단계가 ephemeral execution window 내부에서 일어나므로, 사용자는 외부 서버에 의존하지 않고도 검증 가능한 공정성을 갖춘 실시간 결과를 얻을 수 있습니다.

## 흐름

<img class="w-full h-auto max-w-5xl" src="https://mintcdn.com/magicblock-42/nd_p_XZF7OD8TLQL/images/vrf-flow.png?fit=max&auto=format&n=nd_p_XZF7OD8TLQL&q=85&s=b78f077bf500e1e8498ff57c3654e7a0" width="1920" height="1080" data-path="images/vrf-flow.png" />

흐름은 “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”합니다.

<Note>
  MagicBlock의 VRF Program은 오픈소스이며 감사를 거쳤습니다. 제품 요약은 <a href="/ko/pages/verifiable-randomness-functions-vrfs/introduction/solana-vrf">Solana VRF 개요</a>를 참고하세요.
</Note>

## 오라클 큐

모든 랜덤니스 request는 **오라클 큐(oracle queue)** 계정(`RequestRandomnessParams` 의 `oracle_queue` 필드)을 지정합니다. 모든 Solana 계정과 마찬가지로 이 큐도 Solana 에 존재하지만, **위임된(delegated)** 큐는 ephemeral rollup 내부에서만 직접 쓸 수 있고 **위임되지 않은** 큐는 베이스 레이어에서 직접 쓸 수 있습니다. 트랜잭션이 실행되는 위치에 맞는 큐에서 랜덤니스를 요청하세요 — Solana 에서는 베이스 레이어 큐를, ephemeral rollup 내부에서는 위임된 큐를 사용합니다. 가능하면 주소를 하드코딩하지 말고 `ephemeral_vrf_sdk::consts` 의 상수를 참조하세요.

| 네트워크     | 베이스 레이어 큐                                                                | 위임된 큐(ephemeral rollup)                                                           |
| -------- | ------------------------------------------------------------------------ | --------------------------------------------------------------------------------- |
| Mainnet  | `DEFAULT_QUEUE`<br />`Cuj97ggrhhidhbu39TijNVqE74xvKJ69gDervRUXAxGh`      | `DEFAULT_EPHEMERAL_QUEUE`<br />`5hBR571xnXppuCPveTrctfTU7tJLSN94nq7kv7FRK5Tc`     |
| Devnet   | `DEFAULT_QUEUE`<br />`Cuj97ggrhhidhbu39TijNVqE74xvKJ69gDervRUXAxGh`      | `DEFAULT_EPHEMERAL_QUEUE`<br />`5hBR571xnXppuCPveTrctfTU7tJLSN94nq7kv7FRK5Tc`     |
| Localnet | `DEFAULT_TEST_QUEUE`<br />`GKE6d7iv8kCBrsxr78W3xVdjGLLLJnxsGiuzrsZCGEvb` | `DEFAULT_EPHEMERAL_TEST_QUEUE`<br />`Sc9MJUngNbQXSXGP3F67KvKwVnhaYn6kcioxXNVowYT` |

<Note>
  Mainnet 과 Devnet 은 동일한 기본 큐 주소를 사용합니다 — 연결하는 클러스터만 다릅니다. Localnet 은 로컬 검증자가 Devnet 에서 복제하는 전용 **테스트 큐**를 사용하며, `DEFAULT_TEST_QUEUE` / `DEFAULT_EPHEMERAL_TEST_QUEUE` 상수는 VRF SDK 에 포함되어 있습니다.
</Note>

<CardGroup cols={2}>
  <Card title="Audit" icon="certificate" href="/ko/pages/overview/additional-information/security-and-audits" iconType="duotone">
    전체 감사 보고서 읽기
  </Card>

  <Card title="Quickstart" icon="book" href="/ko/pages/verifiable-randomness-functions-vrfs/how-to-guide/quickstart" iconType="duotone">
    랜덤니스 기능 추가 방법 배우기
  </Card>
</CardGroup>
