비트코인/비트코인 기본 구조

[비트코인 기본 구조] 3. 작업증명(Proof-of-Work)

라이튼 2022. 6. 27. 22:49
 

[비트코인 기본 구조] 2. 타임스탬프(Timestamp)

[비트코인 기본 구조] 1. 이중 지불 문제  익명의 비트코인 개발자 사토시 나카모토는 2008년 논문과 함께 비트코인 코어를 처음 공개했습니다. 이렇게 공개된 비트코인은 처음으로 분산화된 네

kwjdnjs.tistory.com

 

 작업증명을 설명하기 위해 먼저 해시에 대해 다시 한번 생각해 보겠습니다. 어떠한 값에서 해시를 구한다는 것은 다음과 같았습니다.

 

 

 이전에 알아봤던 것처럼 어떤 값을 SHA-256함수와 같은 해시 함수를 통해서 해시 값을 얻어낼 수 있었습니다. 이러한 해시 함수에는 특징이 존재하는데 바로 해시의 값만으로는 원래 값을 알아낼 수 없다는 것입니다.

 

 

 작업증명은 이 특징을 이용합니다. 작업증명은 기본적으로 정해진 몇 개의 0비트로 시작하는 해시값을 갖는 원본 값을 찾는 것입니다. 다만 해시에서 원본 데이터를 알아내는 것은 불가능함으로 원하는 값을 찾기 위해 원본 데이터를 변경해가며 올바른 해시값을 찾아야 합니다.

 

 예를 들어 두 개의 0으로 시작하는 값(단어)을 찾아보겠습니다.

 

 

 단어를 무작위로 선택하여 fun이라는 단어가 찾던 값임을 알게되었습니다. 만약 3개의 0으로 시작하는 단어를 찾아야 한다면 더 많은 연산량(단어 확인)이 필요합니다. 찾아야 하는 0의 개수가 많아질수록 연산해야 하는 양은 지수적으로 증가합니다.

 

 이제 작업증명을 비트코인에 적용시켜 보겠습니다. 먼저 이전에 알아봤던 타임스탬프를 다시 불러오겠습니다.

 

 

  이것을 다음과 같이 표현해보겠습니다.

 

 

  표현된 모습은 조금 달라졌지만 전반적인 구조는 같습니다. 블록은 이전 블록 해시를 포함하고, 거래 내역들을 포함합니다.

 

 지금부터 여기에 작업증명을 구현해보겠습니다. 작업증명을 통해 몇 개의 0으로 시작하는 블록의 해시값을 구하려면 블록에 새로운 값인 논스(nonce,임시값)를 추가해야 합니다. 이전 블록의 해시값과 거래 내역은 변경할 수 없기 때문입니다.

 

 

그다음 원하는 해시값을 얻을 때까지 논스를 증가시킵니다.

 

0이 2개가 되도록 설정했을 경우입니다.

 

 이것이 바로 비트코인에서 사용하는 '작업증명'입니다.

 

 작업증명이 한 번 완료된 이후에는 블록의 내용을 변경할 경우 해당 블록의 작업증명을 다시 해야 합니다. 뿐만 아니라 해당 블록 이후의 블록들도 작업증명을 다시 해야 합니다. 이후의 블록들이 모두 이전 블록의 해시를 포함하고 있기 때문입니다.

 

 

 지금까지 작업증명이 무엇인지에 대해 알아보았습니다. 이후 이어지는 글에서는 작업증명이 어떻게 이중 지불 문제를 해결했는지 알아보겠습니다.

 

[비트코인 기본 구조] 4. 분산원장기술(Distributed Ledger Technology)

 비트코인 네트워크는 여러 노드(참여자)들이 서로 연결된 형태로 구성되어 있습니다. 즉 다음과 같이 새로운 거래가 발생하게 되면 최대한 많은 노드들에게 거래가 브로드캐스트 됩니다.  이

kwjdnjs.tistory.com