dukDukz
[블록체인] 블록체인..? (네트워크 / 분산원장) 본문
# 블록체인
쌍방향 통신(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는 객체 혹은 배열로 선언할 수 있음
}
'웹 개발 > 블록체인' 카테고리의 다른 글
[블록체인] 블록 추가 | 블록 검증 (0) | 2021.09.02 |
---|---|
[블록체인] 블록 추가로 생성하기 (0) | 2021.09.01 |
[블록체인] 제네시스 블록 생성하기 (0) | 2021.09.01 |
[블록체인] 기본 개념 (0) | 2021.08.31 |
0824 블록체인 (0) | 2021.08.24 |