원시 이더리움 트랜잭션이란 무엇인가요?
원시 이더리움 트랜잭션은 지갑이 서명할 때 생성하는 RLP 인코딩된 바이트 문자열입니다. typed 트랜잭션의 경우 1바이트 type 접두사(0x01~0x04) 뒤에 nonce, 수수료 필드, gas limit, to, value, data, 그리고 ECDSA 서명(v, r, s)의 RLP 리스트가 이어집니다. 발신자 주소는 저장되지 않습니다. 노드가 서명에서 복원하며, 트랜잭션 해시는 정확히 이 바이트들의 Keccak-256입니다.
원시 트랜잭션을 얻는 곳
- MetaMask와 대부분의 지갑: 직접 표시하지는 않지만
eth_signTransaction을 호출하는 dApp과 라이브러리가 이를 받습니다. ethers.js는tx.serialized와tx.unsignedSerialized를 제공합니다. - 노드: Geth, Erigon 및 대부분의 RPC 제공자의
eth_getRawTransactionByHash. Etherscan은 "Get raw tx data"에서 보여줍니다. - 하드웨어 지갑 흐름: 확인을 요청받는 hex가 정확히 이 형식입니다.
필드 설명
최대 총 수수료는 gas limit × max fee per gas로, 트랜잭션에 들 수 있는 최대 비용입니다. 실제 수수료는 보통 더 낮습니다. 미서명 해시는 개인키가 서명하는 다이제스트입니다. Access list는 가스를 낮추기 위해 스토리지 키를 미리 선언합니다. blob 트랜잭션의 경우 blob 데이터 자체는 여기 표시되는 RLP에 포함되지 않고 versioned hash만 포함됩니다.
트랜잭션 type 한눈에 보기
| Type | EIP | 수수료 필드 | 추가 필드 |
|---|---|---|---|
| 0 (레거시) | v에 EIP-155 chain ID | gasPrice | 없음 |
| 1 | EIP-2930 | gasPrice | accessList |
| 2 | EIP-1559 | maxPriorityFeePerGas, maxFeePerGas | accessList |
| 3 | EIP-4844 | type 2와 동일 + maxFeePerBlobGas | blobVersionedHashes |
| 4 | EIP-7702 | type 2와 동일 | authorizationList |
예시
gas limit 21,000, maxFeePerGas 30 gwei, maxPriorityFeePerGas 2 gwei인 type 2 트랜잭션은 최대 총 수수료가 21,000 × 30 gwei = 630,000 gwei = 0.00063 ETH로 표시됩니다. 블록의 base fee가 12 gwei라면 실효 가격은 12 + 2 = 14 gwei이고 실제 수수료는 294,000 gwei = 0.000294 ETH이며, 나머지 0.000336 ETH는 청구되지 않습니다. to가 USDT 컨트랙트이고 calldata가 a9059cbb로 시작하면 토큰 전송이며, value 필드는 0입니다.
calldata를 인코딩하거나 알 수 없는 함수를 디코딩해야 하나요? ABI 인코더 / 디코더와 셀렉터 조회를 이용하세요.