노드 레지스트리와 좌석
노드 레지스트리는 ZooBC 블록을 만들 수 있는 노드들의 온체인 목록입니다. 각 항목이 좌석입니다. 참여 증명에서는 코인이나 하드웨어가 아니라 좌석이 누가 블록을 만들지 결정합니다. 운영자가 다음 블록을 만들 기회는 그가 가진 좌석의 비율과 같습니다. 레지스트리의 모든 변경은 모든 노드가 검증하는 트랜잭션이며, 누구나 이를 읽을 수 있습니다.
좌석이 기록하는 것
레지스트리는 각 노드에 대해 다음을 보관합니다.
- 노드 id: 노드 키에서 도출한 숫자로, 처음 8바이트를 리틀엔디언 정수로 읽고 최상위 비트를 0으로 만든 것입니다.
- 노드 키: 노드의 작업에 서명하는 32바이트 Ed25519 공개 키입니다(노드의 키 참조).
- 소유자 계정: 노드를 등록하고 통제하는 일반 계정입니다.
- 등록 높이: 노드가 등록된 블록입니다.
- 잠긴 스테이크: 소유자가 보증금으로 잠근 ZBC입니다.
- 상태: 등록됨(활성), 대기 중, 삭제됨 중 하나입니다.
노드의 참여 점수는 그 옆에 보관됩니다. 레지스트리는 블록 높이별로 버전이 관리되므로 과거 어느 높이의 구성원이든 다시 만들어 낼 수 있으며, 각 블록은 이전 블록 시점의 레지스트리를 기준으로 판정됩니다.
왜 좌석인가
작업 증명에서는 블록 생산의 몫을 하드웨어를 사는 속도만큼 빠르게 살 수 있고, 지분 증명에서는 코인을 사는 속도만큼 빠르게 살 수 있습니다. ZooBC에서 그 몫은 좌석의 몫이며, 좌석은 프로토콜이 정한 속도로 한 번에 하나씩 입회합니다(입회 속도). 따라서 블록 생산의 과반을 빠르게 사들일 수 없습니다. 참여 증명과 PoW·PoS의 비교에서 세 설계를 나란히 비교합니다.
생산자 추첨은 정지되지 않은 등록 좌석들에 대해 균일합니다(추첨). 소유자가 얼마를 잠갔든 모든 좌석은 추첨될 확률이 같습니다. 좌석 30개 중 3개를 가진 운영자는 각 좌석에 100 ZBC를 잠갔든 10,000 ZBC를 잠갔든 대략 열 블록에 하나를 만듭니다.
스테이크가 하는 일
스테이크가 블록을 사지 못한다면 무엇에 쓰일까요?
- 합류를 기다리는 노드들의 대기열을 스테이크에 기다린 시간을 곱한 값으로 정렬합니다(대기열).
- 모든 좌석에 비용이 들게 합니다. 신규 노드는 최소한 입장 최소치를 잠가야 합니다(노드 등록).
- 보증금입니다. 노드가 퇴출되거나, 누락 상태나 정지 상태에서 떠나면 그 10분의 1을 잃습니다. 그 10분의 1은 일하는 노드들에게 지급하는 롱제비티 풀로 갑니다(레지스트리에서 나가기).
스테이크는 그 자체로는 아무것도 벌지 않습니다. 보상도 스테이크를 무시합니다. 코인베이스 추첨은 실제 일로만 올라가는 참여 점수로 가중치를 줍니다(성숙과 수입).
제네시스 좌석과 신규 노드
각 체인은 ZooBC Foundation이 보유한 제네시스 좌석 11개로 시작합니다. 이 좌석들은 높이 0에서 잠긴 스테이크 없이, 기본 점수 20 %와 각 노드 자신의 계정에 10 ZBC의 운영 잔액을 가진 채 레지스트리에 기록됩니다. 다른 모든 사람은 대기열을 통해 합류합니다. 신청자를 고르는 사람도, 승인 단계도 없습니다. 고정된 일정도 없습니다. 두 입회 사이의 시간은 집계 대상 좌석의 수에 따라 정해집니다. 등록은 만료되지 않습니다.
좌석의 상태가 바뀌는 방식
| 이전 | 이후 | 원인 |
|---|---|---|
| (없음) | 등록됨 | 높이 0의 제네시스 |
| (없음) 또는 삭제됨 | 대기 중 | 등록 |
| 대기 중 | 등록됨 | 입회 |
| 등록됨 | 삭제됨 | 퇴출, 소유자의 제거, 또는 청구 |
| 대기 중 | 삭제됨 | 제거, 청구, 또는 참석 미달로 인한 제외 |
정지는 상태가 아닙니다. 정지된 노드는 "등록됨"으로 남지만 돌아올 때까지 생산자 추첨에서 빠집니다(놓친 차례, 정지, 퇴출).
레지스트리 읽기
레지스트리는 공개되어 있으며, 읽는 데 키가 필요하지 않습니다.
GET /api/v1/nodes?status=all은 모든 좌석을 소유자와 등록 높이와 함께 보여 줍니다. 제네시스 좌석은 높이 0을 유지합니다.GET /api/v1/nodes?status=queued는 대기열을 각 노드의 스테이크와 등록 높이와 함께 보여 줍니다.GET /api/v1/blockchain/rules는 적용 중인 규칙을 보여 줍니다.
레지스트리는 지갑 목록이 아닙니다. 일반 계정은 ZBC를 보유하거나 보내는 데 등록이 필요하지 않습니다.