* 아래의 글은 JavaScript 프롤로그 및 목차를 먼저 읽으신 후 읽으시기를 권장합니다.
* 타입스크립트를 사용해 블록체인 개발하기는 타입스크립트 기본 세팅 방법을 따라 하신 후 사용하기를 권장합니다.
* 타입스크립트 기본 문법은 타입스크립트 핸드북 을 통해 학습하시는 것을 추천드립니다.
본 글에서 다룰 내용
- TypeScript를 사용하기 위한 세팅
- 블록 구조를 잡을 class 선언
- 블록체인을 형성하기 위한 간단한 함수 구현
TypeScript를 사용하기 위해 세팅을 해주어야 합니다.
저의 이전 글인 타입스크립트 세팅 방법 및 tsc-watch 사용하기 글을 따라하시면 위와 같은 폴더 구조를 가지게 됩니다.
이전 글을 따라하시면서 위와 같은 폴더 구조를 완성한 뒤 아래의 글을 따라 진행해주세요.
제일 먼저 블록을 구조를 잡을 class를 생성합니다.
import * as CryptoJS from 'crypto-js';
class Block{
//Hash키를 생성하기 위한 메소드 (static으로 선언함으로서 class를 선언하지 않아도 사용 가능)
static calculateBlockHash = (
index:number,
previousHash:string,
timestamp:number,
data:string) : string => CryptoJS.SHA256(index + previousHash + timestamp + data).toString();
//블록의 구조를 인증하기 위한 메소드
static validateStructure = (aBlock : Block) : boolean =>
typeof aBlock.index === "number" &&
typeof aBlock.hash === "string" &&
typeof aBlock.previousHash === "string" &&
typeof aBlock.timestamp === "number" &&
typeof aBlock.data === "string";
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 안에 있는 코드의 순서는 메소드 -> 변수 혹은 나머지 데이터 -> constructor 순을 추천드립니다.
위의 코드에서 중요하게 볼 부분은 static 메소드입니다.
static 메소드를 사용하는 이유는 다음과 같습니다.
- 클래스가 생성되지 않아도 호출하기 위해
이해를 돕기 위해 간단한 코드를 보여드리겠습니다.
static으로 선언하지 않았을 때
class Greeting{
sayHello = () : void => console.log("Hello");
}
const Greet: Greeting = new Greeting();
//아래의 코드는 작동이 되지 않습니다.
Greeting.sayHello();
//아래의 코드는 작동이 됩니다.
Greet.sayHello();
static으로 선언하였을 때
class Greeting{
static sayHello = () : void => console.log("Hello");
}
const Greet: Greeting = new Greeting();
// 두 개의 코드 모두 작동
Greeting.sayHello();
Greet.sayHello();
코드로 보니 확실히 알겠죠? 위와 같은 이유로 두 개의 메소드를 static으로 선언하였습니다.
HashKey를 발급받기위해 crypto-js를 사용하였습니다.
calculateBlockHash 메소드에서 string형으로 CryptoJS를 사용하여 HashKey를 리턴하였습니다.
validateStructure는 각 블록안에 있는 값들이 알맞은 Type으로 들어왔는지 확인하는 메소드입니다.
각 인자의 type들을 확인해 true or false로 boolean값을 리턴합니다.
복잡한 코드를 작성하기 전에 간단한 함수부터 구현합시다.
일단 제일 먼저 첫번째 블록과, 블록이 들어갈 배열부터 선업합니다.
const firstBlock:Block = new Block(0, "2020202020202", "", "Hello", 123456);
let blockChain:Block[] = [firstBlock];
블록체인 배열안에 있는 최신 블록을 가져오는 함수입니다.
//블록체인 배열안에 있는 최신 블록을 가져오는 함수
const getLatesBlock = () : Block => blockChain[blockChain.length - 1];
새로운 timestamp를 만드는 함수입니다.
//새로운 timestamp를 받아오는 함수
const getNewTimeStamp = () : number => Math.round(new Date().getTime() / 1000);
각 블록의 해당 HashKey를 발급 받는 함수입니다.
// 각 블록의 해쉬키를 발급 받는 함수
const getHashforBlock = (aBlock : Block) :string =>
Block.calculateBlockHash(
aBlock.index,
aBlock.previousHash,
aBlock.timestamp,
aBlock.data
);
참고 문헌 및 사이트
노마드코더 TypeScript로 블록체인 만들기 - https://www.youtube.com/watch?v=7wAhwv2Rbxw
crypto-js npm 공식 문서 - https://www.npmjs.com/package/crypto-js
Typescript handbook - https://typescript-kr.github.io/pages/tsconfig.json.html
전체 코드는 제 깃헙 링크에서 확인하실 수 있습니다.
TS-typechain - https://github.com/Bigstar1108/Do_Your_Best/tree/master/TS-typechain
긴 글 읽어주셔서 감사합니다😀
'TypeScript' 카테고리의 다른 글
TypeScript 타입스크립트 + 리액트를 활용해 TodoList 만들기 #1 (0) | 2020.07.22 |
---|---|
TypeScript 타입스크립트를 사용해 블록체인 개발하기 #2 (0) | 2020.07.20 |
TypeScript tsc-watch 사용하기 (2) | 2020.07.16 |
TypeScript 타입스크립트 세팅 방법 (0) | 2020.07.16 |
TypeScript 프롤로그 및 목차 (0) | 2020.07.15 |