Notice: fwrite(): Write of 117 bytes failed with errno=28 No space left on device in /var/www/html/uzcms/t8ledsnow.com/incs/data.php on line 113 파이썬으로 배우는 우리 카지노체인 구조와 이론
매거진 개발실습
라이킷 5 댓글 공유 작가의 글을 SNS에 공유해보세요

You can make anything
by writing

C.S.Lewis

안녕하세요 스크립토 6기 박세연입니다. 비트코인 네트워크의 목적은 트랜잭션입니다. 트랜잭션은 비트코인에서 거래를 하는 경우 송금을 하는 사람의 주소, 받는 사람의 주소, 수수료 등의 정보를 담은 것입니다. 트랜잭션을 완성하기 위해서는 서명을 검증해야하고 잔액(UTXO)도 확인해야하며 우리 카지노에 트랜잭션을 담고 해당 우리 카지노이 채굴되는 등의 여러 과정이 필요합니다. 이번 글에서는 트랜잭션의 구조와 트랜잭션을 검증하는 방법에 대해 공부한 내용을 정리했습니다.

출처: 조성현, 이광성, 박혜리. 파이썬우리 카지노 배우는 블록체인 구조와 이론. 위키북스, 2019.


1. 우리 카지노의 구조

우리 카지노에는여러정보가포함된다.우리 카지노의입력부에는자신의UTXO가리키는포인터와전자서명이들어있고출력부에는수신자의공개키해시와송금할금액이들어있다.


1) 이중 지급 문제

이중지급은동일한UTXO여러사람에게송금하는것을말한다.우리가현재사용하는계좌와돈우리 카지노비유하면계좌의잔액이1000원인데,1000원우리 카지노1000원짜리물건2개를동시에결제하는것이다.(물론실제로가능한일을아니지만)실제로는동시에결제하는것은불가능하고,하나에대해1000원을결제한순간계좌에서1000원이빠져나가기때문에다른물건을경우엔잔액이부족하다는알림이오게된다.하지만비트코인에서는어떨까?

비트코인에서누가누구에게돈을보냈다는정보는우리 카지노에담기게되는데,우리 카지노은우리 카지노에담겨서해당우리 카지노이채굴되기전까지는유효한우리 카지노이다.앞의예시를블록체인우리 카지노설명하면,물건을사는우리 카지노모두채굴되기전까지는유효한상태인것이다.하지만우리 카지노중에서하나가채굴되면나머지하나는이중지급우리 카지노이된다.,해당우리 카지노은거부되는것이다.


2) 우리 카지노 데이터 구조


우리 카지노 데이터 구조우리 카지노 데이터 구조

우리 카지노의구조는크게입력부와출력부로나뉘는데,여기서입력부의Script Sig다른사람들이전자서명을검증할상용하는공개키가있고,출력부의Script PubKey수신자의공개키해시값이다.우리 카지노데이터가우리 카지노의특정우리 카지노에저장될,특정우리 카지노을찾기위해서는우리 카지노의고유ID이용한다.고유아이디는우리 카지노에담긴위의여러데이터들의해시값이다.



2. 전자서명 생성

앞의우리 카지노데이터구조의Script Sig부분에대해자세히알아보자.전자서명이라는것은AB에게송금을하면, AUTXO소유자가B것우리 카지노바뀌게되는데,UTXOB사용할권한이있다는것을증명하기위한것이다.

보통의거래와다르게생각해야할점이,실제물리적인돈이아니라가상화폐인비트코인이므로AB에게송금을한다는것은어떤화폐를'전달'하는개념이아니다. A소유인UTXO소유권을거래에이용할금액만큼을B소유로변경하는것이비트코인에서의거래라고생각하면이해하기쉽다.

그림 1그림 1

위의 그림우리 카지노 대략적인 설명을 해보자면,

1.처음10BTC(UTXO)A소유

2.UTXOB에게송금하는우리 카지노이생성되고,우리 카지노의출력부의Script PubKey에는B개키해시값이담긴다.

3.이제10BTCB소유이다.

4.이번에는B다시자신의10BTC(UTXO)C에게송금하는우리 카지노을생성하려고한다.이때,우리 카지노의입력부에전자서명을생성하는데,두번째우리 카지노의Script Sig에는B자신의개인키와메시지를이용해생성한전자서명과공개키를기록한다.

입력부의Script SigUTXO소유자가해당UTXO사용하겠다고하고,자물쇠를푼다는의미로언로킹(unlocking)스크립트라고한다.전자서명에포함되는데이터들은내용이보호된다.따라서전자서명이완료된후에는대상들의내용을바꿀없다.반대로출력부의Script PubKey로킹(locking)스크립트라고한다.쉽게생각하면로킹스크립트(Script Pubkey)UTXO소유자를바꾼후, UTXO소유자의공개키해시로잠그고,다시UTXO사용하는우리 카지노이생성되었을,언로킹스크립트(Script sig)아래설명할검증스크립트를이용해서잠금을해제한다고생각하면된다.



3. 전자서명 검증

우리 카지노을만드는사람(송금하는사람)전자서명을생성하고,우리 카지노을받은사람(수신자)전자서명을검증한다.전자서명을검증하는경우,그림1에서의Script PubKeyScript Sig이용한다. SCript Sig검증할우리 카지노의입력부,그림1에서는BC에게송금하는우리 카지노에기록되어있고, Script PubKeyUTXO출력부에기록되어있다.


검증 스크립트검증 스크립트

* sig-r, sig-s무엇인가?

해당우리 카지노데이터전체를직렬화한데이터가서명할메시지m해당하고,메시지에

Double-SHA-256우리 카지노해시값을계산한다.다음ECDSA알고리즘의절차대로(그림1B)

개인키로메시지해시값에서명을해서구한값이(s, r) = sig(hash(m))이다.값이sig-r, sig-s

되는것이다.

검증스크립트는OP코드로구성되는데OP코드는각각의기능이있다.

OP_DUP:스택의 상위 아이템 복제

OP_HASH160:스택의 상위 아이템에 Double SHA-256과 RIPEMD160 해시 수행

OP_EQUALVERIFY:스택의 상위 두 개의 아이템을 비교OP_CHECKSIG:비교해서 같으면 TRUE 다르면 FALSE

이제 이 검증 스크립트를 왼쪽에서 오른쪽우리 카지노 스택에 넣거나 빼면서 스크립트를 검증하는 것이다.

검증 스크립트 절차검증 스크립트 절차

1.먼저 비어있는 스택에 sig-r, sig-s, Publick Key를 차례대로 담는다.

2. OP_DUP:현재 스택의 상위 아이템(Public Key)를 복제한다.

3. OP_HASH160:현재 스택의 상위 아이템(Public Key)의 해시값을 계산한다.

4.그 다음 아이템인 PubKey Hash를 스택에 넣는다.

5. OP_EQUALVERIFY:스택의 상위 아이템 두개를 비교해서 같으면 다음우리 카지노 진행한다. 현재 스택의 top에는 PubKey Hash가 있고, 그 다음 요소와 동일하므로 다음우리 카지노 진행한다.

6. OP_CHECKSIG:스택에서 Publick Key와 sig-r, sig-s를 꺼내서 ECDSA알고리즘우리 카지노 전자서명을 검증하고, 그 결과가 참이면 스택에 TRUE만 남고 유효한 전자서명이라고 검증이 완료된다.



4. 적정 거래 수수료

비트코인의 트랜잭션에서는 또 다른 개념인 수수료가 존재한다. 여기서 수수료란, 생성한 트랜잭션이 승인되기 위해서는 블록을 채굴하는 채굴자에게 지급해야하는 금액을 말한다. 평균 거래 수수료는 비트코인의 가격, 채굴자들의 해시파워 등의 영향우리 카지노 그 값이 특정한 값우리 카지노 정해지지 않고 변화한다.



5. Pay-to-Script Hash (P2SH)

지금까지 설명한 우리 카지노에서는 출력부에 수신자의 공개키 해시(Pubkey Hash)를 기록했다. 이러한 형태를 Pay-to-Publick-Key-Hash(P2PKH) 방식이라고 한다. 수신자의 공개키 해시에 페이(pay)한다는 의미이다.

Pay-to-Script Hash(P2SH)는 이름 그대로 공개키 해시가 아니라 스크립트 해시값을 기록하는 방식이다. 일반적우리 카지노 다중 서명 기능에 이용한다.

브런치 글 이미지 5

이전에 설명했던 지갑은 개인키로 공개키를 생성하고, 그 공개키로 지갑주소를 만들지만, P2SH는 Redeem Script를 먼저 만들고 이 스크립트의 해시 값을 Base58Check로 인코딩해서 지갑주소를 만든다. 이 경우에 Script PubKey의 구조에 따라 Script Sig도 public key가 아니라 Redeem Script를 포함한다.



이번 우리 카지노 부분에서는 실습 코드보다 우리 카지노이 생성되고 어떻게 검증이 되는지에 중점을 두고 공부해보았습니다. 다음 글에서는 채굴에 대해 공부한 내용을 가지고 오겠습니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari

브런치 로그인