devops

이더리움의 트랜잭션(Transaction) 이란? 본문

DevOps/Chain

이더리움의 트랜잭션(Transaction) 이란?

vata500 2023. 4. 24. 22:58
반응형

이더리움의 트랜잭션은 암호로 서명된 Data message다. 한 이더리움 account에서 다른 account로 ETH를 전송하거나, 블록체인에 배포된 Smart Contract와 상호작용하는 역할을 한다.

트랜잭션은 블록체인에 있어 아주 기본적이지만, 중요한 개념이기 때문에 관련 종사자라면 필수적으로 알아야하는 부분이기도 하다.

트랜잭션 Transaction

트랜잭션은 EVM 상태 변경을 위해 전체 네트워크에 Broadcast되어야 한다. 모든 노드는 EVM에 실행될 트랜잭션에 대한 요청을 Broadcast할 수 있어야하며, Broadcast된 후에는 Validator가 트랜잭션을 실행하고 상태가 변경된 결과를 네트워크에 전파한다.

이더리움 네트워크에서 트랜잭션은 Serialize되어 전송되는데, 각 클라이언트와 어플리케이션은 자체 내부 데이터 구조를 사용해 트랜잭션을 메모리에 저장한다. 트랜잭션은 아래 트랜잭션 구조에 있는 nonce ~ data 데이터를 포함하는 serialize된 binary 메시지다.

트랜잭션 구조

트랜잭션 메시지의 구조는 바이트 시리얼라이제이션을 위해 특별히 개발된 RLP(Recursive Length Prefix) 인코딩 체계를 통해서 시리얼라이즈된다.

{
  from: "0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8",
  to: "0xac03bb73b6a9e108530aff4df5077c2b3d481e5a",
  gasLimit: "21000",
  maxFeePerGas: "300",
  maxPriorityFeePerGas: "10",
  nonce: "0",
  value: "10000000000"
}
  • from - 보내는 address
  • to – 받는 address
  • value – ETH 양
  • data – can contain code or a message to the recipient.
  • gasLimit – 사용할 수 있는 gas unit의 최대량
  • nonce - account에서 발생한 tx 순
  • maxPriorityFeePerGas - 마이너에게 지급되는 최대 가스량
  • maxFeePerGas -트랜잭션에 지불되는 최대 가스량
  • signature – 보내는 account의 개인 키에서 발생되어 트랜잭션에 서명할 때 생성.

여기서 nonce는 동일한 수신 account에 동일한 양의 ETH를 전송하더라도 순서에 따라 변경되는 nonce값에 의해서 각각의 개별 트랜잭션이 고유하게 된다. 그만큼 nonce는 계정 기반(account-based) 프로토콜에선 필수적인 데이터로 트랜잭션 복제 방지와 사용성 상의 기능 역할을 충실히 해낸다고 볼 수 있다.

최근에는 EIP-1559에 의해서 트랜잭션 표준이 변경되었다.(보다 더 예측 가능한 가스 요금과, 효율적인 거래를 위함)

트랜잭션 가스비

트랜잭션의 유형

트랜잭션의 주요 payload는 value와 data라는 2개의 필드에 포함되는데, value만 있다면 단순 ETH 전송이며, data만 있다면 Contract 함수를 호출한다고 볼 수 있다. 이 두 데이터가 없는 트랜잭션은 그저 가스 낭비인 무의미한 트랜잭션이라고 보면 된다.

- Message call transaction: 다른 EOA 또는 CA와 상호 작용하려는 EOA에 의해서 파생된 트랜잭션이다.

- Contract creation transaction: 스마트 컨트랙트 계정을 생성하기 위해 만든 트랜잭션으로 이것 역시 EOA에 의해서 파생된다. 대표적으로 데이터 저장을 위한 Storage Smart Contract를 생성한다.

트랜잭션의 상태

  • Pending: 네트워크에 Broadcast된 트랜잭션으로, 트랜잭션 처리시간이 길어지면 Gas 요금이 부족하여 발생
  • Queued: 먼저 Pending된 트랜잭션 또는 Sequence Nonce가 잘못입력되어 아직 마이닝이 안된 트랜잭션
  • Cancelled: 더이상 마이닝할 수 없는 상태로
  • Replaced: Value와 Data의 빠른 실행 혹은 수정을 위해서 현재 Pending 중인 트랜잭션을 대체
  • Failed: 잘못되거나 비논리적인 코드 혹은 함수 호출로 인해 오류가 발생한 트랜잭션

 

간단히 말해서 트랜잭션의 이더리움 시스템의 모든 활동의 시작으로, 트랜잭션에 의해 EVM이 컨트랙트를 실행하고 잔액을 업데이트하며, 이더리움의 상태를 수정하게 된다.

반응형
Comments