이중 서명 (equivocation)
이중 서명(equivocation)은 한 생산자가 같은 부모 블록 위에 서로 다른 두 블록에 서명하는 것을 말합니다. 그러면 노드마다 다른 블록을 먼저 보게 되어 네트워크가 한동안 갈라질 수 있습니다. ZooBC는 이를 세 가지 방식으로 다룹니다. 정직한 노드는 충돌 후에도 결코 이중 서명을 하지 않습니다. 이런 두 블록을 본 등록 노드는 누구나 EquivocationReport로 이를 체인에서 증명할 수 있습니다. 그리고 생산자에게는 놓친 차례가 부과되며, 그에 따른 수입과 점수 손실이 뒤따릅니다.
이중 서명에 해당하는 것
생산하도록 추첨된 노드는 현재 최상단 블록, 즉 부모 위에 블록 하나를 만듭니다. 이중 서명은 그 같은 부모 위에 헤더가 다른 두 블록에 서명하는 것입니다. 늦은 블록은 이중 서명이 아닙니다. 늦은 블록은 자기 분기에 가중치를 덜 더할 뿐입니다(포크 선택과 누적 난이도 참조). 서로 다른 높이에서 블록을 만드는 것도 이중 서명이 아닙니다. 높이마다 부모가 따로 있기 때문입니다.
정직한 생산자는 이중 서명을 하지 않습니다
생산자는 부모마다 자신이 서명한 블록을 기억하며, 이 기록을 디스크에도 보관하므로 재시작해도 잊지 않습니다. 같은 부모에 대해 다시 추첨되면 새 블록을 만드는 대신 이미 서명한 블록을 다시 보냅니다.
의도적인 예외가 하나 있습니다. 부모 이후 3,600초인 복구 한도를 넘기면, 멈춘 체인은 다시 시작할 수 있어야 합니다. 그때 생산자는 그 부모에 대해 새 블록 하나에 서명할 수 있으며, 이는 부과 대상이 아니고, 이후에는 그 블록을 다시 보냅니다. 마찬가지로 타임스탬프가 복구 한도를 사이에 두고 걸쳐 있는 블록 쌍(정확히 하나만 부모 이후 3,600초를 넘는 경우)은 이중 서명이 아니라 멈춘 체인의 재개입니다.
탐지
한 등록 생산자로부터 한 부모 위에 유효하게 서명된 헤더 두 개를 받은 노드는 이를 증거로 취급합니다.
- 그 생산자를 입증된 거짓말쟁이로 기록하여 피어 블랙리스트에 올리고 연결을 끊습니다. 단, 그렇게 하면 노드가 네트워크에서 고립되는 경우는 예외입니다.
- 부모와 생산자마다 EquivocationReport를 하나씩 제출합니다.
- 두 블록 모두 평소처럼 검증에 넘깁니다. 살아남을 블록은 포크 선택이 고르며, 정확히 같으면 모든 노드에서 최상단 해시가 더 낮은 분기가 이깁니다.
EquivocationReport
보고(트랜잭션 유형 60)는 증거 자체를 담습니다. 서명된 헤더 두 개이며, 각각 뒤에 생산자의 64바이트 서명이 붙습니다. 헤더가 284바이트이면 본문은 704바이트입니다. 4바이트 길이, 헤더 1, 서명 1, 4바이트 길이, 헤더 2, 서명 2입니다.
체인은 다음 열세 가지를 이 순서대로 검사합니다.
- 보고 유형이 활성 상태인지
- 수수료가 정확히 0인지(보고는 등록 노드의 의무이기 때문입니다)
- 본문을 파싱할 수 있고, 각 헤더가 서명된 헤더의 크기, 즉 204바이트 또는 시드 증명이 있으면 284바이트인지
- 두 헤더가 서로 다른지
- 바이트 오프셋 76의 생산자 키가 둘 다 같은지
- 오프셋 172의 부모 해시가 둘 다 같은지
- 두 서명 모두 그 생산자 키로 검증되는지
- 부모가 이 체인의 블록인지
- 그 쌍이 1시간 복구 한도를 사이에 두고 걸쳐 있지 않은지
- 보고가 이중 서명된 높이 이후 720블록 안에 도착했는지
- 생산자가 등록 노드인지
- 보고자가 등록 노드인지
- 이 생산자가 그 높이에 대해 이미 부과를 받지 않았는지
두 번째 블록을 봤다는 진술은 아무것도 증명하지 않습니다. 증명하는 것은 두 서명입니다. 누구나 서명을 확인할 수 있으므로 좌석들의 투표도 필요하지 않습니다.
대가
유효한 보고는 생산자에게 놓친 차례 하나를 부과하며, 이는 생산자와 높이마다 한 번입니다. 버전 0.5.8에 대해 결정된 규칙에 따르면, 입증된 이중 서명은 또한 노드를 다음 자기 블록까지 누락 상태로 만듭니다. 코인베이스도, 수수료 몫도, 롱제비티 몫도 받지 못하며 참여 점수가 떨어집니다. 연속으로 네 번 차례를 놓치면 노드는 정지됩니다. 놓친 차례, 정지, 퇴출을 참조하십시오.
잔액은 움직이지 않습니다. 보고자는 보상을 받지 않으며, 생산자의 스테이크에서도 아무것도 가져가지 않습니다. ZBC는 결코 소각되지 않습니다(ZBC는 결코 소각되지 않는다 참조).