Monad는 트랜잭션을 병렬로 실행합니다. 처음에는 이더리움에 존재하는 실행 의미와 다른 실행 의미를 함축하는 것처럼 보일 수 있지만 실제로는 그렇지 않습니다. Monad 블록은 이더리움 블록과 동일하게 트랜잭션의 선형 순서로 이루어진 세트입니다. 블록 내의 트랜잭션을 실행한 결과는 Monad와 이더리움에서 동일합니다.
기본 수준에서 Monad는 옵티미스틱 실행을 사용합니다. 이는 Monad가 블록 내의 이전 트랜잭션이 완료되기 전에 트랜잭션을 실행하기 시작할 것임을 의미합니다. 때로는 (항상 그런 것은 아니지만) 이로 인해 올바르지 않은 실행 결과가 발생할 수 있습니다.
두 개의 트랜잭션을 고려해 보겠습니다(블록 내의 순서대로):
이러한 트랜잭션이 병렬로 실행되고 트랜잭션 1이 완료되기 전에 트랜잭션 2가 시작되면 트랜잭션 2가 계정 A의 잔고를 순차적으로 실행되었다면 다르게 읽을 수 있습니다. 이는 올바르지 않은 실행 결과를 초래할 수 있습니다.
옵티미스틱 실행이 이를 해결하는 방법은 트랜잭션 2를 실행하는 동안 사용된 입력을 추적하고 이를 트랜잭션 1의 출력과 비교하는 것입니다. 이들이 다르면 트랜잭션 2가 올바르지 않은 데이터를 사용하여 실행되었음을 감지하고 올바른 데이터로 다시 실행해야 합니다.
Monad는 트랜잭션을 병렬로 실행하면서도 각 트랜잭션의 업데이트된 상태를 순차적으로 "병합"하여 위에서 언급한 조건을 확인합니다.
관련된 컴퓨터공학 주제로는 옵티미스틱 동시성 제어 (OCC)와 소프트웨어 트랜잭션 메모리 (STM)가 있습니다.
옵티미스틱 실행의 단순한 구현에서는 트랜잭션이 다시 실행되어야 함을 감지하는 것이 블록 내의 이전 트랜잭션이 모두 완료될 때까지 이루어지지 않습니다. 그때까지 모든 이전 트랜잭션에 대한 스테이트 업데이트가 병합되었기 때문에 트랜잭션이 옵티미스틱 실행으로 인해 두 번째로 실패할 수는 없습니다.
트랜잭션을 실행하는 데 스테이트에 의존하지 않는 단계도 있습니다. 예를 들어 서명 복구는 비용이 많이 드는 계산입니다. 이 작업은 트랜잭션을 다시 실행할 때 반복할 필요가 없습니다.
또한 실패한 트랜잭션을 다시 실행할 때 계정 및 액세스된 스토리지가 종종 변경되지 않습니다. 이 스테이트는 여전히 메모리에 캐시되어 있으므로 이 비용이 반복될 필요가 없습니다.