쉽게 설명하는 블록체인, 스크립트란 뭔가요? [비트코인의 언어]

in #kr7 years ago

스크립트1.jpg

나는 컴퓨터공학을 전공하지 않아 블록체인에 대한 공부를 하는데 시간과 노력이 더 필요했다.

그래서 가능한한 쉽게 설명하여 정보를 제공하고 또한 공부한 내용을 정리하는 것도 용이하기에 이렇게 포스팅을 하고 있고 누구나가 이해하도록 한번 글을 써보자는 것이 내 포스팅의 취지이지만 이번 포스팅은 기술적인 내용이 포함된다.

조금 어려울 수 있지만 이해가 된다면 비트코인과 한걸음 더 친해질 수 있는 기회일 것이다.

쉽지 않게 얻을 수록 그 느낌이 더 와닿고 오래 남을 것이다. (사실 그렇게 어려운 내용은 아님.)

스크립트2.jpg

비트코인 생태계에도 언어가 있다.

그것이 스크립트라고 하는 프로그래밍 언어인데, 단순하면서도 어떻게 보면 비트코인이 화폐로서 역할을 하게하는 가장 적합한 언어라고 할 수 있다.

즉, 비트코인의 모든 거래를 유효화 시키는 것이 스크립트이다.

또한 비트코인은 고정적으로 패턴화된 형태의 시스템이 아니라 스크립트 언어를 통해 실행되므로 무한대에 가까운 표현이 가능한 조건들이 만들어 지는데 이것이 비트코인이 화폐로서 역할을 하게하는 원동력이다.

먼저 비트코인 거래를 작동시키는 두 가지 엔진을 알아보자.

스크립트3.jpg

핵심내용만 간추려 봤는데 자물쇠와 열쇠그림 밑에 색깔로 된 설명이 대체 무슨 말인가 하면

잠금 스크립트는 '비트코인 소비 조건'이고, 해제 스크립트는 '그 조건만 충족시키는 유일한 서명(signature)'이다.

  • 잠금 스크립트는 'scryptPubKey'라고도 불리고, 이것은 말했듯이 UTXO를 소비하기 위한 조건을 걸고 있고 그 뿐아니라 공개키나 비트코인 주소를 포함한다. 왜냐, UTXO는 특정 지갑에서 소유하고 있는 '비트코인 덩어리'이므로 이 소비 요건에 비트코인 주소와 공개키도 포함하는 것이다. 그러므로 해당 지갑주소를 포함하는 이 잠금 스크립트를 풀 수 있는 조건을 달성하면 해당 지갑 주소에서 UTXO를 소비할 수 있게 되는 것.

  • 해제 스크립트는 'ScriptSig'라고도 불리고, 거래의 입력값에 포함되어 있다. 쉽게 말해 얼마를 보낼지 '보낼금액'란에 입력하는 명령어에 잠금 스크립트의 조건을 충족할 해제 스크립트가 포함 되어 있어 해당 비트코인 주소의 UTXO에 대한 소유권을 입증하고 그 UTXO를 소비토록 한다. (UTXO에 대한 설명)

정리하면,

블록체인 상에서 기록된 모든 UTXO들은 그것들을 소비하기 위한 조건이 있는데 그 조건을 '잠금 스크립트'라 하고 그 조건을 풀 수 있는 입력값을 '해제 스크립트'라 하는데 이 해제 스크립트 데이터 값이 복사 되어 잠금 스크립트와 함께 연산 되어 실행 됐을때 결과가 'TRUE'값이 나오면 그 입력값은 유효하다는 것이고 UTXO를 소비할 수 있게 되는 것이다.

그렇다면 스크립트 언어는 어떻게 작동할까?

스크립트는 스택(Stack)이라 불리는 데이터 구조를 사용한다. 생소한 용어가 계속 등장 하는데 아래 그림을 보자.

스크립트4.jpg

그림이 스택(Stack)의 데이터 구조이고 이 스택(Stack)은 푸시(Push)와 팝(Pop) 연산을 가능케 한다. 푸시(Push)는 데이터 최상단에 데이터를 추가하는 연산이고 팝(pop)은 데이터 최상단에서 데이터를 제거하는 연산이다.

스크립트5.jpg

그림처럼 8을 푸시 연산하면 8이 들어감. 거기에 3과 -1을 각각 푸시하면 데이터 위에 또 하나씩 쌓이게 된다. 반대로 팝 연산을 하면 가장 위에 있는 데이터를 하나씩 제거해주는데 이것이 스택(stack) 데이터 구조이다.

그런데 팝 연산에서는 <더하기, 빼기, 곱하기, 나누기>등의 명령어를 넣으면 위의 그림처럼 가장 위의 데이터가 제거되는 것이 아닌 명령했던 <더하기, 빼기, 곱하기, 나누기>가 연산 과정을 거친 후 제거된다.

이게 무슨 이야기냐면 아래 그림을 차근차근 순서대로 살펴보면 바로 이해한다.

스크립트6.jpg
스크립트7.jpg

이 그림이 스크립트 작동원리를 이해하는 가장 핵심이다.

그림은, 2+3을 했을때 5가 나오는지를 확인 하는 과정을 스크립트 언어로 나타낸 것이다.

만일 +3=5가 잠금 스크립트라면

2는 해제 스크립트라는 설명을 하기위해 간단히 예를 든 그림이다.

이 말은, +3을 했을 때 5가 나오는 입력값인 2를 찾는 것이 잠금 스크립트의 조건을 만족하는 해제 스크립트를 찾는다고 하는 것이다.

해제 스크립트에는 비트코인 지갑의 소유권을 인증하는 서명이 포함돼 있는데 이 서명 값과 출력값(UTXO)의 잠금 스크립트 값이 위 그림처럼 '푸시'연산과 '팝'연산을 거쳐서 TRUE값이 도출되면 비트코인을 소비할 수 있게 되는 것.

이것이 스크립트 언어가 비트코인을 작동시키는 원리이다.

최대한 쉽게 설명하려고 하지만 모르시는 분들을 위해 언제든지 어떤 내용이든 댓글로 질문을 받습니다. 질문의 내용이 길 경우는 [email protected]으로 보내주시면 감사하겠습니다.