BlockChain Basic

이민기·2023년 6월 27일
0
post-thumbnail

블록체인 기초 입문서

Intro

여러 블록체인 강의를 듣다보면 입문자를 위한 블록체인 소개 부분이 대부분 있습니다...

그.러.나
저를 포함한 어떤 사람들은 이 부분들… 혹시나 내가 모르던 정보가 있지 않을까…? 해서 알면서도 듣게 되는데….

그냥 이번에 한번 이전에 정리했던 글과 지금 듣고 있는 강의의 초반 부분을 기준으로 입문자를 위한 간단한 블록체인 요약서를 정리해보려 합니다 🫠🫠🫠🫠🫠🫠

이러한 이유로 여러 블록체인 강의를 들으면 나오는 기초들 정리를 시작해봅니다 ^~^

블록체인이란 ?

분산원장기술(DLT, Distributed Ledger Technology)을 기반으로 여러 사용자가 Transaction이 들어있는 Block과 Chain을 통하여 같은 데이터를 갖는 구조

  • Transaction : 블록체인 네트워크에서 데이터를 전송하거나 네트워크의 상태 변경을 요청하는 작업의 단위
  • Block : Transaction을 담은 거래 기록의 집합
  • Chain : 블록을 만들어진 순서대로 연결한 블록의 집합

🚨 분산원장과 블록체인 기술은 엄밀히 말하면 차이점이 존재한다
하나의 예시로 분산원장은 데이터를 저장할 대 꼭 순서대로 저장할 필요가 없지만, 블록체인은 모든 블록들이 직전 블록을 가리킴으로 순차적으로 저장된다.

특징

  • 중앙 집중 원장에서 거래의 중간에서 DB유지,관리와 보안을 위한 중개수수료에 따른 비용 문제 절감
  • 중앙 집중 원장은 원장이 중앙에 집중되어 있으므로 해커가 공격을 성공할 시에 모든 데이터의 보안에 취약할 수 있으나 블록체인을 통해 데이터가 여러 사용자에게 있다면 보안 측면에서 유리

Block

블록체인의 구성 단위로, 여러 개의 트랜잭션을 포함. 일정한 크기로 제한되어 있는 특징이 있으며 이전 블록과 연결되어 순차적으로 구성

구성요소

  • Block Header : 블록의 메타데이터를 포함하는 부분이며 주요 요소로는 블록의 고유 식별자인 Block Hash, TimeStamp, Previous Block Hash등을 포함
  • Transactions : 해당 블록에 포함되어있는 Transaction들의 집합
  • Block Hash: 블록 헤더와 트랜잭션 데이터의 hash를 계산한 값이며 이를 텅해 무결성을 검증

Genesis Block

블록체인 네트워크 상 제일 첫 번째 블록을 의미하며, 해당 블록체인 네트워크의 초기 상태를 정의

# Geneis Block JSON File
{
  "config": {
    "chainId": 12345,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "istanbulBlock": 0,
    "berlinBlock": 0,
    "ethash": {}
  },
  "difficulty": "1",

  "gasLimit": "8000000",
  # genesis block에 등록한 계정 및 balance
  "alloc": {
    "7df9a875a174b3bc565e6424a0050ebc1b2d1d82": { "balance": "300000" },
    "f41c74c9ae680c1aa78f42e5647a62f353b7bdde": { "balance": "400000" }
  }
}

Transactions

블록체인 네트워크에서 데이터를 전송하거나 상태 변경을 요청하는 작업 단위

🚨 조금 더 자세하게 알고 싶다면, 트랜잭션의 구조를 이더리움과 함께 조금 더 자세하게 적어본 게시글을 참고하면 좋을 것 같다 🥲

Hash

입력 값을 고정된 길이의 데이터로 변환하며 역으로 고정된 길이로는 입력 문서를 찾을 수 없는 단방향 속성을 갖고 있는 암호화 방식이며 데이터의 무결성을 증명할 수 있는 수단

🚨 해싱에 대하여 조금 더 자세한 내용은 여기서확인 가능하다. 🥲


Node

트랜잭션을 제안, 검증하며 합의를 이루고 채굴을 수행하기도 하는 블록체인의 서버 단위

Node의 역할

  • 네트워크 동기화 : 노드가 생성되면 다른 노드들에게 블록을 요청해 다운받는다
  • 트랜잭션 검증 : 새로 발생하는 트랜잭션이 올바른지 검증한다
  • 블록의 유효성 검사 : 특정 메커니즘에 따라 블록의 유효성 검사
  • 작업 증명 : 채굴자들은 블록의 헤더에 있는 nonce를 이용해 유효한 블록을 색출
  • 보상 수령 : 해시퍼즐을 푼 노드는 결과를 브로드캐스팅하고 다른 노드들은 결과 값이 맞는지 검증 후 블록을 승인, 승인 후 채굴자는 보상을 수령

    ✔️ 검증단계
    1. 원본 데이터를 자신의 암호키를 이용해 암호화와 서명을 진행
    2. 원본 데이터 & 서명을 다른 노드들에게 전파
    3. 해당 트랜잭션을 받은 노드들은 검증을 위해 해당 데이터와 암호키를 이용해 암호화
    4. 암호화된 데이터와 원본데이터를 비교해 무결성 검증
    5. 이상이 없을 경우 블록에 업데이트 후 다른 노드들에게도 전파

Node의 종류

  • Full Node : 블록체인 상에서 이루어지는 모든 거래정보를 저장하고 있는 Node
  • Light Node : 블록체인 상에서 이루어지는 거래를 수행하지만, 검증을 위해 Full Node에게 데이터를 요청하는 Node
  • Master Node : Full Node중에서도 권한과 보상을 받는 노드로, 상위노드라고도 함.
  • Mining Node : 채굴을 하는 노드이며 PoW에만 존재
  • Random Node : 블록체인의 무결성을 위해 존재하는 노드로, 마스터노드와 함께 블록을 생성
  • Consensus Node : 합의 노드라고도 불리며 BFT합의 알고리즘을 사용하여 블록들을 확인하는 Node
  • Super Node (Representative Node) : Node들의 대표이며 블록을 생성하고, 보상을 받는 노드이다 DPoS에서 존재한다
  • History Node : 블록에 있는 데이터들을 찾을 수 있는 노드

공개키와 비공개키

Public Key (공개키)

네트워크 상에 공개되는 키로, 보통 해당 키를 이용해 메세지를 암호화 하는데 사용된다. 그러나 블록체인에서는 자신이 암호화 했다는 것을 증명하기 위해 자신의 비공개 키로 암호화 한 후 다른 사람들이 자신의 공개 키로 복호화하는 작업을 통해 사용되기도 한다.

🚨 조금 더 자세한 공개 키에 대한 정보는 여기에 작성되어 있다! 🖊️

Private Key(비공개 키)

공개 키와 한 쌍을 이루는 개인 키로, 공개 키로 암호화한 데이터를 해독하는데 사용한다.

🚨 조금 더 자세한 비 공개키에 대한 정보는 여기에 작성되어 있다! 🖊️


Wallet

디지털 자산을 안전하게 보관하고 관리할 수 있는 소프트웨어나 하드웨어 기반의 지갑을 의미하며, 월렛은 사용자가 자신의 디지털 자산에 접근하고, 트랜잭션을 생성하고 서명하며, 잔액을 확인하는 등의 기능을 제공

Hot Wallet

인터넷에 연결되어 있는 사용자 친화적인 지갑으로, 주로 즉시 사용 가능한 자산을 보관하고 빠른 트랜잭션 처리를 위해 사용하며 핫 월렛은 보안 위험이 높을 수 있으며, 해킹이나 악의적인 공격에 취약할 수 있음

Cold Wallet

인터넷과 연결되어 있지 않으며 Cold Storage에 오프라인으로 저장하며 주로 보안이 중요한 큰 금액의 자산을 보관하고, 장기 보관이 필요한 경우에 사용

HD Wallet (Hierarchical Deterministic Wallet)

계층적 결정 지갑이라고 하며 하나의 seed Key를 사용하여 여러 주소를 생성할 수 있는 암호화폐 지갑

특징

  • BIP32에서 제안한 지갑구조
  • 하나의 부모 키가 여러개의 자식 키를 만들며 자식 키는 자손키를 만들어 내는 트리구조
  • DRGB (Deterministic Random Bits Generate)를 사용
  • HMAC-SHA512를 이용
  • Normal Child Key
    • 0~2^32-1번 인덱스 사용
    • 부모 키의 공개 키를 통해 자신의 공개 키를 구한다
  • Hardened Child Key
    • 2^31 ~ 2^32-1번 인덱스를 사용
  • 부모 키의 비밀 키를 이용해 자신의 공개 키를 구한다

다른 지갑 종류 🔽

비결정적 지갑
개인정보 보호를 위해 매번 비밀 키를 무작위로 생성하여 사용하는 방식의 지갑

결정적 지갑
하나의 SeedKey를 이용해 비밀 키를 생성하며 SeedKey로 파생된 모든 비밀키를 알 수 있는 형태의 지갑

Brain Wallet
비밀 키를 랜덤으로 생성하지 않고 일련의 단어 목록이나 문장을 사용해 비밀 키를 만드는 지갑


EOA & CA

이더리움에서 사용하는 계정의 2가지 주소 유형이며 둘 다 토큰을 전송 받거나 보유 가능

EOA(Externally Owned Accounts)

개인 등 외부 주체에 의해 소유되는 계정으로 이더리움 네트워크에 참여하고 트랜잭션을 생성할 수 있는 일반 사용자 계정

CA(Contract Accounts)

스마트 컨트랙트의 주소를 나타내는 계정으로, 컨트랙트가 가진 상태와 실행로직 등을 포함하고 있으며 CA는 EOA와 다르게 CA 스스로 새로운 트랜잭션을 생성할 수 없음


Smart Contract

1994년 닉 제보의 제안으로 시작되었으며 “계약조건을 실행하는 전산화된 트랜잭션 프로토콜”로 **정의

일반적인 계약과는 다르게 코드로 작성되어 코드에 의해 실행되는 특징을 갖고 있음


Coin & Token

Coin

블록체인 네트워크의 기본 자산 단위이며, 네트워크의 합의 알고리즘에 기여하기 위한 보상체게로서, 네트워크 단위에서 사용

Token

코드로 만든 암호화폐의 일종으로 만든 사람이 추가발행, 소각등의 컨트롤이 가능

Token의 종류

  • FT (Fungible Token) : 대체가능한 토큰을 뜻하며 누구나 발생할 수 있는 화폐이다.
    • → ERC-20 : 이더리움 네트워크에서 토큰을 발핼할 때 사용하며 깃헙과 Web.js를 통해 인터페이스를 제공 대표적인 ERC-20의 토큰은 Uniswap($UNI)이다
  • NFT (Non-Fungible Token) : 재발행이 불가능한 토큰으로 블록체인 상에서 복제할 수 없는 단 하나의 가치
    • → ERC-721 : 이더리움 네트워크에서 NFT를 발행할 때 사용하며 깃헙과 Web.js를 통해 인터페이스 제공 대표적인 ERC-721의 토큰은 CryptoPunks
  • SFT (Semi-Fungible Token) : FT와 NFT의 특성을 합친 토큰이며 하나의 스마트 컨트랙트에서 관리할 수 있도록 도와준다
    • → ex) 비틀즈 공연 티켓이 SFT일 경우 공연 시작전에는 같은 날 같은 시간의 비틀즈 공연중 자리가 다른 티켓끼리 교환이 가능하지만, 공연이 끝날 경우 NFT로 변경되어 다른 콘서트 티켓과는 교환이 가능하지않다
    • → ERC-1155 : 이더리움 네트워크에서 NFT,FT,SFT를 발행할 때 사용하며 깃헙과 Web.js를 통해 인터페이스 제공 대표적으로 OpenSea에서 사용

🐣 예시로, 만약 코인이 대한민국 화폐라면 토큰은 지역화폐라고 생각할 수 있다.
대한민국 화폐는 대한민국 어디서나 사용 가능하지만, 경기 지역 화폐는 경기도에서만 사용 가능하다.


합의 알고리즘 (Concensus)

다수의 참여자들이 통일된 의사결정을 하기 위해 사용하는 알고리즘

여러가지 Concensus

합의 방식설명
PoW(작업 증명)각 노드의 연산 능력을 증명하여 블록 생성 높은 컴퓨팅 파워를 가진 노드가 블록을 생성할 확률이 높음 오랫동안 사용되며 안전성이 검증되었지만 단점도 많이 도출
PoS(지분 증명)소유 지분 양에 비례하여 블록 생성 권한을 높은 확률로 부여 받음 많은 지분을 가진 노드가 블록을 생성할 확률 높음 이론적으로 우수하지만 실제 대규모 환경에서 검증 사례가 부족
DPoS (위임 지분 증명)일부 위임된 Validator끼리 PoS 수행 트랜잭션 속도가 더 빠름 신뢰도는 Validator의 신뢰도에 종속
PoET (경과 시간 증명)경쟁적 연산으로 낭비되는 에너지를 줄이면서 작업 증명과 유사 효과 하이퍼레저 쏘투스 레이크(Sawtooth Lake)에서 제안 인텔 SGX을 기반으로 블록을 생성하는 리더를 랜덤으로 선정
PBTF참가자 1명이 프라이머리(리더)가 되어 모든 참가자에게 요청 송신 그 요청에 대한 결과를 집계한 뒤 다수의 값을 사용해 블록을 확정 각 노드는 브로드캐스트 된 명령을 받게 되면 모든 노드에 회신 각 노드는 명령을 일정 수 이상 수신하면 명령을 실행하고 블록을 등록
PoA(권한 증명)트랜잭션 및 블록의 Validator라고 승인된 계정에 의해 유효성이 검사 Validator의 권리를 얻으므로 그들이 얻은 지위를 유지하고자 함 자신의 신원에 부정적 평판이 생기길 원치 않도록 노력할 거라 가정
PAXOS트랜잭션 및 블록의 validator라고 승인된 계정에 의해 유효성이 검사 validator가 될 수 있는 권리를 얻으므로 그들이 얻은 지위를 유지하고자 함 자신의 신원에 부정적인 평판이 생기길 원치 않도록 노력할 것이라 가정
RAFT리더를 선정한 후 시스템의 모든 변화를 리더를 통해 결정 신뢰된 네트워크에서만 사용
SieveIBM에서 고안한 PBFT 확장 알고리즘 실행결과 전송과 집계 결과 전송으로 흐름이 나뉜다.

Fork

블록체인에서 Fork란 블록체인의 분기를 의미하며, 기존 블록체인의 데이터 구조에 대한 변경을 발생하며 새로운 버젼을 만드는 현상을 의미

Soft Fork

블록체인을 Fork 할 때 기존의 체인을 그대로 사용하면서 Fork하는 것을 의미하며 간단한 시스템 업데이트에서 사용. 기존의 규칙을 따르며 기본 구조 변경 기능 업데이트

Hard Fork

블록체인을 Fork할 때 기존의 규칙 그대로를 따르는 것이 아닌 새로운 규칙을 추가 하는 것을 의미하며 이런 경우에는 기존의 규칙을 따르는 노드들로 구성되어 있는 네트워크와 새로운 규칙을 따르는 노드들로 구성된 네트워크로 나누어 질 수 있음


Public BlockChain & Private BlockChain & Permissioned BlockChain

Public BlockChain

누구나 네트워크에 참여해서 데이터를 읽고, 쓰고, 검증할 수 있는 블록체인이며 네트워크가 운영되기 위해 코인을 발급하는 경우가 많으며, 탈중앙화의 가치를 추구

Private BlockChain

검증되고 인증된 참여자들로 이루어지는 블록체인 네트워크이며, 탈중앙화가 덜 되어 있는 대신 확상성과 안전성을 확보

Permissioned BlockChain

Private BlockChain과 마찬가지로 검등되고 인증된 참여자들로 이루어 지는 블록체인 네트워크로, 네트워크의 참여자는 보안 및 규칙 설정에 관여하고 네트워크 운영에 대한 결정을 공동으로 이룸


Trilemma (트릴레마)

블록체인 트릴레마란 3가지 문제가 각각 서로 영향을 주어 3가지 중 어느 하나를 선택하면 다른 부분이 약화되는 것에 대한 딜레마를 의미

Scalability (확장성)

사용자가 늘어나 네트워크가 커져도 더 많은 트랜잭션을 처리하기 위함

장점

  • 많은 트랜잭션 처리 가능
  • 보안이 덜 중요한 DApp에서 사용 선호

단점

  • 보안 저하
  • 네트워크가 확장되면서 합의 메커니즘도 확장해야함

Decentralization (탈 중앙화)

중앙집권이 아닌 분산된 노드들을 통해 네트워크를 운영하여 투명성과 불변성 증가

장점

  • 사용자는 단일 엔티티를 신뢰하지 않고도 합의를 유지할 수 있다
  • 시스템 견고성 증가와 재산권 향상

단점

  • 네트워크 속도 저하로 확장성 저하
  • 비용의 증가와 모든 애플리케이션에서는 바람직하지 않음

Security (보안)

제일 기본적이며 새로운 기술임으로 더욱 보안이 중요

장점

  • 기존의 가치이전보다 더욱 빠르고, 저렴한 가치이전 가능

단점

  • 많은 투자가 필요

확장성을 타협한 블록체인

  • Bitcoin (비트코인)
    • 애초부터 보안에 포커싱되어있던 암호화폐이며 노드들이 많아지며 보안측면에서는 최고라는 이야기가 있으나, 노드들의 증가로 TPS가 저하되는 확장성 문제 발생
    • 현재 처리속도 : 7TPS
  • Ethereum (이더리움)
    • 이더리움 플랫폼 위에서 만들어진 크립토키티라는 DApp은 많은 인기를 끌었지만 그로인해 네트워크 속도 저하와 수수료 증가로 확장성 문제 발생
    • 최근 이더리움2.0 업데이트로 PoS(지분증명)과 Sharding기술을 이용해 실생활에 사용 가능하도록 속도를 올리기위해 노력중

탈중앙화를 타협한 블록체인

  • EOS
    • DPoS(위임지분증명) 합의 알고리즘을 사용하며 21명의 블록생성자를 전체 코인소유자들이 투표하여 선출 후 위임하여 확장성문제를 개선했으나, 21명이라는 소수가 채굴을 전담하므로 보안과 탈중앙화에 대한 문제가 발생
  • HyperLedger
    • Private BlockChain을 사용하여 참가자를 제한하였다
    • 합의 과정에 참여하기 위해서는 사전에 승인이 필요함으로 익명성은 없으며, 시스템 전체를 관리하는 중앙관리주체가 있으며 이 주체가 참여자를 제한한다

Safety & Liveness

합의 알고리즘의 속성을 의미

Safety

안전성을 우선시 하며, 모든 정상적인 참여자는 동일한 유효한 상태에 동의해야 한다는 속성

⇒ 문제 없는 노드는 잘못된 합의를 하지 않는다

`Safety over Liveness`** : 잘못된 합의의 가능성이 있다면 블록을 만들지 않는다

Liveness

생존성을 우선시 하기 때문에 블록의 생성을 우선시 하며, 모든 참여자는 동의된 어떠한 상태에 동의하여 도달해야 한다는 속성

⇒ 문제 없는 노드는 반드시 합의를 해야한다

Liveness over Safety : 잘못된 합의의 가능성은 있으나 합의를 우선으로 한다

🚨 FLP Impossibility
비동기화 및 부분동기화된 네트워크 환경에서는 Safety와 Liveness룰 동시에 만족시키는 분산된 합의 알고리즘이 존재할 수 없다는 전재로 어떤 항목을 우선시 할지 나누어짐.


Outro

이전에 정리했던 글들과 현재 수강중인 강의의 내용을 기준으로 다시 작성해보았는데,

블록체인 공부를 시작하는 분들이 배경지식을 이해할 때 시간을 조금 더 절약할 수 있는 글이 되었으면 좋겠습니다! 😃😃

혹여, 잘못된 정보 혹은 너무 오래되어 이제는 해당되지 않는 정보들이 있다면 피드백 부탁드립니다 🙇🏻🙇🏻

profile
블로그를 옮기는 중입니다. https://min71.dev

0개의 댓글