# 스테이킹과 위임

> NeuroChain의 스테이킹과 위임 — 검증자가 되는 방법, 최소 스테이크, 본딩 잠금, APY와 보상 지급, 위임, 커미션, 그리고 스테이크가 주는 것과 주지 않는 것을 설명합니다.

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

NRO는 두 가지 방식으로 활용할 수 있습니다:

| | 누가 | 하는 일 |
|---|---|---|
| **자기 스테이크** | 검증자(`.node`) 또는 스스로를 위해 스테이킹하는 모든 주소 | 합의 투표권(`.node`의 경우)과 거버넌스 투표 가중치를 부여하고, 스테이킹 보상을 받습니다 |
| **위임** | 모든 주소가, 활성 스테이크를 가진 `.node`에게 | 기본 이율에서 검증자 커미션을 뺀 보상을 받습니다 |

모든 스테이킹 동작은 [서명된 작업](./wallet#signed-operations)입니다: 노드는 수신 시 서명을 확인하고, 변경 자체는 모든 검증자에서 합의를 통해 적용됩니다.

## 파라미터

이 값들은 모두 [거버넌스 파라미터](./governance#parameters)이며, 아래 기본값은 새 체인이 시작할 때의 값입니다. 보상과 잠금 관련 시간 값은 출시 전까지 확정되지 않았으며 바뀔 수 있습니다 — 의존하기 전에 `GET /api/v1/governance/params`에서 현재 값을 읽으세요.

| 파라미터 | 기본값 | 의미 |
|----------|--------|------|
| `min_stake` | 10 000 NRO | 최소 스테이크, 최소 위임액, 그리고 `.node`의 가격 |
| `unbonding_blocks` | 1 512 000 | 스테이킹 또는 위임 후의 본딩 잠금 (400 ms 블록 기준 약 7일). 환경 변수 재정의: `NEUROCHAIN_UNBONDING_BLOCKS` |
| `base_apy_bps` | 1 200 (12%) | 스테이크와 위임의 연 이율 |
| `genesis_apy_bps` | 2 400 (24%) | genesis 시점에 스테이킹한 검증자의 연 이율 |
| `reward_interval_blocks` | 216 000 | 지급 사이의 블록 수. 환경 변수 재정의: `NEUROCHAIN_REWARD_INTERVAL_BLOCKS` |
| `blocks_per_year` | 78 840 000 | 400 ms 기준 1년의 블록 수. 연 이율을 블록당 이율로 바꾸는 데 사용 |
| `max_commission_bps` | 2 000 (20%) | 검증자가 부과할 수 있는 최대 커미션 |

## 검증자가 되는 방법

1. `.human` 지갑에서 `.node` 이름을 등록합니다. 등록 시 `min_stake`가 차감되어 노드의 스테이크로 기록됩니다 — [주소](./addresses#paid-names-node-app-vault-agent)를 참고하세요.
2. 해당 아이덴티티와 ML-DSA-65 합의 키로 노드를 실행합니다 — [노드 실행](/ko/operate/node)을 참고하세요.
3. 스테이크가 `min_stake` 이상이고 합의 키가 체인에 등록되면, 노드는 활성 세트에 들어가 블록 제안과 투표를 시작합니다. [합의 → 검증자 세트](./consensus#validator-set)를 참고하세요.

검증자는 나중에 스테이크를 추가할 수 있습니다. 추가할 때마다 금액이 늘어나며 **전체 스테이크의 본딩 잠금이 다시 시작됩니다**.

## 본딩 잠금과 인출

스테이크와 위임은 **마지막으로** 추가한 시점부터 `unbonding_blocks` 동안 잠깁니다. 그 이후에는:

- **Unstake**는 자기 스테이크 전체를 한 번에 반환합니다. `.node`의 경우 노드의 **소유자** 지갑으로 돌아갑니다.
- **Undelegate**는 해당 검증자에 대한 위임 전체를 한 번에 반환합니다.

부분 인출은 지원되지 않습니다: 전부 인출한 뒤 유지하고 싶은 금액만큼 다시 스테이킹하세요.

## 보상

보상은 `reward_interval_blocks`마다 스테이커의 잔액으로 바로 지급됩니다:

```
보상 = 금액 × apy_bps / 10 000 × elapsed_blocks / blocks_per_year
```

- `apy_bps`는 genesis 검증자의 경우 `genesis_apy_bps`, 그 외 모두는 `base_apy_bps`입니다.
- `elapsed_blocks`는 마지막 지급 이후의 블록 수이며, 공백이 길어도 과도한 지급이 나오지 않도록 지급당 상한(`MAX_REWARD_ELAPSED_BLOCKS`)으로 제한됩니다.
- 모든 연산은 128비트 중간값을 사용하는 정수 연산이므로, 모든 검증자가 정확히 같은 금액을 계산합니다.

기록과 차트: `GET /api/v1/staking/rewards/:address`.

## 위임

| 규칙 | 값 |
|------|----|
| 최소 금액 | `min_stake` (기본값 10 000 NRO) |
| 대상 | 활성 스테이크를 가진 `.node` |
| 이율 | `base_apy_bps` (genesis 이율은 위임에 적용되지 않음) |
| 커미션 | 검증자가 설정, 기본값 10%, 최대 20% |

각 위임에 대해 연 이율은 다음과 같이 나뉩니다:

```
commission_rate = base_apy × commission_bps / 10 000   → 검증자에게 지급
delegator_rate  = base_apy − commission_rate           → 여러분에게 지급
```

기본값(기본 이율 12%, 커미션 10%)에서는 위임된 금액에 대해 위임자가 연 10.8%, 검증자가 1.2%를 받습니다.

::: info 위임이 하지 않는 일
위임된 NRO는 검증자의 합의 투표권에 **더해지지 않으며**, 위임자에게 거버넌스 투표권을 **주지도 않습니다**. 둘 다 자기 스테이크만 계산합니다. 위임은 보상을 받을 뿐, 제어권을 옮기지 않습니다.
:::

## 위험

- **Slashing.** 서로 충돌하는 두 투표에 서명한 검증자는 자기 스테이크에서 `min_stake`의 5%를 잃고 10 000 블록 동안 jail됩니다. [합의 → Slashing](./consensus#slashing-and-jail)을 참고하세요. 위임은 slash되지 않습니다.
- **잠금.** 본딩된 NRO는 잠금이 끝날 때까지 옮길 수 없습니다.

## API

| 동작 | 엔드포인트 |
|------|-----------|
| 스테이킹 | `POST /api/v1/staking/stake` |
| 언스테이킹 | `POST /api/v1/staking/unstake` |
| 위임 | `POST /api/v1/staking/delegate` |
| 위임 해제 | `POST /api/v1/staking/undelegate` |
| 내 스테이크와 보상 | `GET /api/v1/staking/info/:address` |
| 검증자에 대한 위임 | `GET /api/v1/staking/delegations/:validator` |
| 내 위임 | `GET /api/v1/staking/my-delegations/:address` |
| 스테이크를 가진 검증자 | `GET /api/v1/staking/validators` |
| 노드 등록 | `POST /api/v1/nodes/register` |

요청과 응답 필드는 [REST 레퍼런스](/ko/reference/rest)에 있습니다.
