쉽게 설명하는 블록체인, 스크립트란 뭔가요? [비트코인의 언어]
가장 첫 글에 언급한 바 있지만, 나는 컴퓨터공학을 전공하지 않아서 블록체인에 대한 공부를 하는데 시간과 노력이 더 필요했다.
그래서 가능한한 쉽게 설명하여 정보를 제공하고 또한 공부한 내용을 정리하는 것도 용이하기에 이렇게 포스팅을 하고 있고 누구나가 이해하도록 한번 글을 써보자는 것이 내 블로깅의 취지이지만 이번 포스팅은 기술적인 내용이 다소 들어간다.
조금 어려울 수 있지만 이해가 된다면 비트코인과 정말 더 가까이 친해질 수 있는 기회일 것이다. 조금 어렵게 얻은 내용인만큼 느낌이 확 와닿을 것이라 확신한다. (사실 그렇게 어려운 내용도 아니다.)
비트코인 생태계에도 언어가 있다. 그것이 스크립트라고 하는 프로그래밍 언어인데, 단순하면서도 어떻게 보면 비트코인이 비트코인으로서 역할을 하게 하는 적합한 언어라고 할 수 있다. 즉, 비트코인의 모든 거래를 유효화 시키는 것이 스크립트이다.
또한 비트코인은 고정적인 패턴화된 형태의 시스템이 아니라 스크립트 언어를 통해 실행되기 때문에 무한대에 가까운 표현 가능한 조건들이 만들어질 수 있는데 이것이 비트코인이 화폐로서 역할을 하게하는 힘이다.
먼저 비트코인 거래를 작동시키는 두 가지 엔진을 알아보자.
잠금 스크립트는 'scriptPubKey'라고도 불리는데, 이는 UTXO를 소비하기 위한 요건을 명시하고 있고 그 뿐 아니라 공개키 또는 비트코인 주소를 포함한다. 왜냐, UTXO는 특정 지갑에서 소유하고 있는 '비트코인 덩어리'이기 때문에 이 소비 요건에 비트코인 주소와 공개키도 포함하는 것이다. 따라서 해당 지갑주소를 포함하는 이 잠금 스크립트를 풀수 있는 조건을 달성하면 해당 지갑주소에서 UTXO를 소비할 수 있게 된다.
해제 스크립트는 'ScriptSig'라고도 불리는데, 거래의 입력값에 포함 되어 있다. 쉽게 말해 얼마를 보낼지 '보낼 금액'란에 적어 넣는다면 그 명령어에는 잠금 스크립트의 조건을 충족할 해제 스크립트가 있어 해당 비트코인 주소의 UTXO에 대한 소유권을 입증하고 그 UTXO를 소비하도록 한다.(UTXO에 대한 개념설명)
정리하자면 블록체인상에서 기록되어 있는 모든 UTXO들은 그것들을 소비하기 위한 조건이 있는데 그 조건들을 스크립트로 구현한 것이 '잠금 스크립트'인 것이고 그 조건을 풀 수 있는 특정 입력값이 '해제 스크립트'인데 이 데이터가 복사되어 잠금 스크립트와 함께 연산이 실행됐을때 결과가 'TRUE'값이 나오면 그 입력값은 유효해지고 UTXO를 소비할 수 있게 되는 것이다.
그렇다면 스크립트 언어는 어떻게 작동할까?
스크립트는 스택(Stack)이라 불리는 데이터 구조를 사용한다. 생소한 용어가 계속 등장하는데 아래 그림을 보자.
그림이 스택(Stack)의 데이터 구조이고 이 스택(Stack)은 푸시(push)와 팝(pop)연산을 가능하게 한다. 푸시(push)는 데이터 최상단에 데이터를 추가하는 연산이고 팝(pop)은 데이터 최상단에서 데이터를 제거하는 연산이다.
그림처럼 8을 푸시연산 하게되면 8이 들어가고 거기에 또 3과 -1을 각각 푸시하면 쌓인 데이터의 가장 위에 데이터가 쌓여 들어가는 것이고, 그와 반대로 팝 연산을 하게되면 최상단에 있는 데이터를 제거해주는 시스템이 스택(stack) 데이터 구조이다.
그런데 팝 연산에서는 <더하기, 빼기, 곱하기, 나누기> 등의 명령어를 넣으면 위의 그림처럼 그냥 가장 위의 데이터가 제거되는 것이 아닌 명령했던 <더하기, 빼기, 곱하기, 나누기>가 연산 과정을 거친 후 제거된다.
이해가 쉽도록 아래 그림을 보자.
위 그림은 2+3을 했을때 5가 나오는지 확인을 하는 과정을 스크립팅 언어로 나타낸 것인데,
위 그림은 아주 간단하게 예를 든것이다. 만일 +3=5가 '잠금 스크립트'라면 2는 '해제 스크립트'인 것인데, 이 말은 +3을 했을때 5가 나오는 입력값인 2를 찾는 것이 잠금 스크립트의 조건을 만족하는 해제 스크립트를 찾는다고 하는 것이다.
해제 스크립트에는 비트코인 지갑의 소유권을 인증하는 서명이 포함되어 있는데 이 서명 값과 출력값(UTXO)의 잠금 스크립트 값이 위 그림처럼 '푸시'연산과 '팝'연산을 거쳐 TRUE값이 도출되면 비트코인을 소비할 수 있는 것이다.
이것이 스크립트가 비트코인 거래를 작동시키는 방법이다.
최대한 쉽게 설명하려고 하지만 모르시는 분들을 위해 언제든지 어떤 내용이든 댓글로 질문을 받습니다. 질문의 내용이 길 경우는 [email protected]으로 보내주시면 감사하겠습니다.
Cheer Up!
Your post is very effective and powerful, Thanks for sharing
Upvoted !
By the way ,I started following you and I would appreciate your follow back too .
please visit my blog and Upvote me too.
Thanks for the comment. I've also FOLLOWED you @gaibandha365. I hope you should come again and get something useful.
@jsralph please remove the follow. This is just a fake account spamming every post with this message. Check his comments.
쉬운 설명글 감사드립니다!
다음 포스팅도 기대하고 있을게요
@wooklym 네~ 찾아주셔서 감사합니다. 개발자 분들과 같이 공유하고 이야기도 나누고 싶네요 팔로우 하고 갑니다!
잘 봤습니다. 대단하십니다. 열정에 감탄하고 갑니다!
@jsl 감사합니다~
잘 보고 갑니다. 사실 블록체인 자체가 이해하기가 어려운 개념이지만 그래도 잘 이해하고 갑니다~
네 그래도 정독해주시고 이해해주시는것에 대해 항상 감사드립니다 @unieye 님~ 제가 볼땐 충분히 이해하고 계신것 같습니다. 사실 누구나 알수 있도록 설명하고 싶지만 또 어려운 내용도 많은지라 마냥 간단하고 쉽게만은 설명이 힘든것 같네요. 좋은 공부 되셨길 바라고 @unieye 님분들 같이 공부하시고 투자하시는 건전한 마인드를 가진분들이 많아지길 바라는 마음입니다ㅎㅎ
안녕하세요 쉽게 설명하는 블록체인 게시자 jsralph입니다.
계정 비밀번호 분실로 인하여 새로 포스팅을 하게 되었습니다ㅜㅜ
http://steemit.com/@easyblockchain 에서 더 많고 다양한 자료 포스팅하고 있으니 많이 찾아주세요~
이렇게 그림으로 보니까 좀 더 쉬운 것 같네요!
팔로우해서 다음 글도 보겠습니다 ㅎ