노마드코더 / 타입스크립트 실습

8931 단어 2021.052021.05

깃허브 레포
블록체인 유튜브 영상(노마드코더)

1. 🇹 CryptoJS

자바스크립트 암호화 라이브러리다.

import * as CryptoJS from "crypto-js"; // ts 에서는 이렇게 import 함

class Block {
  static calculateBlockHash = ( 
    index: number,
    previousHash: string,
    timestamp: number,
    data: string
  ) : string =>
  CryptoJS.SHA256(index + previousHash + timestamp + data).toString();
}

이런식으로 Hask값을 얻는다.
암호화할때 유용하게 쓸 수 있을 것 같다.
npm CryptoJS

2. 🇹 유효성검사

타입스크립트가 타입을 검사해주긴 하지만,
블록체인의 특성상 이런식으로 현명하게 확인하는 작업을 가진다고 한다.
이렇게 꼼꼼하게 확인하는 습관을 들여야겠다고 생각했다.

class Block {
  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";
}

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;
  }
};

3. 🇹 Void

return 값이 없어서 void 를 사용한다.
해당 함수는 블록이 유효하면 블록체인에 새로운 블록을 추가하는 내용이다.
이 경우 함수에 push 하는 작동을 하고, return 값이 없다.

void 라는 타입의 예제를 실용적으로 확인할 수 있어서 좋았다.

const addBlock = (candidateBlock:Block): void => { 
  if (isBlockValid(candidateBlock, getLatestBlock())) {
    blockchain.push(candidateBlock);
  }
};

4. 🇹 후기

상상했던 것보다 복잡하지 않아서 좋았다.
변수에 타입을 지정해주고, 특정 함수가 어떤 타입을 리턴하는지 지정함으로써
코드를 잘못작성한 순간 에러를 통제할 수있어서 편리하다고 느꼈다.
인터페이스를 자바스크립트에서 사용하고 싶으면,
클래스를 이용하면 돼서 편의에 따라 활용해야겠다고 생각했다.

자유로운 자바스크립트에게 규칙을 부여하는 타입스크립트!
앞으로 자주 사용해야겠다.

+) 수료증도 날아왔다 ! ㅋ.ㅋ

좋은 웹페이지 즐겨찾기