노드 운영
ZooBC 노드는 컴퓨터에서 실행되는 ZooBC 소프트웨어입니다. 노드는 체인의 사본을 보관하고, 모든 블록과 트랜잭션을 다른 모든 노드와 같은 규칙으로 검사하며, 공개 HTTP API를 제공합니다. 누구나 노드를 운영할 수 있으며, 체인을 따라가기만 하는 노드만으로도 소유자는 누구도 신뢰하지 않고 모든 것을 확인할 수 있습니다. 블록을 만드는 것은 별개의 단계입니다. 노드는 노드 레지스트리에 좌석을 가진 뒤에야 블록을 만듭니다.
노드가 실행하는 것
노드는 zoobc-node --start node.conf로 시작하는 프로세스 하나이며, SQLite 데이터베이스 하나를 씁니다. 노드는 세 포트에서 대기합니다.
| 포트 | 용도 | |
|---|---|---|
| 8001 | P2P 네트워크 | |
| 8080 | HTTP API (웹 지갑도 여기서 제공) | |
| 8545 | [[metamask | MetaMask]]가 쓰는 Ethereum 방식 RPC 어댑터, 기본값은 노드 자신의 컴퓨터(루프백) |
노드는 제네시스 블록을 직접 만들지 않습니다. 블록 0은 이미 데이터베이스에 있어야 하며, 그 블록의 해시가 체인의 신원입니다(제네시스 블록 참조). 노드가 빠져나올 수 없는 분기에 갇힌 상태("막힘(wedged)")가 되면, auto_resync 설정이 기본으로 켜져 있으므로 자기 체인을 버리고 스파인 체인에 고정된 스냅샷으로부터 스스로를 재구축합니다. 릴리스에는 노드 자신의 스파인이 일치해야 하는 알려진 스파인 블록인 릴리스 핀이 함께 들어 있을 수도 있습니다. 새 버전은 노드 옆에서 실행되며 소유자가 통제하는 업데이터를 통해 도착합니다(릴리스와 업데이트).
켜는 것부터 블록을 만들기까지
- 운영자는 두 키를 만듭니다. 컴퓨터를 위한 노드 키와 지갑 안의 소유자 키입니다(노드의 키).
- 소유자는 스테이크를 잠그고 두 키가 한 쌍이라는 증명을 담은 등록을 보냅니다(노드 등록).
- 노드는 스테이크에 기다린 시간을 곱한 값으로 정렬된 공개 대기열에서 기다립니다(대기열).
- 입회 타이머가 프로토콜이 정한 느린 속도로 한 번에 노드 하나씩 들여보냅니다(입회 속도).
- 입회하면 노드는 블록을 만들도록 추첨되고(추첨), 배정된 피어들에게 블록과 트랜잭션을 중계하며(영수증과 네트워크 토폴로지), 짧은 성숙 기간 뒤에 보상을 나눠 받습니다(성숙과 수입).
각 체인은 ZooBC Foundation이 보유한 제네시스 좌석 11개로 시작합니다. 다른 모든 사람은 대기열을 통해 합류하며, 누가 들어올지 고르는 사람은 없습니다. 어떤 좌석도 사람이 직접 내주지 않으며, 작업 증명에서처럼 컴퓨팅 파워로 얻을 수도 없습니다.
레지스트리에 머물기
좌석은 일을 해야 지켜집니다. 추첨된 차례를 어떤 이유로든 건너뛴 등록 노드는 다음 자기 블록을 만들 때까지 누락 상태가 됩니다. 누락 상태인 동안에는 아무것도 벌지 못하며, 참여 점수가 점수 단위마다 5점(100점 만점)씩 떨어집니다. 점수 단위는 노드가 2,880개 미만인 네트워크에서 12시간입니다. 노드가 서명한 영수증이나 핑은 이 상태를 끝내지 않으며, 오직 노드 자신의 다음 블록만 끝냅니다.
연속으로 네 번째 차례를 놓치면 노드는 정지되기도 합니다. 생산자 추첨에서는 빠지지만 좌석은 유지합니다. 노드가 다시 온라인이 되면 소프트웨어가 핑을 보냅니다. 핑은 정지된 노드만 보낼 수 있는 수수료 없는 작은 트랜잭션으로, 노드를 수습 상태로 추첨에 복귀시킵니다. 점수가 0에 이르면 노드는 퇴출됩니다. 자세한 내용은 놓친 차례, 정지, 퇴출에, 좌석이 끝나는 모든 경우는 레지스트리에서 나가기에, 모든 수치는 mainnet의 노드 파라미터에 있습니다.
같이 보기
이 주제의 문서
- mainnet의 노드 파라미터
노드 등록, 대기열, 입회, 활성성, 수입, 퇴장, 업데이트, 노드 프로세스를 다스리는 mainnet 값을 한 줄씩 정리한 참조 표입니다. - 노드 등록
소유자가 노드를 등록하는 방법을 설명합니다. NodeRegistration 트랜잭션, 노드 키와 소유자를 묶는 소유 증명, 그리고 대기열이 받아들이는 최소 스테이크입니다. - 노드 레지스트리와 좌석
블록을 만들 수 있는 노드들의 온체인 목록을 설명합니다. 각 좌석이 기록하는 것, 코인이 아니라 좌석이 블록 생산을 결정하는 이유, 그리고 누구나 이를 읽는 방법입니다. - 노드의 키
노드의 작업에 서명하는 노드 키와, 좌석과 스테이크를 통제하는 소유자 키를 설명합니다. 각각 어디에 있고, 무엇에 서명하며, 어떻게 서로 묶이는지를 다룹니다. - 대기열
등록한 신규 노드가 좌석을 기다리는 방식을 설명합니다. 스테이크 곱하기 기다린 시간에 따른 순서, 매일의 참석 확인, 그리고 대기열을 떠나는 비용입니다. - 레지스트리에서 나가기
좌석이 끝나는 방식(소유자의 제거, 점수 0에서의 퇴출, 노드 키를 이용한 청구)과, 소유자가 스테이크 전부를 돌려받는 경우와 10분의 1을 잃는 경우를 설명합니다. - 릴리스와 업데이트
새 노드 버전이 체인에 공지되는 방식, 각 노드 옆의 업데이터가 이를 안전하게 설치하는 방식, 그리고 새 합의 규칙 묶음이 켜지는 방식을 설명합니다. - 성숙과 수입
등록 노드가 버는 것, 코인베이스 추첨이 각 블록의 보상을 참여 점수에 따라 나누는 방법, 그리고 새 노드가 수입을 얻으려면 먼저 성숙해야 하는 이유를 설명합니다. - 입회 속도
ZooBC가 레지스트리에 신규 노드를 한 번에 하나씩 천천히 받아들이는 이유, 입회 사이의 지연을 정하는 공식, 그리고 그 공식이 mainnet에서 만드는 일정을 설명합니다.