참여 증명 (PoP)
참여 증명(PoP)은 ZooBC가 블록에 합의하는 방식입니다. 블록은 온체인 노드 레지스트리에 있는 노드들이 만들며, 이 노드들은 이전 블록의 시드로 추첨되고 모든 좌석은 같은 기회를 갖습니다. 각 노드는 네트워크에 필요한 일, 즉 프로토콜이 배정한 피어들에게 블록과 트랜잭션을 전달하는 일로 측정되며, 그 측정 결과가 새 코인에서 노드가 받을 몫을 정합니다. 블록은 올바른 키가 서명했기 때문에 유효하며, 모든 노드가 이를 직접 확인합니다.
네 가지 설계 목표
- 균일한 블록 생산 권한. 잔액, 스테이크, 하드웨어, 점수는 좌석의 기회를 바꾸지 않습니다.
- 열려 있되 속도가 정해진 참여. 누구나 스테이크를 잠그고 좌석을 얻기 위해 대기열에 들어갈 수 있으며, 프로토콜은 주기마다 새 노드 하나를 입회시킵니다.
- 측정되고 보상받는 참여. 중계는 데이터를 받은 피어가 서명한 영수증으로 증명되며, 영수증이 각 노드의 수입을 결정합니다.
- 낭비되는 작업이 없음. 보안은 퍼즐이 아니라 서명, 해시, 검증 가능한 난수 함수에서 나옵니다.
참여 증명과 PoW·PoS의 비교에서는 이 목표들을 작업 증명, 지분 증명, 그리고 그 위임형·연합형 변형과 비교합니다.
블록 하나가 만들어지는 과정
- 추첨. 이전 블록의 시드가 모든 노드에서 똑같이 실행되는 난수 생성기를 시작시킵니다. 생성기는 1라운드의 생산자, 2라운드의 생산자를 차례로 지명합니다(추첨).
- 라운드. 1라운드 생산자는 이전 블록 15초 뒤의 타임스탬프를 목표로 블록을 만듭니다. 이 생산자가 응답하지 않으면 15초 뒤 2라운드 생산자가 이어받습니다(라운드, 타이밍, 시간 창). 처음 10개 라운드만 트랜잭션을 담을 수 있으며, 이전 블록의 생산자는 강등됩니다(우선 라운드, 빈 블록, 이전 생산자).
- 블록. 생산자는 노드 키로 블록에 서명하고 검증 가능한 난수 함수로 새 시드를 증명하므로, 그 시드를 고를 수 없습니다(블록 시드 (VRF)).
- 검사. 모든 노드는 생산자가 타임스탬프가 속한 라운드나 그 직전 라운드에 추첨되었는지, 그리고 서명, 시드 증명, 모든 트랜잭션과 모든 영수증을 검사합니다. 빈 블록도 유효합니다.
- 일. 노드는 블록과 트랜잭션을 우선 피어에게 중계하고 서명된 영수증을 모읍니다(영수증과 네트워크 토폴로지). 노드가 자기 블록에 담는 영수증이 그 노드의 참여 점수를 움직이고, 참여 점수는 코인베이스 추첨에 가중치를 줍니다.
- 부재의 대가. 차례를 건너뛴 노드는 "누락 상태"가 되어 수입이 없고 점수가 떨어집니다. 네 번 연속으로 놓치면 정지되고, 점수가 0이 되면 퇴출됩니다(놓친 차례, 정지, 퇴출).
권한과 수입의 분리
생산자 추첨은 점수를 무시하고, 코인베이스 추첨은 스테이크를 무시합니다. 점수가 높은 노드는 더 많이 벌지만 블록을 더 많이 만들지도, 시드를 더 많이 고르지도 않습니다. 권한은 모든 좌석에 똑같이 유지되고, 수입은 각 노드가 하는 일을 따릅니다. 더 큰 권한은 더 많은 좌석을 뜻하며, 좌석은 오직 대기열을 통해 한 번에 한 입회씩 주어집니다(입회 속도).
분기가 경쟁할 때
노드는 누적 난이도가 가장 큰 분기를 따르며, 이 난이도에서는 제시간에 만든 블록이 늦은 블록보다 무겁습니다. 정확히 같으면 최상단 해시가 더 낮은 쪽이 이깁니다(포크 선택과 누적 난이도). 어떤 노드도 720블록(3시간)보다 많이 롤백하지 않으며, 스파인 체인에서 공동 서명된 마지막 체크포인트 아래로도 롤백하지 않습니다(최종성과 롤백). 같은 부모 위에 두 블록에 서명한 생산자는 신고되어 불이익을 받을 수 있습니다(이중 서명 (equivocation)).
주요 수치
| 항목 | 값 (mainnet) |
|---|---|
| 블록 간격, 라운드 길이 | 15초 |
| 체인당 제네시스 좌석 | 11 |
| 트랜잭션을 담을 수 있는 라운드 | 1~10 |
| 참여 점수 시작값 | 20 % |
| 정지되기까지 연속으로 놓친 차례 | 4 |
| 노드당 우선 피어 수, 재배정 주기 | 12개, 40블록마다 |
| 롤백 한도 | 720블록 (3시간) |
같이 보기
이 주제의 문서
- 놓친 차례, 정지, 퇴출
차례를 건너뛴 노드에게 일어나는 일을 설명합니다. 놓친 차례, 수입을 멈추고 점수를 낮추는 "누락 상태", 네 번 놓친 뒤의 정지, 그리고 점수 0에서의 퇴출입니다. - 라운드, 타이밍, 시간 창
ZooBC가 각 블록 이후의 시간을 15초 라운드로 나누는 방법, 타임스탬프가 어느 라운드에 속하는지, 그리고 생산자 하나가 없다고 체인이 멈추지 않는 이유를 설명합니다. - 블록 시드 (VRF)
모든 블록에 담긴 64바이트 시드는 체인의 무작위 선택을 이끕니다. 시드는 검증 가능한 난수 함수의 출력이므로 생산자는 이를 고를 수 없고 누구나 확인할 수 있습니다. - 영수증과 네트워크 토폴로지
ZooBC가 노드의 블록·트랜잭션 중계를 증명하는 방법을 설명합니다. 40블록마다 추첨되는 우선 피어, 232바이트의 서명된 영수증, 그리고 모든 검증자가 하는 검사입니다. - 우선 라운드, 빈 블록, 이전 생산자
처음 10개 라운드만 트랜잭션을 담을 수 있는 이유, 빈 블록도 온전한 블록인 이유, 그리고 이전 블록의 생산자가 제외되지 않고 강등되는 이유를 설명합니다. - 이중 서명 (equivocation)
생산자가 같은 부모 위에 서로 다른 두 블록에 서명하면 어떻게 되는지 설명합니다. 정직한 노드가 이를 피하는 방법, 등록 노드가 EquivocationReport로 이를 증명하는 방법, 그리고 그 대가입니다. - 참여 점수
노드가 일을 얼마나 잘하는지 측정하는 0~100 %의 점수를 설명합니다. 점수가 어떻게 오르내리는지, 무엇을 결정하는지(추첨 수입, 퇴출), 무엇에는 결코 관여하지 않는지(블록 생산)를 다룹니다. - 참여 증명과 PoW·PoS의 비교
ZooBC의 참여 증명이 작업 증명, 지분 증명, 위임형·연합형 설계와 어떻게 다른지 설명합니다. 누가 블록을 만드는지, 권한을 어떻게 얻는지, 블록의 보안이 무엇에 기대는지를 비교합니다. - 추첨: 다음 블록은 누가 만드는가
모든 노드가 이전 블록의 시드로부터 다음 블록의 생산자 순서 목록을 똑같이 계산하는 방법과, 모든 활성 좌석이 같은 기회를 갖는 이유를 설명합니다. - 포크 선택과 누적 난이도
ZooBC 노드가 경쟁하는 분기 중 하나를 고르는 방법을 설명합니다. 누적 난이도가 가장 큰 쪽이 이기고, 제시간에 만든 블록이 늦은 블록보다 무거우며, 정확히 같으면 최상단 해시가 낮은 쪽이 이깁니다.