파이썬우리 카지노 배우는
우리 카지노 구조와 이론
우리 카지노(transaction)
안녕하세요 스크립토 6기 박세연입니다. 비트코인 네트워크의 목적은 트랜잭션입니다. 트랜잭션은 비트코인에서 거래를 하는 경우 송금을 하는 사람의 주소, 받는 사람의 주소, 수수료 등의 정보를 담은 것입니다. 트랜잭션을 완성하기 위해서는 서명을 검증해야하고 잔액(UTXO)도 확인해야하며 우리 카지노에 트랜잭션을 담고 해당 우리 카지노이 채굴되는 등의 여러 과정이 필요합니다. 이번 글에서는 트랜잭션의 구조와 트랜잭션을 검증하는 방법에 대해 공부한 내용을 정리했습니다.
출처: 조성현, 이광성, 박혜리. 파이썬우리 카지노 배우는 블록체인 구조와 이론. 위키북스, 2019.
1. 우리 카지노의 구조
우리 카지노에는여러정보가포함된다.우리 카지노의입력부에는자신의UTXO를가리키는포인터와전자서명이들어있고출력부에는수신자의공개키해시와송금할금액이들어있다.
1) 이중 지급 문제
이중지급은동일한UTXO를여러사람에게송금하는것을말한다.우리가현재사용하는계좌와돈우리 카지노비유하면내계좌의잔액이1000원인데,이1000원우리 카지노1000원짜리물건2개를동시에결제하는것이다.(물론실제로가능한일을아니지만)실제로는동시에결제하는것은불가능하고,하나에대해1000원을결제한순간내계좌에서1000원이빠져나가기때문에다른물건을살경우엔잔액이부족하다는알림이오게된다.하지만비트코인에서는어떨까?
비트코인에서누가누구에게돈을보냈다는정보는우리 카지노에담기게되는데,이우리 카지노은우리 카지노에담겨서해당우리 카지노이채굴되기전까지는유효한우리 카지노이다.앞의예시를블록체인우리 카지노설명하면,두물건을사는우리 카지노모두채굴되기전까지는유효한상태인것이다.하지만두우리 카지노중에서하나가채굴되면나머지하나는이중지급우리 카지노이된다.즉,해당우리 카지노은거부되는것이다.
2) 우리 카지노 데이터 구조

우리 카지노의구조는크게입력부와출력부로나뉘는데,여기서입력부의Script Sig는다른사람들이전자서명을검증할때상용하는공개키가있고,출력부의Script PubKey는수신자의공개키해시값이다.우리 카지노데이터가우리 카지노의특정우리 카지노에저장될때,특정우리 카지노을찾기위해서는우리 카지노의고유ID를이용한다.이고유아이디는우리 카지노에담긴위의여러데이터들의해시값이다.
2. 전자서명 생성
앞의우리 카지노데이터구조의Script Sig부분에대해더자세히알아보자.전자서명이라는것은A가B에게송금을하면, A의UTXO의소유자가B의것우리 카지노바뀌게되는데,이때이UTXO를B가사용할권한이있다는것을증명하기위한것이다.
보통의거래와다르게생각해야할점이,실제물리적인돈이아니라가상화폐인비트코인이므로A가B에게송금을한다는것은어떤화폐를'전달'하는개념이아니다. A의소유인UTXO의소유권을거래에이용할금액만큼을B의소유로변경하는것이비트코인에서의거래라고생각하면이해하기쉽다.

위의 그림우리 카지노 대략적인 설명을 해보자면,
1.처음10BTC(UTXO)는A의소유
2.이UTXO를B에게송금하는우리 카지노이생성되고,이우리 카지노의출력부의Script PubKey에는B의공개키해시값이담긴다.
3.이제10BTC는B의소유이다.
4.이번에는B가다시자신의10BTC(UTXO)를C에게송금하는우리 카지노을생성하려고한다.이때,이우리 카지노의입력부에전자서명을생성하는데,두번째우리 카지노의Script Sig에는B는자신의개인키와메시지를이용해생성한전자서명과공개키를기록한다.
입력부의Script Sig는UTXO의소유자가해당UTXO를사용하겠다고하고,자물쇠를푼다는의미로언로킹(unlocking)스크립트라고한다.전자서명에포함되는데이터들은그내용이보호된다.따라서전자서명이완료된후에는그대상들의내용을바꿀수없다.반대로출력부의Script PubKey는로킹(locking)스크립트라고한다.쉽게생각하면로킹스크립트(Script Pubkey)로UTXO의소유자를바꾼후, UTXO를그소유자의공개키해시로잠그고,다시그UTXO를사용하는우리 카지노이생성되었을때,언로킹스크립트(Script sig)로아래설명할검증스크립트를이용해서잠금을해제한다고생각하면된다.
3. 전자서명 검증
우리 카지노을만드는사람(송금하는사람)은전자서명을생성하고,우리 카지노을받은사람(수신자)은전자서명을검증한다.전자서명을검증하는경우,그림1에서의Script PubKey와Script Sig를이용한다. SCript Sig는검증할우리 카지노의입력부,그림1에서는B가C에게송금하는우리 카지노에기록되어있고, Script PubKey는UTXO의출력부에기록되어있다.

* sig-r, sig-s는무엇인가?
해당우리 카지노데이터전체를직렬화한데이터가서명할메시지m에해당하고,이메시지에
Double-SHA-256우리 카지노해시값을계산한다.그다음ECDSA알고리즘의절차대로(그림1의B의)
개인키로메시지해시값에서명을해서구한값이(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)는 이름 그대로 공개키 해시가 아니라 스크립트 해시값을 기록하는 방식이다. 일반적우리 카지노 다중 서명 기능에 이용한다.

이전에 설명했던 지갑은 개인키로 공개키를 생성하고, 그 공개키로 지갑주소를 만들지만, P2SH는 Redeem Script를 먼저 만들고 이 스크립트의 해시 값을 Base58Check로 인코딩해서 지갑주소를 만든다. 이 경우에 Script PubKey의 구조에 따라 Script Sig도 public key가 아니라 Redeem Script를 포함한다.
이번 우리 카지노 부분에서는 실습 코드보다 우리 카지노이 생성되고 어떻게 검증이 되는지에 중점을 두고 공부해보았습니다. 다음 글에서는 채굴에 대해 공부한 내용을 가지고 오겠습니다.