외계어 없이 이해하는 블록체인의 원리 [2]
블록체인이 은행 없이 화폐를 만드는 원리를 알아보자. 가장 중요한 내용이면서 가장 사람들이 어려워하는 내용이다. 어려운 내용은 빼고 기초적인 내용만 담았다.
이전글 : 외계어 없이 이해하는 블록체인의 원리 [1]
블록체인의 원리: 심화 과정
블록체인의 기본적인 작동 원리를 이해했다.
이제 살짝 더 심화된 내용으로 들어가 보도록 하자. 이 글에서는 다음의 3가지를 설명한다.
- 제비뽑기를 하는 방법
- 장부를 봉인하는 방법
- 정직한 놈이 많이 벌게 하는 방법
1. 제비뽑기를 하는 방법
검증할 사람을 뽑는 것은 여러 가지 방법이 있다. 가장 널리 알려진 비트코인 스타일의 뽑기 시스템을 알아보자.
비트코인은 매 블록마다 문제를 낸다. 문제를 가장 빨리 푼 사람이 당첨된다.
예를 들면, 이런 식이다.
“해시 기계에 넣었을 때 ’00’으로 시작하는 출력값이 나오게 하는 입력값을 찾아봐”
음, 뭐라고? 해시 기계? 해시 기계가 뭐지?
해시 기계는 입력값을 넣으면 출력값을 내보내는 단순한 기계이다. 그런데 출력값을 알아도 입력값을 알아낼 수는 없다. 대신 입력값을 알면 출력값은 바로 확인할 수 있다.
해시 기계는 3가지 특징을 가지고 있다.
1. 입력값은 무엇이든지 될 수 있지만, 출력값은 형식이 정해져 있다.
해시 기계가 앞에 있다고 생각하고, 아무 단어나 넣어보자.
컴퓨터 -> 13495
철수는 영희를 좋아합니다 -> 20201
I want to have 3 apples. -> 67936
뭘 넣든 간에 5자리 숫자가 나온다. (물론 5자리 숫자는 예시이다. 실제로는 훨씬 더 복잡하다.)
2. 해시 기계의 또 다른 특징은 딱 1글자만 달라져도 완전히 다른 숫자가 나온다는 것이다.
가방 -> 75392
나방 -> 30680
가장 -> 60287
가방1 -> 48745
입력값과 출력값 사이에는 아무런 규칙성도 없다는 걸 알 수 있다.
3) 그렇지만 같은 입력값을 넣으면 반드시 같은 출력값이 나온다.
가방 -> 75392
가방 -> 75392
가방 -> 75392
‘가방’이라는 입력값은 항상 ‘75392’라는 숫자를 출력한다.
그래서 해시 기계를 사용하면 입력값을 가지고 출력값을 바로 확인할 수 있다.
하지만 출력값을 알아도 입력값을 알아낼 수는 없다.
해시 기계를 이해했으니, 다시 문제로 돌아가 보자.
해시 기계에 넣었을 때 ’00’으로 시작하는 출력값이 나오게 하는 입력값을 찾아봐
해시 기계에 어떤 입력값을 넣어야 00으로 시작하는 출력값이 나오는지 알려면, 직접 모든 단어를 넣어보는 수밖에 없다. 한마디로 ‘노가다’다.
출력값에 규칙성이 없기 때문에 언제 답을 찾을 수 있을지는 완전 랜덤이다. 비트코인의 이 ‘노가다’를 통해서 검증할 사람을 뽑는다.
물론 이 문제는 사람이 아니라 컴퓨터가 풀게 되어있다. 설명을 위해 단순화했지만, 실제 비트코인 프로그램이 내는 문제는 훨씬 더 어렵다. 너무 어려워서 웬만한 컴퓨터는 푸는 게 불가능하다고 보면 된다. 그래서 이 문제를 풀려면 좋은 컴퓨터를 구비해야 하고, 전기도 많이 써야 한다.
이것이 바로 사토시가 노린 바다. 좋은 컴퓨터를 사고, 컴퓨터를 돌리는 데 전기를 사용했기 때문에 일정량 이상의 ‘비용’이 들어갈 수밖에 없다. 앞서서 말했듯이, 검증자가 되기 위해서 ‘비용’을 지불할 수밖에 없도록 의도적으로 만들어 놓았다.
그러면 수백 대의 컴퓨터를 갖다 놓고, 순식간에 문제를 풀어버리면 되는 것 아닐까? 전기 비용도 안 들고 보상을 계속 받을 수 있을 텐데?
그래서 비트코인 프로그램은 자동적으로 문제 난이도를 조절하도록 되어있다. 문제를 푸는 데 투입되는 컴퓨팅 파워(계산 능력)에 비례해서 문제의 난이도가 계속 올라간다. 한 문제를 푸는 데 10분 내외가 걸리도록 자동적으로 난이도가 조정된다. 수백수천 대의 슈퍼 컴퓨터를 돌려도 여전히 비용이 발생한다.
비트코인은 쓸데없지만 비용이 드는 ‘작업’을 시켜서 검증할 사람을 뽑는다. 비용을 발생시켜서 이 사람이 신뢰할만한 사람인지 테스트하는 것이다. 작업(work)을 통해 신뢰를 증명(proof)한다고 해서 ‘작업 증명(Proof-of-work, PoW)’라고 한다.
2. 장부를 봉인하는 방법
앞서서 블록체인의 각 블록은 모두 암호화를 통해 ‘봉인’된다고 얘기했다. 정확히 어떤 방식으로 ‘봉인’되는 걸까?
비트코인 프로그램이 블록을 생성할 때 문제를 낸다고 했었다. 이 문제를 조금 더 실제에 가깝게 풀어보면 다음과 같다.
이 블록은 블록에 담긴 모든 거래 내역(A)과 앞 블록의 결과값(B), 그리고 봉인 코드(C)를 더해서 해시 기계에 넣었을 때 ’00’으로 시작하는 결과값이 나와야 한다. 봉인 코드(C)를 찾으시오.
비트코인은 A + B + C를 해시 기계에 넣어서 ’00’으로 시작하는 결과값이 나와야만 이 블록을 진짜로 인정한다. A와 B는 이미 모두가 알고 있는 값이기 때문에, C값만 찾아내면 유효한 블록을 만들 수 있다. 그리고 앞서 말했던 작업 증명은 바로 이 봉인 코드(C)를 찾는 과정이다.
열심히 컴퓨터를 돌려서 누군가 C값을 찾아냈다고 하자. 모든 사람에게 C값을 알려준다. 사람들은 C값이 정말 봉인 코드가 맞는지 각자 자기가 가진 A, B 값을 더해서 확인해본다. 과반수 이상의 사람이 C값이 봉인 코드가 맞다고 확인해주면, 이 사람은 블록을 생성할 권리를 얻는 동시에 이 C값으로 그 블록을 봉인하게 된다.
이제부터는 누구도 블록의 내용을 수정할 수가 없다. 누군가 거래 내역(A)을 바꾸게 되면, 해시값도 바로 바뀐다. 사람들은 이 내용이 잘못되었음을 바로 알 수 있다. 해시 기계를 사용해서 계산만 해보면 된다.
정확히 말하면 종이에 적힌 내용을 바꿀 수는 있지만, 바꾸는 순간 모든 참가자들이 이 내용은 진짜가 아니라는 것을 알게 된다. 이것이 거래 기록의 봉인이다.
현재 50개의 블록이 쌓여있는 블록체인이 있다고 하자. 어떤 ‘나쁜 놈’이 45번째 블록의 내용을 수정하려고 한다. 이 ‘나쁜 놈’이 거래 내역(45-1)을 수정한 다음에 새로운 봉인 코드를 찾아낼 수도 있다. 그러면 45 블록이나 45-1 블록 둘 다 규칙을 만족시키니까 유효하게 인정된다. 어떤 것을 진본으로 해야 할까?
하지만 이것도 불가능하도록 장치가 되어있다. 왜냐하면 비트코인 네트워크는 동시에 유효한 블록이 여러 개 생기면, ’가장 긴 체인’만을 진본으로 인식하기 때문이다.
하나의 블록은 뒤의 블록과 모두 연결되어있다. 따라서 수정한 블록이 유효하게 인정되려면, 진짜 블록을 풀고 있는 사람보다 훨씬 빠른 속도로 봉인 코드를 풀어야 한다.
그런데 앞서 말했듯이 봉인 코드를 찾는 것은 ‘컴퓨팅 파워’에 비례한 랜덤이다. 비트코인은 ‘나쁜 놈은 항상 소수다.’라는 가정을 깔고 있다. 그러므로 나쁜 놈이 봉인 코드를 찾는 속도는 다수의 착한 놈보다 항상 느릴 수밖에 없다. 나쁜 놈이 다른 사람들보다 더 긴 체인을 만드는 것은 불가능하다.
일시적으로는 두 개의 유효한 블록이 생길 수 있다. 특정 체인이 진본으로 인식되는 순간 그 외의 버전은 무시된다. 따라서 문제를 푸는 참가자가 충분히 많을 경우 사후적으로 문제를 풀어서 이미 쓰인 내용을 수정하는 것은 불가능하다.
3. 정직한 놈이 많이 벌게 하는 방법
블록체인은 검증하는 사람이 정직하게 행동하도록 유도한다. 그러려면 보상인 암호화폐의 가치가 네트워크의 사용자가 많아질수록 올라가야 한다. 비트코인이 어떻게 암호화폐의 가치를 네트워크의 사용자와 연동시키는지 알아보자.
1) BTC의 가격은 시장의 수요/공급에 의해 결정된다.
BTC라는 화폐를 사용하려면 일단 BTC이 있어야 한다. 그러나 BTC는 그냥 얻을 수 있는 게 아니다. BTC를 가지려면 2가지 방법밖에 없다.
‘검증’에 참여해서 보상을 받거나, 이미 BTC를 가진 사람들로부터 화폐를 사야 한다. (검증에 참여하는 것은 많은 컴퓨팅 파워가 있어야 하므로 일단 제외하자)
그러므로 BTC를 팔고자 하는 사람과 BTC를 사고자 하는 사람들이 모이는 시장이 자연스럽게 생기게 된다.
2) 공급은 일정하게 고정되어있다.
새롭게 발행되는 BTC가 화폐의 공급이다. 화폐를 ‘발행’한다는 말을 쓰기는 하지만, 실제로 누군가 BTC를 찍어내거나 하는 것은 아니다. BTC의 발행은 블록을 검증한 사람의 계좌에 정해진 양만큼의 BTC를 +해주는 것을 의미한다.
비트코인은 블록을 검증한 사람에게 보상으로 BTC를 준다. 보상은 사용자 등으로부터 받는 수수료 성격의 그냥 무(없을 무)에서 생겨나는 BTC가 있는데, 이때 무에서 생겨나는 BTC가 바로 화폐의 신규 공급이다. 따라서 매번 블록이 생성될 때마다 화폐의 총량은 계속 늘어난다.
참고로 블록을 누가 생성했는지, BTC가 얼마나 발행되었는지, 누가 누구에게 돈을 보냈는지는 Blockchain.info라는 웹사이트에서 쉽게 볼 수 있다. 다음은 Blockchain.info에서 특정 블록의 거래 내역을 캡처한 것이다.
블록에 담긴 거래 내역 (출처: Blockchain.info)
위에 있는 거래가 생성한 사람에게 주어지는 보상이다. 새로 생성된 동전이라고 쓰여있으며 보낸 사람이 없는 것을 볼 수 있다. 그 밑에 있는 거래는 [1KtK...]’라는 주소가 [3E5F...]에게 0.01 BTC를 보냈고, [15X1…]에게 0.07 BTC를 보냈다고 기록되어있다.
하지만 BTC의 증가량은 시간이 갈수록 점점 줄어든다. BTC의 신규 발행은 2040년에 0이 된다. 2040년에는 BTC의 개수는 총 2100만 개가 되고 더 이상 늘어나지 않는다.
BTC의 총 발행량 그래프 (출처: 비트코인 위키)

이 규칙은 어떤 일이 있어도 바뀌지 않는다. BTC의 공급은 어떠한 상황에서도 일정하며 이것은 BTC의 모든 사람들이 동의한 규칙이다.
3) 따라서 사용자가 늘어나면 화폐의 가격은 상승한다.
한국에 존재하는 부동산의 양은 정해져 있는데, 갑자기 집을 사려는 사람이 많아지면 가격이 오른다. 올림픽 경기 입장권 개수는 정해져 있는데, 경기를 보고 싶어 하는 사람들이 많으면 가격이 계속 오른다.
마찬가지로 BTC를 필요로 하는 사람이 늘어나면 BTC의 가격은 올라간다. BTC의 가치는 네트워크의 사용자가 많아질수록 올라간다.
4) 검증하는 사람은 네트워크의 사용자를 늘리기 위해 정직하게 행동한다.
그러므로 검증하는 사람은 BTC의 가치를 극대화하기 위해 네트워크의 사용자들이 더 많아지도록 정직하게 행동하게 된다.
요약
- 제비뽑기를 하는 방법 : 랜덤한 숫자를 하나 찾도록 시킨다. 가장 빨리 숫자를 찾은 사람이 당첨!
- 장부를 봉인하는 방법 : 정해진 규칙의 봉인 코드가 있어야만 진본으로 인정해준다.
- 정직한 놈이 많이 벌게 하는 방법 : 검증할 때 보상을 주고 그 보상의 가치를 네트워크의 가치와 연동시킨다.
The topic is very interesting, I am also in this thread! Cryptocurrency is the future! I followed you, I hope you will follow me. Let's twist the power of Steemit together! ;) Always happy to meet new people
좋은 글에 감사드리며 리스팀해갑니다! :)
혹시, 블록체인을 기반으로 한 이 스팀잇에 글을 올리고, 문장이라던가 올린 이미지에서 수정할 부분을 발견하고 수정을 했을 때, 수정을 할 때마다 해시값이 바뀌게 되나요? 그리고 수정전의 게시글과 이미지들이 블록체인상에 계속 축적되구요?
어려운 내용 뺐어도 저한텐 간신히 세이프 수준이군요 허허
앞으로도 좋은글 부탁드리겠습니다!
중간중간 어려운 부분이 있었지만 끝까지 읽었습니다. 좋은글 감사드려요 ^^