티스토리 뷰

반응형

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
댓글
공지사항