이 글에서는 블록체인의 거래 과정을 간단히 다룬다.
여러 블록체인의 전반적인 흐름은 같지만 검증 과정은 이더리움의 지분 증명을 기준으로 썼다.
검증자의 신뢰 문제는 글에 포함하지 않았으니, 일단은 검증자는 믿을만한 사람이라고 전제하고 넘어가보자.
우리가 은행에서 송금을 하는 것처럼, 누군가가 상태 변경을 요청한다(=트랜잭션=거래).
그러면 이 요청이 네트워크를 타고 뿌려진다. 노드(=컴퓨터)에서 노드로.
노드는 요청의 대기열이 가지고 있기 때문에 전달받은 요청을 저장해뒀다가 다시 주변에 뿌린다.
노드 중에서 일부는 검증자이다. 검증자는 크게 두 역할을 하는데, 그중 하나는 블록을 만드는 역할이다.
블록이란 A4용지 한장처럼 정보를 묶은 단위이다.
아무 검증자나 블록을 만들 수 있는건 아니고, 매번 알고리즘을 통해 검증자가 지정된다.
그러면 검증자가 요청의 내용을 바탕으로 블록을 만들고, 주변 노드에게 뿌린다.
블럭을 만들때는 해시라는 과정을 거친다.
해시는 한쪽 방향으로만 가능한 변환이다. 즉, 결과값에서 원래 값을 역산할 수 없다.
원래 값을 알 수 없어도 문제는 없다. 왜냐면 어떤 값을 해시했을때의 결과가 기록된 값(=이전에 해시된 값)과 같다면 원래 값과 같다고 판정할 수 있기 때문이다.
그렇게 만들어진 블록은 네트워크를 타고 뿌려진다. 또다시 노드에서 노드로.
그리고 블록을 받은 검증자는 블럭을 뿌린다. 그리고 블록이 정상적이라면 본인의 서명도 뿌린다.
이것이 검증자의 둘째 역할이다.
노드가 서명을 받으면 어떤 블럭에 대한 서명인지를 파악하여 블럭에 붙여준다.
이렇게 쌓인 서명이 전체 검증자 수의 2/3를 넘으면 그때부터는 블럭을 확정한다.
이렇게 블럭을 받을 때마다 확정된 블럭이 사슬처럼 연결된다. 이것이 블록체인이다.
누군가 체인에 사이에 있는 블록을 조작하는 것은 현실적으로 어렵다. 이것은 해시와 관련이 있다.
해시를 할때 요청 받은 내용과 이전 블럭의 해시값을 사용한다.
즉, 만약에 누군가 특정 블록의 내용을 바꾼다면 그 블록의 해시값도 바꿔야 한다.
그러면 그 다음 블록의 해시값도 바뀌어야 한다. 왜냐면 다음 블록의 해시값도 이전 블록의 내용을 기반으로 만들어진 것이기 때문이다.
이런 식으로 조작한 블록 뒤에 있는 모든 블록의 해시값을 바꿔야 한다.
이 때문에 체인 중간에 있는 블록을 조작하기란 사실상 불가능하다.
다음 글에서는 검증자가 정말 믿어도 되는 사람들인지, 그리고 이더리움의 지분증명과 비트코인의 작업증명이 어떻게 다른지에 대해 알아보겠다.