본문 바로가기

Blockchain

블록체인의 이해

KOCW 블록체인의 이해 (영남대학교 조행래 교수님) 강의를 듣고 강의자료를 정리한 내용입니다. 

강의를 통해 블록체인과 비트코인, 이더리움에 대해 전반적으로 이해하는 데 큰 도움을 받아서 블록체인에 입문하려는 분들께 꼭 추천드리고 싶습니다.

각 강의별 시간도 30분 정도이고, 강의하시는 교수님이 진심으로 블록체인을 '재밌다'라고 생각하는 것이 느껴져서 저도 재밌게 강의를 들을 수 있었습니다.

 

강의 링크 : http://www.kocw.net/home/enrolment/enrolmentView.do?cid=9b27d77dda267def&lid=a0c60d39a3edc0ac

 

KOCW

※ 소셜 로그인 10월 중 오픈 예정 --> 인터넷 옵션에 쿠키 허용이 안될경우 로그인이 안될 수 있습니다. 인터넷브라우저 > 도구 > 인터넷옵션 > 개인정보 > 고급 > 쿠키허용

www.kocw.net

 

강의별 차시

1강. 블록체인이란?

2강. 비트코인(Bitcoin)의 구조

3강. 비트코인의 채굴과 합의 과정

4강. 이더리움(Ethereum)

5강. 블록체인 프로그래밍

6강. 블록체인의 응용 분야

 


1강. 블록체인이란?

 

1. 거래와 원장

거래 (transaction)

  • 논리적인 작업의 단위 (일상 생활에서 발생하는 다양한 행위)
  • 응용 분야에 따른 거래의 유형
    • 금융 : 은행(예금, 출금, 계좌 이체 등), 주식(매수, 매도, 배당금 수령 등)
    • 학교 생활 : 중간/기말 시험, 봉사 활동, 과제물 제출
    • 전자 상거래: 신용카드 결제, 물품이나 서비스의 구매, 철도 예약, 영화관 예약

원장 (ledger)

  • 거래 내역을 기록한 장부 (또는 데이터베이스)
  • 원장의 예
    • 은행 통장, 주식 거래 내역
    • 생활기록부
    • 신용카드 사용 내역

원장의 종류

  • 원장 (Ledger)
    • 트랜잭션의 내역을 기록한 장부 (또는 데이터베이스)
  • 디지털 원장 (Digital ledger)
    • 자산에 대한 거래 내역을 컴퓨터에 기록
  • 분산 디지털 원장 (Distributed digital ledger)
    • 디지털 원장이 여러 컴퓨터에 중복 저장되고 수정되는 시스템
  • 탈중앙화된 분산 디지털 원장 (Decentralized distributed ledger)
    • 중앙 서버의 기능을 하는 컴퓨터가 없는 P2P 네트워크의 여러 컴퓨터에 디지털 원장이 중복 저장되고 수정되는 시스템
  • 블록체인 (Blockchain)
    • 원장이 수정 불가능한 블록 형태로 연결되어 P2P 네트워크에 중복 저장

2. 원장을 구현하는 두 가지 방법

원장을 구현하는 두 가지 방법 - 중앙집중 시스템

  • 모든 트랜잭션 기록을 중앙에서 관리
  • 공인된 3자(은행, 정부 등)의 중앙집중형 원장 관리
  • 장점
    • 데이터의 관리가 용이
    • 성능이 우수
  • 단점
    • 시스템 장애 발생 시 서비스 중간
    • 관리자나 해킹에 의한 데이터 조작 가능

원장을 구현하는 두 가지 방법 - 블록체인 (blockchain)

  • 탈중앙화(decentralized)된 블록체인으로 원장 관리
    • 네트워크 참여자들이 공통 원장을 중복 저장
    • 블록체인 = 블록(block)들이 연결된(chain) 구조
      • 블록 : 여러 개의 거래 내역을 암호화된 형태로 저장
  • 장점
    • 원장의 공유로 투명성(transparency) 제고 및 가용성(availability) 증가
    • 이전 블록에 대한 임의 변경이 불가능
  • 단점
    • 중복된 원장의 동일성을 유지하기 위한 복잡한 합의 알고리즘 필요

3. 블록체인의 특징

탈중앙화 (Decentralization)

  • 중앙 관리자 없이 구성원들 사이에 데이터 공유

데이터의 불변성 (Immutability)

  • 블록체인에 등록된 데이터에 대해 위조와 변조가 불가능

무결성(Integrity)과 진본 확인 가능(Authenticity)

  • 개인 키와 공개 키의 안전성: 개인 키의 길이 = 256비트
  • 공개 키 기반의 전자 서명을 이용함으로써 얻게 되는 특징

감사 가능성(Auditability)과 익명성(Anonymity)

  • 블록체인의 데이터는 모든 참여자에게 공개
  • 거래 당사자 간의 익명성을 보장

4. 블록체인의 유형

공공 블록체인 (Permissionless 블록체인)

  • 중앙 관리자의 승인 없이 자유롭게 참여/탈퇴할 수 있는 개방형 블록체인
  • 참여자는 블록체인의 데이터를 복사하고, 새로운 블록의 생성에도 참여
  • 참여자의 컴퓨터 사용에 따른 운영 비용을 감당할 수 있도록, 암호 화폐를 발행
  • 대표적인 공공 블록체인 : Bitcoin, Ethereum
  • 장점 :
    • 시스템 자체의 높은 안전성과 신뢰성
  • 단점 :
    • 느린 거래 처리 속도 (Bitcoin: 7 TPS, Ethereum: 14~20 TPS)

사설 블록체인 (Permissioned 블록체인)

  • 미리 정해진 조직이나 개인들만 참여할 수 있는 폐쇄형 블록체인
  • 블록체인의 운영을 위해서 암호 화폐가 반드시 필요한 것은 아니다.
  • 대표적인 사설 블록체인 : Hyperledger Fabric, R3 Corda
  • 장점 :
    • 정보공유 범위 설정 가능, 높은 효율성과 성능 (1000 TPS 이상)
  • 단점 :
    • 시스템의 신뢰성이 참여자(운영 주체)의 신뢰성에 의존

  • 원장을 구성하는 두 가지 방법 : 중앙집중 시스템과. 블록체인
  • 중앙집중 시스템은 시스템 장애나 해킹에 취약하다.
  • 블록체인은 블록이 연결된 구조이며, 블록은 여러 개의 거래 내역을 암호화된 형태로 저장한다.
  • 블록체인의 특징 : 탈중앙화, 데이터의 불변성, 무결성, 익명성
  • 블록체인의 유형 : 공공 블록체인, 사설 블록체인
    • 일반적으로 공공 블록체인은 암호 화폐를 발행한다.

 

2강. 비트코인(Bitcoin)의 구조

1. 비트코인 소개

  • 2009년 Satoshi Nakamoto가 개발한 대표적인 공공 블록체인

주요 특징

  • 블록의 무결성 및 채굴, 주소 계산 등을 위한 암호 해시(SHA-256) 사용
  • 개인키/공개키 기반의 전자 서명 알고리즘 이용
  • 블록체인의 합의 방식으로 “작업 증명”(Proof of Work) 정책 채택
  • 신규 화폐는 채굴(mining)에 의해 발행되며, 평균 10분마다 새로운 블록 생성
    • 한 블록의 평균 크기 = 1.6Mbyte, 한 블럭당 약 3,000~6,000개의 트랜잭션이 포함
      • 2024년 8월 기준 : 블록체인의 크기 = 592Gbyte, 트랜잭션 수. 10억개 이상
    • 인플레이션을 방지하기 위해 통화 발행을 2,100만 개로 제한
      • 2024년 8월 기준 누적 채굴량 = 1,971만개 (약 94%)

2. 암호 해시의 개념

SHA-256

  • 입력 문서를 고정 길이(256비트)의 데이터로 변환
  • 변환된 데이터는 문서의 지문과 같은 역할을 수행
  • 문서의 일부가 바뀌면 해시 값이 완전히 바뀌므로 문서의 조작 여부 확인 가능
  • 단방향 속성 : 문서로부터 해시 값은 생성 가능. 반대 방향은 불가능
  • 문서(다양한 크기) → 해시 함수(SHA-256) → 해시값 (256)비트

3. 키(key)와 주소

비트코인의 키는 개인 키와 공개 키로 구성

  • 개인키(private key) : 개인만 알고 있는 비밀키 (256비트의 이진수로 구성)
  • 공개키(public key) : 타인에게 공개되는 키 (520비트의 이진수로 구성)

개인키와 공개키를 이용한 응용 분야

  • 비밀 메시지
  • 전자 서명

비트코인의 주소

  • 숫자와 문자로 구성된 문자열로 송금인/입금인을 표시할 때 사용
  • 공개 키에 대해서 암호 해시 함수를 적용하여 생성
    • 공개 키 해시 = RIPEMD 160(SHA256(공개키)) ← 160bit
    • 사람이 쉽게 사용하도록 Base58Check로 변환 (대문자, 소문자, 숫자: I, l, 0, O는 제외)
    • 요즘에는 공개키 해시를 32개의 문자로 표시하는 형태로도 많이 표시 : “bc1” 문자열로 시작

4. 트랜잭션(거래) 처리

Bitcoin에서 트랜잭션은 화폐(BTC)의 흐름을 표시

  • 소유자는 보유하고 있는 화폐를 다른 사람에게 지불할 권한을 갖는다.
  • 화폐를 받은 다른 소유자는 새로운 트랜잭션을 생성하여 화폐를 다시 전달
  • 그 결과로 화폐의 소유권이 연결되어 구성

UTXO (Unspent Transaction Outputs) 모델

  • UTXO : 블록체인에 저장된 트랜잭션의 출력 중 다른 트랜잭션의 입력에 연결되지 않은 출력

사용자의 잔고 (balance)

  • 사용자의 주소가 출력으로 등록된 UTXO의 합
  • UTXO의 관리 : Wallet 프로그램이 담당

IF (UTXO의 금액 > 지불하고자 하는 트랜잭션의 금액)

  • UTXO의 금액은 전부를 사용하던가, 아니면 사용하지 않던가 둘 중의 하나. 일부만 사용 불가!
  • 따라서 남는 금액을 돌려받는 새로운 UTXO를 생성

이중 지급 (double spending)

  • UTXO를 여러 개의 트랜잭션의 입력으로 사용
  • 트랜잭션과 블록 검증 단계에서 반드시 걸러야 함!

5. 블록체인의 구조

트랜잭션을 포함한 블록들의 “역방향” 연결 리스트

  • 이전 블록의 헤더에 대한 해시 포인터로 연결
  • SHA256(SHA256(이전 블록의 헤더 내용))

블록 헤더

  • Version : 4 bytes, 버전 번호
  • Previous Block Hash : 32 bytes, 이전 블록의 헤더에 대한 해시 정보
  • Merkle Root : 32 bytes, 트랜잭션의 머클 트리 루트의 해시 값
    • 머클 트리 : 트랜잭션의 요약 정보
  • Timestamp : 4 bytes, 이 블록의 생성 시간
  • Difficulty Target : 4 bytes, PoW에서 이 블록 채굴을 위한 난이도 목표값
  • Nonce : 4 bytes, PoW의 증빙

블록 바디 : 트랜잭션의 집합

  • Transaction count : 1~9 bytes, 블록에 포함된 트랜잭션의 수
  • Coinbase transaction
  • Transaction #1
  • Transaction #2
  • Transaction #1333

참고

  • 블록 헤더의 Previous Block Hash는 블록 헤더의 위조, 변조를 방지
  • 블록 헤더의 Merkle Root는 블록 바디의 위조, 변조를 방지
  • Timestamp, Difficulty Target, Nonce는 블록 채굴에 관련된 내용

  • 비트코인은 2009년에 개발된 대표적인 공공 블록체인이다.
  • 비트코인에 저장된 트랜잭션은 화폐의 흐름을 나타낸다.
  • 비트코인은 개인키와 공개키를 이용한 전자서명으로 화폐의 소유권을 증명한다.
  • 비트코인의 블록은 암호 해시(SHA-256)를 이용한 체인으로 연결되어 있다.

 

 

3강. 비트코인의 채굴과 합의 과정

 

1. 채굴(mining)이란?

채굴 (mining) = 블록체인 끝에 새로운 블록을 추가하는 연산

Mining 의 두 가지 목적

트랜잭션의 등록 (검증된 트랜잭션에만 블록체인에 등록)

  • 평균 10분마다 새로운 블록이 채굴되어 등록
  • 채굴 방법 : 작업 증명 (Proof-of-Work : PoW)

새로운 블록을 채굴한 채굴자에게 인센티브 지급

  • 2024년 현재 인센티브 금액 = 한 블록에 3.125 BTC씩 지급
  • 비트코인 시스템에서 새로운 화폐가 공급되는 유일한 방법

2. 비트코인에서 새로운 화폐의 공급

2009년 비트코인을 시작한 시점의 인센티브 = 블록당 50 BTC

210,000개의 블록이 채굴된 후, 지급액을 반으로 감소

  • 감소 주기 = 10분/블록 * 210,000 = 4년

지급액이 0이 될 때까지의 시간과 발행량

  • 32번의 반감기 후 블록당 1 Satoshi로 축소 (1BTC = 10^8 Satoshi)
  • 2140년: 블록수 = 6,930,000, 지급액 = 0 (2024년 8월 현재 블록 번호 = 856,864)

전체 발행량 = 210,000 * 50 * (1 + 1/2 + 1/4 + …) = 21,000,000 BTC

  • 그 이후로는 추가적인 화폐 공급이 없음

3. 작업 증명 (Proof of Work : PoW)

Mining 과정

  • 채굴자는 새로운 후보 블록을 생성
  • Nonce를 제외한 모든 값을 결정
  • Nonce의 값을 변경하면서 다음 조건을 검사
  • SHA256(SHA256(헤더)) < Dificulty Target

Nonce를 발견했다는 것의 의미

  • 채굴자가 수행한 작업의 증명 (즉, target보다 적은 결과 값을 찾기 위해 nonce를 바꾸어가면서 SHA256을 몇 번 수행했다는 증명)

Difficulty Target의 의미

  • SHA256의 실행 예
I am Satoshi Nakamoto11 => 7045da6ed8a914690f087690e1e8d66
I am Satoshi Nakamoto12 => 60f01db30c1a0d4cbce2b4b22e88b9b
I am Satoshi Nakamoto13 => 0ebc56d59a34f5082aaef3d66b37a66
I am Satoshi Nakamoto14 => 27ead1ca85da66981fd9da01a8c6816
I am Satoshi Nakamoto15 => 394809fb809c5f83ce97ab554a2812c
I am Satoshi Nakamoto16 => 8fa4992219df33f508344f65d3047429
I am Satoshi Nakamoto17 => dca9b8b4f8d8e1521fa4eaa46f4f0cd
I am Satoshi Nakamoto18 => 9989a401b2a3a318b01e9ca9a22b0f3
I am Satoshi Nakamoto19 => cda56022ecb5b67b2bc93a2d764e75f
  • 16진수 0으로 시작하는 문장의 nonce는 ?
    • 0x10000000 … 보다 작은 hash 값을 찾기
    • Target = 0x10000… (0으로 시작) ← 확률 : 1/16
  • Target이 0x01000… (00으로 시작)일 경우의 확률은 ? ← 1/256
  • Target = 0x0….01 (63개의 0으로 시작)일 경우의 확률은 ? ← 1/16^63

블록의 예 (856,571번 블록)

블록 해시 = 00000000000000000001210cb3298d73eb62a09f3ba8b83dbf97f5cc7a3fe404

  • 채굴 시기 = 2024년 8월 13일 17시 27분 37초
  • 채굴자 = Foundry USA
  • Difficulty Target = 0x17031abe → 031abe * 2^160 • 16진수로 표현: (00| 18개) (031abe) (00| 40개)
  • Nonce = 0xdf388f77
  • 블록 채굴에 대한 보상 금액 = 3.125 BTC(인센티브) + 0.08642 BTC(수수료)

참고 : Difficulty Target의 설정

  • 동일한 난이도 vs. Hardware 발전 속도
  • 2,016개의 블록(2주)이 채굴될 때마다 난이도 재설정
  • New Target = Old Target * (Actual Time of Last 2016 Blocks / 20160 minutes)

직접 채굴 게임에 참가해볼까?

내 PC의 성능

  • Difficulty: 8388608 (23 bits)
  • Starting search...
  • Success with nonce 14214729
  • Hash is 000001408cf12dbd20fcba6372a223e098d58786c6ff93488a9f74f5df4df0a3
  • Elapsed Time: 24.1135 seconds
  • Hashing Power: 589491 hashes per second

내가 PoW에서 이길 확률

610조 분의 1

4. 블록체인의 확장 과정

채굴자가 후보 블록의 nonce를 발견한 경우

  • 블록에 nonce 값을 채운 후, 비트코인 네트워크의 이웃 참여자에게 전달
  • 이웃 참여자는 블록의 유효성을 검사한 후, 자신의 이웃에게 다시 전파

이웃 참여자가 채굴자일 경우

  • 예 : block height = 277,316이라고 가정
    • 자신이 채굴 중인 277,316 블록 작업을 중단
    • 277,316을 이전 블록으로 하는 자신의 후보 블록 (277,317)을 생성한 후, 채굴 시작

서로 다른 채굴자가 동시에 채굴에 성공하는 경우 ?

  • 일시적으로 참여자의 블록체인 내용이 다를 수 있음 : Blockchain fork
  • 각자의 상황에서 다음 블록을 위한 채굴을 진행하고, 길이가 긴 체인으로 수렴

  • 비트코인에서 채굴은 트랜잭션의 등록과 새로운 화폐 제공의 목적을 갖는다.
  • 비트코인에서는 채굴자에게 인센티브를 지급한다.
  • 채굴자는 후보 블록을 생성한 후, 난이도 기준에 맞는 nonce 값을 찾기 위한 PoW를 수행한다.
  • 새롭게 생성된 블록에 대해 모든 참여자가 유효성을 검사한다.

 

4강. 이더리움(Ethereum)

 

1. 이더리움 소개

스마트 계약을 지원하는 오픈소스 기반의 블록체인 플랫폼

  • 2013년 Vitalik Buterin에 의해 제안

이더리움의 비전

  • 멈추지 않으면서 검열에 강하고, 지속가능한 탈중앙화된 전세계를 대상으로 한 컴퓨터의 생성

비트코인의 개념을 확장

  • 비트코인 : 여러 개의 컴퓨터에서 거래 내역을 검증하고 중복 저장하는 시스템
  • 이더리움 : 비트코인 + 전 세계의 컴퓨터를 대상으로 프로그램을 실행할 수 있는 시스템
    • 스마트 계약
    • 이더리움 가상 머신 (Ethereum Virtual Machine : EVM)

비트코인과 이더리움의 유사성

  • 이더리움도 블록체인을 갖는다.
  • 이더리움은 공공 블록체인이다.
    • 누구나 참여할 수 있고, 트랜잭션을 실행할 수 있다.
  • 이더리움도 Ether(ETH)란 암호 화폐를 발행한다.
    • 비트코인처럼 화폐의 소유권은 블록체인에 기록
    • 1 ETH = 10^18 wei = 10^9 Gwei = 10^6 szabo

비트코인과 이더리움의 차이점

  • 이더리움의 블록 생성 시간이 짧다.
    • 비트코인 : 10분 ↔ 이더리움 : 12초
  • 이더리움의 블록 크기가 작다.
    • 비트코인 : 블록의 평균 크기 = 1.6Mbyte (블록당 2,000개 내외의 트랜잭션이 저장)
    • 이더리움 : 대부분의 블록이 100KB 내외 (블록당 200개 내외의 트랜잭션이 저장)
  • 이더리움은 블록체인에 스마트 계약 (smart contract)이라는 프로그램을 저장한다.
    • 비트코인에서는 화폐의 흐름에 관한 트랜잭션만 저장된다.
    • 이더리움에서는 일반적인 트랜잭션 외에 프로그램의 배포, 실행에 관한 트랜잭션도 저장된다.
      • 이더리움에 참여하는 컴퓨터는 EVM을 이용해 스마트 계약을 실행할 수 있다.
    • 이더리움의 블록 합의 방식 : 지분 증명(PoS) ↔ 비트코인 : 작업 증명(PoW)

2. 스마트 계약 (Smart Contract)

  • 블록체인에 저장되며, 설정 기준을 만족하면 자동 실행되는 프로그램
  • 스마트 계약을 이용한 자판기 구현의 예
    • 설정 기준 : 사용자가 구매 금액을 투입한 후, 상품의 버튼을 누른다.
    • 계약 실행 : 사용자에게 상품을 제공
  • 블록체인에서 스마트 계약을 지원함으로써 얻을 수 있는 장점
    • 상대를 신뢰하지 않아도 거래에 문제가 발생하지 않는다.
    • 중개자가 없으므로 비용 절감 가능
    • 스마트 계약 프로그램이 모든 참여자에게 공개되므로 투명성 제고
  • 스마트 계약을 작성할 때 사용하는 프로그래밍 언어 : Solidity, Serpent 등

3. 계정(account)과 트랜잭션

이더리움에서는 두 종류의 계정이 존재

Externally owned accounts (EOA)

  • 비트코인의 주소와 같이 개인 키에 의해 제어되는 계정
  • 새로운 트랜잭션을 시작할 수 있다.

Contract accounts (CA)

  • 스마트 계약의 프로그램에 의해 제어되는 계정
  • 스스로 새로운 트랜잭션을 시작할 수 없고, 다른 트랜잭션의 요청으로 트랜잭션을 실행할 수 있다.

각 계정마다 20byte의 주소가 할당되고, 아래의 상태 정보를 가짐

  • nonce : 계정에서 실행한 트랜잭션의 수(EOA), 계정에서 생성한 스마트 계약의 수(CA)
  • balance : 계정이 소유한 잔고
  • storageRoot : 스마트 계약 프로그램의 데이터에 대한 정보 (CA에서만 사용)
  • codeHash : 스마트 계약 프로그램의 해시값 (CA에서만 사용)

이더리움의 World State Trie

  • 2024년 8월 현재 2억 7천 8백만 개의 이더리움 계정이 존재 (매일 9만개 이상의 계정이 신설)
  • 질문 : 전체 계정의 상태를 어떻게 관리할까?
    • 블록체인과 상태정보를 저장하는 상태 데이터베이스(state database)를 분리해서 관리한다. 위변조를 막기 위해서 상태 데이터베이스의 해시값을 블록체인에 저장한다. 상태 데이터베이스는 트라이 형태, 보통 머클 패트리시아 트라이라고 하는 자료 구조로 구성된다. 특정 계정은 20바이트의 주소를 가지는데, 이. ㅜ소로 트라이를 쉽게 검색할 수 있는 알고리즘을 제공하고 있다.

트랜잭션

  • 3가지 유형의 이더리움 트랜잭션이 존재

EOA들 간의 화폐 이동

  • 비트코인 트랜잭션과 유사 (전송인, 수신인, 금액 등의 정보를 포함)

이더리움 네트워크에 새로운 contract 배포

  • 생성을 요청하는 계정과 스마트 계약 코드 등을 포함

배포된 contract의 함수 실행

  • 요청인의 EOA 주소와 대상 계약의 CA 주소를 포함
  • 함수 실행에 필요한 Ether를 포함

가스(Gas)

  • 트랜잭션 처리를 위한 모든 연산에는 비용이 발생
  • 가스
    • 요금을 계산하는 단위 (1가스 = 1gwei = 10^9 wei)
    • 트랜잭션 처리 비용 = 가스 사용량 * (base fee + priority fee)
  • Base fee
    • 트랜잭션을 처리하기 위한 기본적인 비용의 개념 (burning - (사라진다.))
    • 블록의 크기를 기준으로 설정되며, 블록이 클수록 요금도 상승 (100gwei ~)
  • Priority fee
    • 블록의 채굴자에게 지급하는 요금

4. 지분 증명 (Proof of Stake : PoS)

“The Merge” upgrade (2022년 9월 15일)

  • Mainnet과 Beacon chain을 통합
    • Mainnet (블록체인 저장 및 트랜잭션 실행을 담당) ← Execution layer
    • Beacon chain (Beacon block을 이용한 PoS 수행) ← Consensus layer

Pos : 32 Ether를 deposit contract에 예치하면 validator가 된다

  • 블록을 생성할 validator를 무작위로 선정
  • 나머지 validator들은 생성된 블록을 인증하는 역할을 담당
  • 적어도 128명의 validator가 인증해야만 블록체인에 등록
  • 지분의 비율대로 권한이 부여 (2024년 8월 현재 : 33.9M ETH 예치, 1,060,318명, 연지급율 = 3.2%)
  • Validator가 규칙을 따르지 않으면 불이익을 얻는다 (예치금 몰수)
  • 장점 : 에너지 비용 절감 (PoW의 어려운 문제를 풀지 않아도 됨)

  • 이더리움은 스마트 계약을 지원하는 블록체인이다.
  • 스마트 계약은 블록체인에 저장되며, 설정 기준을 만족하면 자동 실행되는 프로그램이다.
  • 이더리움의 계정은 EOA와 CA로 나뉘며, 각 계정에 대한 상태 정보를 유지한다.
  • 이더리움에서 트랜잭션 실행은 비용이 발생하며, 가스 단위로 비용을 계산한다.
  • 이더리움의 블록 생성은 지분 증명 (PoS) 방식을 따른다.

 

 

 

5강. 블록체인 프로그래밍

 

1. 블록체인 응용의 구조

블록체인과 스마트 계약이 backend server의 역할을 담당

  • 데이터베이스 → 블록체인
  • WAS의 business logic → 스마트 계약
  • Frontend 단에서 블록체인의 내용을 액세스하고, 스마트 계약을 실행시킬 수 있는 기능이 필요 → web3.js → HTML과 연동하여 browser에 출력
  • 블록체인 개발을 위해 사용할 수 있는 자바스크립트 모듈 → web3.js
  • 프론트엔드단은 web3.js를 통해서 개발을 하게 된다.
  • 이더리움의 노드들이 지원하는 가장 low-level의 인터페이스를 보통 json-rpc라고 하는데, 이 web3.js를 json-rpc로 바꿔주는 것이 web3 provider - 보통 브라우저에 메타마스크 등을 가지고 설치를 하게 된다.

2. Solidity를 이용한 스마트 계약 구현

Solidity 프로그래밍 언어 소개

  • 스마트 계약을 구현할 때 사용하는 contract 기반의 high-level 프로그래밍 언어
  • C++와 JavaScript의 영향을 많이 받은 언어
  • 이더리움 가상 머신(EVM)에서 실행되는 것을 목표로 설계된 언어
  • 데이터 타입 지원, 계승(inheritance) 지원, 복잡한 사용자 정의 데이터 타입 지원
  • 전자 투표나 온라인 경매, crowd funding 등 다양한 목적의 스마트 계약을 생성할 때 사용 가능

Solidity 프로그램의 기본적인 문법

Pragma

  • 소스 코드의 Solidity 버전
  • pragma solidity ≥ 0.5.0;
    • 버전 0.5.0 이상에서만 컴파일됨을 표시

Contract

  • 프로그램 코드(function)와 데이터(state)로 구성
  • 이더리움 블록체인의 특정 주소에 저장

실행방법

  • Remix IDE를 이용

상태변수(state variable)와 지역 변수(local variable)

상태 변수

  • Contract 저장소에 값이 영원히 저장되는 변수
  • 이용료가 비싸다.

지역 변수

  • 함수가 실행될 때만 값이 유지되는 변수
  • 이용료가 싸다.

변수의 자료형

Value Type (값형)

  • bool, int, uint, byte, address, enum

Reference Type (참조형)

  • 종류
    • 배열
    • 문자열
    • 구조체
    • 매핑
  • Memory나 Storage에 저장

함수

  • 함수를 정의하는 문법
    • function function-name(parameter-list) scope returns() { statements… }
  • scope
    • external : contract 외부에서만 호출
    • public : 외부 또는 내부에서 호출 가능
    • private : contract 내부에서만 호출
    • view : 상태를 수정하지 않는 함수
    • pure : 상태를 참조하지 않는 함수

Solidity 프로그램의 예: 전자 투표

  • 기본 개념
    • 투표 건 수마다 하나의 contract 생성. 각 후보에 대해 간단한 이름 할당
    • Chairperson : Contract를 생성한 사람
      • 각 주소마다 투표할 권한을 부여
    • Voter : 주소에 해당하는 투표인
      • 투표하거나 혹은 투표할 권리를 다른 사람에게 위임(delegate)

3. web3.js

web3.js란?

  • HTTP나 WebSocket 등을 이용하여 이더리움 노드와 연동할 수 있는 JavaScript 라이브러리
  • 여러 개의 모듈로 구성되며, 이더리움 블록체인 및 스마트 계약과 연동을 위하여 web3.eth 모듈 사용

web3.eth에서 많이 사용되는 API들

  • web3.eth.getBalance(address [, callback]) • 특정 주소의 잔고를 파악
  • new web3.eth.Contract(jsonInterface [, address]) • 특정 주소에서 contract를 읽어 와서 메모리에 Contract 객체 생성
  • web3.eth.getTransactionCount(address [, callback]) • 이 주소에서 전송된 트랜잭션의 수를 반환
  • web3.eth.sendSignedTransaction(signedTransactionData [, callback]) • 개인 키로 사인한 트랜잭션을 블록체인으로 전송

  • 블록체인 응용에서는 블록체인과 스마트 계약이 backend server의 역할을 담당한다.
  • 이더리움 스마트 계약을 구현하기 위해 Solidity 언어를 사용한다.
  • Solidity는 contract 기반의 high-level 언어로, contract는 함수(function)와 변수 선언으로 구성된다.
  • web3.js는 이더리움 노드와 연동할 수 있는 JavaScript 라이브러리이다.

 

 

 

6강. 블록체인의 응용 분야

 

1. 탈중앙화 ID (Decentralized ID: DID)

주민등록증처럼 온라인 환경에서 개인의 신원 정보를 관리/통제하는 디지털 신원 관리 체계

  • 개인 정보를 사용자 개인이 보관
  • 개인 정보 인증 시 필요한 정보들만 골라서 인증을 진행할 수 있도록 해주는 전자 신원 증명기술

현재 사용되고 있는 신원 증명 방법

  • 발급 기관별 신원 증명 문서를 이용 기관에 제출
  • 이용 기관은 발급 기관을 통해 신원 증명 검증

DID의 구성 요소

DID 아이디: DID 문서의 위치

  • 예: (DID:블록체인 이름:블록체인 안의 고유 식별자)

DID 문서

  • DID 아이디의 소유권을 증명할 수 있는 공개 키와 인증정보를 포함
  • 블록체인에 저장되어 있으며 민감한 개인 정보는 없다.

VC(Verifiable Credential)

  • 발급 기관으로부터 발급받은 신원 증명 문서
  • 개인 단말기(휴대폰)의 지갑 애플리케이션과 같은 안전한 영역에서 보관
  • 인증을 위해 VC의 일부분을 골라서 제출 가능

DID 응용

DID의 활용 분야

  • 모바일 신분증 (본인 확인, 면허증, 전자여권, ...)
  • 금융: 비대면 금융거래, 선택적 개인정보 활용
  • 제조: 사물 인터넷(IoT) 인증 및 사물 제어

2. 전자 투표

블록체인 기반 전자투표 시스템의 장단점 원리

  • 신원 확인: 개인 키를 통해 투표자는 투표 시스템에 접근 ← DID 활용 가능
  • 투표: 스마트 계약 프로그램으로 구현 ← 집계 과정도 프로그램에 포함
  • 투표 기록: 암호화된 투표 내용이 블록체인에 기록 ← 모든 참여자가 확인 가능하며, 안전하게 보관
  • 집계 및 결과 발표: 공개된 스마트 계약 프로그램에 의해 진행 ← 결과의 공정성이 보장

장점

  • 투명성: 모든 투표 기록이 블록체인에 저장되며, 누구나 이 기록을 열람할 수 있다.
  • 보안성: 각 투표자의 신원이 암호화되어 기록되며, 투표 내용이 변조될 가능성이 없다.
  • 신뢰성: 중앙 기관이나 중개자 없이 투표자들이 블록체인 네트워크에 직접 투표할 수 있다.
  • 불변성: 한 번 블록체인에 기록된 투표는 수정할 수 없다.
  • 익명성: 투표자의 신원은 블록체인에서 암호화되며, 투표 결과만 기록

사례 연구 : 중앙선거관리위원회 K-Voting 시스템

3. 공급망 관리

공급망 관리에서 블록체인 활용

  • 트레킹: 제품의 출발부터 도착까지의 모든 이동 경로를 기록
  • 스마트 계약: 자동으로 결제나 주문을 처리
  • 품질 보증: 수정이 불가능하므로 제품의 품질이나 원산지에 대한 정보의 신뢰성을 보장
  • 위조 방지: 블록체인에 제품의 모든 거래와 이동이 기록되므로, 위조품의 유통을 방지

사례 연구

  • 월마트는 IBM의 Hyperledger Fabric을 기반으로 하는 블록체인 시스템을 도입하여 농장에서 판매점까지 식품의 모든 이동을 기록
  • De Beers는 "Tracr"라는 블록체인 플랫폼을 개발하여 다이아몬드의 채굴, 거래, 판매 과정까지 모든 정보를 기록

4. 새로운 암호 화폐 만들기

비트코인 소스 코드를 재사용하여 신규 화폐 개발

  • 화폐 발행 총량, 보상 반감, PoW 난이도 조정 간격, 블록 채굴 시간 등 설정

Ethereum 기반 ERC-20 표준을 만족하는 코드를 작성

  • 새로운 화폐(token)을 정의하고 배포하는 Token contract를 작성
  • 토큰 판매 방식을 정의하는 Smart contract 작성
  • 2024년 현재 약 1,330,000개의 Token contract가 존재

ERC-20 표준

이더리움 블록체인 상에서 대체 가능한 토큰을 생성하는 방법을 정의

  • 토큰의 생성과 전달을 담당하는 스마트 계약을 작성하기 위한 API 정의
  • 계정 간에 토큰을 전달하는 함수
  • 계정의 현재 잔고를 반환하는 함수
  • 토큰의 발행 총량을 반환하는 함수 등

이러한 API를 구현한 contract를 ERC-20 Token Contract라고 함

  • 표준 API를 구현함으로써 wallet protocol과 호환 가능
  • ERC-20 토큰을 보내기 위하여 ETH 요금 발생

초기에 대량의 토큰을 일반에게 판매하는 ICO(initial coin offering)를 수행할 수 있음

NFT(Non-Fungible Token)

블록체인 기술을 기반으로 한 디지털 자산으로, 특정 자산이나 콘텐츠의 소유권과 진품성을 보장하는 데 사용

NFT의 동작 방식

  • 블록체인 기반: NFT는 블록체인 기술을 이용하여 메타 데이터와 거래 기록을 저장
  • 메타 데이터: NFT가 대표하는 디지털 자산의 세부 정보 (아티스트, 작품 제목, URL 등)
  • 스마트 계약: 스마트 계약을 이용하여 NFT의 거래, 이전, 소유권 변경 등을 자동으로 처리
  • 희소성: NFT는 고유성을 가지며, 거래가 이뤄질 때마다 그 소유권이 블록체인에 기록되어 투명성과 추적 가능성을 제공

NFT가 실패하거나 한계에 직면한 원인

  • 과도한 투기와 버블 형성 → 가격 거품
  • 이더리움 블록체인의 확장성 문제 → 거래 수수료의 급등
  • NFT 소유자와 창작자 간의 권리 관계에 대한 혼란이 발생
  • 많은 사람들이 NFT를 제대로 이해하지 못하고, 그 가치를 신뢰하지 않는 경우 발생
  • 시장 포화 및 경쟁 증가, 콘텐츠의 품질 저하

  • DID는 온라인 환경에서 개인의 신원 정보를 관리/통제하는 디지털 신원 관리 체계이다.
  • 온라인 투표 시스템에 블록체인 기술을 적용함으로써 보안성과 신뢰성을 강화할 수 있다.
  • 공급망 관리에서 블록체인을 활용함으로써 모든 생산/제조/유통 과정을 추적할 수 있고, 그 결과로 품질 보장이 가능하다.
  • 이더리움의 token contract를 이용하여 새로운 암호 화폐를 정의하고 배포할 수 있다.
  • NFT는 블록체인 기술을 기반으로 한 디지털 자산으로, 특정 자산이나 콘텐츠의 소유권과 진품성을 보장하는 데 사용된다.