본문 바로가기
블록체인/블록체인이란?

블록체인 트랜잭션, 비트코인 이더리움 트랜잭션 데이터 구조 차이

by 제이제이_은재 2022. 6. 16.
반응형

💡트랜잭션(Transaction)

 

블록체인은 블록+체인이다. 즉, 블록들이 체인으로 연결되어 있는 구조이다. 이 블록은 헤더+바디로 이루어져있고 헤더는 메타데이터, 바디는 트랜잭션들의 리스트로 구성되어 있다. 

 

블록은 거래의 기록 단위로 다수의 트랜잭션을 포함할 수 있다. 이떄, 특정 블록을 기준으로 다음과 같은 점들을 생각해볼 수 있다.

 

- 이 블롣은 체인 중 몇 번째 블록인지?

- 이 블록에 몇 개의 트랜잭션이 있는지?

- 이 블록 생성은 누가 했는지?

- 이 블록의 크기, 총 전송량 등은 얼마인지?

 

이런 정보들을 메타데이터라고 한다. 블록이라는 데이터를 설명하는 데이터이기 때문이다. 트랜잭션이 모여있는 블록 역시 데이터고, 전부 데이터이다. 이 메타 데이터는 블록의 맨 윗 부분에 따로 두는데, 이러한 이유로 블록의 메타 데이터를 블록 헤더라고 부르기도 한다.

 

트랜잭션이란 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위라고 하며, 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 서징을 가리키는 약어 A.C.I.D를 통해 트랜잭션의 특성을 알 수 있다. 트랜잭션은 쉽게 생각해서 은행 앱에서 쓰이는 이체 데이터와 같다. 우리가 은행 앱으로 어떤 사람에게 돈을 이체하고 싶은 경우를 생각해보면 받을 사람의 계좌번호, 금액 등의 정보를 작성하고 이체 버튼을 누른다. 은행 앲에서는 전산상에 해당 거래 내역을 등록함으로써 정상적으로 이루어지게 된다. 비트코인도 거래를 하기 위해서는 보내는 주소, 받는 사람의 주소, 금액, 수수료 등의 정보를 작성해야하고 이렇게 작성된 것이 바로 트랜잭션 데이터이다.

 

블록체인에서의 트랜잭션 역시 상호작용 및 작업 수행의 논리적 단위이다. 블록체인 상의 모든 활동은 트랜잭션을 통해 이루어지고, 추상적인 관점에서의 트랜잭션은 블록체인의 상태를 변화시키는 일련의 작업을 내포하고 있다.

 

 

💡비트코인과 이더리움의 트랜잭션 데이터 구조 차이

비트코인과 이더리움 트랜잭션 데이터 구조는 논스의 유무가 가장 큰 차이이다.

 

비트코인 트랜잭션 구조

필드 설명
버전 번호 채굴자와 노드가 트랜잭션 처리에 사용할 규칙을 지정하는 데 사용
입력 카운터 트랜잭션에 포함된 입력의 개수
입력 리스트 블록의 첫 트랜잭션은 코인베이스 트랜잭션, 입력 리스트에는 하나 이상의 트랜잭션 입력이 포함
출력 카운터 출력의 개수를 나타내는 양의 정수
출력 리스트 트랜잭션에 포함된 출력
로크(Lock) 시간 트랜잭션이 유효해지는 가장 빠른 시간을 정의하는 필드

 

이더리움 트랜잭션 구조

필드 설명
논스(Nonce) 발신 EOA에 의해 발행되어 메시지 재사용을 방지하는데 사용되는 일련번호
가스 가격(Gas Price) 발신자가 지급하는 가스의 가격
가스 한도(Gas Limit) 이 트랜잭션을 위해 구입할 가스의 최대량
수신자(Recipient) 목적지 이더리움의 주소
값(Value) 목적지에 보낼 이더의 양
데이터(Data) 가변 길이 바이너리 데이터 페이로드
v, r, s EOA의 ECDSA 디지털 서명의 세가지 구조

 

이더리움 트랜잭션 논스의 특징은 두가지가 있다.

1) 거래 전송시 논스는 1씩 증가한다.

2) 논스는 계정에서 유일하며, 동일한 논스가 존재하지 않는다.

 

논스는 발신 주소의 속성이며, 발신 주소의 컨텍스트 안에서만 의미를 갖는다. 그러나 명시적으로 블록체인 계정 상태에 저장되지 않고 해당 주소에서 발생한 확인된 트랜잭션 건수를 세어 동적으로 계산되는 값이 논스이다. 논스는 중복되지 않고 순차적이기 때문에, 같은 논스에 여러 트랜잭션 전송이 발생했다면 해당 논스 중 가장 높은 가스비를 지불한 트랜잭션이 처리 된다. 이더리움에서는 이러한 방법으로 이중 지불 문제를 해결한다.

 

만약, 논스가 0인 트랜잭션 전송 후 논스가 2인 트랜잭션을 전송하면 두 번째 트랜잭션은 어떤 블록에도 포함되지 않는다. 이더리움 네트워크는 누락된 논스가 나타날때까지 기다리는 동안 두 번째 논스를 멤풀에 저장한다.

(멤풀(Mempool)이란 아직 블록에 들어가지 않은 상태의 트랜잭션들이 어떤 공간에 있는 것을 의미)

 

그 다음 논스가 1인 누락된 트랜잭션을 전송하면, 두 트랜잭션이 처리가 되고 블록에 포함한다.

 

비트코인과 이더리움 논스의 유무 차이는 결국 이중지불 장지를 위해서이다. 

(이중지불이란 원본 파일에 저장된 가치를 지불한 뒤, 해당 파일을 복사하여 다른 사람에게 또 지불하는 것을 말한다.)

 

모든 트랜잭션을 1회성이다. 그래서 하나의 트랜잭션은 하나의 상태만 변화시킬 수 있다. 이 문제를 해결하기 위해 비트코인의 경우 UTXO(Unspent Transaction Ouputs, 미사용 트랜잭션 출력값)를 통해 해결하고, 이더리움은 어카운트 기반 시스템으로 논스 값을 각 트랜잭션이 오직 한 번만 처리하게 되는 카운터로 사용한다. 즉, UTXO와 어카운트 기반의 프로토콜 차이 때문에 이더리움 트랜잭션의 노스가 있고, 이 트랜잭션을 발신한 사람이 트랜잭션에 필요한 메시지 재사용을 방지하기 위함이다. 

반응형

댓글