카테고리 없음
Blockchain Transaction 2
tp134679
2025. 5. 19. 09:39
<목차>
1. unspent (Unspent Transaction Output)
2. Transaction 실행 흐름 정리
1. unspent (Unspent Transaction Output)
UTXO
txin 과 txout 으로 내가 가지고있는 미사용잔액 (UTXO) 를 사용하여 거래를 한후에 트랜잭션 풀에 담기게 됩니다.
그 후에 이 트랜잭션이 블록에 포함되고 채굴이 완료가 되면 그제서야 실제로 이러한 트렌젝션이 발생을 했고 결과와 결과로인한 상태를 업데이트를 해줘야했습니다. 잔액을 검증하기 위한 실제로 블록에 반영된 상태를 나타내는 데이터 구조 를 나타냅니다.
// UTXO 구조 => 너 얼마 남았네? 미사용 잔액 추적
export class UnspentTxOut {
txOutId: string; // 해당 UTXO가 포함된 트랜잭션 해시
txOutIndex: number; // 해당 UTXO의 트랜잭션 출력 인덱스
account: string; // UTXO 소유 계정
amount: number; // 잔액
}
// 미사용 객체 저장소
export type UnspentTxPool = UnspentTxOut[];
2. Transaction 실행 흐름 정리
단계 설명 오류 발생 가능성
1. UTXO 조회 | 지갑은 블록체인 상태를 스캔하거나 노드에서 UTXO 목록을 받음 | UTXO 인덱스가 오래되었거나 노드와 싱크 안 맞으면 오류 발생 |
2. UTXO 선택 | 필요한 금액만큼의 UTXO를 선택 (잔돈 계산 포함) | 너무 작은 UTXO만 있다면 수수료로 소모 불가능 (dust) |
3. TxOut 생성 | 수신자와 잔돈을 위한 출력값 구성 | 주소 형식 오류, 수신자 오타 등 |
4. 트랜잭션 생성 | TxIn과 TxOut을 묶어서 트랜잭션 구조 생성 | 구조가 이상하거나 필드 누락 |
5. 서명 | 각 TxIn에 대해 서명함 → 위변조 방지 | 개인키 손상, 서명 형식 불일치 |
6. 유효성 검증 | 노드가 서명, UTXO 존재 여부, 중복 사용 등을 검증 | 이미 사용된 UTXO일 경우 double spend로 거부됨 |
7. Mempool 전파 | 네트워크에 브로드캐스트 | 수수료가 너무 낮으면 Mempool에 무시될 수 있음 |
8. 블록 포함 | 채굴자가 유효한 트랜잭션을 블록에 포함 | 경쟁이 치열하거나 수수료 낮으면 오래 대기 가능 |
9. 블록 생성 | 트랜잭션 포함한 블록이 채굴되어 체인에 추가됨 | 블록 충돌(fork) 가능성 |
10. UTXO 업데이트 | 사용한 TxIn 제거, 새 TxOut을 새로운 UTXO로 등록 | 블록 리오그(Reorg) 시 롤백 발생 가능 |