블록체인 공부 - 비트코인 거래 스크립트

    비트코인은 거래에 표준화된 스크립트를 사용한다. 여기서의 스크립트 언어는 흔히 아는 파이썬이나 자바스크립트와 같은 스크립트와는 다른데, 이런 언어들보다 훨씬 복잡도가 낮고 가벼운 언어이다. 거래 스크립트 종류에 따라 정해진 비트 수만큼이 주어져 있고 이에 따라 파싱하는 것이 오히려 기계어에 가깝다는 생각도 들었다. 비트코인 스크립트 언어는 다음과 같은 특징을 가진다. 먼저 스택 기반 언어이다. 비트코인 스크립트 언어는 쓰여진 순서대로 스택에 들어가고, 이 순서와 반대로 스택에서 꺼내면서 연산을 수행한다. 해석 순서가 정해져있다고 할 수 있다. 둘째, 비트코인 스크립트 언어는 튜링 불완전하다. 단적으로 알 수 있는 예가 비트코인 스크립트 언어에는 반복문이 없다. 반복문이 없음으로써 복잡한 구현을 할 수 없게 되고 연산들의 실행 시간이 어느 정도 한정되고 따라서 예측하기 쉬워지는데 이것이 오히려 비트코인에게는 장점이 된다. 또한 DDOS공격이나 특정 부분을 공격해 무한루프가 돌게 하는 logic bomb의 걱정을 할 필요가 없게 된다. 마지막으로 비트코인 스크립트 언어는 stateless언어이다. 상태가 없다는 말은 모든 노드에서 같은 환경처럼 작동한다는 것이고, 비트코인 네트워크처럼 네트워크 건너편의 상대가 누구인지 모르는 상황이라도 스크립트 연산 수행 시간을 쉽게 예측할 수 있다는 것이다. 이는 익명 네트워크인 비트코인 네트워크에서 장점이 된다.

     비트코인 스크립트 언어는 보통 Pay to public key hash, Pay to script hash, 다중 거래, 데이터 출력, pay to public key의 5가지의 표준 거래 유형이 있다고 한다. 표준 거래 유형은 사용자가 추가하기 나름이지만 그 거래 유형을 숙지한 사용자들 사이에서만 거래가 가능하기 하나의 거래 유형이 보편적으로 쓰는 표준 거래 유형이 되는 것은 쉽지 않다. 가장 많이 쓰이는 거래 유형은 pay to public script hash이며, 다중 거래 유형에서 가장 많이 쓰이는 방식은 pay to script hash방식이다. 다중 서명이 필요한 부분에서 서명이 길어지면 locking script가 길어져 거래의 크기가 커질 뿐 아니라 utxo set에도 부담을 주게 되는데, pay to script hash를 이용하면 원래의 locking script인 redeem script는 unlocking script에 보관되어 거래 메모리 부담을 다음 거래로 넘길 수 있고, unlocking script는 utxo set에 저장되지 않아 풀 노드들의 메모리 부담도 줄일 수 있는 이점이 있다.

댓글

가장 많이 본 글