카테고리 없음

Blockchain Transaction(요청)

tp134679 2025. 5. 19. 00:50

<목차>

1. Transaction

2. UTXO(미사용 잔액)

3. Transaction pool

 

 

1. Transaction

 

Transaction이란?

 

트렌젝션이란 블록체인에 남기는 의미 있는 요청 으로서  자신이 이 요청을 했다라는 인증이가능한 서명값과 함께 계약을 하는것입니다.

블록체인은 중앙화된 관리자가 없기 때문에 트렌젝션 이 발생하면  이 요청을 한 주체가 누구인지 악용을 했는지 를 검증하기 위해서 지갑을 만들때 생성된 Signatuer(서명)를 항상 넣어줘야 합니다. 블록체인은 이를 확인하고 검증 후 트렌잭션을 성사시키고 Transaction pool 에 임시로 넣게 됩니다. 이후 이 트렌잭션 풀에 있는 거래내용이 채택되고 블록에 포함 이후 채굴자가 difficulty를 풀고 채굴하여 블록이 생성이되면 체인에 등록되고 해당 Transaction 은 블록체인에 최종 기록되어 성사가 됩니다.  

2. UTXO(미사용 잔액)

블록체인에서의 거래는 UTXO 라는 조각으로 거래를 합니다. 

UTXO는 미사용 잔액으로서 {조각을 가지고 있는 주소  , 코인의 개수} 가 들어있습니다. 그런데 이 조각이 하나만 있는것이 아니라 여러개의 UTXO를 가지게 됩니다.

ex)  bob의 UTXO [ { account: "Bob", amount: 5 }, { account: "Bob", amount: 3 }, { account: "Bob", amount: 2 } ] bob의 총 amount 값 = 10

 

이런식으로 UTXO 를 저장하게됩니다.  이러한 구조를 사용하는 이유는 블록체인의 철학적 개념이 들어가는데

 

1. 이것을 가지고 있었다 (TxIn)

2. 이것을 누구에게 전달하겠다 (TxOut)

3. 가지고 있는 주소변경 (결과)

 

TxIn 과 TxOut 

 

TxIn

 

TxIn 은 내가 이 UTXO를 가지고 있었다 라는 기록으로서 잔액을 가지고 있는게 아닌 이 트랜잭션에서 사용할 자금의 출처(UTXO)를 참조” 그전 트랜잭션의 ID 와 그 트랜잭션 안에서 몇번째 출력이였는지를 참조하여 내가 이 기록을 사용할 수 있음을 인증하게됩니다.

export class TxIn {
  txOutId?: string; // 내가 사용하려는 UTXO가 나왔던 트랜잭션의 ID (해시값) 
  txOutIndex: number; // 그 트랜잭션 안에서 몇 번째 출력이었는지
  signature: SignatureInput; // 내가 이 입력을 사용할 수 있다는 증거
}

 

 

TxOut 

 

TxOut 은 이러한  TxIn 으로 조회한 UTXO를 통하여 이것을 상대방에게 전달하겠다. 를 의미합니다. 한 트랜잭션에서는 여러개의 Txout 가 존재할 수 있으며 

export class TxOut {
  account: string; // 받을 사람 (공개키 or 주소)
  amount: number; // 얼마를 줄 것인지
}

 

블록체인은 이러한 거래 철학을 가지고 있기 떄문에 UTXO는 조각처럼 나뉘어서 관리되게 됩니다. 

3. Transaction pool 

txin 과 txout 을 이용하여 잔액을 조회하고 트렌젝션을 일으켰습니다. 그렇지만 이 트렌젝션이 일어났다고 바로 거래의 내용이 적용이 되는것이 아닙니다.(아직 블록에서 채굴되지 않음 실제 거래는 적용이 안됨!) 그래서 이 트렌젝션이 일어났음을 임시저장할 공간이 필요하게 되었습니다. 그게바로 transaction pool 입니다.

 

트렌젝션의 구조

export class TxIn {
    txOutId?: string // 이전 트랜잭션의 ID
    txOutIndex: number; // 그 트랜잭션 안에서 몇 번째 출력이었는지
    signature: SignatureInput // 내가 이 입력을 사용할 수 있다는 증거
}

export class TxOut {
    account: string // 받을 사람
    amount: number // 얼마를 줄 것인가
}
export class TransactionRow {
    txIns: TxIn[]; // 내가 어떤 기록을 남기고 있는지
    txOuts: TxOut[]; // 그걸 누구에게 넘길건지
    hash?: string; // 트랜잭션 식별자
}

 

// 트랜잭션 저장소
export type TransactionPool = TransactionRow[];

 

정리 

 

아직 블록에 포함되지 않은 트랜잭션들을 보관 이 풀에 있는 트랜잭션들이 검증되고 정리된 후 블록에 포함됨 그 후 트랜잭션 상태를 실시간으로 분리