본문 바로가기
CS/3-2 블록체인

[블록체인] 06. Mechanics of Bitcoin - Mining

by 이지이즤 2022. 10. 22.

 

Task of Bitcoin Miners

 

Tasks to perform (채굴자가 할 일)

  1. 채굴할 block에 포함시킬 후보자 transaction을 기다림.
  2. 블록체인 유지(full node)하고 새로운 블록있으면 추가함.
  3. 내 블록을 valid하게 만드는 nonce(한 종류는 아님) 찾기를 함.
  4. 채굴 성공시 내 블록이 받아들여지길 기도함.
    (valid한 block 채굴성공했다고 반드시 longest chain에 채택되는 건 아님.
     더 긴 체인 생기면 orphan되어서 채굴 보상 못받음)
  5. 다른 채굴자들에 의해 내 블록이 받아들여지면 profit을 얻음.

 

2 categories

- 트랜잭션과 블록 검증하기
 : 건강한 비트코인 네트워크 유지를 위해 필수적임.
   but 직접적으로 profit을 주는건 아님. 그래서 생각해낸 것이 아래꺼임

- valid 블록 찾는 경쟁!
 : 위의 과정(블록 생성)하는 채굴자의 동기부여를 위해 보상을 줌.
  -> 비트코인이 화폐로 유지되도록 함.
  (채굴보상 안해주면 transaction fee가 올라가겠지만 그래도 채굴자 수는 줄어들것이고
   비트코인 신뢰성도 떨어져서 법정화폐(원화,달러 등)로 바꿀 때 rate가 내려갈 것임.
   그럼 다들 채굴을 하지 않게 됨. 따라서 채굴 계속 하도록 인센티브가 있어야 함.)

 

Finding valid blocks

사진 출처
- valid한 트랜잭션을 pool에 집어놓고, pool로부터 merkle tree 만들어서 해시 계산함.
- 이전 블록을 hash point하는 header로 블록 생성함.
- hash puzzle 풀 수 있는(target num보다 작은 값을 만들어내는) nonce 찾기

 

Difficulty of finding a valid block

h(x) < target number
: input(=x)의 nonce값을 바꿔가면서 output이 위의 부등식을 만족하는 값을 찾아야 함.
  근데 input에 따라 output(256bit)의 특정 위치(예를들면 78번째 bit)가
  0or1 어떤 결과가 나올지는 전혀 알 수 없음.

target number 예시 (2진수로 바꾸면 256bits)

앞에 0이 16개 있고 1은 0001(2)이므로 
이진수로 바꿨을 때 앞자리 16*4+3 = 67개가 '0'임. -> 대략 2^67의 노력이 필요함..
h(x)의 앞자리 67개가 전부 0이어야하고,
그다음 자리가 1이라면 그다음 4bit가 7보다 작은 값이 되도록 하는 input을 찾아야 valid block.

 

Core Task : Finding a valid block

- hash 계산이 실제로 어떻게 일어나는지

nonce값으로 2^32가지 다 해봤는데도 h(x) < target number 만족하는 nonce를 못찾았다면
coinbase transaction에 있는 nonce값을 바꾸고 다시 시도하는 것을 반복함.
이때, coinbase transaction에 있는 nonce값을 바꾸면 merkle tree를 위로 따라가며 hash값이 전부 바뀜.
input이 nonce, merkle root ... 등을 포함하므로 또다른 결과가 나옴.




- same puzzle을 푸는 사람이 있을까?
  모두가 같은 퍼즐을 풀면 compution power가 쎈(계산 빠른) 채굴자가 이길 확률이 매우 높음.
  but 서로 다 다른 문제를 풂.
 
  왜냐면 노드마다 transaction pool이 다름! (트랜잭션 수신 순서나 종류 다름)

  근데 매우 근처에 두 채굴자가 있어서 transaction pool이 같을 수도 있지 않음?
  순서랑 merkle tree구성까지 똑같다면 same puzzle 푸는 거 아님?

  coinbase transaction이 다름!!
  채굴보상 받을 주소를 본인 주소를 쓸테니, 채굴자마다 다른 문제를 푸는 것이 보장됨.
  (예외. 채굴회사에서 nonce값 분담해서 같은 문제풀고 보상 나눠가지는 경우)

 

 


Determining the difficulty

2장 참고.

difficulty는 2016개의 블록이 생성될 때마다(대략 2주) 변경됨.

next_difficulty = (previous_difficulty * 2016 * 10 minutes) / (time to mine last 2016 blocks)

block당 채굴시간 > 10분 이었으면 난이도 하강 (분자<분모)
block당 채굴시간 < 10분 이었으면 난이도 상승 (분자>분모)

ex) 현재 difficulty는 24조(24*10^12)임. 24조번의 hash계산 해야 한 block 찾을 걸 기대할 수 있음.

 

 


Incentives

 

① Block Rewards

비트코인 총 발행량 상한(21M개)를 맞추기위해 block reward는 4년 주기로 반감함. (2장 참고)
처음(2009년)에는 block reward가 50btc였음. 지금은 (50->25->12.5->) 6.25btc임.
초창기에는 bitcoin의 가격이 낮기도했고, 트랜잭션 유발하는 사람이 적어서
트랜잭션 fee가 매우 적었기때문에 어쩔 수 없이 block reward를 크게 했어야했음.

 

② Transaction fees

: 채굴자에게 주는 수수료

sender로부터 10받았고 receiver에게 9.9보냈다면 transaction fee는 10-9.9 = 0.1임

긴급한 transaciton이면 fee를 높게 설정하면 됨.(채굴될 block에 포함될 가능성이 높아짐)

만약 모두가 담합하여 fee를 0으로 설정하면 어떻게 될까?
-> 채굴자가 블록에 coinbase transaction 하나만 집어넣음. 다른 트랜잭션은 넣어줘봤자 얻는 게 없으니.
-> bitcoin을 통한 송금 시스템이 완전히 막힘.
따라서 transaction 이동 보상이 있어야 함.

참고로 현재 기준 ① >>>> ②


* Coinbase transaction (4장 참고)
 : 채굴자에게 돌아가는 보상을 채굴자가 지정한 주소로 보내는 트랜잭션

 

 


Mining Economics

 

if mining reward(채굴 보상) > mining cost(채굴 비용) then miner profits

* mining reward = block reward + transaction fees
*
mining cost = hardware cost장비 구입 비용 + operating costs운영 비용(electricity전기, cooling열 식히기, ..)
                         cooling 비용 절감을 위해 많은 채굴회사들이 북반구 아이슬란드 같은 곳에 위치함

* transaction
 : A주소에서 B주소로 bitcoin보낸다는 정보를 담고 P2P네트워크에 broadcast되는 메세지

* 비트코인의 security

 : P2P네트워크의 perfection으로부터 오는게 아니라(노드의 join, leave 자유로움)
  블록체인(일단 기록되면 번복불가)과 합의 프로토콜(매커니즘)에서 오는 것임.

* orphan block이 생길 수 밖에 없음
 : 두 채굴자가 동시에 block을 채굴했다면 그 중 하나만 대세가 될 것이고 나머지 블록은 orphan됨.

 

3 interlocking ideas in Bitcoin

이 세가지가 연결되어있음

block chain이 secure해야 bitcoin이 화폐로서의 가치를 가짐
-> secure하기 위해서는 공격자가 consensus process를 뒤집을 수 없어야 함
-> 공격자가 50% 이상의 파워를 가지지 못하게 해야함
   * 과반이 넘지않는 공격에 대해서는 안전한가?
     : 그건 아님. 게임이론에 따르면 인간이 아주 합리적이고 이성적인 선택만 하지는 않음.
       따라서 40%정도밖에 안돼도 합의를 뒤집을 가능성이 있음. 괜히 공격자를 따라가고싶은 사람들의 심리..
-> 그러려면 새로운 사람 끌어들여서 분모를 키워야 함.
-> 새로운 사람들은 reward > cost 여서 돈 벌 수 있을 것 같다는 생각이 들어야 뛰어듦.
-> reward가 충분히 커야함
-> 비트코인의 exchange rate(원화 교환 가치)가 커야함.
-> 가치가 크려면 user들이 블록체인 security를 신뢰해야함.
..(security로 시작해서 security로 끝남. 돌고 돈다)

 

 


51%(or more) of the mining power attack

만약 공격자가 과반 이상의 power를 가지고 있다면.. (참고자료)

 

Q. 존재하는 주소로 부터 비트코인을 훔칠 수 있을까?

A가 B에게 100btc보냄. 공격자가 그걸 빼돌려서 본인 주소로 보낼 수 있을까?

무조건 불가능함. (crypto를 깨는 방법뿐. 근데 SHA256 아직 안깨짐)

B주소로부터 내 주소로 btc보내려면, 내가 B주소의 소유자임을 증명하는 서명이 필요함.
즉, B주소의 private key가 필요함.
적절한 서명을 제시하지 못한채 B->C로 옮기는 트랜잭션 뿌려봤자
그걸 검증한 노드들이 invalid transaction이라고 판단하고 채굴에 포함시키지않고 버림.

 

Q. block reward를 변경할 수 있을까? (6.25 -> 100 Bitcoins)

불가능함.

coinbase transaction에 100btc이라고 적은 트랜잭션
-> honest node가 거부할 것임(합의된 규칙에서 어긋나므로)
-> 대세에 포함되지 못함.

 

Q. 특정 사람이 보낸 트랜잭션은 고의로 계속 무시하는 것이 가능할까?

일시적으로는 가능함. 계속 막는 건 어려움. (그리고 그럴 이유가 없음)

공격자가 Carol을 싫어하고 Carol의 주소를 알고있다고 해보자
-> Carol의 주소에서 다른 주소로 가는 트랜잭션들은 전부 거부
-> 공격자가 아닌 소수의 honest 채굴자들이 Carol의 트랜잭션 포함시키고
     해당 block 채굴 성공 했다면 그게 longest chain이 됨
-> 공격자는 갈등에 빠짐. 대세를 따라서 Carol의 트랜잭션을 포함하는
    마지막 블록에 붙일 블록을 채굴할지,
 끝까지 고집피울지.
-> 공격자가 막강한 파워를 가지고 Carol포함한 chain보다 더 긴 chain을 만들어낸다면
    공격자가 이기는 거지만 굳이 그렇게 할 이유가 없음.

 

Q. 공격자가 비트코인의 신뢰성을 아예 무너뜨릴 수 있을까?

음.. 가능하긴 한데...

공격자가 이만큼 막대한 파워를 가지고 있다는 것은 투자를 많이했다는 의미인데,
bitcoin 신뢰성이 떨어지면 가장 손해를 많이 볼 사람이 투자 많이 한 사람임.
그래서 굳이 이런 공격을 하지않음.

근데 한다고 해보자. 계속해서 double spend(하나만 valid)를 하면 굉장히 많은 branch 생김.
-> longest chain 찾는것도 힘들 정도로 혼란스러울 수 있음. -> 신뢰성 떨어짐. 교환가치 떨어짐.
-> 공격자들이 가장 손해를 봄.

 

 


Mining hardware

 

 

 

 


작업증명 (PoW)

 

작업증명 (Proof of Work)이란?

(사진 출처)
작업 : 채굴을 위한 hash puzzle을 풀었다
증명 : 매우 신속히 끝남
일을 할 땐 꼼수(short cut)가 없고 일했다는 증명은 매우 간단
채굴 성공하면 작업 내용을 다른 노드들에게 제시(nonce로 증명)하며 인정해달라고 함.
Sybil Attack 막음!!!

Sybil Attack

한 사람이 다수인 것처럼 위장하는 것.
사안 결정 투표를 할 때 ID당 한 표 가능. 근데 누군가 다량의 ID를 생성한다면 왜곡된 결과가 나옴.

사토시나카모토는 이러한 sybil attack을 막고 모든 노드를 평등하게 하고싶었음
-> hash puzzle을 풀자! 이때 short cut 없음!!
    더 빨리 푸는 방법따위 존재하지 않음(여러 ID 만들 능력있다면 투표 권한 늘리는 것과 같은 일은 막음)
    다만, 채굴회사가 여러 노드에 나눠서 일을 시킴으로써 hash power 키우는 건 가능

bitcoin은 투표로 결정하는 방식이 아님! -> Sybil Attack 막음!

캡차가 proof의 역할을 함. (봇이 아니라 사람이라는 것을 증명)

 


위쪽같은 Sybil Attack을 막아야 함.
아래그림처럼 1CPU 1VOTE(각 컴퓨터가 독자적으로 퍼즐 풂)가 이상향.

근데 비트코인에서 위쪽같은 경우를 막고있지는 못함.(채굴 공장)
한 사람이 다수의 컴퓨터를 동원해서 푸는 것이 각자 자기 컴퓨터로 푸는 것보다 유리함.

그럼 비트코인이 보장해주고 있는 것은 무엇이냐?

한 사람이 100대의 컴퓨터를 동원하더라도 100대의 컴퓨터가 머리 합쳐서
문제풀이 숏컷을 알아낼 수 있는 게 아니라는 거임.
채굴공장이 유리하다는 건 막을 수 없지만,
채굴공장이 다른 채굴자와 똑같은 절차를 거쳐서 문제를 풀어야함은 보장해줌.

6138B : 문제를 풀었다는 증거임. 이걸 제시하면 다른 채굴자들이 검증함.
             (마치 캡차같은 역할. 비트코인에 캡차같은 건 없음. 설명을 위해 등장한거임.)

 

 

 

댓글