개발공부일지
BlockChain - hash, merkle tree, transaction, block, chain, 블록체인의 4대 요소 기술, 합의 알고리즘 본문
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 세트 처리 등등
※ 개념이해하기!!!!!!!!!
'BlockChain' 카테고리의 다른 글
BlockChain - truffle, ERC20, remix (0) | 2024.01.29 |
---|---|
BlockChain - RPC 통신, ganache, web3, Solidity (0) | 2024.01.25 |
BlockChain - Ethereum (0) | 2024.01.24 |
BlockChain - Transaction, UTXO(Unspent Transaction Output), jest 테스트하기 (0) | 2024.01.24 |
BlockChain - P2P (0) | 2024.01.23 |