퍼블릭 블록체인 : 비트코인
- 채굴 시스템에 의해 사용자들이 자생적으로 관리(P2P)
- 2100만 BTC로 제한
- 10분마다 거래내역 갱신, 해킹어려움.
: Miner들이 보상받는 양 : 반감기로 줄고 있는 기본적인 마이닝 비용 + 거래 하나당의 수수료
: 해킹이 어려움 : 다수결로 처리. 51% 이상이어야 조작가능. 투명성. 속도는 상대적으로 느리다.
(예 : 10000개의 노드일 경우 5001개 / 5001개 이상의 Hash power가 높을경우)
* Server-based 방식은 속도와 사후관리가 용이하다. 하지만 서버의 데이터가 조작된다면 전혀 알 수 없다.
** 만약 대대적인 해킹으로 51%를 공격한다고 하면, 그 즉시 비트코인의 가치를 인정받지 못할정도로 코인의 가격이 하락이 예상되기에, 보통 개인의 지갑을 해킹시도한다고 한다.
비트코인 노드
국가별 비트코인 풀노드
노드 : 블록체인 네트워크에 참여한 사람들
Mining을 하는 노드 : 풀노드
비트코인 마이닝과 합의
PoW 처리 절차
0. 풀노드 4명이 존재하는 상황이다.
1. 새로운 블록을 찾기위해 노드들이 Mining 중이다.
wallet이 트랜잭션을 발행하고 참가자 전원에게 브로드캐스트를 하였다.
2. Node0 이 블록을 찾았고 존재했던 블록체인에 이어붙인다.
받은 노드들은 해시를 계산한것이다.
3. 새로운 블록(3번째)을 찾기위해 다시 Mining을 시작한다.
wallet은 다른 트랜잭션을 발행하고 참가자 전원에게 브로트캐스트.
4. Node1과 Node2가 동시에 블록을 찾아냈으며, 이 과정을 Fork 혹은 분할 이라고 한다.
5, 6. 4번째 블록을 찾는 과정이며 Node3은 4번째 블록을 찾아 Node2가 만든 3번째 블록에 이어붙였다.
* 위 경우에는 Node2의 블록체인 뒤에 블록을 붙였기에 Node2의 체인이 정식 체인으로 채택된다.
* 가장 많은 해시 파워가 트입되는 체인에 다음 블록이 연결된다.
* 가까운 블록에 우선적으로 연결된다. (마이너가 많은 지역에 있는곳에서 마이닝 하는것이 유리하다.)
* 추후에 네트워크 상태에 따라, 위의 블록체인이 추가된것이 더 길어진다면, 위의 것이 올바른것으로 재변경 된다.
* 메인체인으로 인정받지 못한 체인은 고아, Stale, uncle 블록이라고 불리며, 보상도 받지못하고 그에 들어가있는 tx도 인정받지 못한다.
* Double spending 문제를 방지할 수있다.
* Confirmation : 6개의 블록이 이어진다면 메인체인으로 확정된다. (Longest chain)
* tx이 완벽하게 처리되기 위해서든 10분 * 6개의 블록인 1시간이 소요되지만, 송금의 경우 거래소 자체적으로 처리를 해준다고 한다. 따라서 약 10분정도 소요된다.
* 블록체인의 Wallet은 Account, Address 라는 용어로도 같이 쓰인다.
비트코인 지갑과 거래
자산관리
- UTXO. 잔액관리
: UTXO - Unspend Transaction Output. 비트코인에서만 사용.
: 소비된 거래와 소비되지 않은 거래를 구분하여 잔액을 계산.
: https://08231117.tistory.com/11 를 참조한다.
거래와 기록 장부
- 거래는 지갑 software/app 에서 발생시킨다.
* 소유주(송신자)가 개인키(열쇠)를 사용하여 거래를 생성하고, 그의 공개키(열쇠)와 수신자 주소를 함께 네트워크에 방송한다.
- 거래 처리자 (채굴자. 풀노드)
* 정상적인 돈인지 검증한다 (위조 혹은 변조)
* 동봉된 공개키로 소유주를 입증한다
* 이 거래 내용이 공개 장부에 기록되면 송신을 종료한다.
* 돈을 수신자에게 직접 전달하는 것이 아니다.
* 마이너는 검증만 할뿐, A->B에게 TX를 통해 주는것이다.
- 수신자 수령
* 수신자는 공개장부에 접근하여 입금과 잔고를 확인한다.
위와같은 거래의 과정은 모든 블록체인마다 방법이 조금씩 다르다.
내 지갑의 코인 잔고
- UTXO 시스템을 사용한다.
- 실제 코인이 내 지갑에 존재하는 것이 아닌, 잔고만 보여준다.
- 따라서 기록상으로만 코인이 존재한다는 뜻이다.
- 코인의 사용에도 있어 과거의 기록에서 새로운 기록을 생성한다.
- 위와 같은 경우에는 0.2 비트코인이 0.15 비트코인은 송금, 0.05비트코인은 다시 돌아와 UTXO가 된다.
- 만약 존재하는 기록보다 큰 돈을 보낼 경우에는 검증 과정에서 탈락된다.
- 지갑의 상태가 3.21BTC 일때 3.1을 보낸다면, TX가 두가지로 보내지게 된다.
- 3에 해당하는 TX와 0.2의 0.1, 그리고 다시 자신에게 돌아오는 UTXO (0.1BTC)가 생성된다.
- 많은 UTXO가 생긴다면 MERGE 작업이 일어난다.
거래에 대한 정리
- 내 계정(내 주소)에서 내가 가진 코인 기록을 지움
- 송금액 만큼의 수신인의 새 코인 기록을 만듬
- 잔액만큼의 내 코인 기록도 새로 만듬
- 수신인의 비트코인 주소에 들어간 금액 기록
- 내 비트코인 주소에서 빠져나간 잔액기록
- 출력으로는 출력인덱스, 코인량(금액), 수신자주소(공개키해쉬)를 기록한다.
- 이렇게 수신된 코인을 UTXO 라 부른다.(Unspent Transaction Output)
- 따라서 지금 사용 가능한 모든 코인은 다 UTXO 이다.
비트코인의 블록헤더와 잔액관리
- 마이너는 한 블럭당 TX수가 한정되어 있다.
- 따라서 TX Fee가 높은 순서대로 정렬하여 처리한다.
- 그 후 검증과정을 거치고, 블럭을 찾아내면, 블럭의 내용들을 Broadcasting 한다.
비트코인의 한계점
- 비트코인 스크립트 언어의 단점.
- 작업증명방식의 합의 메커니즘 (PoW)
: 지나치게 큰 에너지 소모
: 채굴자들의 중앙화
: 만명의 Miner들이 있어도, 블록을 생성하는 것은 1명이기에, 그에 해당하는 보상을 받는 사람은 한명이다.
: 새로운 블록에 Transaction을 모두 다같이 하고, 이어 붙일 권한을 부여받는 것이 블록을 생성한다는 뜻이다.
: 나머지 9999명은 맞는지 증명만 할뿐, 매우 비효율적이다.
- 늦은 거래처리속도
- 의사결정구조
: hard fork(bitcoin cash), segwit
댓글