> ## Documentation Index
> Fetch the complete documentation index at: https://daehan-base.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 개요

> Base 사전 확인을 위한 Flashblocks 전용 RPC 메서드, WebSocket 구독, 인프라 스트림 스키마를 정리한 문서입니다.

Flashblocks 엔드포인트는 모든 표준 Ethereum JSON-RPC 메서드와 함께, 사전 확인에 특화된 추가 메서드를 제공합니다. 이를 통해 블록이 seal되기 최대 약 1.8초 전까지 시퀀서가 정렬한 데이터를 기준으로 상태를 조회하고, 트랜잭션을 시뮬레이션하고, 이벤트를 스트리밍할 수 있습니다.

<Info>
  모든 [표준 Ethereum JSON-RPC 메서드](/base-chain/api-reference/rpc-overview)는 Flashblocks 엔드포인트에서도 동일하게 동작합니다. 트랜잭션 풀 대신 사전 확인 상태를 기준으로 조회하려면 `"pending"` block tag를 사용하세요. 엔드포인트 URL과 두 티어의 차이는 [Base RPC 개요](/base-chain/api-reference/rpc-overview)를 참고하세요.
</Info>

## HTTP 메서드

| 메서드                                                                                         | 설명                           |
| :------------------------------------------------------------------------------------------ | :--------------------------- |
| [eth\_simulateV1](/base-chain/api-reference/flashblocks-api/eth_simulateV1)                 | 사전 확인 상태를 기준으로 트랜잭션 번들 시뮬레이션 |
| [base\_transactionStatus](/base-chain/api-reference/flashblocks-api/base_transactionStatus) | 트랜잭션이 노드 mempool에 수신되었는지 확인  |

## WebSocket 구독

Flashblocks WSS 엔드포인트에서 `eth_subscribe`와 `newHeads`를 사용하면, 2초마다가 아니라 Flashblock마다 약 200ms 주기로 새 이벤트를 받습니다. 또한 Flashblocks 엔드포인트에서만 제공되는 전용 구독 타입 세 가지를 추가로 사용할 수 있습니다.

| 구독 타입                                                                                            | 설명                                   |
| :----------------------------------------------------------------------------------------------- | :----------------------------------- |
| [newFlashblockTransactions](/base-chain/api-reference/flashblocks-api/newFlashblockTransactions) | 개별 트랜잭션을 사전 확인되는 즉시 스트리밍(\~200ms 간격) |
| [pendingLogs](/base-chain/api-reference/flashblocks-api/pendingLogs)                             | 사전 확인 트랜잭션에서 발생한 필터링된 이벤트 로그 스트리밍    |
| [newFlashblocks](/base-chain/api-reference/flashblocks-api/newFlashblocks)                       | 시퀀서의 전체 Flashblock payload 객체 스트리밍   |

## 인프라 스트림

원시 Flashblocks 인프라 스트림은 Flashblocks 인식 RPC 노드가 소비하는 upstream WebSocket 피드입니다. 시퀀서가 트랜잭션을 사전 확인할 때마다 약 200ms 간격으로 새 메시지를 내보냅니다.

<Warning>
  **애플리케이션은 인프라 스트림에 직접 연결하면 안 됩니다.** 이 엔드포인트는 노드 운영자 전용입니다. 앱 개발자는 Flashblocks 인식 RPC 제공업체를 통해 위의 WebSocket 구독 메서드를 사용하세요.
</Warning>

| 네트워크    | Raw stream URL                          |
| :------ | :-------------------------------------- |
| Mainnet | `wss://mainnet.flashblocks.base.org/ws` |
| Sepolia | `wss://sepolia.flashblocks.base.org/ws` |

### Flashblock Object

각 인프라 스트림 메시지의 최상위 구조입니다.

<Card>
  <ParamField path="payload_id" type="string">
    생성 중인 블록의 고유 식별자입니다. 하나의 전체 블록 안에 포함된 모든 Flashblock에서 동일하게 유지됩니다.
  </ParamField>

  <ParamField path="index" type="number">
    현재 블록 안에서의 Flashblock 인덱스입니다. `0`에서 시작하며(시스템 트랜잭션만 포함), 사용자 트랜잭션은 인덱스 `1`부터 시작합니다. 일반적으로 블록당 9\~10까지 증가하지만, 시퀀서 타이밍 드리프트가 있으면 [10을 초과할 수도 있습니다](/base-chain/flashblocks/faq#why-can-the-flashblock-index-exceed-10).
  </ParamField>

  <ParamField path="base" type="Base Object">
    블록 헤더 속성입니다. **`index`가 `0`일 때만 존재합니다.** [Base Object](#base-object)를 참고하세요.
  </ParamField>

  <ParamField path="diff" type="Diff Object">
    이 Flashblock에서 발생한 증분 블록 상태 변경입니다. 모든 메시지에 포함됩니다. [Diff Object](#diff-object)를 참고하세요.
  </ParamField>

  <ParamField path="metadata" type="Metadata Object">
    보조 데이터입니다. **안정적이지 않으며 필드가 예고 없이 변경될 수 있습니다.** [Metadata Object](#metadata-object)를 참고하세요.
  </ParamField>
</Card>

### Base Object

전체 블록 헤더 속성을 담고 있습니다. **`index: 0` 메시지**, 즉 각 전체 블록의 첫 번째 Flashblock에만 존재합니다.

<Card>
  <ParamField path="parent_hash" type="string">부모 블록의 해시입니다.</ParamField>
  <ParamField path="fee_recipient" type="string">트랜잭션 수수료를 받는 주소(coinbase)입니다.</ParamField>
  <ParamField path="block_number" type="string">16진수 형식의 블록 번호입니다.</ParamField>
  <ParamField path="gas_limit" type="string">이 블록에서 허용되는 최대 가스량(16진수)입니다.</ParamField>
  <ParamField path="timestamp" type="string">블록 생성 시각의 Unix timestamp(16진수)입니다.</ParamField>
  <ParamField path="base_fee_per_gas" type="string">EIP-1559 기준 base fee per gas(16진수)입니다.</ParamField>
  <ParamField path="prev_randao" type="string">온체인 난수에 사용되는 이전 RANDAO 값입니다.</ParamField>
  <ParamField path="extra_data" type="string">시퀀서가 설정하는 임의 데이터 필드입니다.</ParamField>
</Card>

### Diff Object

이 특정 Flashblock의 증분 블록 상태 변경을 담고 있습니다. 모든 메시지에 포함됩니다.

<Card>
  <ParamField path="state_root" type="string">이 Flashblock의 트랜잭션을 적용한 뒤 상태 trie의 Merkle root입니다.</ParamField>
  <ParamField path="block_hash" type="string">이 Flashblock 인덱스 시점의 부분 블록 해시입니다. 더 많은 트랜잭션이 사전 확인될수록 매 Flashblock마다 바뀝니다.</ParamField>
  <ParamField path="gas_used" type="string">이 Flashblock까지 누적된 가스 사용량(16진수)입니다.</ParamField>
  <ParamField path="blob_gas_used" type="string">누적 blob gas 사용량(EIP-4844, 16진수)입니다.</ParamField>
  <ParamField path="transactions" type="string[]">이 Flashblock에 포함된 RLP 인코딩 트랜잭션 배열입니다.</ParamField>
  <ParamField path="withdrawals" type="array">검증자 출금 정보입니다(Base L2에서는 항상 비어 있음).</ParamField>
  <ParamField path="receipts_root" type="string">트랜잭션 영수증의 Merkle root입니다.</ParamField>
  <ParamField path="logs_bloom" type="string">이 Flashblock 로그용 Bloom filter입니다.</ParamField>
  <ParamField path="withdrawals_root" type="string">출금 정보의 Merkle root입니다.</ParamField>
</Card>

### Metadata Object

<Warning>
  **`metadata` 객체는 안정적이지 않습니다.** 필드가 사전 고지 없이 추가, 수정, 제거될 수 있습니다. 프로덕션 의존성을 여기에 두지 말고, 대신 [`diff`](#diff-object) 객체를 사용하거나 표준 RPC로 finalized 블록 데이터를 조회하세요.
</Warning>

<Card>
  <ParamField path="block_number" type="number">10진수 정수 형식의 블록 번호입니다.</ParamField>
  <ParamField path="new_account_balances" type="object">업데이트된 ETH 잔액(16진수)을 주소별로 담은 맵입니다. 이 Flashblock에서 잔액이 바뀐 계정만 포함합니다.</ParamField>
  <ParamField path="receipts" type="object">트랜잭션 해시를 [Receipt](#receipt-object) 객체에 매핑한 값입니다.</ParamField>
</Card>

### Receipt Object

`metadata.receipts`에 포함되는 축약형 트랜잭션 영수증입니다. 트랜잭션 유형은 `type` 필드로 판단합니다.

<Card>
  <ParamField path="type" type="string">트랜잭션 유형입니다: `0x0` Legacy, `0x1` Access List, `0x2` EIP-1559, `0x7e` Deposit(L1→L2).</ParamField>
  <ParamField path="status" type="string">트랜잭션 상태입니다. 성공이면 `0x1`, 실패면 `0x0`입니다.</ParamField>
  <ParamField path="cumulativeGasUsed" type="string">이 트랜잭션까지 포함한 블록 누적 가스 사용량(16진수)입니다.</ParamField>
  <ParamField path="logs" type="Log[]">트랜잭션에서 발생한 이벤트 로그 배열입니다. [Log Object](#log-object)를 참고하세요.</ParamField>
  <ParamField path="logsBloom" type="string">이 영수증 로그의 Bloom filter입니다.</ParamField>
  <ParamField path="transactionIndex" type="string">블록 내 트랜잭션 인덱스(16진수)입니다.</ParamField>
</Card>

### Log Object

<Card>
  <ParamField path="address" type="string">이벤트를 발생시킨 컨트랙트 주소입니다.</ParamField>
  <ParamField path="topics" type="string[]">인덱싱된 이벤트 파라미터 배열입니다. Topic 0은 보통 이벤트 시그니처 해시입니다.</ParamField>
  <ParamField path="data" type="string">ABI 인코딩된 비인덱스 이벤트 파라미터입니다.</ParamField>
</Card>

### 전체 예시

**Index 0** — `base` 객체(블록 헤더)를 포함합니다:

```json theme={null}
{
  "payload_id": "0x03997352d799c31a",
  "index": 0,
  "base": {
    "parent_hash": "0x9edc29b8b0a1e31d28616e40c16132ad0d58faa8bb952595b557526bdb9a960a",
    "fee_recipient": "0x4200000000000000000000000000000000000011",
    "block_number": "0x158a0e9",
    "gas_limit": "0x3938700",
    "timestamp": "0x67bf8332",
    "base_fee_per_gas": "0xfa"
  },
  "diff": {
    "state_root": "0x208fd63edc0681161105f27d03daf9f8c726d8c94e584a3c0696c98291c24333",
    "block_hash": "0x5c330e55a190f82ea486b61e5b12e27dfb4fb3cecfc5746886ef38ca1281bce8",
    "gas_used": "0xab3f",
    "transactions": ["0x7ef8f8a0b4afc0b7ce10e150801bbaf08ac33fecb0f38311793abccb022120d321c6d276..."],
    "withdrawals": []
  },
  "metadata": {
    "block_number": 22585577,
    "new_account_balances": {
      "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": "0x0"
    },
    "receipts": {
      "0x07d7f06b06fea714c1d1d446efa2790c6970aa74ee006186a32b5b7dd8ca2d82": {
        "type": "0x7e",
        "status": "0x1",
        "cumulativeGasUsed": "0xab3f",
        "logs": [],
        "logsBloom": "0x00000000...",
        "transactionIndex": "0x0"
      }
    }
  }
}
```

**Index 1–N (diff만 포함)** — `base` 객체가 없습니다:

```json theme={null}
{
  "payload_id": "0x03997352d799c31a",
  "index": 4,
  "diff": {
    "state_root": "0x7a8f45038665072f382730e689f4a1561835c9987fca8942fa95872fb9367eaa",
    "block_hash": "0x9b32f7a14cbd1efc8c2c5cad5eb718ec9e0c5da92c3ba7080f8d4c49d660c332",
    "gas_used": "0x1234f",
    "transactions": ["0x02f90133...", "0x02f90196..."],
    "withdrawals": []
  },
  "metadata": {
    "block_number": 22585577,
    "new_account_balances": {
      "0x4200000000000000000000000000000000000015": "0x1234"
    },
    "receipts": {
      "0x7c69632dc315f13a...": {
        "type": "0x2",
        "status": "0x1",
        "cumulativeGasUsed": "0x1234f",
        "logs": [],
        "logsBloom": "0x00000000...",
        "transactionIndex": "0x1"
      }
    }
  }
}
```
