Blockchain

#1 Block의 요소

Sila 2022. 6. 8. 18:19

Blockchain을 크게 두 부분으로 나누면 block과 chain이다.

 

여러 개의 block들을 chain으로 이었다는 의미에서 우리는 이를 blockchain이라고 부른다.

 

이에 대해 이해하기 위해, 우선 개별 block이 무엇인지,

 

이 각각의 block들에는 어떤 정보들이 담겨 있는지 알아보는 것으로 시작하자.

 

다음은 실제 비트코인의 제네시스 블럭이다.

 

https://www.blockchain.com/btc/block/0

 

 

해시 값, 확인 횟수, 시간, 난이도, 채굴 보상 등 다양한 정보가 담겨 있는 것을 알 수 있다.

 

여기서는 이 중 hash, merkleroot에 대해 알아보자.

 

1. hash

블럭에서 hash는 블럭 내 정보를 sha256 알고리즘으로 암호화한 정보이다.

 

이 hash 값을 활용하면 블럭이 위조되었는지 등 블럭에 대한 정보를 알 수 있다.

 

어떤 문자열이든 SHA256 암호화 알고리즘을 거치면 64자리의 16진수로 변환해준다.

 

이를 위해 라이브러리로 crypto-js가 있다.

 

npm으로 crypto-js를 설치한 후, 다음과 같이 가져온다.

 

const SHA256 = require('crypto-js/sha256')

이 SHA256은 문자열을 주면 이를 해시로 변환해주는 함수라고 보면 된다.

 

다음과 같이 아무 문자열이나 선언해 함수에 넣어보자.

 

const exa = 'hash'

const exa_hash = SHA256(exa).toString()

console.log(exa_hash)
// 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

console.log(exa_hash.length)
// 64

 

이 SHA256 암호화는 단방향 암호화의 한 종류인데, 단방향 암호화는 정보를 암호화 하는 것은 쉽고,

 

어떤 정보를 암호화했을 때 정말 그 암호화된 값이 나오는지를 확인해보는 것은 쉽지만,

 

반대로 암호화된 값을 해독해 원래의 정보를 알아보는 것은 매우 어려운 종류의 암호화를 의미한다.

 

2. merkle

merkle은 블럭 내의 트렌젝션 데이터들을 모두 암호화해 모아서 하나의 스트링을 만드는 것을 의미한다.

 

각 데이터들을 해시화한 문자열들끼리 더하고 이를 다시 해시화 한 결과물을

 

다시 2개씩 모아 다시 합치고 해시화하는 것을 반복하다 보면 마지막엔 1개의 결과물만이 남는다. 

 

이 모든 트렌젝션 데이터에 관한 정보를 가진 문자열을 merkelRoot라고 하며, 블럭을 특정 짓는 하나의 요소가 된다.

 

이 merkelRoot에는 모든 트렉젝션에 관한 정보가 들어있으므로 이를 이용해 내가 찾는 트렉젝션이 블럭 안에

 

있는지 여부를 확인할 수 있다. 

 

 

'Blockchain' 카테고리의 다른 글

#6 chain  (0) 2022.06.12
#5 block 검증  (0) 2022.06.12
#4 block 생성  (0) 2022.06.12
#3 typescript - 2  (0) 2022.06.11
#2 typescript  (0) 2022.06.11