어휘 정리부터 먼저 하고 시작하겠습니다.
A : A라는 사람
A개인키 : A가 가진 비트코인 주소의 열쇠
A주소 : A가 가진 비트코인 주소. 예) 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
트랜잭션 : 비트코인 네트워크에서 코인을 전송한다는 약속된 전송서식.
브로드캐스트 : 네트워크에 연결된 다른 PC로 데이터를 전달하는 것. 네트워크 망을 통해 결국 모든 PC에 전달이 됨.
최초에 생긴 블록에서 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa(이하 A주소) 에 50BTC를 넣어주었습니다.
이 A주소에서 B주소로 코인을 보낸다는 명령을 브로드캐스트합니다.
이 명령을 전달받은 PC는 다음과 같은 두가지 고민을 해결해야합니다.
A가 돈이 있는거야?
A가 보낸거 맞아?
1의 해결은 간단합니다. 이미 블록을 받은 상태이기 때문에 블록에 A주소로 50BTC가 있다고 되 있으니까요.
2를 해결하기 위해 트랜잭션이라는 구조를 사용합니다.
트랜잭션의 구조
전송번호 (transaction id, txid)
이전 전송번호 : 나에게 코인을 보내준 전송번호. (transaction id, txid)
서명 : 내가 주소의 주인이 맞다는 서명. (암호화 서명. scriptSig)
받는 주소
받는 금액
실제로는 위와 조금 다른데 쉬운 이해를 위해 구조를 단순화하고 약간 변형했습니다.
자, 이제 다시 시작하겠습니다.
처음에 생긴 블록에 포함된 전송정보 beforetxid를 조회해보면 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa 에 50이 있다고 나옵니다.
다음과 같은 단계를 거쳐서 트랜잭션을 만듭니다.
1단계
전송번호 : 없음
이전 전송번호 : beforetxid
서명 : 없음
받는 주소 : B주소
받는 금액 : 49.5BTC
여기 보면 받는 금액이 49.5BTC 이군요. 50BTC 가 있는데 왜 49.5를 보내지? 0.5는 어디로 갔지?
여기서 부족한 0.5BTC가 바로 채굴자들에게 추가로 주어지는 수수료입니다. 채굴과 수수료에 대해서는 다른 파트에서 설명하겠습니다.
1단계로 트랜잭션을 만들고 이 트랜잭션을 통째로 SHA256 해쉬를 합니다. 그러면 비로소 전송번호 nowtxid가 나옵니다.
2단계
전송번호 : nowtxid
이전 전송번호 : beforetxid
서명 : 없음
받는 주소 : B주소
받는 금액 : 49.5BTC
2단계로 트랜잭션을 만들었습니다.
여기까지 되면 트랜잭션의 기본은 됐습니다.
그런데 이것만으로는 부족합니다. 이 정보로는 "A가 50BTC가 있냐?" 에 대한 정보는 있지만 "그 50BTC의 주인이 너 맞냐?"에 대한 증명이 부족합니다.
왜냐하면 2단계 트랜잭션까지는 주인이 아니어도 쉽게 만들 수 있거든요.
블록에 보면 beforetxid 들어있고, 거기에 A주소도 나와있고, 금액도 나와있고, 받는 주소만 C주소로 하면 2단계 트랜잭션을 쉽게 만들 수 있습니다.
그러므로 "내가 이 코인의 주인이 맞아" 라는 과정이 들어갑니다. 이것을 암호화서명이라고 합니다.
그런데 이 과정에서 SHA256이라는 단방향 암호화를 하는 것이 아니라 복호화가 가능한 양방향암호화를 합니다. 왜? 주인이 맞는지 검증을 해야하니까요.
암호화서명
A개인키를 이용해서 nowtxid를 암호화 함.
A주소를 이용해서 복호화하면 nowtxid가 나옴.
3단계
전송번호 : nowtxid
이전 전송번호 : beforetxid
서명 : 있음
받는 주소 : B주소
받는 금액 : 49.5BTC
이렇게 해서 3단계 트랜잭션이 완성이 되고 이를 브로드캐스트합니다.
이렇게 브로드캐스트 받은 트랜잭션을 다른 PC들이 검증합니다.
검증방법
서명을 읽어옴.
서명을 A주소로 복호화함
nowtxid가 나옴.
이거 주인 A 맞네~ 확인 완료.
이렇게 되어서 이 트랜잭션을 만든 사람은 A가 맞다고 인정되어지고 이 트랜잭션이 블록에 올라가면 기존 beforetxid의 코인은 사용불가능하게 되고 nowtxid만 인정이 되어서 이 코인은 B가 사용할 수 있게 됩니다.