Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발공부일지

BlockChain - hash, merkle tree, transaction, block, chain, 블록체인의 4대 요소 기술, 합의 알고리즘 본문

BlockChain

BlockChain - hash, merkle tree, transaction, block, chain, 블록체인의 4대 요소 기술, 합의 알고리즘

보람- 2024. 1. 17. 14:02

목차

1. hash

2. Merkle Tree (머클트리)

3. transaction , Tx (트랜잭션) 

4. 블록체인의 주요 4대 요소 기술

5. 합의알고리즘 종류

6. block

7. chain


 

 

 

 

 

1. hash

 

** SHA256 (알고리즘 Secure Hash Algorithm 256-bit)

- 데이터의 무결성을 검증하고 암호학적 보안을 제공하기 위한 해시 함수

- 주로 비밀번호 저장, 디지털 서명, 블록체인 블록의 해시 등 다양한 보안 관련 작업에 사용
- SHA256를 사용하려면 crypto-js 라이브러리 사용해야함

const { SHA256 } = require('crypto-js');

const str = 'hello';
console.log('해시결과 : ', SHA256(str).toString());
console.log('길이는? : ', SHA256(str).toString().length);


// 해시결과 :  2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
// 길이는? :  64

 

 

 

 

 

2. Merkle Tree (머클트리)

 

- 데이터의 무결성을 보장하기 위해 사용되는 트리 구조의 해시 구조체

- 트리처럼 뻗어서 마지막 루트 해시값을 구해서 사용한다.
- 특정 트랜잭션이나 데이터 조각이 손상되었는지를 빠르게 감지할 수 있다
- 블록의 머클 루트만 변경되고 이전 머클 루트를 참조하는 블록들에는 영향을 미치지 않는다.
- merkle 라이브러리를 사용하여 머클트리를 생성하고 관리한다.

const merkle = require("merkle");
const txData = ["A", "B", "C", "D", "E"];

const merkleTree = merkle("sha256").sync(txData);
const Root = merkleTree.root();
console.log(Root);
// AE4F3A195A3CBD6A3057C205DEF94520930F03F51F73C5A540D8FDAB05163FEF

// Hash(AB) = H(Hash(A) + Hash(B))
// Hash(CD) = H(Hash(C) + Hash(D))
// Hash(ABCDE) = H(Hash(AB) + Hash(CD) + Hash(E))

 

 

 

 

 

3. transaction , Tx (트랜잭션) 

 

- 트랜잭션은 블록체인에서 데이터의 전송이나 상태 변경을 나타내는 기본 단위

- 블록에 기록되어 블록체인의 불변성을 유지

- Input, Output, 수수료, UTXO, 밸런스 ...

 

 

 

 

4. 블록체인의 주요 4대 요소 기술

① 분산 원장 (Distributed Ledger): 

 - 네트워크의 모든 참여자에게 동일한 원장 복사본을 제공

 - 모든 거래와 상태 변경이 투명하게 기록

 - 데이터에 대한 신뢰성과 투명성이 증가

 - 중앙 중재자 없이도 안전하게 거래를 진행 가능


② 암호화 (Cryptography):
 - 블록체인의 보안을 강화하는 데 중요한 역할

 - 트랜잭션 데이터와 블록 내용은 암호화되어 저장


③ 분산 네트워크 (Distributed Network):
 - 블록체인은 분산된 네트워크에서 운영되며, 여러 노드(참여자)가 데이터를 저장하고 관리함

 - 중앙 서버가 아닌 네트워크 전체에서 거래를 검증하고 합의하는 데 사용


④ 합의 알고리즘 (Consensus Algorithm):
 - 합의 알고리즘은 블록체인 네트워크의 참여자 간에 일치된 합의를 도출하는 데 사용

 - 다양한 합의 알고리즘이 있다. (작업증명, 지분증명 등등..)

 - 합의 알고리즘을 통해 네트워크는 새로운 블록이 생성되고 기존 블록이 추가될 때의 규칙을 정의한다.

 

 

 

 

 

5. 합의알고리즘 종류

 

① 작업 증명 (Proof of Work, PoW)

 - 비트코인 연산 작업 기반의 합의 알고리즘(최초의 알고리즘)

 - 컴퓨팅 작업을 통해 블록을 생성하는 방식으로 어려운 작업(문제)를 풀어 정답을 찾으면 작업을 완료했다면 블록 생성 권한이 주어짐 (채굴자)

 - 높은 에너지 소비 환경오염


② 지분 증명 (Proof of Stake, PoS)

 - 보유한 코인의 양에 따라 블록 생성 권한이 주어짐

 - 환경 친화적, 에너지 효율


③ 권위 증명 (Proof of Athority, PoA)

 - 기관에서 사용할 노드를 증명해서 이들간의 합의를 이루는 방식

 - 두나무 블록체인 서비스(DBS)

 - 네트워크에 참여한 멤버들에게 운영 권리를 주고 전원이 해당 권한을 위임에 투표 진행

 

 

 

 

 

6. block

- 다수의 트랜잭션(데이터)을 저장, 관하는 기본적인 구조

- 각 블록은 이전 블록과의 연결성을 유지

- 블록헤더와 트랜잭션 데이터로 구성

 

** blockHeader : 버전 정보, 이전 블록 해시, 몇번째 블록인지(높이), 블록 생성시간(타임스탬프), 블 해시, 머클루트 해시값, 난이도, 채굴하기위해 몇번을 연산했는지의 값이 담긴다.

 

export interface IBlockHeader {
    version : string;
    height : number; // 블록의 높이 0 ~ 부터 시작 블록의 순서 
    timestamp : number; 
    previousHash : string; 
}

export interface IBlock extends IBlockHeader {
  merkleRoot : string; // 머클루트 해시값
  hash : string; // 블록의 내용을 모두 더해서 해시화 시킨 문자열
  nonce : number; // 블록을 채굴하기 위해서 몇번이나 연산작업을 시도했는지
  diffculty : number; // 블록의 난이도 POW 알고리즘을 연산작업
  data : string[]; // 블록의 기록되는 트랜젝션들
import { IBlock, IBlockHeader } from "@core/interface/block.interface";

class BlockHeader implements IBlockHeader {
    version: string;
    height: number;
    timestamp: number;
    previousHash: string;
    constructor(_previousBlock : IBlock) {
        // 새로 생성되는 블록은 이전블록의 내용이 필요함
         this.version = BlockHeader.getVersion();
         this.timestamp = BlockHeader.getTimestamp();
         this.height = _previousBlock.height + 1;
         this.previousHash = _previousBlock.hash;
    }

    static getVersion() {
        return "1.0.0";
    }
    static getTimestamp () {
        return new Date().getTime();
    }
}

export default BlockHeader;

 

 

 

 

 

7. chain

- 블록체인에서 체인이라는 개념은 블록이 서로 연결되는 방식
- 블록의 헤더 내용으로 포함되는 이전 블록의 해시값이 체인처럼 첫 블록부터 현재 블록까지 연결
- 체인으로 이루어져 있기때문에 데이터 불변성 검증 할 수 있다
  → 해시값이 변했다는것은 머클루트나 블록내용이 위변조 되었다는것을 뜻함
- pow 블록의 검증을 거친 후에 체인에 추가

- 블록이란 객체 데이터를 가지고있는 배열 (블록의 순서를 관리하는 것이 배열과 유사)
- 블록의 높이로 블록 인덱스 접근

- 실제로는 key, value 저장소 LevelDB를 사용한다고 함
- 블록체인의 불변성 검증과는 무관, 데이터 조회용으로 사용 (실제 블록의 기록저장이 아님)
- 메타데이터 저장 및 인덱스 관리 및 UTXO 세트 처리 등등

 

 

 

 

 


※ 개념이해하기!!!!!!!!!