지난 글
[Typescript] 블록 체인 만들기 : Typescript /Js 간단 문법 정리/노마드코더 바닐라Js/Typescript 란?
* 바닐라 JS 기본 문법 정리 변수 선언: var : 변수를 선언 동시에 값을 초기화. ex) var x = 1; let : 지역 변수를 선언 동시에 값을 초기화. ex) let y = 2; const : 읽기 전용 상수 선언. ex) const z = 3;..
vnfmadl234.tistory.com
블록체인이란?
비트코인의 열풍으로 가상화폐와 블록 체인 등을 많이 접해봤을텐데, 블록 체인이란 '데이터 분산 처리 기술' 이다. 즉, 거래 정보를 담긴 블록들이 체인 처럼 연결되어있는 형태를 블록 체인이라 부른다. 블록 체인은 개개인의 네트워크 참가자가 각각 나누어 분산하여 데이터를 저장하므로 위조 또는 변조가 어렵다. 또한, 은행과 같은 중앙 관리자가 필요 없다는 점도 있다.
이러한 블록체인을 Typescript를 통해 간단히 구현해 볼 것이다.
블록 class 생성
class Block{
public index: number;
public hash: string;
public previousHash: string;
public data: string;
public timestamp: number;
constructor(index: number,hash: string,previousHash: string,data: string,timestamp: number) {
this.index = index;
this.hash = hash;
this.previousHash = previousHash;
this.data = data;
this.timestamp = timestamp;
}
class와 생성자를 통해 블록의 index, hash값, previousHash, data, timestamp를 초기화 해준다.
const genesisBlock:Block = new Block(0, "2020202020", "", "Hello", 123456);
let blockchain: [Block] = [genesisBlock];
console.log(blockchain);
export {}
그 후 genesisBlock를 만들고 블록체인에 연결한다.
그리고 출력을 해보면,

다음과 같이 입력한 블록이 출력된다.
블록체인은 Hash를 가지고 있다. Hash는 hash함수를 이용하여 고정된 길이의 암호화된 문자열로 바꾸는 것이다.
Hash를 계산을 해주어야한다.
먼저 'Crypto-Js를 설치 해줘야한다. 터미널에 yarn add crypto-js를 한후, 다음과 같이 직접 import를 해준다.
import * as CryptoJS from "crypto-js";
cryptoJs를 정상적으로 설치 했으면 해쉬를 계산하는 메서드를 만들어 준다.
class Block {
static calculateBlockHash = (
index: number,
previousHash: string,
timestamp: number,
data: string
): string =>
CryptoJS.SHA256(index + previousHash + timestamp + data).toString();
각각의 index, previousHash, timestamp, data 값들을 해당 타입으로 가져와 마지막 줄의 String으로 리턴 해준다.
이제 필요한 함수를 추가 해준 후,
const getBlockchain = (): Block[] => blockchain;
const getLatestBlock = (): Block => blockchain[blockchain.length - 1];
const getNewTimeStamp = (): number => Math.round(new Date().getTime() / 1000);
블록을 만드는 함수, 해쉬값을 체크하는 함수, 블록을 만드는 함수를 작성하자.
const createNewBlock = (data: string): Block => {
const previousBlock: Block = getLatestBlock();
const newIndex: number = previousBlock.index + 1;
const newTimestamp: number = getNewTimeStamp();
const newHash: string = Block.calculateBlockHash(
newIndex,
previousBlock.hash,
newTimestamp,
data
);
const newBlock: Block = new Block(
newIndex,
newHash,
previousBlock.hash,
data,
newTimestamp
);
addBlock(newBlock);
return newBlock;
};
const getHashforBlock = (aBlock: Block): string =>
Block.calculateBlockHash(
aBlock.index,
aBlock.previousHash,
aBlock.timestamp,
aBlock.data
);
const isBlockValid = (candidateBlock: Block, previousBlock: Block): boolean => {
if (!Block.validateStructure(candidateBlock)) {
return false;
} else if (previousBlock.index + 1 !== candidateBlock.index) {
return false;
} else if (previousBlock.hash !== candidateBlock.previousHash) {
return false;
} else if (getHashforBlock(candidateBlock) !== candidateBlock.hash) {
return false;
} else {
return true;
}
};
const addBlock = (candidateBlock: Block): void => {
if (isBlockValid(candidateBlock, getLatestBlock())) {
blockchain.push(candidateBlock);
}
};
이제 블록을 만들어 출력을 해보면
createNewBlock("second block");
createNewBlock("third block");
createNewBlock("fourth block");
console.log(blockchain);

블록이 잘 생성됨을 알 수 있다!
전체코드
Git : github.com/m3k0813/typescriptBC
노마드코더
'Typescript' 카테고리의 다른 글
[Typescript] 블록 체인 만들기 : Typescript /Js 간단 문법 정리/노마드코더 바닐라Js/Typescript 란? (0) | 2021.03.21 |
---|