GitHub - jmh0434/TypeScript_BlockChain
→ node.js 프로젝트를 만든 다음 개발 언어를 타입스크립트로 설정하는 방식으로 진행
→ yarn으로 설치 (yarn은 JS 패키지 매니저 중 하나로 npm이 너무 무거워서 그것을 보완하기 위해 만들어짐)
yarn global add typescript
→ node.js는 타입스크리브를 이해하지 못하기 때문에 자바스크립트 코드로 컴파일하는 작업이 필요함 이를위해서 tsconfig.json에서 컴파일러 설정을 해야 함
→ index.ts는 index.js로 컴파일해야함
→ ‘tsc’를 터미널에 입력하면 index.js와 index.js.map을 만들어주고 그 다음 js를 실행하는 방식
→ tsc를 매번 입력하는 과정이 번거롭기 때문에 package.json에 script를 만들어 yarn start 명령어에 넣음.
→ tsc-watch 라이브럴는 타입스크립트의 코드변화를 감지하여 자동으로 tsc 명령을 실행해준다.
-
마이크로소프트에서 구현한 JavaScript의 슈퍼셋 프로그래밍 언어
-
컴파일의 결과물로 js 코드를 출력
-
정적 타입을 명시할 수 있어서 잘못된 변수나 함수 사용을 막을 수 있다. (JS는 일단 어떻게든 코드를 진행시킴)
처음에 변수에 값을 넣어주던가 함수를 만들 때 데이터 타입을 지정하면 됨
const name = "Min", age = 24, gender = "male"; const sayHi = (name, age, gender) => { console.log(`Hello ${name}, you are ${age}, you are a ${gender}`); }; sayHi(name, age, gender); export {}; const sayHi = (name: string, age: number, gender: string) => { console.log(`Hello ${name}, you are ${age}, you are a ${gender}`); }; sayHi("Min", 24,"male");
-
블록체인을 타입스크립트로 만들면 유효성 검사에 있어서 유리한 면이 있음
class Block { // 블록 클래스
static calculateBlockHash = ( // 블록 해시를 계산하는 함수. static 속성의 메소드를 만들었기 때문에 Block 클래스로 인스턴스를 만들지 않더라도 메소드 사용 가능
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;
}
}
- 초기의 블록을 생성한다
- 데이터를 담아서 새로운 블록을 생성한다.
- 이 새로운 블록은 블록체인에 연결되기 전에 유효성 검사를 통과해야 한다.
- 유효성 검사에 통과하면 블록체인에 연결된다.