Blockchain 36

#6 chain

이제 블럭에 대한 기본적인 사항들은 공부를 했으니 체인, 블럭을 체인으로 이은 블럭체인이 무엇인지 알아보자. 체인은 이미 공부한 것이나 다름없다. 한 블럭이 다른 블럭의 다음에 온다는 것을 알려주는 것이 바로 hash값과 previousHash 값이다. n번째 block의 hash 값이 n+1 번째 block의 previousHash와 동일하다면 이 두 블럭이 연속된 순서로 온다는 것을 쉽게 알 수 있다. 이 해시의 동일성 자체가 그 블럭을 이어주는 chain이라고 볼 수 있다. blockchain은 순서를 알고 있는 (chain으로 이어진 관계를 가진) 일련의 블럭들을 배열에 담은 것을 의미한다. 본격적으로 chain, blockchain을 코드로 구현하기 전에 약간 데이터의 재배치를 진행하도록 하자...

Blockchain 2022.06.12

#5 block 검증

다른 사람이 만든 블럭을 그냥 가져다 쓸 수는 없다. 이 블럭이 제대로 된 블럭인지를 먼저 검증하는 과정이 반드시 필요하다. 다른 사람이 만든 블럭을 봤을 때 이 블럭이 제대로 된 블럭인가? 를 판별하는 기준은 3가지가 있다. a) 새로운 블럭의 height 값이 이전 블럭의 height + 1 의 값을 가지는가? b) 이전 블럭의 hash 값과 새로운 블럭의 previousHash 값이 같은가? c) 새로운 블럭이 가진 data들, 정확히는 version, merkleRoot, timestamp, height, previousHash 값을 조합해 내가 hash값을 만들어봤을 때, 이 블럭이 가진 hash 값이 정말 나오는가? 셋 중 하나라도 만족하지 못하면 이 블럭은 잘못된 블럭이다. 이 검증과정은 간..

Blockchain 2022.06.12

#4 block 생성

지금까지 공부한 ts 문법을 이용해 block을 생성해보자. merkleRoot를 만들어주는 라이브러리 merkle은 ts 전용으로도 존재하므로 이를 먼저 설치한다. merkleRoot에 대해서는 https://liferesetbutton.tistory.com/59?category=944752로. npm i merkle npm i --save-dev @types/merkle // 둘 모두 설치해야 문제없이 작동한다. 1. Block, BlockHeader 셋업 Block class를 우선 선언을 해주되, 전역으로 사용할 수 있도록 @types 폴더에 파일을 만들어 선언한다. /* @types/Block.d.ts */ declare interface IBlockHeader { version : string..

Blockchain 2022.06.12

#3 typescript - 2

이제 typescript, class 문법을 이용해 변수를 선언하고 군집형 데이터를 표현하는 법에 대해 알아보자. 1. class 선언 ts에서 하나의 객체 class를 생성할 때는 interface 명령어를 이용해 이 객체가 어떤 key들을 가질지, 그 key의 value의 데이터 타입은 어떤지를 미리 지정해주며 선언해야한다. src/core 에 ex_class 폴더를 만들고 interface.ts 파일을 생성해 작성해주자. /* src/core/ex_class/interface.ts */ interface User { name : string birth : number activation : boolean address : string } 이렇게 User class를 선언했을 때, 이 class는 반..

Blockchain 2022.06.11

#2 typescript

1. typesrcipt javascript와 비슷한데, 이보다는 조금 strict한 문법을 제공한다고 볼 수 있다. 대표적으로 우리가 변수를 선언할 때 JS에서는 데이터의 종류를 따로 지정하지 않고 자유롭게 쓸 수 있었지만 (배열인지 숫자인지 문자열인지 등..) TS에서는 변수 선언시 데이터 종류(type)을 반드시 함께 선언해주어야한다. 우리가 class 문법을 이용해 객체 (이제부턴 보통 블럭) 를 사용할 때, 그 class안에 있을 요소와 그 데이터 타입을 지정해 class를 선언해주면 앞으로 해당 class에 속하는 객체를 생성 할 때, 선언시 지정된 속성, 데이터 타입과 다를 경우 그 사실을 알려줄 것이다. 우선 ts 파일을 하나 만들고, 이를 js로 변환하는 가장 간단한 작업을 하는 것부터 ..

Blockchain 2022.06.11

#1 Block의 요소

Blockchain을 크게 두 부분으로 나누면 block과 chain이다. 여러 개의 block들을 chain으로 이었다는 의미에서 우리는 이를 blockchain이라고 부른다. 이에 대해 이해하기 위해, 우선 개별 block이 무엇인지, 이 각각의 block들에는 어떤 정보들이 담겨 있는지 알아보는 것으로 시작하자. 다음은 실제 비트코인의 제네시스 블럭이다. https://www.blockchain.com/btc/block/0 해시 값, 확인 횟수, 시간, 난이도, 채굴 보상 등 다양한 정보가 담겨 있는 것을 알 수 있다. 여기서는 이 중 hash, merkleroot에 대해 알아보자. 1. hash 블럭에서 hash는 블럭 내 정보를 sha256 알고리즘으로 암호화한 정보이다. 이 hash 값을 활용..

Blockchain 2022.06.08