ZooBC 위키
참여 증명 (PoP)

이중 서명 (equivocation)

이중 서명(equivocation)은 한 생산자가 같은 부모 블록 위에 서로 다른 두 블록에 서명하는 것을 말합니다. 그러면 노드마다 다른 블록을 먼저 보게 되어 네트워크가 한동안 갈라질 수 있습니다. ZooBC는 이를 세 가지 방식으로 다룹니다. 정직한 노드는 충돌 후에도 결코 이중 서명을 하지 않습니다. 이런 두 블록을 본 등록 노드는 누구나 EquivocationReport로 이를 체인에서 증명할 수 있습니다. 그리고 생산자에게는 놓친 차례가 부과되며, 그에 따른 수입과 점수 손실이 뒤따릅니다.

이중 서명에 해당하는 것

생산하도록 추첨된 노드는 현재 최상단 블록, 즉 부모 위에 블록 하나를 만듭니다. 이중 서명은 그 같은 부모 위에 헤더가 다른 두 블록에 서명하는 것입니다. 늦은 블록은 이중 서명이 아닙니다. 늦은 블록은 자기 분기에 가중치를 덜 더할 뿐입니다(포크 선택과 누적 난이도 참조). 서로 다른 높이에서 블록을 만드는 것도 이중 서명이 아닙니다. 높이마다 부모가 따로 있기 때문입니다.

정직한 생산자는 이중 서명을 하지 않습니다

생산자는 부모마다 자신이 서명한 블록을 기억하며, 이 기록을 디스크에도 보관하므로 재시작해도 잊지 않습니다. 같은 부모에 대해 다시 추첨되면 새 블록을 만드는 대신 이미 서명한 블록을 다시 보냅니다.

의도적인 예외가 하나 있습니다. 부모 이후 3,600초인 복구 한도를 넘기면, 멈춘 체인은 다시 시작할 수 있어야 합니다. 그때 생산자는 그 부모에 대해 새 블록 하나에 서명할 수 있으며, 이는 부과 대상이 아니고, 이후에는 그 블록을 다시 보냅니다. 마찬가지로 타임스탬프가 복구 한도를 사이에 두고 걸쳐 있는 블록 쌍(정확히 하나만 부모 이후 3,600초를 넘는 경우)은 이중 서명이 아니라 멈춘 체인의 재개입니다.

탐지

한 등록 생산자로부터 한 부모 위에 유효하게 서명된 헤더 두 개를 받은 노드는 이를 증거로 취급합니다.

  • 그 생산자를 입증된 거짓말쟁이로 기록하여 피어 블랙리스트에 올리고 연결을 끊습니다. 단, 그렇게 하면 노드가 네트워크에서 고립되는 경우는 예외입니다.
  • 부모와 생산자마다 EquivocationReport를 하나씩 제출합니다.
  • 두 블록 모두 평소처럼 검증에 넘깁니다. 살아남을 블록은 포크 선택이 고르며, 정확히 같으면 모든 노드에서 최상단 해시가 더 낮은 분기가 이깁니다.

EquivocationReport

보고(트랜잭션 유형 60)는 증거 자체를 담습니다. 서명된 헤더 두 개이며, 각각 뒤에 생산자의 64바이트 서명이 붙습니다. 헤더가 284바이트이면 본문은 704바이트입니다. 4바이트 길이, 헤더 1, 서명 1, 4바이트 길이, 헤더 2, 서명 2입니다.

704바이트 보고 본문을 여섯 칸으로 나타냈습니다. 아래에는 두 헤더가 나란히 있으며, 오프셋 76의 생산자 키와 오프셋 172의 부모 해시가 서로 같습니다.
704바이트 보고 본문을 여섯 칸으로 나타냈습니다. 아래에는 두 헤더가 나란히 있으며, 오프셋 76의 생산자 키와 오프셋 172의 부모 해시가 서로 같습니다.

체인은 다음 열세 가지를 이 순서대로 검사합니다.

  1. 보고 유형이 활성 상태인지
  2. 수수료가 정확히 0인지(보고는 등록 노드의 의무이기 때문입니다)
  3. 본문을 파싱할 수 있고, 각 헤더가 서명된 헤더의 크기, 즉 204바이트 또는 시드 증명이 있으면 284바이트인지
  4. 두 헤더가 서로 다른지
  5. 바이트 오프셋 76의 생산자 키가 둘 다 같은지
  6. 오프셋 172의 부모 해시가 둘 다 같은지
  7. 두 서명 모두 그 생산자 키로 검증되는지
  8. 부모가 이 체인의 블록인지
  9. 그 쌍이 1시간 복구 한도를 사이에 두고 걸쳐 있지 않은지
  10. 보고가 이중 서명된 높이 이후 720블록 안에 도착했는지
  11. 생산자가 등록 노드인지
  12. 보고자가 등록 노드인지
  13. 이 생산자가 그 높이에 대해 이미 부과를 받지 않았는지

두 번째 블록을 봤다는 진술은 아무것도 증명하지 않습니다. 증명하는 것은 두 서명입니다. 누구나 서명을 확인할 수 있으므로 좌석들의 투표도 필요하지 않습니다.

대가

유효한 보고는 생산자에게 놓친 차례 하나를 부과하며, 이는 생산자와 높이마다 한 번입니다. 버전 0.5.8에 대해 결정된 규칙에 따르면, 입증된 이중 서명은 또한 노드를 다음 자기 블록까지 누락 상태로 만듭니다. 코인베이스도, 수수료 몫도, 롱제비티 몫도 받지 못하며 참여 점수가 떨어집니다. 연속으로 네 번 차례를 놓치면 노드는 정지됩니다. 놓친 차례, 정지, 퇴출을 참조하십시오.

잔액은 움직이지 않습니다. 보고자는 보상을 받지 않으며, 생산자의 스테이크에서도 아무것도 가져가지 않습니다. ZBC는 결코 소각되지 않습니다(ZBC는 결코 소각되지 않는다 참조).

헤더 A와 B가 EquivocationReport(유형 60)에 담겨 블록에 들어갑니다. 결과는 놓친 차례 하나, 다음 자기 블록까지 누락 상태, 수입 없음, 점수 하락입니다. 옆에서는 그 생산자와의 연결이 끊기며, ZBC는 소각되지 않습니다.
헤더 A와 B가 EquivocationReport(유형 60)에 담겨 블록에 들어갑니다. 결과는 놓친 차례 하나, 다음 자기 블록까지 누락 상태, 수입 없음, 점수 하락입니다. 옆에서는 그 생산자와의 연결이 끊기며, ZBC는 소각되지 않습니다.

같이 보기