비트코인에서 트랜잭션을 검증하는 과정을 살펴봅시다.
(1) 원본 데이터를 자신의 개인키로 암호화하고, 디지털 서명을 진행합니다.
(2) 원본 데이터와 디지털 서명된 데이터를 노드에 전파합니다.
(3) 트랜잭션을 받은 노드는 해당 트랜잭션이 진짜인지 검증하기 위해, 트랜잭션을 송신한 노드의 공개키를 이용하여 암호화된 데이터의 복호화를 진행합니다.
(4) 이렇게 복호화된 거래 데이터와, 송신한 노드의 원본 데이터를 비교하여 수정된 데이터가 있는지 데이터의 무결성을 검증합니다.
(4) 수신 받은 트랜잭션이 진짜 거래로 판단될 경우, 블록체인에 해당 트랜잭션을 업데이트하고 블록체인 네트워크에 연결된 노드들에게 해당 트랜잭션을 또 전파합니다.
채굴자와 풀 노드는 특정 규칙에 따라 수신한 블록을 평가하여 유효성을 검사하고, 채굴자는 네트워크에 브로드캐스팅된 트랜잭션의 유효성을 검사하여 새로운 블록을 생성합니다.
채굴 과정의 핵심인 채굴자가 해시 퍼즐을 풀어 유효한 블록을 찾는 과정입니다. 이때, 블록 헤더에 있는 논스를 사용하여 채굴자는 논스 값을 계속 바꿔가면서 결과 해시 값이 미리 결정된 목표 값보다 작을 때까지 반복 계산합니다. 비트코인의 작업증명의 해를 구하는 시간은 10분으로 소요되게끔 알고리즘이 형성되어 있습니다. 따라서 더 많은 채굴자들이 등장하고, 빨리 채굴할 수록 채굴 난이도가 상승하게 되어있습니다. 이 보상은 일정량을 지속적으로 보상하는 것이 아니라, 반감기로 인하여 보상 코인 수가 줄어듭니다.
(cf) 블록 헤더의 논스와 트랜잭션의 논스
블록 헤더의 논스는 입력값 중의 하나로 해서 계산되는 블록의 해시값이 특정 숫자보다 작아지게 하는 값으로 쓰입니다.
이더리움에서 트랜잭션의 논스는 발신 주소의 속성이며, 발신 주소의 컨텍스 안에서만 의미를 갖습니다. 그러나, 논스는 명시적으로 블록체인 계정 상태에 저장되지 않고 해당 주소에서 발생한 확인된 트랜잭션 건수를 세어서 동적으로 계산되는 값으로 쓰입니다.
해시 퍼즐의 해를 구한(PoW) 노드는 즉시 결과를 브로드캐스팅하고, 다른 노드들은 그 결과를 검증하여 그 블록을 승인합니다.
(cf) 이더리움의 채굴 과정
네트워크의 채굴 노드는 이더해시(Ethash)라는 독자적인 작업증명 알고리즘을 사용해 블록을 생성하고자 경쟁합니다. 이더해시 알고리즘에 대한 입력은 논스라고 하는 임의로 생성된 숫자를 포함하는 블록 헤더이며, 그 출력은 32바이트의 16진수입니다. 논스를 수정하면, 출력도 수정되는데 예측할 수 없는 방식으로 수정됩니다. 네트워크가 채굴된 블록을 수용하려면 블록 헤더에 대한 이더해시 출력이 네트워크 난이도보다 적어야 하며, 또 다른 32바이트의 16진수가 채워질 대상으로 사용되며 목표 난이도를 상회하는 블록을 브로드캐스트하는 모든 채굴자는 블록 보상을 받게 됩니다.
블록 보상 난이도가 어려워지고, 반감기로 인해 수령하는 코인의 갯수가 줄어들면 채굴자들이 채굴을 하는 메리트가 떨어질까요? 다행히 거래 수수료가 있습니다. 채굴자들이 특정 거래 기록들을 블록에 포함시켜서 블록체인에 추가할 수 있도록 제공되는 인센티브입니다. 거래 수수료는 블록체인 네트워크와 관련하여 두 가지 중요한 목적을 수행합니다. 이는 트랜잭션을 승인하는데 도움을 제공하고, 스팸 공격으로부터 네트워크를 보호하는데 일조한 채굴자와 검증자에게 트랜잭션 수수료가 보상으로 지급됩니다. 더 많은 수수료를 지불하기로 결정하면, 우리의 트랜잭션이 다음 블록에 추가되는 우선 순위가 올라갑니다.
이더리움, 비트코인을 전송해보면 몇 시간이 걸리기도 하고, 높은 수수료가지 지불해야 합니다. 그래서 확장성 문제를 해결하고자 많은 프로젝트들이 치열한 경쟁을 하고 있습니다. 이를 TPS를 통해 확인할 수 있습니다.
원장이 분산화 되고, 참여 노드가 증가할 수 록 TPS는 느려지고, 수수료는 증가하게 됩니다. 중앙화를 통해 TPS를 높일 수 있으나, 트릴레마에서 탈중앙화가 훼손됩니다.