ZooBC 위키
참여 증명 (PoP)

라운드, 타이밍, 시간 창

ZooBC는 15초마다 블록 하나를 목표로 합니다. 각 블록 이후의 시간은 15초 라운드로 나뉘며, 추첨이 라운드마다 생산자 하나를 지명합니다. 블록의 타임스탬프가 그 블록이 속한 라운드를 정하며, 그 라운드나 바로 앞 라운드에 추첨된 노드만 그 블록을 만들 수 있습니다. 이 규칙은 체인에 일정한 리듬을 주고, 생산자 하나가 자리에 없어도 다음 블록이 15초 넘게 늦어지지 않도록 보장합니다.

라운드와 목표 시각

이전 블록의 타임스탬프를 P라고 합시다. 라운드 r의 목표 시각은 P + 15 × r입니다. 1라운드는 이전 블록 15초 뒤, 2라운드는 30초 뒤, 3라운드는 45초 뒤인 식입니다. 1라운드의 생산자는 목표 시각에 맞춰 블록의 타임스탬프를 찍으려 합니다. 이 생산자가 응답하지 않으면 2라운드의 생산자가 30초를 목표로 블록을 만들고, 목록을 따라 그렇게 이어집니다.

높이는 결코 건너뛰지 않습니다. 생산자가 자리에 없으면 다음 블록은 그저 15초 늦게, 같은 높이에서, 다음 순서의 생산자에게서 나옵니다. 실제 생산자보다 앞서 추첨된 모든 노드는 놓친 차례 하나로 집계됩니다(놓친 차례, 정지, 퇴출 참조).

이전 블록 이후의 시간 축: +15초의 1라운드는 응답이 없어 놓친 차례로 집계되고, +30초의 2라운드가 블록을 만들며, 3라운드는 필요하지 않습니다.
이전 블록 이후의 시간 축: +15초의 1라운드는 응답이 없어 놓친 차례로 집계되고, +30초의 2라운드가 블록을 만들며, 3라운드는 필요하지 않습니다.

생산자마다 두 라운드

라운드 i에 추첨된 생산자는 라운드 i 또는 라운드 i + 1의 블록을 만들 수 있습니다. 그래서 늦은 1라운드 노드는 2라운드 동안에도 블록을 낼 수 있고, 그동안 2라운드 노드도 자격이 있습니다. 어느 순간이든 추첨된 노드 두 개가 생산 자격을 가지므로 체인은 결코 노드 하나를 기다리지 않습니다. 누군가 정지되기를 기다리지도 않습니다. 정지에는 네 번 연속으로 놓친 차례가 필요하며, 정지는 노드를 앞으로의 추첨에서 빼기만 합니다.

+15초, +30초, +45초를 중심으로 한 띠로 나타낸 1, 2, 3라운드: 1라운드 노드는 2라운드 동안에도 블록을 낼 수 있고, 2라운드 대체 노드는 +30초에 타임스탬프를 찍습니다.
+15초, +30초, +45초를 중심으로 한 띠로 나타낸 1, 2, 3라운드: 1라운드 노드는 2라운드 동안에도 블록을 낼 수 있고, 2라운드 대체 노드는 +30초에 타임스탬프를 찍습니다.

타임스탬프가 속하는 라운드

시각 T에 타임스탬프가 찍힌 블록의 라운드는 다음과 같습니다.

round(T) = 1 + floor((T − P − 15 + 7) / 15)     (and never less than 1)

각 라운드에는 또한 14초의 수락 시간 창이 있습니다. 목표 시각 7초 전부터 목표 시각 7초 조금 못 미치는 뒤까지입니다. 초 단위로 정리하면 다음과 같습니다.

라운드목표 시각공식이 이 라운드로 세는 초수락 시간 창 (목표 시각 ± 7초)
1P + 15P + 22까지P + 8 ~ P + 21
2P + 30P + 23 ~ P + 37P + 23 ~ P + 36
3P + 45P + 38 ~ P + 52P + 38 ~ P + 51
4P + 60P + 53 ~ P + 67P + 53 ~ P + 66

공식이 각 라운드에 주는 마지막 초(P + 22, P + 37, P + 52, ...)는 그 라운드의 시간 창보다 1초 뒤에 있습니다. 검증자는 블록의 타임스탬프를 그 라운드의 시간 창과 2초의 허용 오차를 두고 비교하므로, 이 경계의 초들도 수락됩니다.

라운드는 두 번 중요합니다. 라운드는 누가 블록을 만들 수 있는지 정하고, 포크 선택에서 블록의 가중치에 상한을 둡니다. 블록은 타임스탬프가 속한 라운드보다 좋게 평가되는 일이 없으므로, 2라운드에 추첨된 생산자가 3라운드 안에 타임스탬프를 찍으면 그 블록은 3라운드 블록보다 무겁지 않습니다.

부모 P부터 시작하는 시간 축에 1~4라운드가 이어진 띠로 표시됩니다. P + 50의 타임스탬프는 3라운드에 속하므로, 그 가중치는 최소 3번의 추첨으로 계산됩니다.
부모 P부터 시작하는 시간 축에 1~4라운드가 이어진 띠로 표시됩니다. P + 50의 타임스탬프는 3라운드에 속하므로, 그 가중치는 최소 3번의 추첨으로 계산됩니다.

모든 노드가 적용하는 시계 규칙

  • 부모 블록 이후 13초 미만에 타임스탬프가 찍힌 블록은 너무 빨리 만들어졌다는 이유로 거부됩니다(15초 간격에서 2초의 허용 오차를 뺀 값). 따라서 빈틈을 발견하자마자 곧바로 블록에 타임스탬프를 찍는 것은 불가능합니다.
  • 노드 자신의 시계보다 7,200초(2시간) 넘게 앞선 타임스탬프의 블록은 그 노드의 시계가 따라잡을 때까지 거부됩니다.
  • 1시간이 넘는 정체(3,600초 복구 한도) 뒤에는, 추첨이 예상하는 생산자에게서 온 블록이라면 여전히 수락되므로 멈춘 체인이 다시 시작될 수 있습니다.

여기에는 두 가지 시간 창이 관여합니다. 라운드 i에 추첨된 생산자는 그 라운드의 생성 시간 창 안에서 블록에 타임스탬프를 찍어야 합니다. 생성 시간 창은 라운드의 목표 시각 7초 전부터 27초 뒤까지로, 다음 라운드까지 걸쳐 있습니다. 검증자는 또한 타임스탬프가 그것이 속한 라운드의 수락 시간 창 안에, 2초의 허용 오차를 두고 놓일 것을 요구합니다.

각 노드의 타이밍 정책

두 가지 타이밍은 합의 규칙이 아니라 각 노드의 자체 정책입니다. 처음 추첨된 생산자는 P + 15에 블록을 보내고, 다른 생산자들은 자기 라운드 시간 창의 끝에서 5초를 뺀 시각에 보냅니다(P + 15보다 이르게 보내지는 않습니다). 그리고 각 노드는 대략 1초에 한 번, 가지고 있는 후보 블록 가운데 시간 창이 열려 있으면서 순번이 가장 낮은 블록을 적용합니다.

비교하자면 Bitcoin은 10분마다 블록 하나를 목표로 합니다. ZooBC의 15초 리듬은 모든 ZooBC 체인에서 같으며, 하루는 5,760블록입니다(블록과 시간 참조).

같이 보기