[Blockchain] 트랜잭션

yooni·2022년 3월 2일
0

Blockchain

목록 보기
7/36
post-thumbnail

블록체인트랜잭션블록 단위의 체인 형태로 저장하는 기술이다.



1. 블록(Block) 데이터의 구조

블록은 헤더(Header)바디(Body)로 이루어져 있으며 헤더에는 메타데이터, 바디에는 트랜잭션들의 리스트가 담겨있다. 블록 데이터를 설명하는 메타데이터에는 다음과 같은 정보들이 담길 수 있다.

  • 이 블록이 체인 중 몇 번째 블록인지
  • 이 블록에 몇 개의 트랜잭션이 있는지
  • 이 블록을 누가 생성했는지
  • 이 블록의 크기, 총 전송량이 얼마인지



2. 트랜잭션 (Transaction)

트랜잭션 (Transaction)

  • 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위
  • 상호작용 및 작업 수행의 논리적 단위
  • 블록체인의 상태(state)를 변화시키는 일련의 작업

보내는 사람의 주소, 받는 사람의 주소, 금액, 수수료 등 거래를 위한 정보가 작성된 것이 트랜잭션 데이터이다.



2-1. 트랜잭션의 특성 - ACID

트랜잭션은 묶여있는 모든 작업을 완료해야 정상적으로 종료한다. 하나의 트랜잭션 속 여러 작업 중 단 하나라도 실패하면 이 트랜잭션의 모든 작업을 실패한 것으로 판단한다. 트랜잭션은 성공/실패 두 가지 결과만 존재하며 미완료된 작업 없이 모든 작업을 성공해야 한다.

데이터베이스 내에서 발생하는 트랜잭션의 안전성을 보장하기 위해 4가지 성질이 필요하다.

✔️ 1. Atomicity (원자성)

하나의 트랜잭션에 속해있는 모든 작업이 전부 성공하거나 전부 실패해서 결과를 예측할 수 있어야 한다. 작업중 하나라도 실패한다면 묶여있는 모든 작업을 실패하게 만들어 기존 데이터를 보호한다.

✔️ 2. Consistency (일관성)

데이터베이스의 상태가 일관되어야 한다. 하나의 트랜잭션 이후, 데이터베이스의 상태는 이전과 같이 유효해야 한다. 즉 트랜잭션 이후에도 데이터베이스의 제약이나 규칙을 만족해야 한다.

✔️ 3. Isolation (격리성, 고립성)

모든 트랜잭션은 다른 트랜잭션들로부터 독립되어야 한다. 동시에 여러 트랜잭션을 실행해도, 각 트랜잭션은 독립되어 있기 때문에 연속으로 실행한 것의 결과 및 데이터베이스 상태가 동일해야 한다.

✔️ 4. Durability (지속성)

하나의 트랜잭션이 성공적으로 수행되었다면 해당 트랜잭선에 대한 로그가 남아야 하며 이 기록은 영구적이어야 한다. 거래 이후 데이터베이스에 오류가 발생하더라도 거래 내역은 기록으로 남아있어야 한다. 로그 기록 이전에 시스템 오류가 발생한다면 해당 트랜잭션은 실패로 돌아가고 트랜잭션 이전 상태로 돌아간다.



2-2. 비트코인 vs 이더리움 : 트랜잭션 데이터 구조의 차이

주목해야 할 차이점은 논스(Nonce)의 유무이다. 이더리움에만 논스가 존재하며 논스는 이중지불의 방지를 위한 것이다. 이중지불(Double Spending)이란 원본에 저장된 가치를 지불한 뒤, 해당 파일을 복사하여 다른 사람에게 또 다시 지불하는 것을 말한다. 모든 트랜잭션은 일회성이기 때문에, 하나의 트랜잭션은 하나의 상태만 변화시켜야 하고 이중 지불이 발생해서는 안된다.

이더리움 트랜잭션 논스
발신 계정에서 트랜잭션에 할당된 번호로, 이중 지불 문제를 방지한다.

  • 트랜잭션 발생시 논스는 1씩, 순서대로 증가하며 순번을 건너뛰지 않는다.
    (Ex. 논스가 3인 트랜잭션을 전송하려면, 논스가 0~2인 트랜잭션의 전송 내역이 있어야 한다. 현재 계정의 논스가 1인 상태에서 논스가 3인 트랜잭션을 전송한다면, 해당 트랜잭션은 처리되지 않고 멤풀(Mempool)에 저장되었다가 논스가 2인 트랜잭션이 전송될 때 2,3이 연달아 처리된다.)

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

  • 같은 논스에 여러 트랜잭션 전송이 발생하였다면, 제일 높은 가스비를 지불한 트랜잭션이 처리된다.


이더리움의 경우, 이중 지불 문제를 방지 하기 위해 위와 같이 어카운트(Account) 기반 논스를 활용하여 각 트랜잭션이 오직 한 번만 처리되게 하는 카운터로 논스를 이용한다. 비트코인의 경우에는 UTXO(Unspent Transaction Output, 미사용 트랜잭션 출력값)을 통해 거래의 유효성을 검사하여 코인의 존재 여부를 확인한다.

profile
멋쟁이 코린이

0개의 댓글