[블록체인] 자바스크립트로 블록 만들기

2022. 10. 31. 15:57·개발/BlockChain
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로 체인 만들기  (1) 2022.11.03
[BlockChain] TypeScript로 블록 만들기  (1) 2022.11.02
[블록체인] 비트코인  (0) 2022.10.31
'개발/BlockChain' 카테고리의 다른 글
  • [BlockChain] TypeScript로 P2P 구현
  • [BlockChain] TypeScript로 체인 만들기
  • [BlockChain] TypeScript로 블록 만들기
  • [블록체인] 비트코인
TeTedo.
TeTedo.
  • TeTedo.
    TeTedo 개발 일기
    TeTedo.
  • 전체
    오늘
    어제
    • 분류 전체보기 (319)
      • 개발 (274)
        • Article (4)
        • 정리 (21)
        • Spring Boot (17)
        • JPA (2)
        • JAVA (6)
        • Database (4)
        • 자료구조 (11)
        • 알고리즘 (32)
        • React (20)
        • Docker (10)
        • node.js (18)
        • Devops (11)
        • Linux (4)
        • TypeScript (3)
        • Go (10)
        • HyperLedger (4)
        • BlockChain (43)
        • html, css, js (48)
        • CS (3)
        • AWS (3)
      • 모아두고 나중에 쓰기 (3)
      • 팀프로젝트 (18)
        • SNS(키보드워리어) (9)
        • close_sea (9)
      • 개인프로젝트 (1)
        • Around Flavor (1)
        • CHAM (13)
        • ethFruitShop (5)
      • 독서 (0)
        • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (0)
  • 블로그 메뉴

    • 홈
    • 개발일기
    • CS
    • 실습
    • 코딩테스트
    • 웹
    • Go
    • node.js
    • 팀플
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    블록체인
    React
    go언어
    CSS
    js
    node.js
    erc20
    go
    30일챌린지
    프로그래머스
    mysql
    도커
    html
    node
    30일 챌린지
    하이퍼레저
    컨테이너
    명령어
    nodejs
    ERC721
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
TeTedo.
[블록체인] 자바스크립트로 블록 만들기
상단으로

티스토리툴바