티스토리 뷰
반응형
Author: 주니용
앞의 글에서 블록들을 연결시켜주는 로직을 작성해보았습니다.
하지만, 이 상태로는 빈 데이터가 들어오는 경우에도 체인이 되는 형태이고, 또 같은 데이터가 동시에 들어와 해시값이 같더라도 문제가 발생하죠.
그렇기 때문에 검증하는 단계를 추가하여야 합니다.
마지막으로 추가하는 검증 소스는 아래와 같습니다.
먼저 Block 클래스 내부에 타입을 검증할 수 있는 로직을 추가해보려 합니다.
static checkStruct = (block: Block): boolean =>
typeof block.index === "number" &&
typeof block.hash === "string" &&
typeof block.data === "string";
자, 이제 typeof 함수를 이용하여 각 블록이 가지고 있는 타입이 유효한지에 대한 검증 소스를 추가하였습니다.
이번에는 이것을 응용하여 블록이 유효한지에 대해 플래그를 뱉어주는 소스를 만들어보려 합니다.
const getHashdata = (block: Block): string =>
Block.calcBlock(block.getIndex(), block.getPrevHash(), block.getData(), block.getTimestamp());
const isValidBlock = (candidate: Block, prev: Block): boolean => {
if(!Block.checkStruct(candidate)) return false;
else if(prev.getIndex() !== candidate.getIndex() - 1) return false;
else if(prev.getHash() === candidate.getHash()) return false;
else if(getHashdata(candidate) === candidate.getData()) return false;
else return true;
}
이렇게해서 blockchain.push(newBlock); 위에 isValidBlock을 넣어주면 완벽해지겠죠?
const makeBlock = (data: string): Block => {
// ...
if(isValidBlock(newBlock, getLatestBlock()))
addBlock(newBlock);
return newBlock;
}
const addBlock = (candidate: Block): void => {
blockchain.push(candidate);
}
처음에 init 블록을 제외하고 싶으면 아래와 같이 하면 됩니다.
blockchain.shift(); |
이렇게 블록체인을 검증하는 로직을 개발하는 시간을 가져봤습니다 :)
반응형
'Client' 카테고리의 다른 글
[React.js] React를 시작하기에 앞서 (0) | 2020.03.10 |
---|---|
[React.js] React 설치법 (0) | 2020.03.10 |
Thymeleaf 의 캐시(Cache) 처리 (0) | 2020.01.28 |
[TypeScript] BlockChain 만들기 (9) (0) | 2020.01.05 |
[TypeScript] BlockChain 만들기 (8) (0) | 2020.01.05 |
[TypeScript] BlockChain 만들기 (7) (0) | 2020.01.04 |
댓글
공지사항