트랜잭션 생명주기
제출부터 멤풀, AnteHandler 검증, 블록 포함을 거쳐 최종 확정까지의 트랜잭션 여정.
마루의 트랜잭션 생명주기를 이해하는 것은 신뢰할 수 있는 애플리케이션을 구축하는 데 핵심입니다. 사용자가 트랜잭션을 제출하면 즉시 블록에 포함되지 않습니다. 대신, 멤풀 수락, AnteHandler 체인에 의한 엄격한 검증, 그리고 마지막으로 EVM에 의한 실행 및 검증자에 의한 블록 포함과 같은 일련의 중요한 단계를 거칩니다. 이 과정은 네트워크의 모든 상태 변경에 대한 무결성, 보안 및 적절한 순서를 보장합니다.
1. 멤풀 제출 및 전파
트랜잭션의 여정은 마루 노드의 RPC 엔드포인트에 제출될 때 시작됩니다. 노드는 먼저 기본적인 온전성 검사를 수행합니다. 통과하면 트랜잭션은 보류 중인 트랜잭션을 위한 대기 영역인 노드의 로컬 멤풀에 추가됩니다. 그런 다음 노드는 트랜잭션을 피어에게 가십하여 네트워크 전체에 전파하여 다른 검증자들도 이를 인지하게 합니다.
app/mempool.go에서 구성된 마루의 멤풀은 EVM을 인식하며 가스 가격(팁)에 따라 트랜잭션의 우선순위를 정할 수 있습니다.2. AnteHandler 검증
검증자가 제안된 블록에 트랜잭션을 포함시키기 전에, 트랜잭션을
이러한 검사 중 하나라도 실패하면 트랜잭션은 거부되고 블록에 포함되지 않습니다.
AnteHandler 체인을 통해 실행합니다. 이것은 중요한 상태 저장 검증 단계입니다. ante/ante.go의 NewAppAnteHandler에 의해 구성된 체인은 순서대로 일련의 검사를 수행합니다:- 서명 검증: 트랜잭션이 주장된 발신자에 의해 서명되었는지 확인합니다.
- 논스 확인: 리플레이 공격을 방지하기 위해 트랜잭션이 올바른 시퀀스 번호를 가지고 있는지 확인합니다.
- 수수료 차감: 발신자가 가스 수수료를 충당할 충분한
aokrw를 가지고 있는지 확인하고 차감합니다. - 가스 한도 검증: 트랜잭션의 가스 한도가 허용 가능한 범위 내에 있는지 확인합니다.
이러한 검사 중 하나라도 실패하면 트랜잭션은 거부되고 블록에 포함되지 않습니다.
3. 블록 제안 및 실행
다음 블록을 제안하도록 선택된 검증자는 멤풀에서 유효한 트랜잭션 집합을 선택하며, 일반적으로 수수료가 높은 트랜잭션을 우선시합니다. 이러한 트랜잭션은 순서가 정해져 새로운 블록 제안에 포함되며, 이 제안은 합의를 위해 네트워크의 나머지 부분에 브로드캐스트됩니다.
4. 합의 및 최종 확정
다른 검증자들은 제안된 블록을 수신하고, 트랜잭션을 다시 실행하여 결과적인 상태 변경을 확인하고, 블록의 유효성에 대해 투표합니다. 검증자의 과반수(2/3 이상)가 동의하면 블록은 블록체인에 커밋됩니다. 이 시점에서 트랜잭션은 최종 확정된 것으로 간주되며, 그 상태 변경(예: 토큰 전송, 스마트 컨트랙트 상태 업데이트)은 영구적으로 기록됩니다.