본문 바로가기
  • 개발 / 공부 / 일상
BlockChain

(BlockChain) merkleTree

by JJeongHyun 2023. 1. 8.
반응형
  • 머클트리
    • 일련의 ‘데이터 무결성’을 효과적으로 검증(증명)하는 데 사용되는 구조
    • 머클 트리의 구조의 핵심은 ‘해시 함수’
    • 데이터를 여러 조각으로 나누며 생성되며, 머클루트를 형성하기 위해 반복적으로 해시화 한다
    • 머클트리는 각각의 데이터의 조각이 잘못 됐을 경우 이를 효율적으로 검증(수정)이 가능하다
    • 하위 뿌리 두개씩 쌍으로 묶어서 , 하나의 루트를 만드는 트리이다.

보기 쉽게 풀어 그린 merkleTree(머클트리)

const SHA256 = require("crypto-js/sha256");
const merkle = require("merkle");
const createMerkle = (_data) => {
  if (!Array.isArray(_data)) return "너 배열 아니다..";

  let merkleArr = _data.map((item) => SHA256(item).toString().toUpperCase());

  while (merkleArr.length > 1) {
    const tempArr = [];
    for (let i = 0; i < merkleArr.length; i += 2) {
      if (i + 1 === merkleArr.length) {
        tempArr.push(merkleArr[i]);
      } else {
        tempArr.push(
          SHA256(merkleArr[i] + merkleArr[i + 1])
            .toString()
            .toUpperCase()
        );
      }
    }
    merkleArr = tempArr;
  }
  return merkleArr[0];
};
const libMerkle = (_data) => {
  const merkleRoot = merkle("sha256").sync(_data).root();
  return merkleRoot;
};

exports.createMerkle = createMerkle;
exports.libMerkle = libMerkle;

const data = [
  "asdasdfosioduhgsd",
  "adsopfihgsja;sdklbfhdiogpf[aldsgkl",
  "asdofgjhiauojslkbdhsjopaisfdghsfaioljdghkp[a'sdgbhfkretwflks,.",
	"asdffhsuirhjwkeasfdlgkhsdlgj"
];

'BlockChain' 카테고리의 다른 글

(BlockChain) Transaction  (0) 2023.02.01
(BlockChain) Block Header  (0) 2023.01.31
(BlockChain) Merkle(머클)  (0) 2023.01.08
(BlockChain) Hash  (0) 2023.01.08
(BlockChain) 블록의 구성  (0) 2023.01.08