작업증명(pow)에서 논스값이란 무엇인가요?
작업증명에서 nonce값을 구해서 최종적으로 블록 해쉬값을 구하고, 이 블록 해쉬값을 식별자로 가지는 유효한 블록을 만들어내는 것이 작업 증명이라고 했다. 결국 nonce 값을 구하는 것이 작업 증명의 핵심이다.
위에서 말한 nonce값이 무엇인지 알고 싶습니다.
질문자께서 질문해 주신 내용에 대해 비트코인 블록체인의 블록 생성 과정을 통해 답변해 드리도록 하겠습니다.
우선 블록은 블록 헤더와 바디로 구성되어 있는데 블록 헤더에는 클라이언트 소프트웨어 버전, 이전 블록의 해시 값, 머클루트의 해시 값인 머클 해시, 블록이 생성된 시간, 난이도, 논스 값 등의 정보가 저장되어 있습니다.
또한 POW 합의 알고리즘에서 새로운 블록을 생성하기 위해 블록 해시 값을 연산한다고 할 때 소프트웨어 버전, 이전 블록의 해시 값, 머클루트의 해시 값인 머클 해시, 블록이 생성된 시간, 난이도는 결정이 되고 변하지 않습니다.
다만 논스의 경우에는 변할 수 있는 무작위 값이기 때문에 논스가 달라짐으로써 새로운 블록의 해시 값이 다르게 연산되어 나오게 됩니다.
따라서 무작위 논스 값을 해시 함수에 대입하면서 난이도 타겟 값과 같거나 낮은 값을 찾는 연산을 진행하게 되는데 이 값을 찾게 되면 블록을 생성할 수 있게 되고 이때 논스를 비롯한 나머지 모든 값을 더한 후 이것을 해싱하게 되면 이 새로운 블록의 해시 값이 연산되어 나오게 됩니다. 그리고 다시 이 해시 값이 다음 블록의 헤더에서 '이전 블록의 해시 값'이 되면서 블록체인이 이어지게 됩니다.
답변이 도움이 되길 바랍니다.