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

# 합의

> Anzeon WBFT가 2단계 BFT 커밋과 BLS12-381 서명 집계를 사용해 블록을 생성하고 확정하는 방법.

> Anzeon WBFT는 StableNet의 스테이블코인 아키텍처에 맞게 조정된, WBFT(QBFT의 발전형)에서 파생된 PoA BFT 합의 엔진입니다.

## 프로토콜 계보

| 프로토콜            | 기반   | 주요 차이                                  |
| --------------- | ---- | -------------------------------------- |
| QBFT            | BFT  | 허가형 밸리데이터, 스테이킹 없음                     |
| WBFT            | QBFT | 스테이킹, 성실도 점수, 슬래싱 추가                   |
| **Anzeon WBFT** | WBFT | 스테이킹과 블록 보상 제거; GovValidator로 밸리데이터 관리 |

Anzeon WBFT는 StableNet 밸리데이터가 경제적 스테이커가 아닌 승인된 거버넌스 참여자이기 때문에 스테이킹과 블록 보상을 제거합니다. 밸리데이터는 트랜잭션 수수료(BaseFee 분배)만 받습니다.

## 합의 속성

| 속성     | 값                           |
| ------ | --------------------------- |
| 블록 시간  | \~1초 (`BlockPeriodSeconds`) |
| 내결함성   | `f = ⌊(n−1)/3⌋` 비잔틴 밸리데이터   |
| 최종성    | 즉각적, 결정론적 — 롤백 없음           |
| 에포크 길이 | 10 블록 (기본값, 설정 가능)          |
| 제안자 선택 | 라운드 로빈 (기본값)                |
| 서명 방식  | BLS12-381 집계                |

## 블록 생성 흐름

Anzeon WBFT는 타이머 기반 채굴 루프를 합의 이벤트 기반 루프로 대체합니다. 이전 블록이 최종 확정될 때만 새 블록이 생성됩니다.

```text theme={null}
[제안자 선택됨]
       │
       ▼
PROPOSE ──► 제안자가 서명된 블록 제안을 브로드캐스트
       │
       ▼
PREPARE ──► 밸리데이터들이 제안 검증 후 PREPARE-VOTE 브로드캐스트
       │    (2f+1 PREPARE-VOTE 수집)
       ▼
COMMIT  ──► 밸리데이터들이 COMMIT-VOTE 브로드캐스트
       │    (2f+1 COMMIT-VOTE 수집)
       ▼
FINALIZE ──► 블록 봉인, 체인에 추가 — 영구적으로 확정
```

`RequestTimeoutSeconds` 내에 쿼럼에 도달하지 못하면 라운드가 실패합니다. 프로토콜은 지수적으로 증가하는 타임아웃(`MaxRequestTimeoutSeconds`까지)으로 다음 라운드로 진행하고, 새 제안자가 선택됩니다.

## BLS 서명 집계

각 단계에서 밸리데이터들은 BLS12-381 키로 서명합니다. 한 단계의 `2f+1` 서명 모두가 블록 헤더에 포함되기 전에 단일 컴팩트 서명으로 집계됩니다. 효과:

* 단계별 네트워크 메시지 크기 감소
* 각 노드의 검증 비용 감소

집계 서명은 블록 헤더의 `WBFTExtra` 필드에 저장됩니다 (PREPARE는 `PreparedSeal`, COMMIT은 `CommittedSeal`).

## 밸리데이터 세트 관리

활성 밸리데이터 세트는 **에포크** (기본값: 10 블록)별로 저장됩니다. 각 에포크 경계에서:

1. 합의 엔진이 **GovValidator** 컨트랙트(`0x…1001`)에서 현재 밸리데이터 목록을 읽음
2. 새 `EpochInfo`가 구성되어 에포크의 첫 번째 블록 헤더에 포함됨
3. 새 밸리데이터 세트가 다음 에포크부터 활성화됨

밸리데이터 세트 변경(추가, 제거)은 다음 에포크 경계에서 적용됩니다 — 에포크 중간 변경은 불가능합니다.

## 가스 팁 동기화

각 블록 이후, 워커는 **GovValidator**에서 현재 `gasTip` 값을 조회하고 트랜잭션 풀 필터를 업데이트합니다. 거버넌스 적용 팁 미만의 트랜잭션은 블록 포함 전에 거부됩니다.

## 블록 헤더 추가 데이터

WBFT 메타데이터는 블록 헤더의 `Extra` 필드에 RLP 인코딩되어 저장됩니다:

| 필드              | 목적                         |
| --------------- | -------------------------- |
| `Round`         | 이 블록을 생성한 합의 라운드           |
| `EpochInfo`     | 이 에포크의 밸리데이터 세트 (에포크 블록에만) |
| `GasTip`        | 거버넌스 적용 최소 우선순위 수수료        |
| `PreparedSeal`  | PREPARE 단계의 집계 BLS 서명      |
| `CommittedSeal` | COMMIT 단계의 집계 BLS 서명       |

## 개발자 이점

* 블록 1개 = 확정 — 정상 운영 중 재편성 없음
* 재편성 처리 불필요 — 블록 번호가 있는 `eth_getTransactionReceipt`로 충분
* PoA 밸리데이터 — 밸리데이터 세트는 개방형 스테이킹이 아닌 거버넌스로 제어됨

## 관련 문서

* [1초 최종성](/ko/v0.3/learn/1-second-finality) — 결정론적 최종성의 개발자 영향
* [거버넌스 개요](/ko/v0.3/learn/governance-overview) — 밸리데이터 추가 및 제거 방식
* [가스 및 수수료](/ko/v0.3/learn/gas-and-fees) — GovValidator에서 트랜잭션까지 가스 팁 흐름
