1.2 블록체인 기초
블록체인의 기초적인 개념은 프로그래머라면 크게 어렵지는 않을 것이다. 그 이유는 가장 복잡한 개념들(채굴, 해싱, 타원곡선 암호학, p2p네트워크)은 몇몇의 특징들로 이더리움 상에 그저 존재하기 때문이다. 일단 이 개념들이 주어진 것으로 가정한다면, 아래에 얘기되는 기술들에 대해서 걱정할 필요가 없다. (예를 들어 아마존 AWS의 내부가 어떻게 동작하는지 알아야만 AWS를 사용할 수 있는가?)
트렌젝션(transactions)
블록체인은 전역적으로 공유되는 트랜젝션 데이터베이스이다. 이것은 누구든 네트워크에 참여하는 사람은 데이터베이스의 엔트리를 읽을 수 있다는 것을 뜻한다. 만약 데이터베이스의 어떤 값을 수정하고자 한다면, 모든 사람들이 수긍하는 트랜젝션를 생성해내야 된다. “트랜젝션”라는 말이 의미하는 것은 어떠한 변화를 만들고자 한다면 (예를 들어 동시에 2개의 값을 동시에 바꾸고자 한다 했을 때) 아무런 변화가 없거나 완전히 반영되는 것을 뜻한다. 더해서 트랜젝션가 데이터베이스에 반영되는 동안 다른 트랜젝션는 이를 바꿀 수 없다.
예를 들어 전자화폐의 모든 계정의 잔액을 담은 표를 상상해보자. 한 계정에서 다른 계정으로 송금이 요청되면 데이터베이스의 트랜젝션의 본질적 특성은 따라서 한 계정에서 잔액이 줄어들고, 다른 계정의 잔액이 늘어나는 것을 보장해야 한다. 어떠한 이유에 의해서든 목표한 계정에 잔액을 늘리는 것이 실패했다면 송금하려는 잔액도 불변이어야 한다.
더해서 트랜젝션은 항상 암호학적으로 보내는 사람(트랜젝션를 만든 사람)에 의해 서명이 된다. 이것은 직접적으로 데이터베이스의 특정 데이터의 변경을 방지한다. 앞의 전자 화폐의 예에서 오직 키를 가지고 있는 사람만이 자신의 잔액을 옮길 수 있는 것과 같다.
블록(blocks)
넘어야 할 큰 산 중 하나는 비트코인의 관점에서 “이중 지불 공격(double spend attack)”이 무엇인지 이해하는 것이다. 흔히 말해 충돌이라 불리는 현상, 예를 들어 두 트랜젝션가 동시에 한 계좌의 잔액을 비우려고 한다면 무슨 일이 일어날까?
추상적인 답변 중 하나는 사용자는 이것을 신경 쓸 필요가 없다는 것이다. 트랜젝션의 순서는 정렬이 되어, “블록”에 담긴 후 참여하는 노드들에게 분산되어 실행된다. 만약 두 트랜젝션가 충돌했을 때, 순서가 늦은 트랜젝션는 승인이 거절되며 블록에 포함되지 못한다.
이 블록들은 선형적으로 시간 흐름에 따라 연쇄적으로 연결되어 있고, 여기서 블록체인(blockchain)이라는 용어가 파생되었다. 블록은 일정한 시간 간격을 두고 연결된다. (이더리움의 경우 약 17초의 간격으로 연결된다)
이 “순서 선택 메커니즘"은 (채굴이라 불리는) 블록이 시간에 따라 다시 재배치되기도 하는데, 이는 오직 블록의 “끝”부분에서만 일어난다. 더 많은 블록들이 쌓여갈수록, 블록의 순서가 뒤바뀔 가능성도 점점 낮아진다. 따라서 트랜젝션는 블록체인에서 순서가 변경되거나 심지어 사라질 수도 있지만, 시간이 흐르면 흐를수록 이럴 가능성은 낮아진다.