관리 메뉴

평행우주 : world 1

[비트코인이론] 비트코인 거래 스크립트 본문

텃밭 1 : BlockChain/이론

[비트코인이론] 비트코인 거래 스크립트

parallelworlds 2022. 3. 6. 06:10

거래 스크립트

  • 비트코인 거래 유효화는 고정 패턴에 기초한 것이 아니라 스크립트 언어를 실행함으로써 이루어진다
  • 스크립팅 언어는 거의 무한대에 가까운 표현 가능한 조건을 만들 수 있다
  • 바로 이 점이 '프로그램 가능한 화폐'를 만들게 된다

 

 

튜링 불완전성

  • 비트코인 거래의 스크립트 언어는 많은 연산자를 포함하고 있지만, 한 가지 중요한 방법을 이용해 의도적으로 기능이 제한된다
  • 스크립트 언어는 조건부 흐름 제어 기능 이외에는 루프나 복잡한 흐름제어 능력을 가지고 있지 않다
  • 즉 튜링이 완전하지 않다 (비트코인 거래 스크립트는 복잡성이 제한되고 실행 시간 예측이 가능하다)
  • 스크립트는 다용도 언어가 아니기 때문에 제한성이 있고,
  • 그 덕분에 스크립트 언어는 무한 루프나 논리 폭탄 같은 형태를 만들 수 없다

+)이더리움은 비트코인 스크립트 언어의 이러한 한계점을 극복하기 위해 튜링완전한 솔리디티 등을 이용한다

 

 

무상태형 검증

  • 비트코인 거래의 스크립트 언어는 무상태형이며, 스크립트 언어 내에서는 스크립트 실행 전후에 저장되는 상태가 없다
  • 스크립트를 실행하는 데 필요한 모든 정보는 스크립트 내에 담겨 있다
  • 스크립트는 어떤 시스템에서든 예측 가능하며 동일한 방식으로 실행된다
  • 만약 어떤 스크립트가 유효하다면, 비트코인 네트워크 내에 존재하는 시스템 전체에서 해당 스크립트는 유효하다
  • 즉 하나의 유효한 거래는 모두에게 유효하다
  • 결과에 대한 예측 가능성이 비트코인 시스템의 핵심 이점이다

스크립트 구성(잠금 + 해제)

잠금스크립트

  • 잠금 스크립트는 출력값에 위치하기 때문에 향후 출력값을 소비하기 위해 충족되어야 하는 요건을 명시하고 있다
  • 잠금스크립트에는 보통 공개키 혹은 주소(공개키 해시)가 담겨있어 스크립트펍키라고도 부른다

해제스크립트

  • 해제스크립트는 잠금스크립트가 출력값에 놓아 둔 조건을 해결하거나 충족시켜서 출력값이 소비될 수 있게 하는 스크립트다
  • 해제스크립트는 모든 거래의 입력값에 들어있는 요소이다
  • 대부분의 경우 사용자의 지갑이 개인키로부터 생성한 디지털 서명을 담고 있어 스크립트시그하고도 불린다

 

  • 비트코인 거래 유효화 엔진은 거래를 유효화 하는 잠금-해제 스크립트에 의존한다
  • 모든 비트코인 검증 노드는 잠금-해제스크립트를 함께 실행해 거래를 유효화한다
  • 각 입력값에는 해제스크립트가 들어있고, 
  • 입력값들은 이전에 존재했던 UTXO를 참조한다
  • 유효화 소프트웨어는 해제스크립트를 복사해서 입력값이 참조한 UTXO를 검색한 후에 해당 UTXO로부터 잠금스크립트를 복사한다
  • 그후 해제스크립트와 잠금스크립트가 차례로 실행된다
  • 해제스크립트가 잠금스크립트의 조건을 충족하는 경우 해당 입력값은 유효해진다
  • 거래의 유효화 과정의 일부로 모든 입력값들이 개별적으로 유효화된다

 

스트립트 실행 스택

  • 비트코인 스크립팅 언어는 스택 데이터 구조(후입선출)를 사용하는 스택 기반 언어이다
  • 스택은 푸시 연산(최상부에 항목 추가)과 팝 연산(최상부 항목 제거)이 가능하다

 

실행

  • 해제스크립트는 스택 실행 엔진을 이용해 실행된다
  • 해제스크립트가 오류없이 실행되면,
  • 메인스택이 복사되면서 잠금스크립트가 실행된다
  • 해제스크립트로부터 복사된 스택 데이터와 함께 잠금스크립트의 결과가 TRUE라면
  • 해제스크립트는 잠금스크립트가 부과한 조건을 해결한 것이다
  • 따라서 해당 입력값은 UTXO를 소비하기 위한 유효한 승인이다

 

 

 

Comments