이더리움 마스터하기, 2nd Edition
by Carlo Parisi, Alessandro Mazza, Niccolo Pozzolini, Gavin Wood, Andreas M. Antonopoulos
6장. 트랜잭션
이 작품은 AI를 사용하여 번역되었습니다. 여러분의 피드백과 의견을 환영합니다: translation-feedback@oreilly.com
트랜잭션은 외부 소유 계정에서 생성되어 이더리움 네트워크에 의해 전송되고 이더리움 블록체인에 기록되는 서명된 메시지입니다. 이 기본 정의에는 놀랍고 흥미로운 세부 사항이 많이 숨겨져 있습니다. 트랜잭션을 바라보는 또 다른 방법은 트랜잭션이 상태 변경을 트리거하거나 EVM에서 컨트랙트를 실행할 수 있는 유일한 요소라는 것입니다. 이더리움은 글로벌 싱글톤 스테이트 머신이며, 트랜잭션은 스테이트 머신을 '작동'시켜 상태를 변경하는 것입니다. 컨트랙트는 스스로 실행되지 않습니다. 이더리움은 자율적으로 실행되지 않습니다. 모든 것은 트랜잭션으로 시작됩니다.
이 장에서는 트랜잭션을 분석하고, 어떻게 작동하는지 보여주며, 세부 사항을 살펴보겠습니다. 이 장의 대부분은 지갑 앱을 작성하는 등 낮은 수준에서 자신의 트랜잭션을 관리하는 데 관심이 있는 분들을 위한 것이므로, 기존 지갑 애플리케이션을 사용하는 데 만족하신다면 세부적인 내용이 흥미로울 수 있지만 걱정하실 필요는 없습니다!
트랜잭션의 구조
먼저 이더리움 네트워크에서 직렬화되어 전송되는 트랜잭션의 기본 구조에 대해 살펴보겠습니다. 직렬화된 트랜잭션을 수신하는 각 클라이언트는 네트워크 직렬화된 트랜잭션 자체에는 존재하지 않는 메타데이터로 장식된 자체 내부 데이터 구조를 사용하여 메모리에 저장합니다. 네트워크 직렬화는 트랜잭션의 유일한 표준 형태입니다.
이더리움 초창기에는 한 가지 유형의 트랜잭션만 존재했지만, EIP-2718 은 다양한 트랜잭션 유형을 처리하고 다른 방식으로 처리하는 방법을 도입했습니다. 특히, 모든 트랜잭션은 트랜잭션 유형을 지정하는 단일 바이트로 시작됩니다:
transaction = tx_type || tx_payload
이 글을 쓰는 시점(2025년 6월)에는 표 6-1에 나열된 다섯 가지 트랜잭션 유형이 존재합니다.
| 유형 식별자 | 이름 |
|---|---|
0x00 |
레거시 트랜잭션 |
0x01 |
EIP-2930 트랜잭션 |
0x02 |
EIP-1559 트랜잭션 |
0x03 |
EIP-4844 트랜잭션 |
0x04 |
EIP-7702 트랜잭션 |
이 모든 것을 좀 더 자세히 분석해 보겠습니다.
레거시 트랜잭션
레거시 트랜잭션은 다음 데이터를 포함하는 직렬화된 바이너리 메시지입니다:
- 체인 ID
- 트랜잭션을 전송하는 네트워크의 체인 ID입니다. 간단한 리플레이 공격 방지 메커니즘으로 EIP-155와 함께 추가되었습니다.
- Nonce
- 원본 EOA에서 발급하며 메시지 리플레이를 방지하는 데 사용되는 시퀀스 번호입니다.
- 가스 가격
- 발신자가 지불하고자 하는 가스 가격(웨이 단위)입니다.
- 가스 한도
- 발신자가 이 트랜잭션에 대해 구매할 의향이 있는 최대 가스 양입니다. 트랜잭션에 사용된 실제 가스에 대해서만 지불하게 된다는 점에 유의하세요. 가스 한도는 발신자가 지불할 의사가 있는 최대 가스 금액만을 나타냅니다.
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access