트랜잭션 생명주기

mechanism network

제출부터 멤풀, 실행 전 검사, 블록 포함을 거쳐 최종 확정에 이르는 트랜잭션의 여정을 따라갑니다.

마루의 트랜잭션 생명주기를 이해하는 일은 신뢰할 수 있는 애플리케이션을 구축하는 데 핵심입니다. 사용자가 트랜잭션을 제출하면 즉시 블록에 포함되지 않습니다. 대신 멤풀 수락, 엄격한 실행 전 검사, EVM 실행, 검증자의 블록 포함과 같은 일련의 중요한 단계를 거칩니다. 이 과정 덕분에 네트워크의 모든 상태 변경에 대해 무결성과 보안, 그리고 적절한 순서가 보장됩니다.

1. 멤풀 제출 및 전파

트랜잭션의 여정은 마루 노드의 JSON-RPC 엔드포인트 (어떤 EVM 도구든 이미 사용하는 동일한 eth_sendRawTransaction 형식)에 제출될 때 시작됩니다. 노드가 기본 검증을 수행하고, 통과하면 트랜잭션은 노드의 로컬 멤풀 — 보류 중인 트랜잭션 대기 영역 — 에 진입합니다. 노드는 트랜잭션을 피어에게 전파해, 네트워크의 다른 노드들이 이를 인식하게 합니다. 마루 멤풀은 EVM을 인식하며 effective gas price(팁)를 기준으로 우선순위를 부여합니다.

2. 실행 전 검사

검증자는 제안된 블록에 트랜잭션을 포함하기 전에, 상태 기반 검사로 이루어진 체인의 실행 전 검사를 거치게 합니다. 아래 마지막 항목인 PCL 평가는 서명 검증을 비롯한 나머지 검사보다 먼저 실행됩니다:

  • 서명 검증: 발신자라고 주장하는 주체가 실제로 서명했는지 확인합니다.
  • 수수료 차감: 발신자가 가스 예산에 충분한 atokrw를 보유하는지 확인하고 차감합니다.
  • 논스 검사: 올바른 시퀀스 번호를 요구해 리플레이를 차단합니다.
  • 가스 한도 검증: 트랜잭션의 가스를 네트워크 파라미터에 맞게 제한합니다.
  • PCL 평가: 트랜잭션의 selector에 적용되는 전역 정책(GlobalPolicyConfig)을 트랜잭션 자체의 호출(발신자, to, value, selector)에 대해 평가합니다 (denylist, KYC, volume, period). 노드의 JSON-RPC가 트랜잭션 제출 시점에 이미 이 검사를 실행하므로, 검사에 실패한 트랜잭션은 eth_sendRawTransaction에서 거절되며 가스를 지불하지 않습니다. PCL 검사는 여기서 끝나지 않습니다. PCL 래핑 컨트랙트의 자체 정책은 실행 중 프록시의 preCall / postCall 훅에서 실행되고, 전역 정책은 실행 후 그 트랜잭션의 호출과 그 트랜잭션이 만든 전송들에 대해 다시 실행됩니다. 이 단계에서 위반이 발견되면 트랜잭션은 실패하지만 블록에는 포함되며 가스비도 부과됩니다. 자세한 내용은 pcl-policy-enforcement 페이지를 참고합니다.


어느 한 단계라도 실패하면 트랜잭션은 구조화된 오류와 함께 거절됩니다 — 표준 SDK 오류 (서명/논스/수수료)이거나 PCL ReasonCode (컴플라이언스) 중 하나입니다.

3. 블록 제안 및 실행

다음 블록을 제안할 검증자는 멤풀에서 유효한 트랜잭션 집합을 골라 담고, 보통 수수료가 높은 트랜잭션을 우선시합니다. 선택된 트랜잭션은 순서대로 정렬되어 새로운 블록 제안에 포함되며, 이 제안은 합의를 위해 네트워크 전체에 브로드캐스트됩니다.

4. 합의 및 최종 확정

다른 검증자들은 제안된 블록을 받아 트랜잭션을 다시 실행하고, 발생한 상태 변경을 확인한 뒤 블록의 유효성을 두고 투표합니다. 검증자의 과반수(2/3 이상)가 동의하면 블록은 블록체인에 커밋됩니다. 이 시점에서 트랜잭션은 최종 확정된 것으로 간주되며, 상태 변경(예: 토큰 전송, 스마트 컨트랙트 상태 업데이트)이 영구적으로 기록됩니다.
ESC
검색어를 입력하세요