비트코인 잠금 / 해제 스크립트관련 정리
잠금 스크립트(scriptpubey)와 해제스크립트(scriptsig)를 구글에 검색하면 해시위키 링크가 나오고 아래와 같이 정의 되어 있다.
잠금 스크립트는 누군가에게 비트코인을 줄 때 사용하고 해제 스크립트는 내가 받은 비트코인을 소비할 때 사용한다.
비트코인을 주면 주는 것이고, 줬으면 그냥 받는 것이지, 그것을 소비할때 해제스크립트를 사용한다는 말이 무슨 말일까?
이를 이해하려면 먼저, 블록체인 네트워크 특성에 대해 이해해야 한다.
블록체인 네트워크에서는 누군가에게 돈을 보낼때에는, 송금 내용이 담긴 트랙잭션을 네트워크상에 전파함으로서 진행이 된다.
누군가의 계좌로 돈을 입금해주고 잔액관리를 하는 은행계좌와 같이 생각하면 안되고, 비트코인 네트워크상에 송신자:A, 수신자:B, 금액:XX. 등의 정보를 넣어 돈을 보냈다는 사실의 트랜잭션을 네트워크에 전파하는 것이다.
송신자가 수신자에게 비트코인(UTXO)을 보내는 트랜잭션을 전파할 시에, 원하는 수신자 외에 다른 사람이 해당 코인을 사용할수 없게하기 위하여, 해당 트랜잭션에 어떤 잠금장치를 걸게 된다. 그게 바로 잠금 스크립트이다.
돈을 주겠다고 네트워크상에 공시만 한 상태이고 잠금스크립트를 통해 해당 UTXO는 잠겨져 있는 상태가 된다. 이것을 수신자가 누군가에게 다시 송금하려면, 잠겨져 있는 UTXO를 사용하기 위한 해제 스크립트가 필요한 것이다.
비유를 들자면, 마을사람 중 A가 B에게 돈을 주고 싶은데, 직접 갖다 주지 않고, B만이 열수 있는 자물쇠로 금고를 잠군뒤에 금고통을 마을회관에 갖다 놓는 것이다. 그러면 B는 필요할 때 열쇠를 가지고 마을회관에 가서 금고통을 열어서 사용하게 되는 것이다.
잠금/해제 스크립트의 구성은 아래와 같다.
먼저, 잠금스크립트는 비트코인opcode + 수신자의 address 를 베이스로 하여 구성되어있고, 해싱을 통해 특정한 key형태로 만들어지게 된다. 예를 들어)76a914d412b6223019407b50654b0f619709c54a9118ee88ac 와 같은 형식으로 만들어진다.
이러한 잠금코드를 넣어, 비트코인 네트워크에 트랜잭션이 전파가 되면, 수신자는 이를 다시 사용하기 위해서는 해제스크립트가 필요한데, 이는 아래와 같은 정보로 만들어지게 된다.
먼저, 잠금코드 + 수신자 본인의 private키 + 기타정보 를 통해 signature를 만들어내고 ,이를 가지고 옵코드와 합쳐, scriptsig(해제스크립트)를 만들어낸다.
정리하자면, 송신자는 목적하는 수신자의 address를 넣은 잠금스크립트를 만들어 UTXO를 송신하고, 수신자는 자신의 프라이빗키를 사용하여 만든 해제스크립트를 통해 UTXO를 다시 사용하게 되는 것이다.
참고자료)
https://steemit.com/kr/@niipoong/scriptsig-scriptpubkey
https://ihpark92.tistory.com/59