[상상속의 스티밋KR 코인을 만들어보자 3편] 모두가 은행이 되어보자 Part1
세번째 글이네요. 이해를 위해서 첫번째글 과 두번째글 을 읽고오시기 바랍니다.
프로토콜 v0.2 를 요약하면 아래와 같습니다.
- 철수의 KR 은 오직 철수만 쓸 수 있습니다.
- 말해놓고 번복 할 수 없습니다.
- 돈 = "나, XX은, OO에게 YY만큼의 돈을 지급한다" 라고 적은 메시지
- 이런 과정을 통틀어서 유식하게 트랜젝션이라 부릅니다.
- 지갑주소 = 공개키, 긴 자리수의 영문+숫자로 이루어진 문자열 = 비공개키
- 모든 KR 에 일련 번호를 붙인다.
- 모두가 은행의 역할을 한다. (유식하게 분산원장이라 부른다.)
구체적으로
모두가 은행의 역할을 한다.
는 말은 다음을 의미합니다.
- 같은 일련번호를 가진 코인이 두번 쓰이지 않도록 보장한다.
- 각각의 일련번호를 가진 코인을 누가 가지고 있는지 기록한다.
위 두가지를 기록하고 저장하는 것을 유식한 말로 원장(ledger) 라고 하고,
모두가 개인의 원장에 같은 정보를 적어 기록하는 것을 분산원장(distributed ledger) 라 합니다.
이번글은
모두가 은행의 역할을 할 때, 어떤 특징들이 있는지
살펴보겠습니다.
분산 원장의 단점
분산원장. 말은 유식해보이고 좋은데
이게 마냥 좋은 것인지 한번 고민할 필요가 있습니다.
학창 시절의 기억을 떠올려 봅시다.
여러분들은, 공책을 몇권이나 가지고 계셨나요?
유별난 학생들을 제외하고는
주로,
하나의 공책으로 관리하거나
많아봐야 과목당 하나의 공책으로 관리합니다.
같은 내용 을 두권의 공책에 반복해서
정리하진 않죠.
왜냐?
- 새로운 내용을 두배 혹은 그 이상으로 반복해서 적어야 하는 고통.
- 그러다 보면, 어떤 공책에는 쓰고 어떤 공책에는 안쓰게 되는 관리의 문제.
가 있기 때문입니다.
분산원장도 동일한 문제가 있습니다.
비유를 하자면,
분산 원장은 전교생 모두가
수업내용은 물론, 시시콜콜한 개인사 까지
공유 하기로 약속하고
이를
개개인의 노트북에
동일하게 적어서 기록하는 것과 비슷합니다.
관리의 문제가 아주 크죠.
분산 원장의 장점
한편, 장점도 있습니다.
한 과목의 내용을 세번
서로 다른 공책에 적어서
개똥이, 철수, 그리고 영희가
나눠가지고 있다고
상상해 보죠.
아주 악질인 개똥이가
본인만 시험에서 좋은 성적을
받으려고 다음과 같이 계획합니다.
"200페이지의 중요한 내용을
조작해서 멍청한 철수에게
알려줘야겠다. 그러면 나혼자
시험 점수 잘 받으 수 있겠지?"
그리고 철수에게 말합니다.
"철수야, 네 공책 200페이지의
내용 잘못 적혔어.
봐, 내 공책에는 이렇게 적혀있잖아."
철수가 멍청하다면 당하겠죠.
하지만, 우리의 철수는 스마트합니다.
냉큼, 개똥이의 말을 믿는 대신에
"모든 공책이 같은 내용을 가지고 있다."
라는 사실을 기억하고
절친 영희에게 물어봅니다.
"영희야, 내 공책 200페이지 내용이랑
네 공책 200페이지 내용 한번 비교해봐도 될까?"
비교해보니, 서로 같습니다. 즉, 개똥이가
거짓말 하고 있다는 것을 알 수 있죠
만약 3권의 공책이 아니라
100권의 공책이 있어서
더 많은 사람의 것과 비교해보면
더 큰 확신을 가지고 알 수 있습니다.
즉, 나눠서 저장하는
방식은 공책간의 싱크를 맞추는
관리상의 어려움이 있으나
서로 검증 해줄 수 있다는 장점이 있습니다!
분산 원장도 마찬가지 입니다.
다른 말로하면,
모두가 각자의 원장을 관리하기 때문에
은행 과 같은 집중 된 역할도
필요 없다는 뜻이 됩니다.
구지, 모두가 하는 일을
거추장스러운 이름으로 부를 필요 없죠.
분산원장의 내용
학창시절 공책에는 수업 내용을
적었지만, 스티밋KR 코인의 분산원장에는
도대체 어떤 내용들을 적어야 할까요?
바로,
"A가 B에게 C라는 일련번호를 가진 KR 을 D 만큼 준다."
라는 내용이 들어가게 됩니다.
또한,
이 내용들의 순서가 아주 중요합니다.
만약,
0KR 을 가진 영희에게
철수가 1KR 만큼을 주고
영희가 이를 다시
개똥이한테 전달한 경우,
- “나, 철수는, 영희에게 일련번호 12323223 1 KR 을 지불한다.”
- "나, 영희는, 개똥이에게 일련번호 12323223 1 KR 을 지불한다."
라고 적는 것과
- "나, 영희는, 개똥이에게 일련번호 12323223 1 KR 을 지불한다."
- “나, 철수는, 영희에게 일련번호 12323223 1 KR 을 지불한다.”
적는 것은 아주 큰 차이가 있죠.
후자의 경우, 영희는 아직 가지지 않은 돈을 개똥이에게 지불하죠
따라서,
서로 연관 된 기록들은
반드시 발생한 순서대로 기록되어야 합니다.
분산원장에 들어가는 실제 세부 내용은
이게 전부 입니다.
이게 다라고요?
네, 진짜입니다.
"A가 B에게 일련번호 C의 1 KR을 준다."
라는 내용 말고는 일체의 다른 내용이 없습니다.
그럼,
"철수가 X 만큼의 KR 을 가지고 있다" 라는
정보는요?
네 없습니다.
하지만, 어떻게든 “잔고”의 개념을 구하긴 구해야 합니다.
이것을 포함한 다른 부수적인 문제들은
다음글에서 살펴보고
이번 글에서는
이 원장의 내용을 가지고
서로 돈을 어떻게 주고 받을지
살피는데 집중해 봅시다.
분산 원장의 이용
우리의 친숙한 예제로 돌아와서
분산 원장을 통해 중복 지불 문제를 어떻게
해결 할 수 있는지 생각 해봅시다.
자, 짱구가 영희와 철수에게 사기를 쳐서
동일한 1 KR 을 양쪽에게 주고싶은 상황을
상상 해봅시다. 짱구가 영희와 철수에게 각각
1KR 씩 빚을 지고 있다고 가정하죠.
중복 지불의 경우입니다.
지금까지의 프로토콜을 이용하여 짱구가
"나, 짱구는, 철수에게 일련번호 12323223 1 KR 을 지불한다.”
"나, 짱구는, 영희에게 일련번호 12323223 1 KR 을 지불한다.”
라는 메시지를 사인해서 거의 동시에 철수와 영희에게
각각 전달합니다.
이를 받은 철수와 영희는
본인들이 가진 원장을 이용하여
- 짱구가 실제로 일련번호 12323223 의 1 KR 을 가지고 있고
- 이게 아직 쓰이지 않은 코인 이라는 걸 확인한 뒤
바보같이 수락하고 다른 사람들 (가령, 개똥이)에게 이 사실을 알립니다.
두가지 문제가 발생 했습니다.
철수와 영희는 사기를 당해서, 둘중에 한명은
1 KR 을 못쓰게 되는 상황이 발생제3자인 개똥이는 도대체 본인의 원장을
어떻게 업데이트해야 될지 모르는 딜레마 발생.
당연한 해결책은
집단지성을 이용하여
서로서로 물어보면 됩니다
위 상황으로 돌아가서
짱구에게 메시지를 받는 즉시,
철수와 영희는
본인의 원장을 통한 확인을 하고
추가적으로
다른 구성원들에게 물어봅니다.
위 상황에서 개똥이는
“어? 철수, 영희 둘다
짱구에게 같은 일련번호를 가진
코인의 증명을 요청했네?
짱구가 거짓말 치고있군.”
이라고 즉각 알 수 있고
철수와 영희에게 알려줄 수 있습니다.
이를 확장해서
개똥이 뿐만 아니라
영칠이
땡칠이
영심이
영구
…
…
길동이
놀부
등의
더 많은
친구들에게 추가적으로
확인을 요청해서
이 중
충분한 숫자의
친구들이 확인을 하는
경우에만
개똥이의 코인을
수락합니다.
집단지성을 이렇게 왜 이용하는 걸까요?
이론적으로, 모든사람이 같은 원장을
공유하고 있죠. 따라서,
누군가가 거짓말을 하는 경우에,
구성원 모두에게
거의 동시에 하지 않는 이상
거짓말은 빠르게 전파되어
(e.g. 철수, 영희 모두에게 같은 코인을 준 사실)
서로 대조를 통해 밝혀지게 됩니다.
요약 및 해결 하지못한 문제들
이번글에서 분산원장의
- 장단점
- 내용
- 사용법
을 알아봤습니다.
하지만, 날카로운 독자들 이라면 다음과 같은
질문을 하실 수 있겠네요
- 잔고는 그래서 어떻게 계산되는데?
- 충분한 숫자는 누가 어떻게 결정하는데?
- 중복지불의 문제가 진짜 해결 된 건가?
아몰랑, 너의 글을 믿을 수 없어
프로토콜은 애매모호함이 절대 있어서는 안된다는
말 기억나시나요? 네, 여전히 1), 2)번 질문을
답할 수 없는 한계점이 있습니다.
또한, 중복지불의 문제를
해결한 것 같지만 악질 개똥이가
여전히 중복지불을 할 수 있는 방법이 있습니다.
이 문제들을 해결하기 위해서,
작업증명 (Proof of Work) 을 다음글에서
다뤄보도록 하겠습니다.
Cheer Up! 음~? 흥미로운 포스팅이군요.
크 블록체인을 알기 쉽게 풀어놓으신 필력에 감탄하고 갑니다~
크 신성 펌키니님글 기대합니다
예시를 써서 설명해주시니 더 잘 이해가 되는것 같아요.ㅎㅎㅎ
ㅋㅋ감사합니다. 그림은 손수 그렸습니다.
곧 잔고 이야기가 나오겠네요.
각각의 거래가 기록되어 있는데... 그 총합은 어떻게 알까가 궁금하거든요. 매번 계산해야 하나 라고...
다음 글에는 알겠네요.
매번 감사합니다.
꾸준한 구독 감사합니다. 사실상 유일한 애독자. ㅠㅠ
네.. ㅎㅎ
PoW 나오면서 PoS도 같이 나오나요? 아님 이건 그 다음회로?
합의 알고리즘이 필요한 본질에 대해서 이해하시는데는 PoW가 적합하다고 생각합니다. 그 후에는 합의 알고리즘들만 싹다 모아서 비유를 들어 설명해보도록 하죠
늘 좋은 포스팅에 감사드립니다
짱짱맨 가즈아!
와 그림이 눈에 쏙쏙 들어오네요 ㅎㅎ 팔로우합니다~~
저도 이거랑 비슷한 포스팅을 하고 있는데(매우 딱딱하게) 잘 안되는데 엄청 잘 설명하셔서 부럽네요.
ps. 코드 짜는 일 필요하시면 불러주세요 python, go, rust 중으로 도와줄수 있어요. 제가 하는 포스팅은 실제로 짤 계획이라.
ps2. 빨리 잔고 처리가 나오면 좋겠군요. 저도 필요해서!
당신은 혹시 천재....??
읽다보니 왠지 흥미롭네요.ㅎ
어렵다고 생각했는데 읽다보니 이해가 되는거 같군요!