비트코인의 트랜잭션에는 간단한 스크립트 코드를 넣을 수 있다.
그래서 비트코인은 프로그래머빌리티가 없다, static 하다, 변하지 않는다고 하면 틀린 말이다.
물론 이 스크립트 코드는 turing complete 하지는 않아서 모든 기능을 자유롭게 쓸 수 있지는 않지만, 제한적인 프로그래밍이 가능하다.
(참고로 이더리움은 튜링 컴플리트를 지향하는 블록체인 프로젝트이다. 기말고사 범위에서 정리할 예정)
비트코인의 스크립트는 스택 기반으로 실행되는 코드이며,
트랜잭션 검증과 서명 검증을 위한 다양한 명령어를 제공한다.
대표적인 스크립트 타입은 다음과 같다.
- Pay To Public Key (P2PK) :
비트코인의 초창기 트랜잭션 방식, 사카시 나카모토가 고안했던 방식으로 public key hash에 지불한다.
즉, 비트코인 주소에 지불하는 것을 말한다.
그러면 이 비트코인 주소의 주인은 내가 받은 비트코인을 꺼낼 수 있다.
(내가 주인이라는 것은 그 퍼블릭 키에 맞는 프리이빗 키 쌍을 갖고 있음을 증명하면 된다.)
- Pay To Public Key Hash (P2PKH)
요즘은 퍼블릭 키를 해싱한 것에 지불하는 방식이 주로 사용되고 있다.
이것 역시 비트코인 주소에 지불하는 것과 같다.
- Pay To Script Hash
꼭 비트코인 주소가 아니라 다른 스크립트에도 비트코인을 지불할 수 있다.
이 부분이 비트코인의 프로그래머빌리티를 끌어올린 부분이다.
스크립트에 지불한다는 것은, 내가 비트코인을 꺼내 쓰기 위해서는 이 스크립트와 동일한 스크립트를 제시해서 내가 이 스크립트의 주인임을 명시하면 된다.
물론 스크립트를 그대로 보내면 증명할 수 없으므로 스크립트 해시를 목적지로 보내면, 원본 스크립트를 소유한 사람이 똑같이 해시한 결과를 제시함으로써 내가 주인임을 증명할 수 있다.
(크립토 해시 함수는 역으로 인풋 데이터를 알아낼 수 없는 성질을 이용한다.)
- M of N MultiSig
'N 개 중, M 개의 서명' 이라는 뜻이다.
예를 들어 내가 물건을 만들어서 파는데, 그 판매 대금을 회사 비트코인으로 받았다고 해보자.
이때 이 회사의 비트코인을 꺼내서 지불하는데 사용하려면 N명의 이사진 중 M 명의 서명이 필요하다고 제한을 걸 수 있다.
관련된 내용은 나중에 따로 자세히 정리한다.
'CS > 블록체인' 카테고리의 다른 글
[블록체인] 10. 비트코인이 해결하는 문제들 (1) | 2024.10.25 |
---|---|
[블록체인] 9. 암호학 개념들 (0) | 2024.10.24 |
[블록체인] 7. 비트코인 네트워크 (0) | 2024.10.15 |
[블록체인] 6. Proof-of-Work (Consensus Protocol & Native Currency) (0) | 2024.10.11 |
[블록체인] 5. 트랜잭션 포맷 (0) | 2024.10.10 |