본문 바로가기

블록체인_9기/⛓ BlockChain

60강_230918_Blockchain(Transaction?)

728x90

 

 

 


트랜잭션이란(Transaction)?

트랜잭션(Transaction)이란, 어떤 기능이나 서비스를 구현하기 위해서 수행하는 논리적인 작업 단위를 말한다. 특정 서비스 구현을 위해 하나의 작업으로 처리가 가능한 경우도 있지만, 일련의 작업들이 모여야 정상적인 작업이 완료되는 경우도 있다. 블록체인에서의 송금에도 이런 일련의 작업 단위들의 모여야 올바른 송금을 할 수 있으므로, 우린 이 트랜잭션이 블록체인에서 어떤 역할을 수행하는지 알아보고자 한다.

비트코인과 같은 화폐 시스템에서 트랜잭션(transaction)은 송금을 위해 필요한 일련의 작업 단위 묶음이라고 할 수 있다. 예를 들어, A가 B에게 비트코인을 송금하는 과정에서는 다음과 같은 세부 작업이 진행될 것이다.

1. 송금자의 금액을 확인한다.
2. 수신자 계좌번호화 송금액을 입력한다.
3. 송금자의 잔고가 송금액보다 크다는 것을 검증한다.
4. 송금자 계좌에서 송금액만큼 공제한다.
5. 수신자 계좌에서 송금액만큼 증액한다.

위와 같이 송금이라는 하나의 서비스 구현을 위해 필요한 5가지 일련의 세부 작업 묶음을 하나의 트랜잭션이라 한다.

따라서, 트랜잭션은 자산을 전송하거나 기록하는 것을 말한다. 다음은 블록체인 거래에서의 트랜잭션 설명이다.

  • 트랜잭션은 디지털 자산을 전송하는 것이다.
  • 트랜잭션 입력 및 출력(input과 output)은 이전 트랜잭션의 출력을 참조한다.
    • 출력은 자산을 받을 수 있는 주소와 양을 정의한다.
  • 트랜잭션의 검증을 위해 서명 검증을 진행한다.
    • 개인키로 트랜잭션을 서명하고 검증 트랜잭션을 승인한다.
  • 블록에 트랜잭션을 기록하고 발생한 여러 트랜잭션을 하나의 블록에 기록한다.
  • 트랜잭션을 처리하고 기록하는데 수수료가 발생한다. (Gas fee)
    • 발생한 수수료는 채굴자에게 보상으로 주어진다.

 

 

 


트랜잭션 구조 생성

 

#. 폴더의 구조는 다음과 같다.

 

1. src/core/transaction/transaction.interface.ts_트랜젝션 입출력 및 UTXO 등의 구조를 정의한다.

다시 한번, 트랜잭션 처리 과정을 알아보자.

  1. 트랜잭션의 입력 ('TxIn')은 이전 트랜잭션의 출력을 참조한다.
  2. 이 입력들은 트랜잭션의 서명('signature')과 함께 제공되어 현재 트랜잭션이 유효하다는 것을 증명한다.
  3. 트랜잭션의 출력('TxOut')은 수신자의 계정과 전송된 금액을 지정한다.
  4. 트랜잭션이 처리되면 새로운 UTXO(Unspent Transaction Output)가 생성되며, 이후 트랜잭션에서 다시 사용될 수 있다.

 

TxIn 클래스

  • 이전 트랜잭션의 출력을 참조하고, 현재 트랜잭션에 대한 서명을 포함한다.
  • txOutId : 이전 트랜잭션의 ID(해시값)를 나타내며, 이전 트랜잭션의 출력을 식별한다.
  • txOutIndex : 이전 트랜잭션의 출력 인덱스를 나타낸다. 특정 출력을 가리킨다.
  • signature : 현재 트랜잭션의 입력에 대한 서명이다. 트랜잭션이 유효하고 인증되었음을 증명한다.
// 트랜잭션 입력 구조 정의
export class TxIn {
  txOutId?: string; // 이전 트랜잭션의 ID(해시값)
  txOutIndex: number; // 이전 트랜잭션의 출력 인덱스
  signature?: SignatureInput; // 트랜잭션의 입력 서명
}

 

TxOut 클래스

  • 트랜잭션의 결과물로서, 수신자의 계정(공개키 또는 주소)와 전송된 금액을 나타낸다.
  • account : 수신자의 계정 공개키 또는 주소를 나타낸다. 
  • amount : 전송된 금액을 나타낸다. 수신자에게 전달되는 암호화폐 또는 자산의 양을 나타낸다.
// 트랜젝션 출력 구조 정의
export class TxOut {
  account: string; // 수신자 계정 공개키 or 주소
  amount: number; // 전송된 금액
}

 

TransactionRow 클래스

  • 트랜잭션의 정보를 나타내는 클래스이다.
  • txIns : 트랜잭션 입력 목록이다. 현재 트랜잭션에서 사용하는 UTXO의 정보를 참조한다.
    • 각 ' TxIn '은 이전 트랜잭션의 출력을 가리키며 'txOutId'와 'txOutIndex'를 사용하여 이전 출력을 식별한다.
  • txOuts : 트랜잭션 출력 목록이다. 현재 트랜잭션에서 생성되는 새로운 출력 정보를 포함한다.
    • 각 ' Txout '은 수신자의 계정과 전송되는 금액을 나타낸다.
  • hash : 트랜잭션의 고유 식별자(해시값)이다. 트랜잭션을 고유하게 식별하고, 블록체인에서 트랜잭션을 검색할 때 사용된다.
// 트랜잭션의 정보 구조 정의
export class TransactionRow {
  txIns: TxIn[]; // 트랜잭션 입력 목록(utxo의 값을 참조)
  txOuts: TxOut[]; // 트랜잭션 출력 목록 새로 생성되는 출력을 나타냄
  hash?: string; // 트랜잭션의 식별자(해시값)
}

 

UnspentTxOut 클래스

  • UnspentTxOut 클래스는 하나의 미사용 UTXO를 나타낸다. 이전 트랜잭션의 출력 중에서 아직 사용되지 않은 출력을 나타내며, 각각의 UTXO는 다음 트랜잭션에서 소비되거나 사용될 수 있는 암호화폐 또는 자산을 가리킨다.
  • txOutId : 해당 UTXO가 포함된 이전 트랜잭션의 해시 값을 나타낸다. 이 값은 UTXO가 어떤 트랜잭션의 결과물인지 식별한다.
  • txOutIndex : 해당 UTXO가 포함된 이전 트랜잭션의 출력 인덱스를 나타낸다. 이 값은 UTXO가 이전 트랜잭션에서 몇 번째 출력인지 나타낸다.
  • account : UTXO를 소유한 계정(주소 또는 공개키)를 나타낸다.
  • amount : UTXO의 잔액을 나타낸다. 해당 UTXO에 얼마나 많은 자산이 남아 있는지를 나타낸다.
// UTXO 구조 정의
export class UnspentTxOut {
  txOutId: string; // 해당 UTXO가 포함된 트랜잭션 hash 값
  txOutIndex: number; // 해당 UTXO가 포함된 트랜잭션의 출력 인덱스
  account: string; // UTXO 소유 계정
  amount: number; // 잔액
}

 

TransactionData 타입

 

 

 

 

 

 

 

더보기
  • 트랜잭션
    • 장세형, 비트코인의 탄생부터 블록체인의 미래까지 명쾌하게 이해하는 비트코인 블록체인 바이블, 위키북스(2021)
728x90