블록체인의 블록 구조✅를 이해할 수 있다.
하드포크✅와 소프트포크✅에 대해 설명할 수 있다.
블록체인에서 노드에 대해 이해할 수 있다.
노드의 종류와 구성에 따른 기능을 이해할 수 있다.
블록체인이 분기되는 방식을 이해할 수 있다.
(실습) 이더리움 블록체인에서 계정과 트랜잭션을 생성하고 채굴을 할 수 있다.
블록은 헤더와 트랜잭션들로 구성된다.
헤더의 구성요소는 다음과 같다. 2번의 이전블록 헤더 해시를 블록에 포함함으로써 블록들이 체이닝 된다.
4, 5, 6번에 대해서는 아래에서 구체적으로 학습한다.
블록에 포함된 개별 트랜잭션의 해시값으로 이진트리를 구성한 것이 머클트리, 머클트리의 루트값인 이전의 모든 해시값에 의존적인 하나의 값을 머클루트라 한다.
효율성과 무결성을 보장하기 위함이다. 라이트 노드들은 최소한의 용량으로 거래정보를 인증하기 위해 머클루트값만 다운받아서 가지고 있다. 또한 해시함수의 특성으로 인해 머클트리에 속한 모든 트랜잭션들의 무결성을 보장할 수 있다. 머클트리에 속한 비트값 1개만 바꾸더라도 전체 해시값이 크게 변화하는 avalanche effect가 발생하기 때문이다.
머클트리를 활용하면 개별 트랜잭션의 유효성도 효율적으로 검증할 수 있다. 전체 트랜잭션을 탐색하는 것이 아니라 머클루트로 부터 해당 트랜잭션까지의 경로만 알면 되므로 해당 트랜잭션의 무결성을 로그시간 안에 파악 가능하다.
블록해시는 블록헤더의 모든 값을 입력으로 SHA256을 2회 적용한 결괏값이다. 블록해시는 다음 블록의 블록헤더에 포함되어 블록간 체인구조를 형성하게 한다. 완료된 트랜잭션을 변경하려면 해당 트랜잭션이 포함된 블럭으로 부터 모든 블록을 순서대로 채굴에 성공해야 한다. 이러한 특성으로 비트코인은 현실적으로 매우 안전하다고 알려져 있다.
블록헤더에는 난이도 비트값이 포함되어 있다. 채굴은 난이도보다 낮은 해시값을 만드는 논스를 찾는 과정이다. 따라서 리딩제로 조건의 0 개수가 많아질수록 난이도는 상승한다. 반대로 0의 개수가 줄어들수록 채굴 난이도는 하락한다.
난이도는 사토시 나카모토의 설계에 따라 자동으로 조절되어 10분에 블록 1개가 생성되도록 설정된다. 난이도는 2,016개의 블록이 생성되는데 소요되는 시간이 평균 시간인 20,160분(10분/블록 * 2,016)보다 오래 걸리면 낮아지고, 적게 걸리면 높아지는 방식으로, 대략 20,160분을 주기로 전체적으로 평균 10분이 소요되는 하나의 난이도가 전체에 적용됩니다.😢
여러번 학습했지만 블록헤더에서 논스를 제외한 값은 주어진 값이다. 채굴자는 논스값을 무차별 대입해서 조건을 만족하는 해시값을 만들어내야 채굴에 성공한다.
이더리움 트랜잭션 구조는 아래와 같다.
비트코인은 UTXO를 기준으로 이중지불문제를 해결한다. 이더리움은 UTXO가 없으므로 계정에 포함된 논스값을 기준으로 이중지불문제를 해결한다. 계정에서 생성된 트랜잭션이 완료될 때마다 nonce++ 되므로 일반적으로 같은 논스값을 갖는 트랜잭션은 생성되지 않는다.
만약 한 계정으로부터 같은 nonce값을 갖는 두개의 트랜잭션이 생성되면 이더리움은 이중지불문제가 발생한 것으로 판단한다. 이더리움의 합의 알고리즘은 해당 트랜잭션들 중 가장 높은 가스를 지불한 트랜잭션을 처리한다. (GHOST, Ethash)
동시에 동일한 블록이 생성되거나 네트워크의 물리적 지연에 따라 신규블럭이 전파되기 전에 또 다른 신규블럭이 생성되어, 각각 네트워크로 전파된다면 블록체인 네트워크에 브랜치가 생긴다. 비트코인에서는 가장 긴 캐노니컬 체인에 포함된 블럭을 메인블럭으로 정해서 추후에 해당 블록을 기준으로 전체 네트워크가 동기화된다. 이더리움의 경우 GHOST 알고리즘을 통해 가장 많은 자손을 가진 브랜치를 메인브랜치로 채택한다.
Backward Compatibility를 보장하지 않는 블록체인 네트워크의 프로토콜 업데이트. 이전 블록체인과 전혀 다른 프로토콜을 가지게 되어 채굴노드들은 반드시 새로운 버전으로 업데이트 해야 한다. 하드포크된 체인은 기존의 메인체인과 별도의 브랜치를 형성해서 해당 브랜치를 메인브랜치로 블록을 생성해나간다.
Backward Compatibility를 보장하는 프로토콜 업데이트다.
기존 체인에서 브랜치를 형성한 후 다시 메인 브랜치에 머지한 형식이다. 기존의 규칙과 충돌하지 않는 업데이트는 소프트포크를 통해 가능하다. 비트코인에서 블록사이즈를 줄이는 것은 소프트포크만으로 가능하다.
소프트포크 이후 기존의 방식으로 채굴을 시도하는 노드들은 블록생성이 reject되지만 네트워크에 참여할 수 없는 것은 아니다.
중국 채굴업체들이 비트코인 세그윗 소프트포크에 반대하며 비트코인으로 부터 하드포크해서 만든 코인. 블록사이즈 32MB, 100TPS 처리 가능하다고 알려져 있다.