# 거버넌스

> NeuroChain의 온체인 거버넌스 — 누가 제안하고 투표할 수 있는지, 스테이크 가중 투표, 쿼럼과 임계값, 허용 범위가 있는 파라미터 변경, 그리고 전체 거버넌스 파라미터 목록을 설명합니다.

Source: https://docs.nro.world/ko/learn/governance

프로토콜 파라미터 — 최소 스테이크, 보상, 가스 예산, slashing, AI 임계값 — 는 노드 운영자가 설정을 편집해서가 아니라 **스테이크 가중 온체인 투표**로 변경됩니다.

![제안 수명 주기: 스테이커가 제안하면, 제안은 투표 기간 동안 활성 상태이며 스테이커들은 자기 스테이크로 가중된 투표를 합니다. 기간이 끝나면 투표가 전체 스테이크의 20%에 도달하고 찬성이 투표의 50%를 넘을 때 통과하고, 그렇지 않으면 거부됩니다. 통과된 PARAM_CHANGE는 값이 허용 범위 안에 있을 때 파라미터를 갱신합니다](/diagrams/ko/governance-lifecycle.svg)

## 제안하기

| 규칙 | 값 |
|------|----|
| 누가 | 모든 주소의 서명된 요청. `.human` 제안자는 최소 `min_stake` 이상의 자기 스테이크를 보유해야 함 |
| 종류 | `text`(신호 전달만), `PARAM_CHANGE`(파라미터 하나 변경) 또는 `REGISTRY_CHANGE`(이름이나 티커 예약 또는 해제) |
| 투표 기간 | 100부터 `max_voting_duration_blocks`(기본값 1 000 000) 블록까지. 지정하지 않으면 1 000 |
| 제한 | 제목 200자, 설명 5 000자, 페이로드 10 KB |

`PARAM_CHANGE`는 변경 내용을 페이로드로 담습니다:

```json
{ "param_key": "max_block_gas", "param_value": 20000 }
```

값은 숫자 또는 숫자 문자열일 수 있습니다.

`REGISTRY_CHANGE`는 [예약된 이름](./addresses#reserved-names) 레지스트리(`"registry": "names"`) 또는 보호 티커 레지스트리(`"symbols"`)의 항목을 예약하거나 해제합니다. 예약 시에는 그 항목을 여전히 가져갈 수 있는 소유자를 지정할 수 있습니다:

```json
{ "registry": "names", "action": "reserve", "value": "binance", "allowed": ["neuro:<owner>.human"] }
```

제안은 `neuro:system.governance`에 대한 [서명된 작업](./wallet#signed-operations)입니다. 합의에 기록되므로, 모든 검증자가 같은 높이부터 동일한 제안을 보유합니다.

## 투표

- **자기 스테이크**가 있는 주소만 투표할 수 있습니다. 투표 가중치는 투표가 적용될 때 체인 상태에서 읽은 투표자의 자기 스테이크입니다. 위임에는 투표권이 없습니다.
- 제안이 생성된 **이후에** 추가된 스테이크로는 그 제안에 투표할 수 없습니다 — 투표를 뒤집기 위해 스테이크를 사들이는 것을 막습니다.
- 제안당 주소별 한 표: 찬성 또는 반대이며, 번복할 수 없습니다.
- 투표는 합의에 기록되는 서명된 작업입니다.

## 결과

투표 기간이 끝나면:

| 확인 항목 | 기본값 | 제안 필드 |
|-----------|--------|-----------|
| **쿼럼** — 찬성 + 반대 가중치 ≥ 전체 자기 스테이크의 이 비율 | 20% | `quorum_bps` = 2 000 |
| **임계값** — 찬성 가중치 > 투표된 표의 이 비율 | 50% | `threshold_bps` = 5 000 |

둘 다 충족 → `passed`, 그렇지 않으면 → `rejected`. 통과된 `PARAM_CHANGE`는 파라미터를 갱신합니다 — 단, 새 값이 해당 파라미터의 허용 범위를 벗어나면 변경이 거부되고 기존 값이 유지됩니다.

::: warning 최종 처리 상태
<Badge type="warning" text="실험적" /> 제안 생성과 투표는 합의 안에서 실행됩니다. 제안 종료와 통과된 파라미터 변경의 적용은 현재 블록 커밋이 아니라, 각 노드가 제안 목록(`GET /api/v1/governance/proposals`)을 제공할 때 노드마다 이루어집니다. 최종 처리를 커밋 경로로 옮기는 작업은 계획되어 있습니다. 그때까지는 변경이 통과된 뒤 모든 검증자에서 파라미터를 확인하세요.

**테스트 방법:** 노드의 `test_apply_tx_governance_propose_and_vote_in_consensus`가 제안과 투표의 적용을 다루며, 범위 검사는 파라미터 테스트(`test_deploy_risk_threshold_governance`, `test_deploy_security_governance_override`)가 다룹니다.
:::

## 파라미터 {#parameters}

현재 값: `GET /api/v1/governance/params`. 일부는 노드 시작 시 환경 변수로 노드별로 설정할 수도 있습니다 — 테스트 네트워크용입니다.

### 스테이킹과 합의

| 파라미터 | 기본값 | 허용 범위 | 환경 변수 재정의 |
|----------|--------|-----------|------------------|
| `min_stake` | 10 000 NRO (uNRO 단위) | 1 ~ 10¹⁵ uNRO | — |
| `unbonding_blocks` | 1 512 000 | 1 ~ 10⁹ | `NEUROCHAIN_UNBONDING_BLOCKS` |
| `base_apy_bps` | 1 200 (12%) | 0 ~ 100 000 | — |
| `genesis_apy_bps` | 2 400 (24%) | 0 ~ 100 000 | — |
| `reward_interval_blocks` | 216 000 | 1 ~ 10⁹ | `NEUROCHAIN_REWARD_INTERVAL_BLOCKS` |
| `blocks_per_year` | 78 840 000 | 1 ~ 10⁹ | — |
| `max_commission_bps` | 2 000 (20%) | — | — |
| `max_block_gas` | 10 000 | 1 ~ 10⁹ | — |
| `slash_fraction_double_sign_bps` | 500 (`min_stake`의 5%) | 0 ~ 10 000 | `NEUROCHAIN_SLASH_FRACTION_DOUBLE_SIGN_BPS` |
| `slash_reward_fraction_bps` | 100 (신고자에게 1%) | 0 ~ 10 000 | `NEUROCHAIN_SLASH_REWARD_FRACTION_BPS` |
| `slash_double_vote_bps` | 500 | 0 ~ 10 000 | — |
| `jail_blocks` | 10 000 | 1 ~ 10⁹ | `NEUROCHAIN_JAIL_BLOCKS` |
| `slash_evidence_window` | 10 000 | 1 ~ 10⁹ | `NEUROCHAIN_SLASH_EVIDENCE_WINDOW` |
| `quorum_bps` | 2 000 | 1 ~ 10 000 | — |
| `threshold_bps` | 5 000 | 1 ~ 10 000 | — |

### AI 보안

| 파라미터 | 기본값 | 허용 범위 | 의미 |
|----------|--------|-----------|------|
| `deploy_security_enabled` | 1 | 0 또는 1 | VMGuardian 배포 전 게이트 켜기/끄기 (비상 스위치) |
| `deploy_risk_threshold` | 80 | 0 ~ 100 | 위험 점수 ≥ 0.80이면 배포 거부 |
| `sentinel_enabled` | 1 | 0 또는 1 | Sentinel 트랜잭션 점수화 켜기/끄기 |
| `sentinel_reject_threshold` | 85 | — | 점수 ≥ 0.85이면 트랜잭션 거부 |
| `sentinel_policy_enabled` | 0 | — | 단계별 정책 계층 (보류 / 확인) — 기본값 꺼짐 |
| `sentinel_hold_threshold` | 60 | — | 전송이 보류되기 시작하는 점수 |
| `sentinel_stepup_threshold` | 70 | — | 소유자 확인이 필요해지는 점수 |
| `sentinel_hold_blocks` | 50 | — | 보류된 전송이 해제되기까지의 지연 |
| `sentinel_confirm_expiry_blocks` | 1 000 | — | 환불 전 소유자 확인을 기다리는 기간 |
| `sentinel_agent_confirm_threshold` | 60 | — | 세션 키 전송에 소유자가 필요해지는 점수 |
| `trust_activation_blocks` | 300 | — | 새로 신뢰한 수신자가 적용되기까지의 지연 |

Sentinel 정책 파라미터에는 `NEUROCHAIN_SENTINEL_*`와 `NEUROCHAIN_TRUST_ACTIVATION_BLOCKS` 환경 변수 재정의도 있습니다. [Sentinel](/ko/ai/sentinel)을 참고하세요.

### 이름

| 파라미터 | 기본값 | 허용 범위 | 의미 |
|----------|--------|-----------|------|
| `name_min_len` | 5 | 1 – 32 | 구매할 수 있는 가장 짧은 `.human` 이름 또는 `.agent` |
| `name_price_len_1` … `name_price_len_5` | 100 000 · 50 000 · 10 000 · 5 000 · 2 000 NRO | 1 uNRO – 10⁹ NRO | 해당 길이 이름의 가격 |
| `name_price_len_6plus` | 500 NRO | 1 uNRO – 10⁹ NRO | 6자 이상 이름의 가격 |

가격은 uNRO로 저장됩니다. 더 짧은 길이를 열면 그 길이의 모든 이름이 한 블록에서 열리므로, 제안에 개방 높이를 공지하세요.

### 네이티브 자산과 거래소

| 파라미터 | 기본값 | 의미 |
|----------|--------|------|
| `asset_issue_fee` | 1 000 NRO | 네이티브 자산 발행 수수료 |
| `asset_max_decimals` | 18 | 자산이 가질 수 있는 최대 소수 자릿수 |
| `dex_shard` | 0 | 자산과 거래소 기록을 보관하는 샤드 |

거래소(AMM)에는 유동성 공급자 수수료, 프로토콜 수수료, 최소 유동성, 블록당 풀별 스왑 수, 비상 켜기/끄기 스위치에 대한 파라미터도 있습니다. [REST 레퍼런스](/ko/reference/rest)에 현재 값과 함께 나와 있습니다.

*허용 범위*의 대시(—)는 변경이 통과될 때 노드가 아직 그 파라미터의 범위를 검사하지 않는다는 뜻입니다 — 값을 신중하게 제안하세요.

## API

| 동작 | 엔드포인트 |
|------|-----------|
| 제안 | `POST /api/v1/governance/propose` |
| 투표 | `POST /api/v1/governance/:id/vote` |
| 제안 목록 | `GET /api/v1/governance/proposals?status=&limit=&offset=` |
| 단일 제안 | `GET /api/v1/governance/:id` |
| 파라미터 | `GET /api/v1/governance/params` |
