난이도, 논스에 대해 조금 더 잘 이해해야함!

[머클 트리가 필요한 이유]
라이트 노드들은 블록체인을 전부다운 받지 않고 거래정보, 머클트리같은 정보들을 하나도 가지지 않고 머클루트 값만 가지고 있다. 머클루트만 있다면 다양한 검증을 빠르게 할 수 있다.
머클트리 자체가 해시로 이루어져 있기 때문에 하나의 트랜잭션 혹은 블록 내 필드 값이 변조되면 머클루트 해시값이 변조되기 때문이다. 잘못된 해시값이 검출되면 해당 블록을 거부할 수 있게 되고 블록체인 네트워크를 계속해서 안정적으로 유지할 수 있게 된다.
⇒ 쇄도효과로 인해 확인 가능
블록이 아니라 트랜잭션 검증시 풀 노드에게 머클 경로를 받음으로써 검증을 쉽게 할 수 있다.
풀 노드에게 머클 경로를 요청하여 머클 경로를 따라가다 보면 머클 루트와 결괏값이 같은지 알 수 있다.
[난이도]
블록을 생성할 때 해당 난이도에 맞는 목푯값이 존재하며 그 목표값을 Bits로 표기한다.
Difficulty = MAX_TARGET / current_target
채굴을 목푯값보다 낮은 해시값을 찾는 과정이다.
특정 길이의 공간에서 앞자리의 0의 숫자가 길수록 난이도는 높다고 표현할 수 있다. 0의 숫자를 1비트 증가시킬 때마다 검색 공간은 반으로 줄어든다.
해시를 통해 나올 수 있는 결과값은 무수히 많은 경우의 수를 가지지만, 난이도가 높을수록 작은 숫자(목푯값)보다 작은 값을 찾는 과정이 어렵게 된다.
결국 채굴은 목푯값보다 낮은 현재 블록 헤더 해시값을 찾는 과정으로 설명할 수 있다.
블록 헤더 해시는 해시값이기 때문에 점진적으로 증가하거나 낮아지는 형태가 아닌 무작위로 결괏값을 띈다는 사실을 인지하면, 채굴이 왜 어려운지에 대해서 그리고 왜 무작위인지에 대해 알 수 있을 것이다.