트랜잭션

CY·2021년 12월 31일
0

BlockChain

목록 보기
3/9
post-custom-banner

트랜잭션

트랜잭션(Transaction)이란, 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위.
비트코인에서 거래를 하기 위해 보내는 주소, 받는 주소, 금액, 수수료 등의 정보가 작성되며 이 정보를 담는 것이 바로 트랜잭션 데이터이다.

데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질이 A.C.I.D이다.

ACID

  • Atomicity (원자성)
    작업이 전부 성공하거나 전부 실패해서 결과가 예측 가능해야 함
  • Consistency (일관성)
    트랜잭션의 이전과 이후 데이터베이스의 상태는 이전과 같이 유효해야 한다
  • Isolation (고립성)
    모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 함
  • Durability (지속성)
    트랜잭션이 성공적으로 수행되면 해당 트랜잭션에 대한 기록은 영구적이어야 한다.

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

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

비트코인 트랜잭션 구조

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

이더리움 트랜잭션 구조

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

논스

하나의 트랜잭션은 하나의 상태만 변화시킬 수 있기에 모든 트랜잭션은 일회성이다.

이더리움에서는 이 문제를 논스(nonce)값을 각 트랜잭션이 오직 한번만 처리되게 하는 카운터로 사용하여 해결한다.

논스(nonce)는 발신 주소의 속성이며, 발신 주소의 컨텍스트 안에서만 의미를 갖는다. 그러나 명시적으로 블록체인 계정 상태에 저장되지 않고 해당 주소에서 발생한 확인된 트랜잭션 건수를 세어서 동적으로 계산되는 값이 논스이다.

논스의 특징

  • 거래(transaction) 전송 시 논스는 1씩 증가한다.
  • 논스는 계정에서 유일하며, 동일한 논스는 존재하지 않는다.

논스는 중복되지 않고 순차적이기 때문에, 같은 논스에 여러 트랜잭션 전송이 발생하였다면 해당 논스 중 제일 높은 가스비(gas price)를 지불한 트랜잭션이 처리되어 이중 지불 문제를 방지한다.

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

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

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

profile
CY's StudyRoom
post-custom-banner

0개의 댓글