Skip to main content

Onchain Logic and State

Midnight 노드는 온체인 로직의 정의와 실행에 표준 Polkadot SDK 모델을 따릅니다. 네이티브 pre-compile을 제외한 모든 핵심 로직은 **WebAssembly (WASM)**으로 컴파일되며, 이것이 노드의 런타임, 즉 모든 참여 노드에서 일관되게 실행되는 상태 전환 함수를 구성합니다.

런타임은 FRAME pallet이라 불리는 모듈형 구성 요소로 이루어집니다. 각 pallet은 특정 로직 도메인을 캡슐화하며, 스토리지 정의(map, multi-key map, list, value), 이벤트, 디스패치 가능 함수(트랜잭션), 오프체인 워커, 훅, 호스트 노출 함수, RPC 메서드를 포함할 수 있습니다. 이러한 모듈형 설계를 통해 스마트 컨트랙트 프레임워크와 유사한 방식으로 유연하고 확장 가능한 온체인 실행 환경을 제공하면서도, 사전 컴파일되어 체인 수준에서 관리됩니다.

Midnight의 런타임은 Polkadot SDK의 업스트림 pallet과 Cardano Partner-Chains에서 개발한 구성 요소를 모두 통합합니다. 주요 예시는 다음과 같습니다:

  • pallet-aura: AURA 프로토콜을 이용한 블록 생성을 처리합니다.
  • pallet-grandpa: GRANDPA 프로토콜을 통한 최종성을 관리합니다.
  • pallet-partnerchains-sessionpallet_session_validator_management: partnerchain 환경에서 세션 교체와 검증자 관리를 조율합니다.

Midnight의 프라이버시 보존 트랜잭션 로직을 구동하는 핵심 palletpallet-midnight입니다. 내부적으로 관리되는 이 pallet은 Midnight Ledger의 상태 머신을 캡슐화합니다.

pallet-midnightZSwap 자산 이전컨트랙트 연산을 포함하여 Midnight Ledger에서 발생하는 특수 트랜잭션을 처리합니다. 기존의 서명 기반 디스패치 대신, 각 트랜잭션에 내장된 암호학적 증명을 처리합니다. 네이티브 라이브러리를 활용하여 이러한 증명을 검증하고 대응하는 상태 전환을 실행합니다.

실행이 완료되면 새로운 상태가 온체인에 커밋됩니다. 다른 Polkadot SDK 체인과 마찬가지로, Midnight은 정규 원장 상태를 저장하기 위해 키-값 데이터베이스로 뒷받침되는 Patricia-Merkle trie를 사용합니다. 각 블록 이후 시스템의 변조 방지 및 검증 가능한 스냅샷을 보장하기 위해 전체 Midnight Ledger 상태에 대한 commitment도 함께 저장됩니다.