• All Objects
    • Life
    • Technic
    • entry
  • Tags
  • docker
  • github
  • git
  • wsl2
  • go
Technic

[번역글] How does blockchain really work? I built an app to show you.

2020. 7. 20. 00:11

원글 : How does blockchain really work? I built an app to show you.

 

How does blockchain really work? I built an app to show you.

by Sean Han How does blockchain really work? I built an app to show you. According to Wikipedia, a blockchain is: > A distributed database that is used to maintain a continuously growing list of records, called blocks. That sounds nice, but how does it wor

www.freecodecamp.org

블록체인을 쉽게 설명한 글이 있어 옮겨 왔습니다. 원글의 내용이 어렵지 않고, 내용 중 일부 오역이 포함되어 있을 수 있으니, 가능하면 원문을 참조하시는 걸 추천드립니다. 


블록체인이 어떻게 동작하냐구요? 보여드릴께요.

위키피디아에 보면, 블록체인을 다음과 같이 설명합니다.

블록이라고 칭하는 계속해서 증가하는 레코드의 목록을 관리하는데 사용하는 분산 데이터베이스

참 근사한 말입니다. 근데, 그게 어떻게 동작하는거죠? 


블록체인을 설명하기 위해서, 블록체인 CLI라는 오픈소스를 사용하겠습니다. 브라우저에서 동작하는 버전도 만들었어요.

Command-Line 버전 설치하기.

Node.js를 설치하지 않았으면 설치하시고 터미널에 다음과 같이 입력하세요.

$ npm install blockchain-cli -g
$ blockchain

"👋 Welcome to Blockchain CLI" 라는 메시지와 함께 프롬프트가 "blockchain →"로 변경되어 명령을 실행할 준비가 된 것을 볼 것입니다.

 

블록은 어떻게 생겼을까요? 

현재가지고 있는 블록체인을 확인하려면, blockchain 또는 bc 를 프롬프트에 입력하세요. 아래 그림과 같은 블록 정보를 볼 것입니다. 

블록체인에 있는 블록 정보

  • index( Block # ) : 어떤 블록인가 ( 기원블록은 0 인덱스를 가진다 )
  • Hash : 블록이 유효한가 확인하는데 사용하는 값
  • Previous Hash : 이전 블록이 가지고 있는 hash
  • Timestamp : 블록 생성 시각
  • Data : 블록에 저장된 데이터
  • Nonce : 유효한 블록을 발견하기까지 얼마나 많이 순회했는가?

Genesis Block ( 기원블록 )

모든 블록체인은 기원블록에서 시작합니다. 나중에 보겠지만 블록체인의 각 블록은 이전 블록과 연관되어 있습니다. 그래서 처음 블록을 생성하기 위해 기원블록은 반드시 있어야 합니다.

새로운 블록을 만들 때, 어떤 일들이 일어나는가?


이제 첫번째 블록을 만들어봅시다. 프롬프트에 ︎ "mine freeCodeCamp♥︎" 라고 입력합니다.

블록체인은 가장 마지막 블록의 인덱스와 이전 Hash를 확인합니다. 이 경우에 가장 마지막 블록은 기원 블록입니다. 

  • Index : 0 + 1 => 1
  • Previous Hash : 0000018035a828da0…
  • Timestamp: 블록이 생성된 시각
  • Data: freeCodeCamp❤
  • Hash: ??
  • Nonce: ??

Hash는 어떻게 계산하나?

Hash 값은 유일함을 나타내는 고정된 길이의 숫자 값입니다. Hash 는 index, 이전 블록의 Hash, timestamp, 블록 data, Nonce 값을 가지고 계산합니다.

CryptoJS.SHA256(index + previousHash + timestamp + data + nonce)

SHA256 알고리즘은 주어진 입력으로 유일한 Hash를 계산합니다. 같은 입력에 대해서는 항상 같은 Hash값을 결과를 나타냅니다. 


혹시 블록 Hash에서 '0' 4개로 시작하는것을 아셨나요?


맨 처음에 '0' 4개로 시작하는것은 유효한 Hash의 최소 요건입니다. 시작하는 '0'의 갯수를 difficulty라고 부릅니다.

function isValidHashDifficulty(hash, difficulty) {
  for (var i = 0, b = hash.length; i < b; i ++) {
      if (hash[i] !== '0') {
          break;
      }
  }
  return i >= difficulty;
}

이것은 Proof-of-Work system 이라고도 알려져있습니다.

 

nonce란 무엇인가?

nonce는 유효한 Hash를 찾는데 이용하는 숫자입니다.

let nonce = 0;
let hash;
let input;
while(!isValidHashDifficulty(hash)) {     
  nonce = nonce + 1;
  input = index + previousHash + timestamp + data + nonce;
  hash = CryptoJS.SHA256(input)
}

nonce는 유효한 Hash를 찾을 때까지 반복합니다. 위의 경우에서 유효한 Hash는 맨 앞에 최소한 4개의 '0'을 가지고 있습니다. 유효한 Hash찾아가는 과정이 mining입니다. 유효한 hash를 찾기 위해서는 많은 연산능력이 필요합니다

 

왜 이게 중요할까?

블록체인을 수정할 수 없도록 해주기 때문에 중요합니다. 


만약 블록체인 A->B->C를 가지고 있을때, 누군가 블록A의 데이터를 변경하려고 할때, 다음과 같은 일이 일어납니다. 

  1. 블록A의 데이터를 변경한다.
  2. 데이터가 변경되었으므로 블록A의 hash가 변경된다.
  3. 블록A의 hash는 더이상 '0' 4개로 시작하지 않게 되므로 블록A는 유효하지 않게된다. 
  4. 블록A의 hash가 변경되었으므로 블록B의 hash가 변경된다. 
  5. 블록B의 hash는 더이상 '0' 4개로 시작하지 않게 되므로 블록B는 유효하지 않게된다.
  6. 블록B의 hash가 변경되었으므로 블록C의 hash가 변경된다.
  7. 블록C의 hash는 더이상 '0' 4개로 시작하지 않게 되므로 블록C는 유효하지 않게된다.

블록의 값을 변경하는 방법은 블록, 그리고 그 이후에 연결된 모든 블록을 다시 마이닝하는 방법 밖에 없습니다. 그런데 블록체인에는 새로운 블록이 계속해서 추가되기 때문에 블록체인을 변경하는 것은 거의 불가능합니다.

 

웹 버전의 데모를 보고 싶다면 다음 링크에서 확인하세요.

https://blockchaindemo.io/

 

Blockchain Demo

A visual demo of the blockchain data structure

blockchaindemo.io


 

반응형
copyright 2020. noname

티스토리툴바