Bitcoin Transaction (비트코인거래)

Bora Yeon
Bora Yeon
Sep 3, 2018 · 8 min read

비트코인 거래는 복식기입법(Double-Entry Bookkeeping)으로서 항상 Input과 Output이 있다.

오늘은 비트코인 거래의 Input,Output에 대해서 알아볼 예정이다.

거래를 이야기를 하기 앞서, UTXO의 기본적인 개념에 대해서 알아보자.

UTXO

우선, UTXO는 unspent transaction output의 약자다. 즉, 소비되지 않은 거래 출력 값이다. UTXO의 특징은 정수 단위로 표시된 분할할 수 없는 값이다. 블록에 기록되며 전체 네트워크에서 유효한 것으로 인식된다.

예를 들어, A에게 5btc를 송금하려고 하면, 지갑에서 내 주소로 받은 모든 사용가능한 UTXO를 추적한다. 5BTC가 들어 있는 UTXO가 추적이 됐다면 해당 UTXO를 사용함으로 송금이 완료된다. 만약, 20BTC,3BTC,4BTC가 들어 있는 UTXO 3개가 추적이 되었다면 방법 2개가 될 수 있다.

첫 번째, 20BTC가 들어 있는 UTXO(1)를 전체 사용해서 5BTC를 송금하고 14BTC가 들어 있는 UTXO(2)를 다시 본인 주소로 받게 된다. 그리고 A는 5BTC가 들어 있는 UTXO를 받게 된다.

두 번째,3BTC와 4BTC가 들어있는 UTXO(3)과 UTXO(4)를 같이 전체 사용해서 5BTC를 송금하고 2BTC가 들어 있는 UTXO(5)를 다시 본인 주소로 받게 된다. 그리고 A는 5BTC가 들어 있는 UTXO를 받게 된다.

실제 거래만 하시는 분에게는 UTXO가 그렇게 중요한 내용은 아니라고 생각할 수도 있다. 왜냐면 지갑에서 자동적으로 UTXO를 추적해서 선택해주기 때문이다. 그러나 UTXO가 거래 수수료에도 영향을 미치니 알고 있는게 도움이 될 것이다.

위 설명에서는 수수료를 포함하지 않았지만 실제 거래에서는 수수료가 포함된다. 그럼 거래 수수료는 UTXO가 많을수록 높은 걸까? 거래 수수료는 거래금액이 아닌 거래 크기에 비례한다. 사용자 기본 수수료는 0.0001BTC/1,000byte이다. 거래 Input에 UTXO수가 많을수록 거래 크기 (Transaction Size)가 커지기 때문에 거래 수수료가 높아진다.

Input, Output

이제 본격적으로 거래의 Input, Output에 대해 이야기해보자.

Input 항목에서 돈을 받고, Output 항목에서 돈을 보내는 개념이 아닌 거래의 수입원천(Input)과 지출액(Output)을 기록하는 개념이다. 즉, 금액을 지불 (지급) 할 때는 먼저 지출하고자 하는 코인의 수입원천을 설명한 다음 Output항목에 지출 할 금액을 지정합니다. 그리고 Output에 수신자의 공개키(Public Key)를 스크립트 형식으로 입력한 후에 Input에 자신의 개인키 서명 (scriptSig)으로 승인하면 트랜잭션이 네트워크로 브로드 캐스트된다.

Bitcoin Core의 인터페이스 (getrawtransaction 및 decodeawtransaction)를 사용하여 트랜잭션을 디코드하고 구조을 살펴볼 수 있다.

그럼 먼저 Output의 구조에 대해 알아보자.

“value” 는 비트코인의 양이다.

“ScriptPubKey”(locking script) 는 출력값을 사용할 수 있는 조건을 명시한 스크립트이다. 즉, 수신자 이외에 그 누구도 열지 못하도록 잠그는 스크립트이다. 일반적으로 수신자의 Private Key로 풀 수 있다.

다음으로 Input의 구조에 대해 알아보자.

“txid”는 사용할 UTXO가 포함한 (이전) 거래의 해쉬값이다.

“vout”(Output index)는 사용할 UTXO의 index이다. 즉, 이번에 거래에서 사용할 UTXO는 몇번째 UTXO인지 말하는 것이다. 첫 사용이라면 “vout”=0이다.

“scriptSig”(Unlocking Script)는 UTXO를 사용하기 위한 조건을 충족하는 스크립트이다. 즉, 다른 사람 또는 보상으로부터 받은 UTXO를 사용하기 위해 잠금 해제하는 스크립트이다.이전의 Locking Script와는 반대의 개념이다.

"sequence"는 현재 네트워크에서 사용되지 않는다.

위 그림을 보면 특이한 점을 발견했을 것이다. 바로 input에 금액이 명시 되어있지 않는 것이다. 그렇다면 얼마를 보내는지 어떻게 알 수 있을까? 앞서 말했듯이, Input 에는 수입원천을 기록하는 개념이라고 했다. 이전 거래기록을 통해 사용할 UTXO를 포함하는 txid에서 보낼 금액을 알 수 있다.

SCRIPT

위에서 짧게 설명한 스크립트에 대해서 자세히 알아보자.

스크립트는 거래에서 또 다른 중요한 기술입니다. 각 트랜잭션의 각 Output은 정확하게 얘기하자면 주소가 아닌 스크립트를 사용하는 것입니다. 비트코인 거래 스크립트 언어는 포스 언어처럼 구성되고 역폴란드식 표기법(reverse-polish notation)을 따르는 스택 기반의 실행 언어다.

트랜잭션의 유효성 검증은 스크립트에 따라 다릅니다. 현재 잠금 스크립트(locking script)와 ​잠금 해제 스크립트 (unlocking script)의 두 가지 유형에 의존한다. UTXO의 locking script은 내가 이 script를 푸는 사람에게 권한을 준는 것이고, 입력값의 unlocking script 은 내가 script를 풀었으니 권한을 획득할 수 있다.

비트코인 Pubkey 스크립트는 현재 P2PKH (Pay-to-Public -Key-Hash)의 두가지 유형을 일반적으로 사용하고 있다.가장 일반적으로 사용되는 것은 P2PKH (Pay-to-Public -Key-Hash)이다.

P2PKH(Pay-to-Public-Key-Hash)

P2PKH (Pay-to-Public-Key-Hash)는 수신자의 공개키를 해싱하여 지불하면, 수신자는 자신의 개인키로 서명함으로 output을 소비할 수 있다. 스크립트 언어를 보기전에 간단한 예제에 적용 해 보자.

위와 같이 스택으로 verification이 검증된다.

실제 P2PKH (Pay-to-Public-Key-Hash)는 실행되는 모습은 다음과 같다.

스택에 모두 일치하면 TRUE값이 도출되며 비트코인을 소비할 수 있게 되는것이다.

P2SH (Pay-to-Script-Hash)

P2SH (Pay-to-Script-Hash)의 기본적인 개념은 P2PKH (Pay-to-Public-Key-Hash)와 같다. 그러나 P2SH (Pay-to-Script-Hash)는 하나의 public key를 해싱하는 것이 아닌 여러 공개키 함께 해싱하여 redeem 스크립트를 출력하는 개념이다. 아래 그림을 보면, 여러 공개키 해싱해서 그대로 사용하지 않고 redeem 스크립트를 사용하는 이유를 알 수 있다.

Table 7–1과 Table 7–2의 Locking Script만 비교해보면 Table 7–2가 간단해보인다. 무엇보다 중요한 건 Table 7–1처럼 public key (공개키)를 많이 쓰게 되면 거래 크기(Transaction Size)가 커져서 거래 수수료가 높아진다. 반면 redeem 스크립트를 사용하게 되면 거래 수수료를 훨씬 절감할 수 있다.

그렇다면 왜 돈이 많이 드는 스크립트를 만들어야 했을까?

P2SH (Pay-to-Script-Hash)는 여러 공개키, 개인키가 필요한다.물론,개인키의 개수는 공개키의 개수보다 적거나 같을 수 있다. 즉,한명일 수도 있지만 한명이 아닌 여러명이 같이 거래를 승인할 수 있는 절차인 것을 알 수있다. 공동사업자 또는 회사에서 여러 단계 승인이 필요한 결제를 처리할때 사용할 수 있다.

또한 사용 스크립트의 공개 키를 난독화할 수 있고 그리고 많은 개인키가 필요한 만큼 한층 더 안전하게 사용할 수 있다.

참고문헌 2017 Mastering Bitcoin: Programming the Open Blockchain ,안드레아스 M. 안토노풀로스.2017.

    Bora Yeon

    Written by

    Bora Yeon

    Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
    Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
    Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade