참고 링크

https://sui.io/mysticeti

https://blog.sui.io/mysticeti-consensus-reduce-latency/

논문 리딩

https://arxiv.org/pdf/2310.14821

Consensus 코드분석

https://github.com/MystenLabs/sui

https://github.com/MystenLabs/sui/tree/main/consensus


[Part.1] Owned Object Transaction vs Shared Object Transaction

Owned Object는 바로 실행 & Shard Object는 Consensus 필요


**// crates/sui-core/src/authority_server.rs**

// 3) All transactions are sent to consensus (at least by some authorities)
// For certs with shared objects this will wait until either timeout or we have heard back from consensus.
// For certs with owned objects this will return without waiting for certificate to be sequenced.
// For uncertified transactions this will wait for fast path processing.
// First do quick dirty non-async check.
...
...

 let certificates_without_shared_objects = consensus_transactions
    .iter()
    .filter_map(|tx| {
        if let ConsensusTransactionKind::CertifiedTransaction(certificate) = &tx.kind {
            (!certificate.contains_shared_object())
                // Certificates already verified by callers of this function.
                .then_some(VerifiedCertificate::new_unchecked(*(certificate.clone())))
        } else {
            None
        }
    })
    .collect::<Vec<_>>();
if !certificates_without_shared_objects.is_empty() {
    self.state.enqueue_certificates_for_execution(
        certificates_without_shared_objects,
        epoch_store,
    );
}
return Ok((None, Weight::zero()));

Shared Object라면 Consensus 결과로 Sequenced Result 반환 받음