728x90
1. crypto-js
SHA-256은 현재 블록체인에서 가장 많이 채택해서 사용하고 있는 암호 방식
출력 속도가 빠르다는 장점을 가지고 있고 단방향성 암호화 방법이라 복호화가 불가능하다.
아직까지는 안정성에서 큰 단점이 발견되지 않았고 속도가 빨라서 인증서나 블록체인등에 많이 사용중이다.
SHA256 알고리즘은 256비트로 구성된 64자리 문자열로 암호화 해준다.
const SHA256 = require("crypto-js/sha256");
const str = "HelloWorld";
console.log("해시결과 : ", SHA256(str).toString());
console.log("해시 길이 : ", SHA256(str).toString().length);
2. merkle
Merkle Tree 는 Block에 포함된 트랜잭션들을 나무 형태로 요약한것이다.
Merkle Tree는 비트코인과 다른 암호화폐에 필수적인 요소 블록헤더에 있는
블록들의 필수요소이고 데이터들을 해시화해서 더한후 해시화를 반복해서 트리처럼 뻗어 마지막 루트 해시값을 구한다.
const merkle = require("merkle");
const data = ["12312", "454", "12344", "56666", "85954", "01394"];
const merkleTree = merkle("sha256").sync(data);
const Root = merkleTree.root();
console.log(Root);
3. 블록 만들기
최초 블럭 만들기
const merkle = require("merkle");
const SHA256 = require("crypto-js/sha256");
(1) 블록 헤더 만들기(클래스)
class Header {
constructor(_height, _previousHash) {
// 블록의 버전
this.version = Header.getVersion();
// 블록의 높이
this.height = _height;
// 블록의 생성 시간
this.timeStamp = Header.getTimeStamp();
// 이전 블록의 해시값
// 최초 블록은 이전 블록의 해시값이 없으니까 값이 없으면 0으로 만들어진 문자열 넣어줌
this.previousHash = _previousHash || "0".repeat(64);
}
// static으로 만들어서 버전 정보 볼수 있게
static getVersion() {
return "1.0.0";
}
static getTimeStamp() {
return new Date().getTime();
}
}
(2) 블록 만들기(클래스)
class Block {
constructor(_header, _data) {
// 받아온 헤더의 버전을 블록에게 주고
this.version = _header.version;
// 블록의 높이도 헤더에서 주고
this.height = _header.height;
this.timeStamp = _header.timeStamp;
this.previousHash = _header.previousHash;
this.data = _data;
this.merkleRoot = Block.getMerkleRoot(_data);
this.hash = Block.createBlockHash(_header, Block.getMerkleRoot(_data));
}
static getMerkleRoot(_data) {
const merkleTree = merkle("sha256").sync(_data);
return merkleTree.root();
}
static createBlockHash(_header, _merkleRoot) {
const values = Object.values(_header);
const data = values.join("") + _merkleRoot;
return SHA256(data).toString();
}
}
(3) 블록 생성하기
const data = [
"The Times 03/Jan/2009 Chancellor on brink of second bailout for banks",
];
// 첫번째 블록
const header = new Header(0);
const block = new Block(header, data);
console.log(block);
// 다음 블록
const header2 = new Header(1, block.hash);
const block2 = new Block(header2, ["두번째 블록"]);
console.log(block2);
728x90
'개발 > BlockChain' 카테고리의 다른 글
[BlockChain] TypeScript로 지갑 만들기 (0) | 2022.11.11 |
---|---|
[BlockChain] TypeScript로 P2P 구현 (0) | 2022.11.07 |
[BlockChain] TypeScript로 체인 만들기 (0) | 2022.11.03 |
[BlockChain] TypeScript로 블록 만들기 (1) | 2022.11.02 |
[블록체인] 비트코인 (0) | 2022.10.31 |