본문 바로가기
Blockchain

[Blockchain] 비트코인 UTXO 뜻 원리

by 개발자 염상진 2022. 7. 7.

비트코인에서 잔액을 확인하기 위해서는 UTXO에 저장된 양을 보고 확인할 수 있습니다. UTXO(Unspent Transaction Outputs)란 소비되지 않은 거래 출력값을 의미합니다. UT비트코인 블록체인에서 트랜잭션의 구조를 먼저 이해해야 합니다.

 

비트코인 트랜잭션 구조

비트코인 트랜잭션은 Transaction Version, Inputs, Outputs, Lock Time 4부분으로 구성되어 있습니다. 

 

 

 

 

 

Transaction Version은 네트워크 상에서 트랜잭션 유형을 규정합니다. 버전 별로 트랜잭션의 구조가 조금씩 다르기 때문입니다. 노드 입장에서 버전에 따라 트랜잭션을 어떻게 읽어야 하는지 정의하는데 사용됩니다.

Lock Time은 트랜잭션의 마지막 데이터로 블록체인에 트랜잭션을 포함할 수 있는 시간을 지정합니다. 

Output는 잠금(Lock)과 값(Value)로 구성됩니다. 출력은 기본적으로 잠겨 있으므로 이를 풀 수 있는 키(Key)는 입력에 들어있습니다. Outputs의 값(Amount)은 사토시 단위의 비트코인 양을 의미합니다. 쉽게 생각하면 트랜잭션의 출력은 5만원권 지폐와 유사합니다. 물건을 구매할 때 5만원권을 잘라서 지불하지 않고 거스름돈을 받는 것 처럼 출력을 통해 새로운 출력을 생성합니다.

Output의 값은 자산을 의미하고 Input으로 잠겨있는 Output를 해제하여 값을 꺼낸 후 새로운 출력 생성하고 자산을 담게 됩니다. 즉 트랜잭션은 이전 출력을 해제하고 새로운 출력을 만드는 하나의 액션입니다. 이런 방식으로 다른 입력에 의해 생성되었고, 동시에 아직 해제되지 않은 출력들의 집합을 UTXO(Unspent Transaction Outputs)라 합니다. 비트코인에서는 이 UTXO를 보고 잔액을 유추하게 됩니다.

 

비트코인 전달 과정

UTXO는 쉽게 말해 잠겨있는 비트코인입니다. UTXO에 코인을 담아 놓고 트랜잭션이 발생할 때 마다 코인을 전달해야 하므로 UTXO에서 Output를 해제한 후 코인을 꺼내 지불해야 할 코인을 새로운 상자에 담아 전송합니다. 남은 코인은 새로운 상자에 담아 보관하게 됩니다.

 

 

 

Alice가 Bob에게 6BTC를 보내는 과정을 가정합니다. Alice는 10BTC이 담긴 UTXO를 가지고 있습니다. 트랜잭션(특정 거래)가 발생하면 10BTC가 담긴 Output를 해제한 후 2개의 Output를 생성합니다. 하나는 Bob에게 보내야 할 6BTC가 든 Output이며 나머지는 Alice에게 환불해줘야할 4BTC를 담은 Output입니다. 새롭게 생성된 Output는 Input에 의해 해제되지 않았기 때문에 UTXO가 됩니다. 

 

트랜잭션 Inputs, Outputs

비트코인 트랜잭션의 Input은 연결된 과거의 출력(Previous Output)을 가리키는 포인터(Prev. Tx ID + Tx Index)와 이를 해제할 키(ScriptSig)를 가지고 있습니다. Output은 잠금(ScriptPubkey)값(Amount)을 가지고 있습니다. 

트랜잭션을 받은 노드는 해당 트랜잭션 내에 들어있는 Input에서 ScriptSig를, Output에서는 ScriptPubkey를 추출합니다. ScriptSig와 ScriptPubkey는 연속된 정보를 담고 있으므로 이 후 이전 블록들에서 입력과 연결되어 있는 출력을 찾은 후 ScriptSig와 ScriptPubkey를 연결합니다. UTXO는 여러개로 출력값이 구성되어 있기 때문에 이전 출력값을 확인해야 합니다.

 

 

비트코인 스크립트 실행

노드는 추출한 ScriptSig와 ScriptPubkey를 추출해 <ScriptSig><ScriptPubkey> 형태의 스크립트를 완성합니다. 이 후 빈 스택을 사용해 스크립트를 실행합니다. 스크립트는 Op코드와 데이터를 일렬로 늘어놓은 형태입니다. 포인터는 Op코드와 데이터를 차례대로 가리키게 되는데, 데이터를 가리키면 스택에 넣고, Op코드면 스택에서 데이터를 꺼내는 방식으로 스크립트를 실행합니다. 

스크립트 실행이 완료되면 스택의 최상단에는 1 혹은 다른 값이 들어값니다. 1인 경우 해당 트랜잭션이 유효하다고 판단해 다른 노드들에게 트랜잭션을 전파하고 블록체인에 올라가게 됩니다. 트랜잭션은  다른 노드들에게 영향을 미치므로, 사전 점검을 위와 같은 방식으로 진행합니다. 

 

Pay To PubKey(P2PK) 스크립트

비트코인에서 UTXO의 잠금을 해제하는 방식 중 가장 간단한 스크립트는 P2PK입니다. 2개의 데이터와 하나의 Opcode만으로 구성되어있고, 비트코인 초기버전에 사용되던 방식입니다. 이 방식은 수신자의 공개키가 직접 노출되기 때문에 보안에 취약한 문제점을 가지고 있어 현재는 사용되지 않습니다. 

트랜잭션을 수신한 노드는 트랜잭션의 Input에서 ScriptSig를, Output에서 ScriptPubkey를 추출합니다. 좀 더 자세하게 들여다보면 ScriptSig는 <signature>을 가지고 있고, ScriptPubkey는 <public key><OP_CHECKSIG>를 담고 있습니다. OP_CHECKSIG는 Op코드로 서명이 공개키에 연결되는지를 확인합니다. 이를 조합해서 아래와 같은 스크립트가 생성됩니다.

 

 

스크립트를 실행할 때 가장 먼저 포인터는 signature(서명)을 가리킵니다. 서명은 데이터이므로 스택에 들어갑니다.

 

다음으로 포인터는 공개키를 가리킵니다. public key(공개키)도 데이터 이므로 스택에 넣습니다.

 

OP_CHECKSIG는 Op코드이므로 2개의 데이터를 스택에서 꺼냅니다. 

 

ECDSA(타원 곡선 디지털 서명 알고리즘)을 통해 signature을 검증합니다. 성공하는 경우는 1을 아닌 경우는 0을 스택에 넣습니다. 

 

검증을 마친 후 스택에 1이 들어있으면 유효한 트랜잭션으로 확인되면서 UTXO가 해제됩니다. 즉 해당 UTXO는 소비되고 해당 트랜잭션의 출력 목록에 의거해 새로운 UTXO가 생성됩니다. 

 

 

 

 

[Blockchain] 스마트 컨트랙트란?

블록체인 2.0인 이더리움이 주목받는 이유는 스마트 컨트랙트(Smart Contract) 덕분입니다. 스마트 컨트랙트는 블록체인 네트워크에 호스팅되어 실행되는 프로그램입니다. 미리 지정된 조건이 충족

about-tech.tistory.com

 

 

[Blockchain] 클레이튼(Klaytn) 블록체인 이란?

제3자의 개입 없이 모든 사람이 연결될 수 있고, 분산화된 형태로 데이터를 관리할 수 있게 됩니다. 중개자가 없으므로, 각 참여자들은 하나의 합의에 이르러야 이해관계 조정이 가능해지고, 전

about-tech.tistory.com

 

 

[Blockchain] 채굴(Mining)이란?

블록체인에서 채굴(Mining)이란 블록체인 네트워크 상에서 발생하는 트랜잭션들을 검증하고, 분산원장에 기록하는 행위를 통해 보상으로 암호화폐를 얻는 과정입니다. 땅에 묻혀 있는 광물을 캐

about-tech.tistory.com

 

댓글