ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 블록체인이란? 비트코인 #2
    Study/BlockChain 2021. 7. 4. 15:54

    비트코인 #1 : https://down-develope.tistory.com/22

     

    4. Transaction (TX) 이란?

    은행에서는 잔고를 계좌로 관리합니다. 그래서 만약 나의 통장에 얼마가 있는지 은행에 조회를 요청하면, 은행은 계좌를 조회하여 잔고를 확인합니다. 하지만 비트코인에서는 이런 돈 액수를 바로 확인할 수있는 잔고가 존재하지 않습니다. 대신 Transcation(TX)만이 존재합니다.

    TX는 앞 포스팅에서 언급하였듯이 비트코인에서 거래내역을 의미합니다. 비트코인은 중앙화 시스템이 없기때문에 이 TX들 가지고 진위여부를 판단하고 또 다른 TX의 Input으로 활용합니다.

    예를들어 철수가 영희한테 1BTC를 송금했다고 가정하겠습니다. 그럼 "철수->영희 1BTC"라는 TX가 블록체인에 기록되고 나중에 만약 영희가 0.5BTC를 길동이에게 송금하고자 하면, 은행처럼 계좌잔고로부터 돈을 가져오는것이 아닌 "철수->영희 1BTC" TX를 Input으로 사용하여 송금합니다. 

     

     

    source: https://docs.google.com/presentation/d/13SOZqHzLRryyFXw26CCE89lKMa8X9YAhdTFgXdw0a1s/view#slide=id.p

    위 이미지의 상황을 보겠습니다. 먼저 #1 TX에서 Alice에게 25coins이 송금됩니다. 그런 다음 Alice는 Bob에게 17 coins을 송금하는데 coin의 출처는 #1 TX로 부터 가져오고 "Alice->Bob 17coins" 라는 #2 TX를 생성합니다. 그럼 마찬가지로 Bob도 이 TX를 가지고 돈을 Charlie에게 송금할수 있는것입니다.

    그런데 마지막 TX를 보면 #3 TX에는 8코인 밖에 존재하지 않는데 총 18코인을 송금하는것을 확인할 수 있습니다. 이러면 앞의 TX와 충돌하게되고 Invalid한 TX가 되므로 블록체인에 기록되지 않습니다.

    그리고 매번 거래때마다 모든 TX를 뒤질수는 없으므로 최적화를 하기위해 UTXO를 저장합니다. UTXO는 unspent tx output으로 아직 사용되지 않은 코인의 합을 의미합니다. 어떤 지갑주소에 대해 UTXO를 기록해두어 빠르게 TX를 비교확인을 가능하게 합니다. 

     

     

    그런데 이런 TX를 아무나 Input으로 사용하고 생성하면 안되므로 여기서 디지털서명방식을 사용합니다. 어떤 TX를 output으로 생성할때 "이 코인은 지갑주소 X에 속하게 되고, X의 공개키와 서명이 있어야 사용가능하다" 라는 잠금장치를 걸어둡니다. 이것을 ScriptPubKey라고 합니다. ScriptPubKey는 TX를 자물쇠로 잠그는 역할을 합니다.

    그리고 지갑 X의 주인이 UTXO로부터 코인을 사용하고자 할때 ScriptSig를 제공합니다. ScriptSig에는 X의 공개키와 서명이 포함되고 있고 자물쇠를 푸는 열쇠 역할을 합니다.

     

     

     

    TX가 실제로 어떤구조인지 살펴보겠습니다. 위 이미지를 보면 TX는 총 3가지로 나뉩니다.

    1.MetaData, 2.Inputs, 3.Outputs 

    MetaData에는 TX에 관한 버전, Input, output 개수 등등 정보가 들어가고, Input에는 사용될 TX넘버, TX의 잠금을 해제할 ScriptSig가 포함됩니다. Output도 마찬가지로 잠금을 할 ScriptPubKey가 포함되고 보낼 코인의 개수가 기록됩니다.

     

     

     

    그럼 구체적으로 어떤 순서로 TX 스크립트가 처리되는지 보겠습니다. 위 이미지를 TX스크립트 처리를 나타냅니다. 위에서 아래순서로 차례대로 보면, 먼저 스택에 TX속 디지털서명, 공캐기가 push되고 그다음 Duplication 연산자로 공개키가 그대로 복제되어 stack에 쌓입니다.

     

     

    그 다음 해시함수로 인해 스택 top에 존재하는 복제된 공개키가 지갑주소로 변환됩니다. 그 다음 TX속 지갑주소를 스택에 쌓아주고 2개의 지갑주소가 일치하는지 검사하여 공개키와 지갑주소가 유효한지 검증합니다. 만약 일치하면 2개의 지갑주소는 pop되어 사라지고, 마지막으로 공개키로 서명을 검증하여 서명이 유효한지 검사한 뒤 종료됩니다.

     

     

    아래 GIF는 위 과정을 애니메이션화한것으로 참고하시길 바랍니다.

    source https://medium.com/softblocks/segregated-witness-for-dummies-d00606e8de63

     

     

     

     
     
     

    'Study > BlockChain' 카테고리의 다른 글

    블록체인이란? 비트코인 #3  (0) 2021.07.05
    블록체인이란? 비트코인 #1  (0) 2021.07.03

    댓글

Designed by Tistory.