검증 가능한 스냅샷, 이중 서명 가드, 그리고 신뢰할 수 있는 크로스샤드 전송
저희는 테스트 하네스(tools/quorum-net)에서 검증자 네 개로 이루어진 네트워크를 실행합니다. 모든 실행은 파라미터, 모든
노드의 로그, 요약을 보관합니다. 이번 실행 라운드에서 결함 다섯 개가 드러났고, 다섯 개 모두 수정되었습니다.
모든 상태 변경은 합의를 거칩니다
일부 작업(멀티시그 금고, 인증서, 바이트코드 화이트리스트, 노드 프로필)은 요청을 받은 노드가 직접 적용했고, 다른 노드들은 그것을 전혀 보지 못했습니다. Cosmos SDK처럼, 이제 노드는 요청이 도착하면 검증만 하며, 그 효과는 블록이 적용될 때만 상태에 기록됩니다.
믿고 받아들일 필요가 없는 스냅샷
새 노드는 전체 내역을 재생하는 대신 상태 스냅샷에서 시작할 수 있습니다. 스냅샷은 그다음 블록이 검증자의 2/3 초과에 의해 서명되었고, 복원된 상태가 정확히 같은 state root를 재현하는 경우에만 받아들여집니다 — CometBFT state sync가 쓰는 규칙입니다. 테스트에서 잔액 하나를 바꾸고 체크섬을 다시 계산한 위조 스냅샷을 노드에 건넸고, 노드는 시작을 거부했습니다.
이중 서명 가드
데이터가 지워진 뒤 오래된 스냅샷에서 복원된 검증자가 이미 서명한 높이에 다시 서명했고, 네트워크에 의해 슬래싱되었습니다. 이제 CometBFT처럼, 마지막 서명은 검증자 키 옆의 파일에 보관됩니다. 반복 서명은 거부되며, 복원은 결코 마지막으로 서명한 높이보다 아래에서 시작하지 않습니다. 같은 시나리오가 이제 슬래싱 없이 통과합니다.
크로스샤드 전송
목적지 샤드는 메시지가 도착하는 순간 전송을 입금했기 때문에, 그 샤드의 두 노드가 서로 다른 블록에서 입금할 수 있었습니다. 네트워크가 그 불일치를 감지하고 샤드를 멈췄습니다. 이제 IBC처럼, 전송은 블록 안의 트랜잭션으로 입금되며, 목적지는 출금이 원천 샤드의 검증자들이 서명한 블록 안에 있는지 확인합니다. 입금은 최대 30초가 아니라 1–2초 걸립니다.
불필요한 블록
샤드 두 개로 이루어진 네트워크에서 시스템 트랜잭션이 계속 블록으로 되돌아왔고, 유휴 상태의 네트워크가 1분에 120개의 블록을 만들었습니다. 이제 설계대로 2개를 만듭니다.
연결 폭주
dos 테스트는 노드에 약 480,000개의 연결을 여는 공격자를 연기합니다. 릴리스 빌드에서 네트워크는 공격이 없을 때와 같은
속도로 블록을 계속 생성했습니다. 초당 20개 연결이라는 IP당 제한, ML-DSA로 서명된 핸드셰이크를 갖춘 지속적인 피어 연결,
그리고 IP가 아닌 키 기준의 차단과 함께 검증자와 게스트의 입장을 분리한 덕분입니다. 로그 경고는 16,000줄에서 39줄로
줄었습니다. 처음에 공격 탓으로 돌렸던 속도 저하는 디버그 빌드에서 비롯된 것으로 밝혀졌고, 그래서 부하 테스트는 이제 릴리스
빌드에서만 실행합니다.
결과
노드 테스트 333개와 합의 테스트 63개가 통과하며, 네트워크 시나리오 — 노드 충돌, 재시작, 부하, 연결 폭주, 샤드 두 개 — 도 상태 불일치와 슬래싱 없이 통과합니다.