새로운 블록(a)이 생성됨을 알림받는다.
다음 블록 생성을 위해서 Pending 중인 Transaction을 포함한다.
이전 블록(a)와 Transaction들을 포함한 임시 Block구조(b)를 만든다.
새로운 Block(b)의 Header Hash가 결과값이 나올 때 까지 brute force 방식으로 nonce를 찾는다.
Ethereum은 ethash라는 Proof of Work 알고리즘을 사용하고 있다. 이 알고리즘은 DAG를 통해 Memory 저항성을 가지고 있어서 단순 SHA 연산만을 진행하는 Bitcoin과 달라 ASIC 제작이 어렵게 되어있다. 따라서 이더리움 채굴자들은 대부분 그래픽카드를 통해서 채굴을 진행한다.
EIP-2 로 인해서 Block Difficulty 계산 수식이 변경되었다. 2016마다 재연산되는 Bitcoin과는 달리 Ethereum은 매 Block마다 Difficulty 재연산을 통해서 13초의 블록 생성 주기를 유지한다.
block_diff = parent_diff + parent_diff // 2048 * (1 if block_timestamp - parent_timestamp < 13 else -1) + int(2**((block.number // 100000) - 2))
block_diff = parent_diff + parent_diff // 2048 * max(1 - (block_timestamp - parent_timestamp) // 10, -99) + int(2**((block.number // 100000) - 2))
Longest Chain Rule은 Bitcoin Network 전체가 Fork가 발생할 때, 하나의 블록체인만을 유지하기 위한 방법