본문으로 건너뛰기

체크포인트 검증

실행 이전에 블록을 생성하는 전통적인 블록체인과 달리, Sui는 transaction 실행 이후에 checkpoints를 생성하여 체인 이력에 대한 인증된 기록을 제공한다. Checkpoints에는 이전 checkpoint의 cryptographic hash, checkpoint에 포함된 모든 transaction digests 및 이에 대응하는 transaction effects digests의 목록, 그리고 checkpoint 생성 시점에 위원회를 구성하던 validators의 quorum (3분의 2 초과)으로부터의 서명 집합이 포함된다.

둘 다 validatorsfull nodes는 네트워크와 동기화를 유지하기 위해 checkpoints를 소비한다.

Verifying checkpoints

풀 노드와 validators는 checkpoint를 신뢰하기 위해 이를 검증한다. 이 검증은 Sui validator committee가 그것을 생성했고 그것이 진본임을 확인한다.

Checkpoint verification에는 서로 의존적인 두 단계가 필요하다:

  1. Validator 위원회의 public keys를 가진 클라이언트는 checkpoint의 signatures를 확인할 수 있다. Checkpoints는 위원회 quorum의 aggregated BLS signatures로 서명된다. Signatures가 유효하다면 클라이언트는 checkpoint가 다른 당사자가 아니라 validator 위원회에 의해 생성되었음을 알 수 있다.
  2. Checkpoints를 검증함으로써 클라이언트는 위원회의 구성을 알 수 있다. 각 epoch의 마지막 checkpoint에는 다음 epoch의 validator 위원회와 public keys가 포함된다.

이 과정은 겉보기에는 순환 의존성을 형성한다. 클라이언트는 checkpoints를 검증하기 위해 위원회를 알아야 하지만 checkpoint 검증을 통해서도 위원회를 학습하기 때문이다. 이 과정은 Sui 네트워크에서 가장 이른 checkpoint인 제네시스 checkpoint에서 부트스트랩된다. 제네시스 checkpoint에는 초기 validator 위원회가 포함되어 있으며, 이를 통해 클라이언트는 다음 과정을 따라 이력상의 모든 checkpoints를 검증할 수 있다:

  1. 클라이언트는 신뢰할 수 있는 출처로부터 제네시스 checkpoint를 획득한다.
  2. 클라이언트는 제네시스 checkpoint로부터 초기 위원회를 로드한다.
  3. 클라이언트는 state sync 네트워크 또는 Sui archive를 사용하여 다음 checkpoint를 획득한다.
  4. 클라이언트는 현재 위원회의 공개 키를 사용하여 checkpoint의 서명을 검증하고, checkpoint의 이전 checkpoint 해시가 클라이언트가 검증한 이전 checkpoint의 해시와 동일한지 검증한다.
  5. Checkpoint가 유효하지 않다면 클라이언트는 오류를 발생시킨다. 그렇지 않다면 클라이언트는 해당 checkpoint가 현재 epoch의 마지막인지 확인한다.
    • 그렇다면 해당 checkpoint로부터 다음 위원회를 로드하고 이를 현재 위원회로 사용한다.
    • 그렇지 않다면 3단계로 돌아가 계속 진행한다.

이 과정은 client가 현재 시점까지의 모든 checkpoints를 검증할 수 있도록 한다.

Checkpoint commitments

Client가 checkpoint를 검증한 이후에는 해당 정보를 사용하여 transaction을 실행하고 결과를 확인할 수 있다.

Checkpoint에는 transaction 목록이 포함되어 있으므로 풀 노드는 이를 가져와 실행할 수 있다. Transactions는 digest(암호학적 해시)로 식별되므로 client는 그것들이 변조되지 않았음을 확신할 수 있다.

Checkpoint에는 또한 각 transaction의 effects digest가 포함된다. Effects digest는 TransactionEffects 구조체의 암호학적 해시이며, 여기에는 transaction에 의해 작성된 모든 object의 digest를 포함하여 모든 transaction 입력과 출력이 나열된다. 이를 통해 풀 노드는 checkpoint에 서명한 validators와 동일한 실행 결과를 가지고 있음을 확인할 수 있다.

Checkpoints를 실행하고 transaction 출력을 검증함으로써 풀 노드는 Sui 네트워크의 전체 상태, 즉 네트워크 내 object들의 집합을 구축할 수 있으며, 모든 object의 모든 바이트가 정확하다는 것을 신뢰할 수 있다.