> ## 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.

# 검증자 거버넌스 (GovValidator)

## 목적 및 범위

이 문서는 StableNet 블록체인에서 검증자 세트 거버넌스를 관리하는 **GovValidator** 시스템 컨트랙트를 설명합니다.\
GovValidator는 검증자 등록 및 제거, BLS 키 관리, 네트워크 전반의 가스 팁 정책을 담당합니다.

모든 시스템 컨트랙트에 대한 개요는 [시스템 컨트랙트 개요](/ko/governance-system/5.1-system-contracts-overview)을 참조하세요.\
민팅 거버넌스는 [민팅 거버넌스 (GovMasterMinter 및 GovMinter)](/ko/governance-system/5.4-minting-governance-\(govmasterminter-and-govminter\))를 참조하세요.

## 개요

GovValidator(`0x0000000000000000000000000000000000001001`)는 검증자 세트에 대한 온체인 거버넌스를 구현하는 제네시스 배포 시스템 컨트랙트입니다.\
전통적인 스테이킹 기반 검증자 시스템과 달리 StableNet은 기존 거버넌스 멤버의 집단 투표를 통해 검증자가 관리되는 **Proof-of-Authority(PoA)** 모델을 사용합니다.

주요 책임:

* **검증자 세트 관리**: 거버넌스 투표를 통해 검증자 등록 및 제거
* **키 관리**: 각 검증자에 대한 운영 키, 검증자 키, BLS 공개 키 관리
* **가스 팁 정책**: 네트워크 전반의 필수 가스 팁 설정 및 적용
* **쿼럼 기반 결정**: 모든 거버넌스 작업은 쿼럼 임계값을 충족하는 멤버 투표가 필요함

## 아키텍처 개요

GovValidator 컨트랙트는 WBFT 합의 엔진과 상호 작용하여 검증자 세트 변경과 가스 팁 정책을 적용합니다.

## 검증자 키 구조

StableNet 검증자는 **운영 키(Operator)**, **검증자 키(Validator)**, **BLS 키**의 세 가지 키를 사용합니다.\
각 키의 역할, 생성·파생 절차, 제네시스 구성 예시는 운영 가이드의 [검증자 작업](/ko/operations-guide/11.2-validator-operations)을 참고하세요.

## 제네시스 구성

GovValidator는 제네시스에서 다음 매개변수로 초기화됩니다.

| Parameter       | Type        | Description          |
| --------------- | ----------- | -------------------- |
| `members`       | `address[]` | 운영 키 주소 목록           |
| `validators`    | `address[]` | 검증자 키 주소 목록          |
| `blsPublicKeys` | `bytes[]`   | BLS 공개 키 목록          |
| `quorum`        | `uint256`   | 거버넌스 작업에 필요한 최소 승인 수 |
| `expiry`        | `uint256`   | 제안 만료 시간(초)          |
| `memberVersion` | `uint256`   | 멤버/검증자 세트 변경 버전      |
| `gasTip`        | `uint256`   | 초기 네트워크 공통 가스 팁      |

**중요:**\
`init.validators` / `init.blsPublicKeys`는 **첫 번째 에포크**에만 사용됩니다.\
두 번째 에포크부터는 GovValidator 컨트랙트의 저장소 값이 기준이 됩니다.

## 검증자 거버넌스 흐름

### 검증자 추가

검증자 추가는 다음 단계를 따릅니다.

1. 거버넌스 멤버가 새 검증자 정보를 포함한 제안 생성
2. 다른 멤버들이 투표
3. 승인 수가 쿼럼에 도달하면 제안 실행
4. `memberVersion` 증가
5. 다음 에포크부터 새 검증자 활성화

### 검증자 제거

검증자 제거 역시 동일한 쿼럼 기반 제안/투표/실행 흐름을 따르며, 제거된 검증자는 다음 에포크부터 합의 및 블록 서명에 참여하지 않습니다.

## 가스 팁 정책 관리

GovValidator는 네트워크 전반에 적용되는 **필수 가스 팁**을 관리합니다.\
일반 계정은 이 값을 반드시 따라야 하며, Authorized 계정만 예외적으로 사용자 지정 팁을 설정할 수 있습니다.

### 가스 팁 라이프사이클

1. 거버넌스 멤버가 `setGasTip(newTip)` 제안
2. 쿼럼 투표 통과
3. 컨트랙트 저장소의 `gasTip` 업데이트
4. 다음 블록 헤더에 반영
5. 워커와 TxPool이 새로운 최소값으로 동기화

### 트랜잭션 선택 시 적용

| Transaction Type   | Gas Tip Rule     |
| ------------------ | ---------------- |
| Normal Account     | 거버넌스 `gasTip` 강제 |
| Authorized Account | 사용자 지정 tip 허용    |
| Below Minimum      | TxPool에서 거부      |

## WBFT 합의와의 통합

GovValidator는 에포크 블록마다 WBFT 합의 엔진에 활성 검증자 세트를 제공합니다.

에포크 전환 시:

1. 합의 엔진이 에포크 블록 감지
2. GovValidator 저장소에서 `validators[]`와 `blsPublicKeys[]` 조회
3. `EpochInfo` 구성
4. 블록 헤더 Extra 데이터에 인코딩
5. 다음 에포크에서 새 세트 활성화

## 컨트랙트 저장소 레이아웃

| Variable        | Type        | Description  |
| --------------- | ----------- | ------------ |
| `members`       | `address[]` | 거버넌스 운영 키    |
| `validators`    | `address[]` | 검증자 키        |
| `blsPublicKeys` | `bytes[]`   | BLS 공개 키     |
| `memberVersion` | `uint256`   | 세트 변경 버전     |
| `quorum`        | `uint256`   | 최소 승인 수      |
| `expiry`        | `uint256`   | 제안 만료 시간     |
| `gasTip`        | `uint256`   | 네트워크 필수 가스 팁 |

## 거버넌스 멤버 작업

| Operation        | Effect              |
| ---------------- | ------------------- |
| Add Validator    | 다음 에포크부터 검증자 추가     |
| Remove Validator | 다음 에포크부터 검증자 제거     |
| Set Gas Tip      | 네트워크 최소 우선순위 수수료 변경 |
| Query Validators | 현재 검증자 목록 조회        |
| Query Gas Tip    | 현재 가스 팁 조회          |

모든 변경 작업은 쿼럼 기반 투표를 통해서만 실행됩니다.

## 다른 컨트랙트와의 관계

GovValidator는 StableNet 거버넌스 시스템의 일부로,\
민팅 정책(GovMasterMinter/GovMinter) 및 계정 정책(GovCouncil)과 역할이 명확히 분리되어 있습니다.

이 분리를 통해 합의·검증자 운영과 통화 정책을 독립적으로 관리할 수 있습니다.
