트랜잭션 생명주기
제출부터 멤풀, AnteHandler 검증, 블록 포함을 거쳐 최종 확정에 이르는 트랜잭션의 여정을 따라갑니다.
마루의 트랜잭션 생명주기를 이해하는 일은 신뢰할 수 있는 애플리케이션을 구축하는 데 핵심입니다. 사용자가 트랜잭션을 제출하면 즉시 블록에 포함되지 않습니다. 대신 멤풀 수락, AnteHandler 체인의 엄격한 검증, EVM 실행, 검증자의 블록 포함과 같은 일련의 중요한 단계를 거칩니다. 이 과정 덕분에 네트워크의 모든 상태 변경에 대해 무결성과 보안, 그리고 적절한 순서가 보장됩니다.
1. 멤풀 제출 및 전파
트랜잭션의 여정은 마루 노드의 JSON-RPC 엔드포인트 (어떤 EVM 도구든 이미 사용하는 동일한
eth_sendRawTransaction 형식)에 제출될 때 시작됩니다. 노드가 기본 검증을 수행하고, 통과하면 트랜잭션은 노드의 로컬 멤풀 — 보류 중인 트랜잭션 대기 영역 — 에 진입합니다. 노드는 트랜잭션을 피어에게 전파해, 네트워크의 다른 노드들이 이를 인식하게 합니다. 마루 멤풀은 EVM을 인식하며 effective gas price(팁)를 기준으로 우선순위를 부여합니다.2. AnteHandler 검증
검증자는 제안된 블록에 트랜잭션을 포함하기 전에, 순서대로 실행되는 상태 기반 검사 체인
어느 한 단계라도 실패하면 트랜잭션은 구조화된 오류와 함께 거절됩니다 — 표준 SDK 오류 (서명/논스/수수료)이거나 PCL ReasonCode (컴플라이언스) 중 하나입니다.
AnteHandler를 거치게 합니다:- 서명 검증: 발신자라고 주장하는 주체가 실제로 서명했는지 확인합니다.
- 논스 검사: 올바른 시퀀스 번호를 요구해 리플레이를 차단합니다.
- 수수료 차감: 발신자가 가스 예산에 충분한
aokrw를 보유하는지 확인하고 차감합니다. - 가스 한도 검증: 트랜잭션의 가스를 네트워크 파라미터에 맞게 제한합니다.
- PCL 평가: 활성 GlobalPolicyConfig의 모든 PolicySet을 트랜잭션에 대해 평가합니다 (denylist, KYC, volume, period). 자세한 내용은
pcl-policy-enforcement페이지를 참고합니다.
어느 한 단계라도 실패하면 트랜잭션은 구조화된 오류와 함께 거절됩니다 — 표준 SDK 오류 (서명/논스/수수료)이거나 PCL ReasonCode (컴플라이언스) 중 하나입니다.
3. 블록 제안 및 실행
다음 블록을 제안할 검증자는 멤풀에서 유효한 트랜잭션 집합을 골라 담고, 보통 수수료가 높은 트랜잭션을 우선시합니다. 선택된 트랜잭션은 순서대로 정렬되어 새로운 블록 제안에 포함되며, 이 제안은 합의를 위해 네트워크 전체에 브로드캐스트됩니다.
4. 합의 및 최종 확정
다른 검증자들은 제안된 블록을 받아 트랜잭션을 다시 실행하고, 발생한 상태 변경을 확인한 뒤 블록의 유효성을 두고 투표합니다. 검증자의 과반수(2/3 이상)가 동의하면 블록은 블록체인에 커밋됩니다. 이 시점에서 트랜잭션은 최종 확정된 것으로 간주되며, 상태 변경(예: 토큰 전송, 스마트 컨트랙트 상태 업데이트)이 영구적으로 기록됩니다.