본문 바로가기

블록체인/이더리움

트랜잭션

트랜잭션

트랜잭션이란?

트랜잭션이란 일종의 거래기록으로서 쉽게 말해 내가 상대방에게 코인을 전송했을 때 코인을 전송한다는 그 메시지가 트랜잭션이며 블록에 기록됩니다.

트랜잭션의 구조

네트워크마다 트랜잭션의 구조가 다를 수 있어 대표적으로 이더리움의 트랜잭션 구조를 살펴보겠습니다.

구조 설명
Nonce EOA에서 발행되는 시퀀스 넘버
Gas price 메시지 전송자가 지급하는 가스의 가격
Gas limit 가스의 최대 사용량
Recipient 수신자
Value 수신자에게 보낼 이더의 양
v, r, s EOA의 ECDSA 디지털 서명의 세가지 구성 요소

이더리움의 트랜잭션 메시지는 RLP(Recursive Length Prefix)라는 인코딩 체계를 사용하여 바이트 단위로 직렬화됩니다. 또한 이더리움의 모든 숫자는 길이가 8비트의 배수인 빅 엔디안 정수로 암호화되며 발신자는 v, r ,s의 조합으로 알아낼 수 있습니다.

Nonce

논스는 트랜잭션에 할당된 번호이며 이는 순차적으로 증가하고 계정에서 유일하기 때문에 처리된 트랜잭션 중 동일한 논스는 존재하지 않습니다.

만약 논스가 같은 트랜잭션이 2개가 발생한다면 트랜잭션 중 가장 높은 가스비를 지불하는 트랜잭션만 처리됩니다.
현재 논스가 10이라면 논스가 순차적으로 증가하기 때문에 현재의 지갑(주소)에서 발생한 트랜잭션은 10개 입니다. 여러 개의 독립적인 프로세스에서 동시에 트랜잭션을 발생시킨다고 했을 때 최신 논스 번호가1인데 3번 논스의 트랜잭션이 수신된다면 이 트랜잭션은 2번 논스가 수신되기 전까지 대기 상태이며 2번 논스가 수신되면 2, 3번이 한 번에 처리됩니다.

가스

가스는 트랜잭션을 처리하기 위한 연료입니다. 가스비는 거래에서 사용할 수 있는 자원의 양을 통제하기 위해 가스를 사용합니다. 이는 denial of service attack이나 필요하지 않은 자원의 사용을 방지하기 위해서도 사용됩니다. 또한 지불된 가스비는 블록을 채굴한 노드가 그에대 대한 보상으로 지급되기도 합니다.

수신자

수신자는 20바이트로 이루어진 이더리움 주소 필드입니다. 주소는 컨트랙트, EOA 둘다 같은 형식으로 사용됩니다. 이더리움은 수신자 필드에 대한 검증을 수행하지 않기 때문에 어떠한 20-bytes이라도 모두 유효합니다.

Value와 Data

트랜잭션의 메인 payload에는 value, data 두 필드가 존재합니다. 이 두 필드의 값은 필수적인 것이 아니기 때문에 하나만 있거나 둘 다 없어도 문제가 되지 않습니다.

'블록체인 > 이더리움' 카테고리의 다른 글

EVM 이란?  (0) 2022.05.22
ABI란?  (0) 2022.05.21
[SpeedRunEthereum] Challenge 3 [Dex]  (0) 2022.05.17
[SpeedRunEthereum] Challenge 2 [Token Vendor]  (0) 2022.05.16
[SpeedRunEthereum] Challenge 1[Decentralized Staking App]  (0) 2022.05.15