Back

블록체인은 실제로 어떻게 동작하는가

작년 여름 Binance 선물거래 Hot 카테고리 상위에는 항상 AXS(Axie Infinity)라는 코인이 있었고, 당시 얘는 매 순간이 신고가를 찍으며 끝을 모르고 올라가는 상황이었다. 차트병 걸린 고배 숏잡이들은 모두 줄청산나며 터져갔다. 물론 나도.

이상한 핸드폰 게임의 캐릭터인지 아이템과 관련한 코인이라고 들었던 기억이 난다.

그리고 1년이 지난 최근 이것을 개발한 개발자들은 내부에서 거래가 이루어질 때마다 4.25% 수수료를 받을 수 있다는 이야기를 들었고, 실제로 얼마를 버는 건지 계산을 해보게 되었다.

글 작성 시간인 한국시간 2022년 09월 17일 기준 최근 하루 동안 이루어진 거래는 총 144,105 달러다. 개발자가 받는 수수료는 24시간동안 약 848만원이다.

오래전 기록을 봤을 때 작년 11월 4일에는 40,809,489 달러의 거래가 이루어졌는데, 2022년 9월 17일보다 거래량의 약 283배인 것을 보면, 정말 대단한 것 같다. 지금 환율 기준으로 하루에 수수료만으로 23억 9천만원을 버는 것이다.

개발자가 벌었던 돈에도 궁금증이 생기고, 도대체 이 실체 없는 디지털 쪼가리에서 어떻게 이렇게 많은 자금이 왔다 갔다 하는지 신기했다.

가상화폐의 근간이 되는 블록체인에 대해 궁금해졌다.


블록체인을 거래가 이루어진 장부 데이터라고 생각해보자.

A가 B에게 100원을 빌렸다고했을 때, A는 빚을 지게 되었고, B 는 자기 메모장에 아래처럼 기록할 수 있다.

A - 100

이것이 B가 만든 거래원장의 시작이다.

어느 날 A가 저번에 빌린 100원 중 50원을 갚겠다고 하여 50원 짜리 동전 초콜릿을 B에게 사준다.
이 상황에서 B가 만든 거래원장을 50원으로 수정하지 않고 계속 100원으로 남겨둔다고 생각하자.
그렇게 문제가 생겼다. 실제 이루어진 거래와 거래원장에 작성된 기록이 맞지 않는다.
심지어 B가 나쁜 마음을 먹고 100에 0을 하나 더 더해 1000원으로 조작한다고 생각하면 더 심각한 문제다.

이런 데이터 조작은 장부를 쓸 가치가 없게 만든다. 만약 우리가 이것을 컴퓨터에서 사용 가능한 데이터의 형태로 관리한다고 생각했을 때도 똑같다.

실체가 없는 AXS과 같은 가상화폐의 경우에는 이런 장부 자체가 특정 사람이 가지고 있는 가상화폐의 양을 증명해준다. 장부의 조작이 가능하면 가상화폐는 가치가 없는 데이터 쪼가리가 된다.

이런 장부에 신뢰성을 줄 수 있는 방법은 거래 내역을 불변하게 만드는 것이다. 이것을 어떻게 해야 하는 것일까?


암호화를 사용해야 한다.

아까 봤던 거래원장에 0을 추가하여 손쉽게 조작을 했던 것이, 암호화가 이루어지면, 0 하나를 추가하는 것처럼 쉽게 조작할 수 없다.

하지만, 암호를 해독하면 여전히 조작이 가능한데, 그래서 블록체인은 암호화를 사용하는 대신 해싱을 사용한다.

해싱에 대한 방대한 내용을 작성은 안하고, 단순하게 어떤 입력값이 있으면, 같은 길이의 암호화된 해시 값을 생성해준다고 생각하면 된다.

어느 정도 긴 길이의 해싱을 사용하여 암호화된 값을 해독하려면, 현재 컴퓨터의 계산 능력으로는 아주 많은 시간이 걸리고, 그만큼 해싱을 사용하면 신뢰성 있는 암호화를 사용한다고 볼 수 있다.


이 해싱을 블록체인에 어떻게 적용을 하는 것일까?

아까 위에서 A가 B에게 돈을 빌려 B가 스스로 작성했던 장부를 그대로 데이터에 넣어 해시값을 생성했다고 해보자.

그리고 ‘블록체인’ 단어에 있는 블록처럼 이것을 하나의 블록이라고 생각고, 그에 필요한 여러 값들을 살펴보면 다음과 같다.

Block은 블록의 번호, Data가 B가 작성했던 장부, Hash는 해싱을 통해 생성된 값이다. 해당 사진에서는 SHA 256 Hash를 사용하였다.
나머지 Nonce와 Prev는 뒤에서 설명한다.

이 블록을 블록체인에 추가하기 위해서는 몇 가지 요건을 충족해야 한다.
예를들어 해시 값이 무조건 0000으로 시작해야 하는 요구사항이 있을 수 있다.
이럴 경우 아까 작성한 데이터에 Nonce라는 값이 변경이 되어야하는데, 그것에 대한 설명은 아래 링크에 있다.

논스 (임시값)

간단하게 이야기를 해보면, Nonce 값이 변경되면, 동시에 해시 값도 변경이 된다.
그리고 컴퓨터를 통해 무차별 대입을 하여 계산해서 해시값에 필요한 요구사항을 충족하는 Nonce값을 가져올 수 있다.

그렇게 변경된 Nonce값으로 같은 데이터지만, 0000으로 시작하는 해시값을 얻을 수 있다.

사진과 같이 34556에 해당하는 Nonce 값은 저 장부에 해당하는 데이터가 A - 100일 때 0000으로 시작하는 해시 값을 가질 수 있다. 더 자세하게 이야기하면 이전 블럭의 해시값도 현재 블럭의 해시값에 영양을 미치는데 일단 논외로 한다.

그렇게 같은 Nonce값을 가진 상태로 장부를 수정하게 되면, 더 이상 해시 값은 0000으로 시작하지 않는다.

사진처럼 장부를 수정하니, 아까 정했던 0000으로 시작해야 한다는 요구사항을 충족하지 않게된다.
결국 조작된 장부라는 것을 확인할 수 있고, 이는 더 이상 유효한 데이터가 아니라는 것을 알 수 있다.

이것이 블록체인의 블록이다.

그럼 체인은 무엇인가?

각각의 블록들이 연결이 되어있다고 보면 다음 그림과 같이 볼 수 있다.

아까 설명하지 않은 Prev는 이전 블록의 해시값을 의미한다. 맨 처음의 경우에는 이전 블록이 없기에 0으로 채워진 해시값이 있던 것이었다.

결국 현재 블록의 해시값은 Nonce, 이전 블록의 해시값, 데이터를 통해 만들 수 있는 것이다.

그렇게 두 번째 장부까지 요구사항을 충족하는 해시값을 만들었다고 보자.

이 상태로는 첫 번째 장부를 수정하면, 해시값이 변경이 되며, 두 번째 장부의 이전 블록의 해시값과 달라진다.

즉, 첫 번째 블록을 조작하려면 두 번째 블록도 함께 조작해야 한다.


이 상황에서 블록체인은 이런 장부들을 하나의 Peer만 가지고 있는 것이 아니다.

가상화폐를 채굴한다는 의미는 Nonce를 포함한 해시를 계산하는 행위인데 이 채굴을 시작하기 위해서는 모든 진행되었던 장부를 복사하여 가지고 있어야 한다.

즉, 채굴을 하는 사람이 늘어나면 그만큼 Peer도 늘어나는 것이다. 중복된 데이터들이 여러 Peer들마다 각각 저장하고 있어서 효율적이지는 않으나, 그만큼 신뢰성은 올라가게 된다.

그래서 하나의 블록체인에서 조작이 이루어지면, 같은 블록 번호임에도 다른 해시값이 나오게 된다.
이러한 경우 다른 Peer들과 비교를 하게되면, 조작을 했던 Peer를 확인할 수 있다.

그렇게 블록체인을 여러 Peer들에게 분산시킴으로써, 무결성을 보장할 수 있는 또 다른 방법을 가지게 되었다.


전 세계의 컴퓨터에 작성이 되어있어 모두가 협력하여 쓰여진 내용이 공정하고 정확한지 확인하는, 변경이 불가능한 거래원장을 생성할 수 있는 것이라고 이해를 하면 편할 것 같다.