파이프라인화된 컨센서스-실행 스테이징

Monad 블록체인의 독특한 측면 중 하나는 실행이 컨센서스에서 분리되어 있다는 것입니다.

간단히 말하면, 컨센서스는 Monad 노드가 트랜잭션의 공식적인 순서에 대해 합의하는 과정이며, 실행은 이러한 트랜잭션을 실제로 실행하고 스테이트를 업데이트하는 과정입니다.

Monad의 컨센서스에서는 노드들이 트랜잭션의 공식적인 순서에 대해 합의에 도달하지만, 리더나 검증자 노드가 아직 해당 트랜잭션을 실행할 필요가 없습니다.

즉, 리더는 결과적인 스테이트 루트를 아직 알지 못한 채 순서를 제안하고, 검증자 노드는 (예를 들어) 블록의 모든 트랜잭션이 되돌림 없이 실행되는지 여부를 모른 채로 블록 유효성에 투표합니다.

어떻게 가능한 걸까요? 그리고 Monad가 왜 이렇게 하는 걸까요?

정답은 Monad 설계의 중요한 부분이며, 이로 인해 Monad는 수백만 사용자까지 확장 가능한 s싱글 샤드 블록체인을 가능하게 하는 중요한 가속을 얻을 수 있습니다.

실행과 컨센서스를 교차로 진행하는 것은 비효율적입니다

이더리움에서는 실행이 컨센서스의 선행 조건이므로 노드가 블록에 대해 합의할 때, (1) 블록 내의 트랜잭션 목록과 (2) 그 트랜잭션 목록을 실행한 후의 모든 스테이트를 요약한 머클 루트에 동의합니다. 결과적으로 리더는 제안된 블록의 모든 트랜잭션을 공유하기 전에 실행해야 하며, 검증자 노드는 투표로 응답하기 전에 해당 트랜잭션을 실행해야 합니다.

이 패러다임에서는 실행이 두 번 일어나야 하며 컨센서스를 위한 여러 차례의 교환하는 통신에 충분한 시간을 남겨야 하기 때문에, 실행에 대한 시간 예산이 극도로 제한되어 있습니다. 게다가, 실행이 합의를 차단할 수 있기 때문에 가스 한도는 매우 보수적으로 선택되어야 하며, 최악의 경우에도 모든 노드에서 예산 내에서 계산이 완료되도록 보장되어야 합니다.

결정된 오더링는 스테이트 디터미니즘을 의미합니다

명백하지만 중요한 인사이트가 있습니다: 공식적인 트랜잭션 오더링이 주어지면 트루 스테이트는 완전히 결정됩니다. 트루 스테이트를 밝히려면 실행이 필요하지만 트루 스테이트는 이미 결정되어 있습니다.

Monad는 노드가 컨센서스전에 실행되어야 하는 요구 사항을 제거함으로써 이 인사이트를 활용합니다. 노드 합의는 공식적인 순서에 관한 것뿐이며 각 노드는 블록N의 트랜잭션을 독립적으로 실행하면서 블록N+1에 대한 컨센서스를 진행합니다.

이로 인해 실행이 컨센서스에 따라가기만 하면 되기 때문에 전체 블록 시간에 해당하는 가스 예산이 가능해집니다. 게다가, 이 방식은 정확한 계산 시간의 변동에 더 허용적이며, 실행은 평균적으로 컨센서스에 따라 따라가기만 하면 됩니다.

지연된 머클 루트도 여전히 스테이트 머신 레플리케이션 (SMR)을 보장합니다

위에 대한 주요 반대 의견은 다음과 같을 수 있습니다: