Bitcoin
: bunch of protocols (여러 프로토콜의 모음)
Bitcoin software가 실행되면 bitcoin의 coin이 generate됨.
-> 이는 A계좌에서 B계좌로 전송될 수 있음. -> transaction data로 저장됨
-> block으로 bundle됨 -> link되어 bitcoin blockchain이 형성됨
* 채굴(mining) ≒ 퍼즐 풀기
: 마이닝이란?
How does Bitcoin work?
목적 : 검열받지 않는 전자(온라인)결제 시스템 만들기(금융수단 거치지않고 직접 지불)
Problem : Single Central Bookkeeper
은행이 장부를 가지고있고, 인증절차 통과해야 돈이 이동하는 시스템 마음에 안듦.
-> 검열에 저항하자!!!(censorship resistant)
Solution : Replicate the Books
허가없이 누구나 bookkeeper가 될 수 있음.
모든 bookkeeper들이 동일한 장부를 가지고있음.
장부를 복제해서 여러군데 분산 저장!
누군가 조작을 시도해도 다른 사람들이 무시하거나 배제할 것임.
* bookkeeper
: 채굴자 (채굴에 참여하는 노드)
Problem : Accounts Need Permission to Set-up
관리자가 사용자에게 계좌번호, 사용자 이름, 비밀번호 등을 set-up하고 할당해주어야 함.
Solution : Use Public Keys as Account Numbers
정보제공 없이 public keys에 기반하여 계좌 생성, 비밀번호 대신 디지털서명 사용.
계좌번호(address)는 원하는 만큼 많이 만들 수 있음.
public key의 해시값을 계좌번호로 삼음.
계좌에 들어있는 비트코인을 꺼내올 수 있는 사람은
그 계좌의 public key와 쌍이되는 private key를 알고있는 나밖에 없음.
(private key를 잃어버리면 그 누구도 해당 비트코인 사용 불가)
* 공개키 기반의 암호화 기법(public key crypto)
: 인증서를 발급받으면 {public key, private key} 쌍을 발급 받은 거임.
이때 public key는 대중에게 공개되어도 노상관.
인증서 비밀번호가 private key을 보호하는 역할.
private key는 위조 불가능, 전자상거래도 대면 계약과 동일한 효력이었음.
* 분산 데이터베이스
: 각 노드(=컴퓨터, 데이터베이스)마다 각각 장부를 가짐. 각 노드는 network로 연결됨.
각각 가지고있는 장부의 내용이 서로 같아야 함.
* transaction
: A address에서 B address로 비트코인 보내는 것
Problem : Transaciton Ordering
①A pays B 100과 ②C pays D 50이 서로 독립사건이 아니라면 transaction순서가 중요함.
ex) 5만원 보유중인데 ①A에게 5만원 이체 ②B에게 5만원 이체 라면 둘 중 하나만 가능함.
transaction의 실행 순서 중요함.
-> multiple bookkeepers 각각의 데이터베이스 동기화 맞추는 게 중요함.
근데 transaction별로 순서를 매기면 순서가 어긋나는 경우가 매우 많이 발생함.
Solution : Blocks
transaction들을 모아서 block(약 1MB)을 만들고 뭉탱이로 배치 처리함.
즉, 한 block에 transaction 여러 개.
-> block들은 덜 자주 생성됨. 평균 10분(bitcoin protocol에 의해 자동으로 난이도 조절됨)
(block의 수) < (transaction의 수) 이므로 block by block의 합의가
transaction by transaction의 합의보다 일어날 가능성 높음. 더 쉬움.
가장먼저 문제 풀이 성공 -> 얼른 광고 -> 다수가 인정(대세) -> 채굴 성공! -> 인센티브 받음(현재 6.25btc≒1억5천)
Problem : Who Can Create Blocks, and How Often?
누구나 블록 생성 가능.
누가 가장 먼저 채굴했는지 알려주는 심판같은 존재는 없음. 다수의 인정을 받아야 함.
어떤 채굴자든 채굴 성공 가능성은 있음(hash power;단위시간당 계산량와 비례함)
but 전문 채굴 회사들이 장악중임. 개인의 채굴 성공 확률은 거의 zero
채굴 시 풀어야하는 문제 난이도 자동 조절 -> 대략 10분 소요됨.
Solution : Proof-of-Work
작업증명
: 비트코인의 창시자 '나카모토 사토시'가 고안한 블록 생성 방식.
어떠한 거래가 발생 되었을 때 이 거래에 대해서 증명해주는 과정 중의 하나.
작업증명(PoW)이란?
: 블록체인의 채굴에 필요한 과정, 채굴에 성공했다는 증명
- 문제풀이의 short cut 존재 X
- 평균적으로 10분 걸림
- cheat 불가능
- 정답 입증(검증) 가능해야함
- 게임 winner에게 보상 있어야함.(채굴비용;컴터, 전기요금, 인건비, 임대료 등의 마이너스 있으므로)
- 다수가 합의한 문제 list의 문제를 풀어야 채굴 보상 받음.
- 채굴자들이 각자 원하는 transaction들로 block을 build.
- 채굴자들은 block's data로 crypto hash 계산함. special part에 임의의 숫자 넣기를 반복함.(mining)
(hash of the block < target number) 이면 해당 블록은 valid하며 연결 가능함.
- 정답 찾기는 매우 오래걸리지만(심오한 사고과정X, 복잡한 수학문제X, 노가다임)
정답의 valid 판단은 금방 가능.
- valid block 채굴 성공 후, 채굴자는 즉각 다른 채굴자들에게 알려서
내가 채굴한 block이 주류가 되도록 해야 보상받을 수 있음.
others는 도착한 block의 validity를 검증한 후 해당 block을 받아들임.
만약 동시에 두개의 valid block이 도작했다면 약간이라도 먼저 도착한 block을 선택함.
그래야 그 (대세라고 믿는 방금 받은)block에 새로운 block을 붙이는 작업을 조금이라도 더 빨리 시작할 수 있기도하고
나에게 가장 먼저 도착했다면 다른 노드들도 그 block을 가장 먼저 받았을 가능성이 높기 때문.
- block 채굴 성공 확률은 hashing power(hash계산 얼마나 많이 할 수 있는지)의 영향을 받음.
* SHA256 (secure hash algorithm)
: 비트코인의 hash choice.
h(x)의 output크기가 256bit (x는 제한없음)
Problem : Incentivizing Block-Creators
채굴 비용 발생.
하지만 채굴자들이 block을 생성하고 keep system runnung하도록 하고싶음
Solution : ①Transaction Fees ②Block Rewards
보상(돈)을 주자!!! (비트코인으로 제공)
①Transaction Fees(계좌이체 수수료)
: A address에서 B address로 비트코인 이체하는 것(transaction)을 처리해달라고 요청하면서
'내 transaction을 네가 block에 포함시켜서 채굴 성공하고 그것이 block chain에 붙게되면
내 수수료를 네(채굴자)가 가져' 라는 개념.
transaction fee는 transaction유발자가 설정함.
내 transaction이 채굴자의 관심을 끌어서 빨리 포함되길 원한다면 fee를 높이면 됨.
(market-based solution)
Problem : How to Bootstrap?
transation이 적은 초창기에 채굴자들의 채굴 독려 방법 필요
Solution : ②Block Rewards
비트코인이 안정적으로 다수의 참여자를 끌어모으기 위해서는 초창기에 보상체계를 확실히해서
보상을 확실하게 해줘야함 -> transaction fee 이외의 보상체계를 만들었음
②Block Rewards
: 블록 채굴의 보상(주로 채굴자의 address로 보내짐).
초창기에 kick start 및 채굴 동기유발 역할을 했음.(50btc이나 줬었음. 약 13억.. 지금은 6.25btc)
21만개의 block이 생성되면 block rewards 반감.
10분에 block 1개씩 생성되므로 21만개 생성되려면 4년정도 걸림.
즉, 대략 4년마다 block rewards는 절반으로 줄어듦(그래도 transation fee보다는 훨씬 큼)
-> 반감하다가 나~중에는 거의 fee만으로 transaction이 이루어지는 상황이 오겠지만,
채굴자들이 얻는 이득이 줄어드는 만큼 채굴 경쟁도 줄어들기 때문에 할만 함.
비트코인을 많이 사용하면 fee가 올라가기도하고.
한 block당 50btc가 block reward로 생성됨-(4년 후)-> 한 block당 50*1/2btc가 생성됨
-(4년 후)-> 한 block당 50*1/2*1/2btc가 생성됨 --> ...
21만개의 block * (50btc + 50*1/2*1/2btc + ...)
= 210000 * 50 * 1/(1-1/2) btc
= 21000000btc
=> 최대 bitcoin 수는 2천 1백만개(21millions)임
(비트코인 총 발행량 상한을 21M으로 설정한 이유? : 비트코인 가치 하락 방지)
* coinbase transaction
: 비트코인을 생성하는 transaction. (다른 모든 transaction들은 A->B address로 비트코인 전송하는 것임)
즉, 유일하게 block에서 새롭게 생성되는 비트코인을 지정하는 transaction임.
얘를 제외한 나머지 transaction(포함시켜달라며 채굴자에게 도착한 transaction)들은
기존에 있는 비트코인을 A주소에서 B주소로 보내는거임.
얘는 기존에 없었던 비트코인을 만들어내는 트랜잭션임.
세상에 없었던 비트코인을 만들어서 채굴자에게 줘버리는거임.
A->B에서 A가 없음. B만 있음. B는 채굴자가 자기의 주소로 지정함. 그 주소로 채굴 보상을 보내라고 함.
채굴자는 채굴에 성공하면 coinbase transaction을 통해서 block reward를 내(채굴자)주소로 받고,
포함시켜준 트랜잭션들의 transaction fee합친거도 받음(두종류 받음)
Problem : More Hashing, Faster Blocks, More Monetary Supply
채굴 평균 시간이 10분임.
hash power가 엄청 큰 채굴자가 나타나서 점점 더 빠르게 채굴 성공해버리면
합의가 어려워지고(block 연결 어려워짐), 비트코인 대량생산으로 인한 가치하락 문제가 발생함.
Solution : Adjusting Difficulty
2016개의 block이 생성될 때 마다 채굴 난도를 조절함.
10분에 block 1개씩 생성되므로 2016개 생성되려면 2주정도 걸림.
즉, 대략 2주에 한 번 채굴 난도를 조절함.
next difficulty = current difficulty * (2weeks / T)
* T : 이전 2016개의 block을 채굴하는 데 걸린 시간
2weeks < T 이면 채굴 어려웠다는 의미이므로 difficulty 낯춤.
2weeks > T 이면 채굴 쉬웠다는 의미이므로 difficulty 높임.
* difficulty 높이는 방법?
: h(x) < taget value 인 x를 찾는 데 성공하는 게 채굴임. 여기서 target value를 낮추면 난이도 올라감.
Problem : Block Ordering
101th 채굴을 포기하고 102th를 먼저 만들고있으면 안되나? (mining ahead)
101th가 만들어지자마자 102th를 광고하는 방식이 가능해지면
hash power 큰 채굴자들이 미리 전부 독식 가능.
hash power가 큰 것의 장점은 101th 채굴에 국한시키고
102th, 103th, 104th..를 미리 하는 것은 막아야 함.
Solution : A Block-Chain !!!
블록체인 작동 과정
기존에 이미 포함된 transaction을 또 포함한 block은 무조건 거부당함.
즉, 101th에 포함되었던 transaction을 102th가 포함한다면 그건 vaild하지 않은 블록임.
이전꺼와 충돌하면 안됨. 따라서 102th를 미리 채굴한 게 의미없어짐.
그럼 102th에 아무것도 안담고(fee 포기) block reward만 노리는 것도 안되나?
그러면 앞의 transaction과 충돌할 일 없잖아. 암것도 안담았으니.
block들은 서로 hash pointer로 연결됨.
102th 블록을 계산하려면 이전 블록(101th)의 hash 값 정보가 필요함.
즉, 101th가 끝나야 102th 채굴 시작 가능!
채굴이 차례대로 일어날 수 밖에 없음. 항상 101th에 집중!
hash pointer로 연결되어있기 때문에 99th 블록을 조작한다면 그 뒤의 블록들도 조작해야함.
-> block 정보 변조나 조작 불가능(immutability)
-> 조작 사실을 발각할 수 있음(tamper-evidence)
Problem : Block Clashes/Consensus
동일한 문제를 푼다면 hash power 큰 사람이 먼저 풀 가능성이 높아진다.
그렇다면 채굴자들이 완벽하게 동일한 문제를 풀 가능성이 있는가?
-> 없다! 공교롭게 동일한 transaction들을 동일한 순서로 담았더라도 coin base transaction은 모두 다르기 때문.
reward 수신자 주소는 본인한테 할테니 채굴자별로 hash값이 다 달라진다.
만약 채굴 공장에서 채굴 참여보상을 같은 주소로 보내서 나눠먹는다면
여러 노드가 동일한 문제를 푸는 것이 가능하긴 하겠지만 일반적인 경우에는 전부 다른 문제를 풂.
여러 채굴자들에 의해 만들어진 다수의 block들이 동시에 연결 시도 한다면 어떤 걸 택해야 하는가?
-> 가장 먼저 도착한 block을 선택함. 나에게 먼저 도착했다면 다른 노드에도 먼저 도착했을 확률이 크므로.
-> 각 노드가 서로 다른 결정을 하게될 수 도 있음. 일시적 불일치 발생.
어떤 block들을 선택할 지 어떻게 합의가 이루어지는가?
Solution : Longest Chain Rule
-> 처음엔 서로 다른 노드를 선택해서 채굴을 이어나가더라도 시간이 지나면서 수렴되어 합의가 이루어짐.
합의가 이루어지는 rule이 바로 Longest Chain Rule임.
채굴자들은 가장 긴 체인(대세)의 마지막에 블록을 연결하려고 함. 그래야 인정받을 가능성이 큼.
longest chain에 포함되지 않은 block으로 받은 bitcoin(=orphan)은 폐기됨(다른 사람들이 인정하지 않음)
따라서 순간적 불일치 가능성은 있지만 모든 노드가 본인 이익을 극대화하는 방향으로 행동하기때문에
결론적으로 가장 긴 체인으로 수렴하게 됨.
Problem : Double Spend
이중지불이란?
같은 비트코인을 이용해서 두개의 transaction 생성해서 하나는 online trailer(B)에게, 하나는 yourself(A')에게.
; 지폐는 사용(전달)하고나면 또 사용할 수 없지만, 비트코인은 물리적 실체가 없기때문에
내가 관리하는 주소에 비트코인이 들어왔다는 것을 다른 사람이 인정하는지 안하는지에 달려있음.
X가 longest에 포함되어서 B가 A에게 물건을 줬음 -> 그 후 A는 1btc를 지불했던 게 아까워서 Y를 광고함.
-> Y쪽이 longest chain이 된다면 X가 불승인(invalid), Y가 승인(valid)됨 -> B에게 1btc가 지불되지 않음.
Solution : Wait about 6 Confirmations
B가 A에게 물건을 넘기기 전에 6 confirmations 동안 기다리자!
X이후에 5개 block이 더 붙어서 총 6개 될때까지 기다린 후(약 60분)에 물건을 보내자.
mining은 hash power에 달려있는데 특정 회사가 50(과반)이상 가지고있지 않으므로
Y가 6 confirmation을 따라잡는 건 거의 불가능함. (근데 왜 6일까? 비트코인의 국룰임)
근데 Y의 hash power가 70%라고 하더라도 굳이 저런 짓은 안할거임.
저렇게되면 bitcoin의 신뢰성이 떨어져서 비트코인과 법정화폐와의 교환가치가 떨어지게되고
그러면 궁극적으로 hash power가 큰 사람(투자 많이 한사람)이 가장 손해이기 때문.
따라서 신뢰성 훼손하는 저런짓은 가능해도 안할거임.
'CS > 3-2 블록체인' 카테고리의 다른 글
[블록체인] 06. Mechanics of Bitcoin - Mining (0) | 2022.10.22 |
---|---|
[블록체인] 05. Mechanics of Bitcoin - Distributed Consensus (0) | 2022.10.22 |
[블록체인] 04. Mechanics of Bitcoin - Transactions, Scripts and Blocks (0) | 2022.10.17 |
[블록체인] 03. Cryptography for Blockchains (4) | 2022.10.13 |
[블록체인] 01. Bitcoin and Blockchain - History and Motivation (0) | 2022.10.11 |
댓글