dukDukz

[블록체인] 블록체인..? (네트워크 / 분산원장) 본문

웹 개발/블록체인

[블록체인] 블록체인..? (네트워크 / 분산원장)

헤일리_HJ 2021. 9. 1. 11:01

# 블록체인

                쌍방향 통신(P2P)
- 네트워크 (http / socket)
- 데이터를 저장하는 코드 (블록) (분산원장)
    ㄴ 어떤식으로 데이터가 저장되는지?
        하나의 문서 같은게 있다고 치면,
        전에 있던 데이터가 어떤 곳을 바라보는지..
        이런식으로 데이터를 연결해서 사용할 수 있도록
        그런 데이터를 json 형태로 구현했다.
        1 <-바라봄- 2

# 데이터를 저장하는 코드에서 가장 핵심적인 내용
1) Hash ; sha256 jwt 할때 써봤음
            ㄴ 단방향 암호화
                한번 암호화를 하면 복호화가 절대 안됨 + 자리수 고정
2) 머클
- 블록체인의 동작원리
: 데이터 저장하는 코드 안에서...
어떤 흐름으로 가는지..?
-> 잘 묶여있는가? 풀리지 않았나? merkle 로 확인..
제네시스 블록 최상위 노드이다 라고 가정했을 때 얘가 hash12345678 라고 한다면
두개로 나눠서
첫번째 노드는 hash1234 까지받고 두번째 노드는 hash5678 을 받는다
그 다음은 12 /34                                56  /   78 
그래서 특정 블럭 검증할 때 짝꿍 확인하고 위에 부분 확인..

# 머클 사용 : 데이터 연결을 쉽게 찾기 위해서
많은 노드가 있는데 이걸 하나하나 확인하면 리소스 낭비
최소한의 노력으로 찾고자 하는걸 merkle 로 확인
그런 알고리즘이다.

merkel 은 js 에도 예제 파일 있으니까.. 찍어보자구


3) 작업 증명 (pow)
작업 증명을 하는 이유?
합의 알고리즘이라는 개념이 들어간다.
왜 합의 알고리즘이 필요한가??
데이터를 저장하는 코드가 네트워크에 실려서 떠도는데 이게 신뢰할 수 있는건지 검증하기 위해서 필요하다.
ㄴ 증명 방법 중 하나라고 생각하면 된다.
검증된 데이터라는 결과를 51% 이상 받으면 된다. 그게 마이닝.. 채굴
검증이 되었다면 보상 (비트코인) 을 받는다.
각각의 블록체인 서버에 보내서 검증받는 작업이 마이닝이라고 생각하면 될듯

--------------------------------
데이터를 저장하는 코드 (블록)

[block.js]
http request message
------------
start line    |
header      |
               |
body        |
-------------



MagicNumber : "0xD9B4BEF9",
BlockSize : "4mb",

이 두개는 있어도 그만 없어도 그만
형태는 고정이 아니다.


[객체]
// 이런식으로 흔히 만든다.. 딱히 규약은 없지만 이런식으로 하면 된다..
const block = {
    header:{
        version:"1.0.0",
        HashPrevBlock: 0x00000000000,   // 얘는 상위블럭이 없다는 뜻 - 있으면 부모블럭을 쓰면 됨
        HashMerkleRoot:`SHA256`,        // 암호화에 대한 내용
        timestampe:`시간`,
        bits:`작업증명 난이도를 정하는 숫자들`,      // 난이도를 가변적으로 바꾸는 상황이 아니면 필요는 없음
        Nonce: `난수`                           // 4byte 숫자 .. 양수만 가능
    },
    body : ["hello world"]                      // body는 객체 혹은 배열로 선언할 수 있음    
}