스케일링 전쟁(Scailing War) (1) - Bitcoin Core : 비트코인 코어

View this thread on: d.buzz | hive.blog | peakd.com | ecency.com
·@maa·
0.000 HBD
스케일링 전쟁(Scailing War) (1) - Bitcoin Core : 비트코인 코어
![image](https://i.imgur.com/NZ926Ij.jpg)

안녕하세요 마입니다. 오늘은 비트코인 코어에 대한 정보를 공유해드리겠습니다. 프로그래밍 용어가 많이 나오지만 관련 설명을 최대한 적어놓았으니 공부하실겸 읽어보시면 도움이 될듯합니다.
 
----

# 목차
1. 비트코인 코어란?
2. 비트코인 코어를 만든 의도
3. 비트코인 코어의 기능 및 스크립팅 언어
4. 비트코인 코어의 역사와 개발자의 교체
5. 비트코인 코어의 로드맵
6. 어디서 비트코인 코어를 돕고 있는가?
7. 비트코인 코어를 구동할 때의 위험?
8. 코드의 개선 방식 : BIP(Bitcoin Improvement Proposals)
 
![](https://steemitimages.com/DQmS3uCVxNs2xRQKew7JcdMGkbLCk928MHePZvb6EeSbTVk/image.png)
 
# 1.비트코인 코어란?
 
비트 코인 코어는 비트코인의 **레퍼런스 클라이언트**(사용자 측이 사용하는 소프트웨어 구현을 돕는 샘플 프로그램)입니다. 

또한, 비트코인 네트워크 를 생성하는 **비트코인 노드**에서 사용하는 **전체 클라이언트**(full client) 입니다. 

비트코인 코어의 변경 사항을 통해 개발자는 기본 비트코인 프로토콜을 변경합니다. 

이 프로젝트는 또한 암호화 라이브러리 libsecp256k1 및 [GitHub에 있는 자료](https://bitcoincore.org/en/about/)를 유지 관리 합니다. 

용량이 **110기가바이트**인 분산 원장 전체를 받고 동기화해야지 **클라이언트에 완전한 참여**가 가능합니다.
 
----

**레퍼런스**와 **클라이언트** 모두 **프로그래밍 용어**입니다.
 
### 1.레퍼런스(=참조 구현=샘플 구현=모델 구현)
 
어떠한 하드웨어 혹은 **소프트웨어를 구현** 하는 것을 **돕기 위해** 제공하는 샘플 프로그램입니다.
 
### 2.클라이언트
 
클라이언트/서버(client/server) 구성에서 **사용자측**을 의미합니다. 
 
> 사용자가 **서버에 접속**했을 때 클라이언트는 **사용자 자신**을 지칭할 수도 있고, **사용자의 컴퓨터**를 가리키기도 하며, 컴퓨터에서 **동작**하고 있는 **프로그램**이 될 수도 있다. 
 
----

# 2. 비트코인 코어를 만든 의도

![](https://steemitimages.com/DQmVEydjvcyyZjzGVJuiRqoJ3Fpb9LC5aXfZruSSbq9cJF4/image.png)

**비트코인 코어**는 **비트코인 개발자**인 **나카모토 사토시**가 만들었습니다. 그는 **비트코인 클라이언트**를 순수하게 **P2P 전자 현금**이라는 **개념이 유효**하고 **솔루션이 포함 된 문서**가 작성될 수 있음을 **증명**하기 위해서 만들었습니다. 비트코인 코어를 **이용하는 사람**들이 점점 **늘어도** 비트 코인에 대한 **개발자의 영향**은 사람들이 **자발적**으로 사용하기로 결정한 **구현 방식**에 따라 **제한**됩니다. 

----

# 3. 비트코인 코어의 기능과 스크립팅 언어

<iframe width="560" height="315" src="https://www.youtube.com/embed/FIt7GLxxIpY" frameborder="0" allowfullscreen></iframe>

_비트코인 코드의 변경과정의 시각화입니다._

### 비트코인 코어의 기능

1. **트랜잭션 검증 엔진 탑제**(전체 블록체인 유효성 검사)/전체 노드로 비트코인 네트워크에 연결

2. 비트코인 송수신이 되는 **지갑**이 포함

3. 비트코인 지불받을 **QR코드** 생성가능

4. 비트코인 코어에는 **JSON-RPC 인터페이스**인 'bitcoind'가 있는 명령 행 기반 **상주 프로그램**(daemon)이 번들로 제공됩니다. 이것은 비트 코인 메인 네트워크(메인 넷)을 모방한 글로벌 **테스트 환경** 인 **테스트 넷에 대한 액세스**를 제공합니다.  실제 비트 코인이 사용되지 않고 블록 체인에 악영향을 줄 수없는 **대체 블록 체인**을 사용합니다.

5.  비트코인 코어에서 **Regtest(Regression Test Mode)**는 로컬 테스트 환경으로 사용되는 **개인(Private) 블록 체인**을 만듭니다.

6. **bitcoin-cli**는 관련된 세 번째 프로그램입니다. 사용자가 **bitcoind로 RPC 명령**을 보낼 수 있습니다 .

7. **검사점(Checkpoints)**는 클라이언트에 **하드코딩**되어있습니다.

8. 다운로드가 완료되면 블록 체인과 비교할 수있는 **소스 코드**에 블록 체인 **데이터의 일부**를 유지함으로써 **데이터 무결성**을 유지합니다. 

9. 2010 년에는 나카모토 사토시가 **스팸**을 막기 위한 임시조치로 **1메가바이트 블록 크기 제한**을 추가했습니다. 이로 인해 최대 네트워크 용량이 **초당 약 3건의 트랜잭션**으로 제한되었습니다. 그 이후로, 소프트웨어의 사소한 변화는 점진적으로 네트워크 용량을 향상 시켰습니다.

10.  나카모토 사토시는 비트 코인에 관한 중요한 뉴스를 사용자에게 알리는 방법으로 **네트워크 경고 시스템**을 포함 시켰습니다. 그 시스템은**2016 년 11 월에 사라졌습니다**. 비트코인에 관한 뉴스가 널리 보급됨에 따라 그것은 쓸모 없게되었습니다. **채굴자**들은 **투표**로 **새로운 기능**을 통합하는 것에 대한 **결정에 대한 신호**를 보낼 수 있습니다.

> **상주프로그램** : 컴퓨터 시스템의 운영에 관련된 작업을 후선(background) 상태로 동작하면서 실행하는 프로그램.
> **JSON-RPC** : JSON으로 인코딩된 원격 프로시저 호출.
> **JSON** : JSON ( 제이슨 , JavaScript Object Notation )은 속성-값 쌍으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷.
> **RPC** : Remote procedure call (원격 절차 호출, 원격 프로시저 호출.)

# 스크립팅 언어

1. **강력한 스크립팅 언어**가 **트랜잭션**을 정의하는 데 사용됩니다. 이 **Forth같은 프로그래밍 언어**는 세 가지 각각의 응용 프로그램 **프로그래밍 인터페이스** 중 하나입니다 . 이것으로 다양한 **트랜잭션 매개 변수**를 사용할 수 있습니다 . 이 스크립트는 **유효성 검사**를 위해 **역 폴란드 기법**을 사용합니다. 

2.  **ScriptPubKey**는 일련의 **미래 조건**을 기반으로 **트랜잭션**을 **'잠그는데'** 사용됩니다. 

3. **scriptSig**는 이러한 **조건을 충족**시키거나 **트랜잭션**을 **'잠금 해제'**하는 데 사용됩니다. 

4. 데이터에 관한 운영이 다양한 **OP_Codes**에 의해 수행된다. 

5. **main**과 **alt**의 **두 스택**이 사용됩니다. 

6. **루핑은 금지**되어 있습니다.

> **Forth** : 스택기반의 프로그래밍 언어.
> **폴란드 기법** : 폴란드 기법 ((모든 연산 기호를 모든 변수보다 뒤에 위치하도록 기술하는 불 대수(Boolean algebra)의 기법))
> **루핑** : 프로그램 속에서 동일한 명령이나 처리를 반복하여 실행 하는 것.

----

# 4.비트코인 코어의 역사와 개발자의 교체

![ㄴ.jpg](https://steemitimages.com/DQmPDJGFw2171HDsdVc67kcX1uhaPHms4MHta5VLQj7FKDv/%E3%84%B4.jpg)

 처음에 이 소프트웨어는 **나카모토 사토시**가 '비트코인'이라는 이름 으로 만든 후 그 뒤 'Bitcoin-Qt'로 명명되고 나중에 'Bitcoin Core'로 이름을 변경했습니다.(사토시 클라이언트 라고도 합니다.)   2017 년 현재 , 비트코인 코어 저장소는 Wladimir J. van der Laan에 의해 관리됩니다.

**2009 년 1 월 9 일 Bitcoin 0.1** **나카모토 사토시**가 **Windows** 만 지원하여 출시. 이 뒤로 사소한 버그 수정 버전이 나왔습니다.

**2009 년 12 월 16 일 Bitcoin 0.2 출시**. **Linux 버전**을 처음으로 포함하고 채굴용 멀티 코어 프로세서 를 사용했습니다. 

**버전 0.3.2** 나카모토 사토시가 **세이프 가드로서 검사점**을 포함시켰습니다. 

**버전 0.3.9**의 출시 이후 **나카모토 사토시**는 **프로젝트를 떠났고** 얼마 지나지 않아 온라인 포럼에서 의사 소통이 중단되었습니다. 

그 이후로 지금까지 **소프트웨어 개발**은 ​​많은 사람들이 비트 코인을 개선하는 방법에 대한 다양한 아이디어를 가진 비트코인 **커뮤니티**라고하는 독립적인 개발자 그룹에 의해 수행되었습니다.

**bitcoin.org**에서 **2011년과 2013년** 사이에 새로운 버전의 소프트웨어가 출시되었습니다. 개발자는 자신이 비트코인 옹호자가 아닌 소프트웨어 제작자로 차별화하기를 원했고 그 이후로 비트 코인 bitcoincore.org를 소프트웨어 용으로 유지합니다.

**2011 년 11 월 1 일 Bitcoin-Qt 버전 0.5.0** : Qt 사용자 인터페이스 툴킷 을 사용하는 전단(front end)이 소개 되었습니다. 이 소프트웨어는 이전에 데이터베이스 관리를 위해 Berkeley DB 를 사용했습니다.

> **전단(front end)** : 사용자 인터페이스(GUI), 전단 처리기(FEP), 트랜잭션 모니터와 같은 통신 시스템을 말한다

**버전 0.8** : 개발자들은 블록 체인 동기화 시간을 줄이기 위해 LevelDB로 전환했습니다. 이 버전의 업데이트로 인해 **2013 년 3월 11일**에 **사소한 블록 체인 포크**가 발생했습니다. **포크는 곧 해결**되었습니다. 

**버전 0.8.2** :  **IRC**를 통한 **노드 시드**가 중단되었습니다. 이 릴리스에서는 **중계 수수료**(트랜잭션 수수료)가 **50,000사토시**에서 **10,000사토시**로 감소했습니다.

**버전 0.9** : 0.9부터 소프트웨어의 이름이 **비트코인 코어**로 변경되었습니다. **소액 결제**를 장려하는 수단으로 거래 **수수료가 10 배 감소**했습니다. **비트 코인 코어**가 **네트워크의 작동**을 위해 **OpenSSL**을 사용하지않고 **원격 프로 시저 호출**을 위해 **OpenSSL**을 사용했습니다. 

**버전 0.9.1** : **Heartbleed 버그**에 대한 **네트워크 취약점**을 제거하기 위해 버전 업데이트가 되었습니다.


**2015 년 2월 16일 버전 0.10** : **컨센서스 라이브러리**를 도입하여 프로그래머가 **네트워크에서 합의**를 규율 하는 규칙에 쉽게 **액세스**할 수 있게 했습니다 . 개발자는 **소프트 포크에 대한 합의**를 위해 **해시 파워의 95 %**를 요구한다고 명시했습니다. 

**버전 0.11.2** : 개발자들은 향후 **특정 시간**까지 **트랜잭션**을 **추가** 할 수 없게하는 **새로운 기능**을 추가했습니다.

**2016 년 4월 15일 버전 0.12.1** : **여러 개의 소프트 포크**가 동시에 가능하게 합니다.

**2016 년 7 월** : # CHECKSEQUENCEVERIFY **소프트 포크 BIP 112**가 활성화되었습니다.

**2016 년 8 월 23 일 버전 0.13.0** : 100명 이상의 기여자가 작업하여 **10 가지 이상의 중요한 변화**가있었습니다.

**2016 년 10 월 버전 0.13.1** : 광범위한 테스트 및 연구를 거치다보니 업데이트 날짜가 지연되었습니다. 비트코인 블록 크기를 최적화하려는 **스케일링 개선**을 포함하는 소프트 포크를 했습니다.35명의 개발자들은 원래 **4월에 확정된 패치**를 **배포**하는데 열중했습니다. 이 버전 업데이트는 네트워크의 최대 트랜잭션 용량을 증가시킬뿐만 아니라 거래 비용을 낮추는 것을 목표로하는 [Segwit(Sepegated Witness)](https://steemit.com/kr/@morning/3bjdvz 
)의 활성화를 특징으로했습니다. SegWit을 사용하면 총 블록 크기를 약 1.7mb로 추정합니다.  Segwit는 다양한 형태의 트랜잭션 가단성(malleability)을 방지하는 것을 목표로합니다. 비트코인 코어를 사용하는 채굴자들 95 %가 동시에 사용에 동의 할 때까지 Segwit을 활성화 할 수 없습니다. 라이트코인에서는 75%만 Segwit에 동의하면되서 이미 락인되었으며 라이트닝 네트워크의 적용이 가까워졌습니다.

### 개발자의 교체

리드 개발자는 2014년 4월 8일에 비트코인이 기술적인 전략적 발전을 할 수 있게하는 역할을 맡은 Wladimir J. van der Laan입니다. 전임 관리자는 개빈 안데르센(Gavin Andresen)입니다. **개빈**은 전통적인 의사결정 방식을 원치 않는다고하고 나왔습니다.

----

# 5.비트코인 코어 로드맵

![](https://steemitimages.com/DQmeZzsFR4Xzv2D33cqSh81xPZiiy4hTqSbNdT5M4XwkGA8/image.png)

클라이언트의 **로드맵**에는 **확장성(Scalability)**을 위한 **데이터 링크 계층 솔루션**이 포함됩니다. **코어 개발자**들은 **비트코인을 결제 계층**으로 봅니다. **비트코인 코어**는 전체 노드 클라이언트 구현들 중  **가장 많이 배포**되는 것입니다. 그에 대한 대안으로는 **Bitcoin XT , Bitcoin Classic 및 Bitcoin Unlimited**가 있습니다. 모두 비트코인 코어에서 파생되었으며 코어를 **하드 포크**하자고 합니다. **소프트웨어 포크**(소프트 포크)는 비트 코인 채굴자가 비트 코인의 개발 방향에 대해 **투표를**하게 해줍니다.

**코어 개발자들**은 비트 코인의 **트랜잭션 처리 기능**을 한번에 획기적이게 바꾸기 보다는 **점진적으로 확대**하고 싶어합니다. 코어 개발자들은 **전체 노드를 실행하는 것이 어렵지 않아야** **매우 낮은 수준의 블록 체인 계층이 고도로 분권화 된 상태로 유지**될 수 있다고 생각합니다. 

**코어에는 리스크 감수하는 것을 회피하기로 유명**합니다. 이는 **핵심 개발자가 네트워크 처리 능력을 향상**시키기를 **꺼리는 경우**에 보통 보이는 현상입니다.

> **데이터 링크 계층** : 데이터링크 계층은 컴퓨터 네트워킹의 OSI 모델 7개 계층 중 2계층으로써, TCP/IP참조 모델의 링크레이어의 부분이거나 그것과 연결됨데이터 링크 레이어는 광역 네트워크에서 인접한 네트워크 노드 사이에 데이터를 전송하거나 동일한 노드 사이의 로컬 영역 네트워크 세그먼트에있는 프로토콜 계층임.

----

# 6.어디서 비트코인 코어를 돕고 있는가?

![](https://steemitimages.com/DQmP339sibbynYuS9VibnnintqYq8n8kma1d3xgcyVHFvZT/image.png)
 
**MIT Digital Currency Initiative**가 비트코인 코어 개발에 자금을 지원합니다.

코어 배후의 회사인 **블록스트림(blockstream)**이 **AXA**와 같은 은행권 사람들과 **의심**이가는 **연관관계**를 갖고 있습니다.

----

# 7.비트코인 코어를 구동할 때의 위험?

![](https://steemitimages.com/DQmWNWHq4z3ohFBvwNFEDg7TBfsmh5PPDuC8QLdkntr5W2U/image.png)

2016 년 8 월, 비트코인 코어는 **주정부가 후원하는 공격자**(state-sponsored attackers)가 대상으로하는 소프트웨어라는 **경고**를 받았습니다. **비트 코인 재단**은 또한 소프트웨어를 **실행**하는 것이 가능 다운로드 대역폭을 제한하는 **공격**을 받을 수 있게 될 수 있다고 경고합니다.

----

# 8.코드의 개선 방식 : BIP(Bitcoin Improvement Proposals)

![](https://steemitimages.com/DQmPUXDPyzbcLYdNGsPmzMszXdAXAqkeMmACSjJn5kr3Cyg/image.png)

코드는 원래 **GitHub**에서 사용 가능하기 전에는 **Sourceforge**에 저장되었습니다 . **정식 구조**가 없기 때문에 **BIPs(Bitcoin Improvement Proposals)**를 기반으로 개발이 이루어지며 이는 **설명 요청(RFC)**과 유사합니다 . **공개 메일링 리스트**는 **아이디어의 초기 표현**을 **조사**하는 데 사용됩니다. **충분한 지지**가 나타나면 **BIP 문서**가 작성됩니다. 이것이 아이디어를 공유하고 **비트 코인 개선**에 대한 **커뮤니티 피드백**을 얻고 **2011년 아미르 타키 (Amir Taaki)**가 시작한 **표준**입니다.

> **설명 요청(RFC)** : request for comments의 약어. 인터넷에서 새로운 표준을 만드는 절차와 그 결과들을 만들어 나가는 것을 RFC라고 한다.

## BIP(Bitcoin Improvement Proposals)

BIP 123은 많은 BIP 제안을 분류합니다.

### 2 BIP 프로세스 개정
BIP 2는 BIP 프로세스를 지정합니다. BIP 번호는 자유롭게 부여됩니다. 2017 년 2 월 현재 152 개의 BIP 번호가 할당되었지만 27 개의 BIP 만 활성 / 최종 단계에 도달했습니다.

### 9 타임 아웃 및 지연이 있는 버전
BIP는 소프트 포크의 95 % 광부 합의를 결정하는 상태 시스템을 지정합니다. 성공적인 BIP 9 소프트 포크가 하나 있었고, 투표가 진행 중인 2017년 소프트포크가 있습니다.

### 16 스크립트 해시 지불
트랜잭션을 공개 키 해시 (주소가 1로 시작) 대신 스크립트 해시 (주소는 3으로 시작)로 보낼 수 있습니다. P2SH를 통해 전송 된 비트 코인을 보내려면 받는 사람이 스크립트 해시와 일치하는 스크립트와 스크립트를 참으로 만드는 데이터를 제공해야합니다. 수령인은 이 비트 코인을 사용하기 위해 여러 사람의 서명이 필요하거나 암호가 필요할 수도 있고 요구 사항이 완전히 희귀한 경우일 수 도 있습니다.

### 65 CHECKLOCKTIMEVERIFY
CLTV를 사용하면 향후 특정 시점까지 트랜잭션 출력을 처리 할 수 ​​없게됩니다.

### 112 수표 판정
CSV를 사용하면 지정된 시간 동안 받은 비트코인을 쓸 수 없는 주소(3으로 시작)를 만들 수 있습니다. 하나의 주소는 2-of-3 멀티시그 주소를 가질 수 있으며, 2-of-3 합의가 없으면 백업 규칙으로 시간이 초과됩니다.

등등 이외에도 여러가지 BIP가 있습니다.[목록 보러가기](https://github.com/bitcoin/bips/blob/master/bip-0123.mediawiki)

 
----

출처

https://ko.wikipedia.org/wiki/%EC%B0%B8%EC%A1%B0_%EA%B5%AC%ED%98%84
http://terms.naver.com/entry.nhn?docId=817848&cid=42344&categoryId=42344
https://en.wikipedia.org/wiki/Bitcoin_Core#cite_note-safewarn0.13-4
http://endic.naver.com/enkrEntry.nhn?sLn=kr&entryId=6ce64ac8f3ea47f2bbddff8b42c57b43
그외 네이버 IT용어 참조...

----

오늘 포스팅 도움이 많이 되셨나요? 
도움이 되셨다면 Steemit에 가입해서 하단 ![](https://steemitimages.com/DQmctCGBJis76suRrpTuKCgqxApePMrvhcX5hvZShUsYu25/image.png)버튼을 눌러주세요~!
[![](https://steemitimages.com/DQmSwGgGwJTiobYHwZfiyH187K16ucTQt5szZCFMd528DeU/image.png)](https://steemit.com/kr/@leesunmoo/2017-5-2-signup-process-evolution)

[![](https://steemitimages.com/DQmasNizFx2DYrqHwhGP7PfunfSjrrBqCBJ8RpXgrktgF4S/image.png)](https://wiki.coinkorea.info/)

[![](https://steemitimages.com/DQmZATtgKNfp4za9ijxCW1FqViDf8SPfBETp57P2B3s9WbQ/image.png)](https://twitter.com/coinkor/)

[![](https://steemitimages.com/DQmdpMQDCWKEwnfoWEQie8iAzEyraUuWVJNBE4n9XDFRX96/image.png)](http://www.chaintalk.io/)
👍 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,