안녕하세요 마입니다. 오늘은 비트코인 코어에 대한 정보를 공유해드리겠습니다. 프로그래밍 용어가 많이 나오지만 관련 설명을 최대한 적어놓았으니 공부하실겸 읽어보시면 도움이 될듯합니다.
목차
- 비트코인 코어란?
- 비트코인 코어를 만든 의도
- 비트코인 코어의 기능 및 스크립팅 언어
- 비트코인 코어의 역사와 개발자의 교체
- 비트코인 코어의 로드맵
- 어디서 비트코인 코어를 돕고 있는가?
- 비트코인 코어를 구동할 때의 위험?
- 코드의 개선 방식 : BIP(Bitcoin Improvement Proposals)
1.비트코인 코어란?
비트 코인 코어는 비트코인의 레퍼런스 클라이언트(사용자 측이 사용하는 소프트웨어 구현을 돕는 샘플 프로그램)입니다.
또한, 비트코인 네트워크 를 생성하는 비트코인 노드에서 사용하는 전체 클라이언트(full client) 입니다.
비트코인 코어의 변경 사항을 통해 개발자는 기본 비트코인 프로토콜을 변경합니다.
이 프로젝트는 또한 암호화 라이브러리 libsecp256k1 및 GitHub에 있는 자료를 유지 관리 합니다.
용량이 110기가바이트인 분산 원장 전체를 받고 동기화해야지 클라이언트에 완전한 참여가 가능합니다.
레퍼런스와 클라이언트 모두 프로그래밍 용어입니다.
1.레퍼런스(=참조 구현=샘플 구현=모델 구현)
어떠한 하드웨어 혹은 소프트웨어를 구현 하는 것을 돕기 위해 제공하는 샘플 프로그램입니다.
2.클라이언트
클라이언트/서버(client/server) 구성에서 사용자측을 의미합니다.
사용자가 서버에 접속했을 때 클라이언트는 사용자 자신을 지칭할 수도 있고, 사용자의 컴퓨터를 가리키기도 하며, 컴퓨터에서 동작하고 있는 프로그램이 될 수도 있다.
2. 비트코인 코어를 만든 의도
비트코인 코어는 비트코인 개발자인 나카모토 사토시가 만들었습니다. 그는 비트코인 클라이언트를 순수하게 P2P 전자 현금이라는 개념이 유효하고 솔루션이 포함 된 문서가 작성될 수 있음을 증명하기 위해서 만들었습니다. 비트코인 코어를 이용하는 사람들이 점점 늘어도 비트 코인에 대한 개발자의 영향은 사람들이 자발적으로 사용하기로 결정한 구현 방식에 따라 제한됩니다.
3. 비트코인 코어의 기능과 스크립팅 언어
비트코인 코드의 변경과정의 시각화입니다.
비트코인 코어의 기능
트랜잭션 검증 엔진 탑제(전체 블록체인 유효성 검사)/전체 노드로 비트코인 네트워크에 연결
비트코인 송수신이 되는 지갑이 포함
비트코인 지불받을 QR코드 생성가능
비트코인 코어에는 JSON-RPC 인터페이스인 'bitcoind'가 있는 명령 행 기반 상주 프로그램(daemon)이 번들로 제공됩니다. 이것은 비트 코인 메인 네트워크(메인 넷)을 모방한 글로벌 테스트 환경 인 테스트 넷에 대한 액세스를 제공합니다. 실제 비트 코인이 사용되지 않고 블록 체인에 악영향을 줄 수없는 대체 블록 체인을 사용합니다.
비트코인 코어에서 Regtest(Regression Test Mode)는 로컬 테스트 환경으로 사용되는 개인(Private) 블록 체인을 만듭니다.
bitcoin-cli는 관련된 세 번째 프로그램입니다. 사용자가 bitcoind로 RPC 명령을 보낼 수 있습니다 .
검사점(Checkpoints)는 클라이언트에 하드코딩되어있습니다.
다운로드가 완료되면 블록 체인과 비교할 수있는 소스 코드에 블록 체인 데이터의 일부를 유지함으로써 데이터 무결성을 유지합니다.
2010 년에는 나카모토 사토시가 스팸을 막기 위한 임시조치로 1메가바이트 블록 크기 제한을 추가했습니다. 이로 인해 최대 네트워크 용량이 초당 약 3건의 트랜잭션으로 제한되었습니다. 그 이후로, 소프트웨어의 사소한 변화는 점진적으로 네트워크 용량을 향상 시켰습니다.
나카모토 사토시는 비트 코인에 관한 중요한 뉴스를 사용자에게 알리는 방법으로 네트워크 경고 시스템을 포함 시켰습니다. 그 시스템은2016 년 11 월에 사라졌습니다. 비트코인에 관한 뉴스가 널리 보급됨에 따라 그것은 쓸모 없게되었습니다. 채굴자들은 투표로 새로운 기능을 통합하는 것에 대한 결정에 대한 신호를 보낼 수 있습니다.
상주프로그램 : 컴퓨터 시스템의 운영에 관련된 작업을 후선(background) 상태로 동작하면서 실행하는 프로그램.
JSON-RPC : JSON으로 인코딩된 원격 프로시저 호출.
JSON : JSON ( 제이슨 , JavaScript Object Notation )은 속성-값 쌍으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷.
RPC : Remote procedure call (원격 절차 호출, 원격 프로시저 호출.)
스크립팅 언어
강력한 스크립팅 언어가 트랜잭션을 정의하는 데 사용됩니다. 이 Forth같은 프로그래밍 언어는 세 가지 각각의 응용 프로그램 프로그래밍 인터페이스 중 하나입니다 . 이것으로 다양한 트랜잭션 매개 변수를 사용할 수 있습니다 . 이 스크립트는 유효성 검사를 위해 역 폴란드 기법을 사용합니다.
ScriptPubKey는 일련의 미래 조건을 기반으로 트랜잭션을 '잠그는데' 사용됩니다.
scriptSig는 이러한 조건을 충족시키거나 트랜잭션을 '잠금 해제'하는 데 사용됩니다.
데이터에 관한 운영이 다양한 OP_Codes에 의해 수행된다.
main과 alt의 두 스택이 사용됩니다.
루핑은 금지되어 있습니다.
Forth : 스택기반의 프로그래밍 언어.
폴란드 기법 : 폴란드 기법 ((모든 연산 기호를 모든 변수보다 뒤에 위치하도록 기술하는 불 대수(Boolean algebra)의 기법))
루핑 : 프로그램 속에서 동일한 명령이나 처리를 반복하여 실행 하는 것.
4.비트코인 코어의 역사와 개발자의 교체
처음에 이 소프트웨어는 나카모토 사토시가 '비트코인'이라는 이름 으로 만든 후 그 뒤 '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)의 활성화를 특징으로했습니다. SegWit을 사용하면 총 블록 크기를 약 1.7mb로 추정합니다. Segwit는 다양한 형태의 트랜잭션 가단성(malleability)을 방지하는 것을 목표로합니다. 비트코인 코어를 사용하는 채굴자들 95 %가 동시에 사용에 동의 할 때까지 Segwit을 활성화 할 수 없습니다. 라이트코인에서는 75%만 Segwit에 동의하면되서 이미 락인되었으며 라이트닝 네트워크의 적용이 가까워졌습니다.
개발자의 교체
리드 개발자는 2014년 4월 8일에 비트코인이 기술적인 전략적 발전을 할 수 있게하는 역할을 맡은 Wladimir J. van der Laan입니다. 전임 관리자는 개빈 안데르센(Gavin Andresen)입니다. 개빈은 전통적인 의사결정 방식을 원치 않는다고하고 나왔습니다.
5.비트코인 코어 로드맵
클라이언트의 로드맵에는 확장성(Scalability)을 위한 데이터 링크 계층 솔루션이 포함됩니다. 코어 개발자들은 비트코인을 결제 계층으로 봅니다. 비트코인 코어는 전체 노드 클라이언트 구현들 중 가장 많이 배포되는 것입니다. 그에 대한 대안으로는 Bitcoin XT , Bitcoin Classic 및 Bitcoin Unlimited가 있습니다. 모두 비트코인 코어에서 파생되었으며 코어를 하드 포크하자고 합니다. 소프트웨어 포크(소프트 포크)는 비트 코인 채굴자가 비트 코인의 개발 방향에 대해 투표를하게 해줍니다.
코어 개발자들은 비트 코인의 트랜잭션 처리 기능을 한번에 획기적이게 바꾸기 보다는 점진적으로 확대하고 싶어합니다. 코어 개발자들은 전체 노드를 실행하는 것이 어렵지 않아야 매우 낮은 수준의 블록 체인 계층이 고도로 분권화 된 상태로 유지될 수 있다고 생각합니다.
코어에는 리스크 감수하는 것을 회피하기로 유명합니다. 이는 핵심 개발자가 네트워크 처리 능력을 향상시키기를 꺼리는 경우에 보통 보이는 현상입니다.
데이터 링크 계층 : 데이터링크 계층은 컴퓨터 네트워킹의 OSI 모델 7개 계층 중 2계층으로써, TCP/IP참조 모델의 링크레이어의 부분이거나 그것과 연결됨데이터 링크 레이어는 광역 네트워크에서 인접한 네트워크 노드 사이에 데이터를 전송하거나 동일한 노드 사이의 로컬 영역 네트워크 세그먼트에있는 프로토콜 계층임.
6.어디서 비트코인 코어를 돕고 있는가?
MIT Digital Currency Initiative가 비트코인 코어 개발에 자금을 지원합니다.
코어 배후의 회사인 블록스트림(blockstream)이 AXA와 같은 은행권 사람들과 의심이가는 연관관계를 갖고 있습니다.
7.비트코인 코어를 구동할 때의 위험?
2016 년 8 월, 비트코인 코어는 주정부가 후원하는 공격자(state-sponsored attackers)가 대상으로하는 소프트웨어라는 경고를 받았습니다. 비트 코인 재단은 또한 소프트웨어를 실행하는 것이 가능 다운로드 대역폭을 제한하는 공격을 받을 수 있게 될 수 있다고 경고합니다.
8.코드의 개선 방식 : BIP(Bitcoin Improvement Proposals)
코드는 원래 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://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용어 참조...