티스토리 뷰
반응형
Author: 주니용
이전에 프로토타입을 만들었다면 이제 본격적으로 활용가치가 있는 함수들을 직접 만들어보아야 하겠습니다.
소스를 간단하게 먼저 수정하고 진행하도록 하겠습니다.
import * as CryptoJS from "crypto-js";
class Block {
static calcBlockHash = (index: number, hash: string, data: string, ts: number): string =>
CryptoJS.SHA256(`${index}${hash}${ts}${data}`).toString();
private index: number;
private hash: string;
private prevHash: string;
private data: string;
private currentTimestamp: number;
constructor(index: number, hash: string, data: string) {
this.index = index;
this.hash = hash;
this.data = data;
}
getIndex() { return this.index; }
getHash() { return this.hash; }
getPrevHash() { return this.prevHash; }
getData() { return this.data; }
getTimestamp() { return this.currentTimestamp; }
}
기본적으로 Block 클래스 내의 소스를 수정하였습니다.
static method의 경우 상단으로 올리는 것이 보기 깔끔하여 이와 같이 정리하였고,
getter도 같이 추가되었네요.
그 다음, 블록들을 담을 그릇을 생성하려고 합니다.
const initBlock: Block = new Block(0, "", "");
let blockchain: Block[] = [initBlock];
const getBlockchain = (): Block[] => blockchain;
const getLatestBlock = (): Block => blockchain[blockchain.length - 1];
const getNewTimestamp = (): number => Math.round(new Date().getTime() / 1000);
currentTimestamp의 경우 기본 초까지만 출력이 되게 하기 위해 round 함수를 사용하였습니다.
다음으로, 기본적인 파라미터를 data만 받기 위한 용도의 함수를 만들어야 하겠습니다.
const makeBlock = (data: string): Block => {
const previousBlock: Block = getLatestBlock();
const newIndex: number = previousBlock.getIndex() + 1;
const newHash: string = Block.calcBlockHash(
newIndex,
previousBlock.getHash(),
data,
getNewTimestamp()
);
const newBlock: Block = new Block(
newIndex,
newHash,
data
);
blockchain.push(newBlock);
return newBlock;
};
이렇게 기본적으로 파라미터를 받아 블록이 연결되도록 소스를 작성하였습니다.
반응형
'Client' 카테고리의 다른 글
[React.js] React 설치법 (0) | 2020.03.10 |
---|---|
Thymeleaf 의 캐시(Cache) 처리 (0) | 2020.01.28 |
[TypeScript] BlockChain 만들기 (10) (0) | 2020.01.05 |
[TypeScript] BlockChain 만들기 (8) (0) | 2020.01.05 |
[TypeScript] BlockChain 만들기 (7) (0) | 2020.01.04 |
[TypeScript] BlockChain 만들기 (6) (0) | 2020.01.04 |
댓글
공지사항