Cute Bow Tie Hearts Blinking Pink Pointer

블록체인

[블록체인] 블록체인 특징, 구성, 블록 만들어보기

청포도 에이드 2022. 6. 8. 17:22
728x90

목차

-블록체인 특징

-블록체인 구성

-블록 만들어보기

 

 

1. 블록체인의 특성: 탈 중앙성

 

  블록체인의 가장 중요한 기술적 특성은 탈 중앙성입니다. 블록체인은 거래 기록이 담긴 원장을 정부나 은행과 같은 제삼자에 맡기지 않고, 참여자들이 직접 검증과 승인, 합의 등의 활동을 하며 만들고 관리한다. 또 다른 특성은 투명성이며, 새로운 블록은 생성되는 동시에 모든 참여자에게 전송되어 공유된다. 따라서 블록의 거래 기록은 참여자들 누구나 볼 수 있으며, 참여자 모두가 감시자가 되는 것이다. 다만, 참여자의 실명은 알 수 없기 때문에 익명성의 특징도 갖는다. 세 번째 특성은 불변성으로, 블록이 순차적으로 연결되면, 일단 연결된 블록은 수정하거나 삭제하기 어렵다. 새로 블록을 만들 때는 바로 앞 블록의 해시가 이용되기 때문에 중간에 있는 어느 한 블록을 수정하거나 삭제하려면 모든 참여자의 컴퓨터에 있는 모든 블록 내용을 한꺼번에 바꾸어야 하기 때문이다. 이는 해킹에 대한 부분이나 누군가가 조작을 하려면 모든 참여자의 블록을 수정해야 되기 때문에 불가능한 일이 될 것이다.

 

2. 블록체인의 특성: 가용성

 

  블록체인의 또 다른 특성은 가용성입니다. 블록체인의 데이터는 모든 참여자의 노드에 분산 저장되므로, 그 중 어느 하나가 문제를 일으키더라도 전체 시스템이 유지되며 중단되지 않는다. 한 대가 잘못된다고 해서 나머지 노드가 존재하므로 시스템은 계속 동작할 수 있는 것이다. 블록은 일정 시간 동안의 거래내역을 확정하여 묶어 둔 블록체인의 기본단위로서 그것의 본질은 거래내역을 순차적으로 저장해 놓은 데이터베이스이며 비트코인의 블록 내부에는 비트코인에 대한 거래내역들이 차례대로 차곡차곡 저장되어 있으며 그 크기는 약 10분에 1개의 꼴로 새로운 블록이 생성되어 네트워크상으로 전파된다. 각 블록은 매직 넘버, 블록 크기, 블록 헤더, 거래건수, 거래내역으로 구성된다.

  블록크기는 블록 헤더, 거래건수, 거래내역들에 대한 전체 크기를 나타냅니다. 블록 헤더는 버전, 이전 블록의 해시 값, 전체 트랜잭션의 해시 값 타임스탬프, 문제 난이도, 난스(Nonce) 등의 6개 정보로 구성되어 있다. 블록 간의 연결 및 무결성 확보 등의 역할을 수행하는 것으로 이 블록 헤더가 블록체인의 핵심 기술이라 할 수 있다.

블록체인 구조

 

<블록 헤드의 구성>

항목 내용
Version 현재 프로그램의 버전
Pervious Block Hash 이전 블록을 입력 값으로 생성한 해시 값으로 블록간의 연결을 담당
Markle Root 현재 블록에 포함된 전체 거래 내역에 대한 머클트리의 최종 해시 값
Timestamp 블록의 생성시간(1970.1.1. 이후 초단위 시간)
Difficulty Target 블록을 생성하기 위하여 풀어야하는 문제의 난이도.
비트코인의 경우 약 10분에 한 개의 블록이 생성될 수 있도록 조절.
Nonce 해시캐시(Hashcash) 문제를 푸는 과정에서 찾아내는 임의의 수

 

  이 중 ‘버전(version)’은 비트코인 프로그램의 버전을 의미한다. 참여자가 임의로 프로그램 버전을 선택할 수 있지만 지속해서 업그레이드되고 있기 때문에 호환성을 유지하려면 최신 버전의 프로그램을 사용해야한다. ‘이전 블록의 해시 값’은 블록 간의 연결을 담당하며 블록체인의 무결성을 보장한다. ‘전체 트랜잭션의 해시 값’은 블록에 포함된 전체 거래내역에서 생성되는 마지막 값(머클 루트)으로 거래내역의 무결성을 보장한다. ‘타임 스태프’는 블록의 생성 시간을 나타낸다. 분산 데이터베이스의 병행 수행 제어나 데드록 방지를 위해서 각 사건에 그 사건이 발생한 시간을 붙여준 것이다. 그러므로 각 사건은 서로 다른 타임스 태프를 지녀야 하며, 또 먼저 일어난 사건은 나중에 일어난 사건보다 작은 타임 스태프를 가지게 된다. ‘문제 난이도’는 블록 생성을 위한 참여자의 노력을 확인하고 블록의 생성 간격을 약 10분으로 유지한다. ‘난스(Nonce)’는 블록을 생성하기 위해서 풀어야 하는 문제의 정답으로 답을 찾기는 어렵지만, 정답 여부를 검증하는 매우 쉬운 특징이 있다. 생성한 블록을 수신한 참여자는 해시 값, 난이도, 난수 값을 조합하여 정당하게 노력하여 생성한 블록인지 빠르게 확인이 가능하다.

 

 

 

Block body

트랜잭션 카운트(Transaction Count)

블록 바디에는 트랜잭션이 여러개 기록된다. 트랜잭션 카운트는 블록 바디에 기록된 트랜잭션의 개수다.

이 트랜잭션들은 채굴자가 선택해서 블록에 포함시킨 것이다. 채굴자는 수수료가 높은 트랜잭션을 우선적으로 선택한다.

트랜잭션을 많이 선택할수록 보상은 커지지만, 처리 시간도 많이 소요되므로 경쟁에는 불리하다. 그래서 채굴자들은 경쟁 우위와 보상의 크기를 절충해서 트랜잭션의 최적 개수를 결정한다.

코인베이스 트랜잭션(Coinbase Transaction)

채굴자는 넌스 값을 찾아 블록을 생성하면 보상을 받는다. 채굴자가 이 블록을 생성한 대가로 받는 보상을 자기 지갑으로 송금하는 트랜잭션을 젤 첫번째 트랜잭션에 넣는다. 이것이 코인베이스 트랜잭션이다.

보상은 현재 BTC와 블록이 가지고 있는 모든 트랜잭션의 수수료의 합이다.

트랜잭션(Transaction)

트랜잭션은 비트코인을 주고 받는 거래다. A가 B에게 10BTC를 보내면 한 트랜잭션이 발생한 것이다.

하지만 거래가 유효하기 위해서는 이 트랜잭션은 채굴자에 의해 선택되어 블록체인에 포함돼야 한다.

블록체인에 포함된다고 해서 완전히 승인된 것은 아니다. 채굴된 블록이 취소될 가능성이 있기 때문이다. (하드포크가 발생한 경우)

트랜잭션이 완전히 승인되려면 이 트랜잭션이 포함된 블록 이후에 적어도 6개 이상의 블록이 더 채굴돼야 한다. 한 블록당 채굴시간이 10분 정도 걸린다. 따라서 어떤 트랜잭션이 완전히 승인되려면 약 1시간 정도 소요된다. 이것은 비트코인의 문제점으로 지적되는 사항이다.

 

블록 만들어보기

const merkle = require('merkle');
const SHA256 = require('crypto-js/sha256');

const data = ['The Times 03/Jan/2009 Chancellor on brink of second bailout for bank'];

class BlockHeader {
    constructor(_height, _previousHash = '') {
        this.version = BlockHeader.getVersion();
        this.height = _height;
        this.timestamp = BlockHeader.getTimestamp();
        this.previousHash = _previousHash || '0'.repeat(64);
    }
    static getVersion() {
        return '1.0.0';
    }
    static getTimestamp() {
        return new Date().getTime();
    }
};

class Block {
    constructor(_header, _data) {
        const merkleroot = Block.getMerkleRoot(_data);
        this.version = _header.version;
        this.height = _header.height;
        this.timestamp = _header.timestamp;
        this.previousHash = _header.previousHash;
        this.merkleRoot = merkleroot;
        this.hash = Block.createBlockHash(_header, merkleroot);
        this.data = _data;
    }

    static getMerkleRoot(_data) {
        const merkleTree = merkle('sha256').sync(data);
        const merkleRoot = merkleTree.root();
        return merkleRoot;
    }

    static createBlockHash(_header, _merkleroot) {
        const values = Object.values(_header);
        const data = values.join('') + _merkleroot;
        return SHA256(data).toString();
    }
};

const header = new BlockHeader(0);
const block = new Block(header, data);
console.log(block);

실행결과

 

Block {
  version: '1.0.0',
  height: 0,
  timestamp: 1654669066075,
  previousHash: '0000000000000000000000000000000000000000000000000000000000000000',
  merkleRoot: '209A90CF65E66397E6CAAC98F8272B9801B821C9FB2CA3A2BFC45B07D065C8DC',
  hash: '8c318029e2cbab67c8a67f78cd97fdeecdd8802e3dd5922a88b7db335a1e39f5',
  data: [
    'The Times 03/Jan/2009 Chancellor on brink of second bailout for bank'
  ]
}

Reference:

https://990427.tistory.com/57

 

[블록체인] 블록체인 구조

🔔 이 글은 비트코인을 바탕으로 블록체인을 설명합니다. 🔔 블록체인은 header, body로 이루어진 블록을 연결한 구조로 되어있다. 블록에 대한 전반적인 정보는 헤더가 담고 있으며, 바디는 여러

990427.tistory.com

https://edumon.tistory.com/502

 

블록체인이란? ② 특성(탈 중앙성과 탈중개화, 효율성, 확장성, 보안성, 투명성)

안녕하세요 에듀몬입니다. 지난 시간에는 블록체인의 개념, 미래, 가상화폐 거래 원리 등을 알아보았는데요. 이번 시간에는 블록체인의 특성에 대해 알아보도록 하겠습니다. 1. 블록체인의 특성

edumon.tistory.com

 

728x90