‘Programming Bitcoin’ 세미나 1, Preface
Mastering Bitcoin 2nd 세미나를 마친 멤버들을 대상으로, 비트코인 코어 구현에 대한 좀 더 깊은 이해와 적용을 목표로 하는 세미나입니다.
왜 Programming Bitcoin을 세미나 주제로 선택했는지에 대해서는 서문 내용을 정리하면서 좀 더 자세하게 다루도록 하겠습니다.
Preface
This book will teach you the technology of Bitcoin at a fundamental level. The aim of this book is to get you to understand Bitcoin by coding all of the components necessary for a Bitcoin library.
이 책이 어떤 것을 추구하고 있는지를 아시겠죠? 비트코인 시스템을 구성하는 요소들을 직접 코딩하면서 비트코인에 대해서 알아가겠다는 겁니다. 대충 그럴 것이다라고 짐작하면서 썰을 푸는 것이 아니라 직접 만들어 가면서 제대로 알아가보자는 것입니다. 당연 이 책은 프로그래머들이 주 독자가 되겠죠.
The material from this book has been largely taken from my two-day seminar where I teach developers all about Bitcoin.
저자는 개발자들에게 비트코인을 가르치기 위해 2일 교육을 해왔습니다. 20번 정도 400명 이상에게 교육을 했다고 합니다. 이 책이 그 결과입니다. 이 책은 깃헙으로 작성되었는데 다음 주소에서 책 내용과 관련 자료들(소스 포함)을 볼 수 있습니다. https://github.com/jimmysong/programmingbitcoin/
자료들을 보면 저자가 이것들을 작성하는데 얼마나 많은 노력을 기울였는지를 알 수 있습니다. 책 내용도 좋지만 자료는 더 좋습니다.
A prerequisite for this book is that you know programming—Python, in particular. Some knowledge of math is required, especially for Chapters 1 and 2.
파이썬을 사용해서 비트코인을 구현하기 때문에 파이썬에 대해서 어느정도는 알아야 합니다.
타원곡선 암호학이 비트코인의 핵심인 서명과 검증에 사용되기 때문에 이와 관련된 수학적 지식이 요구됩니다. 그렇다고 겁먹을 것은 없습니다. 끈기있게 포기하지 않고 같이 정복해간다면 그리 어렵지 않을 것입니다.
This book is split into 14 chapters. Each is meant to build on the previous one as the Bitcoin library gets built from scratch all the way to the end.
이 책은 밑바닥부터 비트코인 라이브러리를 구성해가는 과정을 총 14장으로 담고 있습니다. 1~4장까지는 타원곡선 암호학 관련 내용을 다룹니다. 1장에서 포기하지만 않는다면 2~4장은 그리 어렵지 않게 진행하실 수 있습니다. 5~8장은 트랜잭션을 다루고, 9~12장은 블록과 네크워크에 대해서 다룹니다. 마지막 2장은 코드를 작성하는데 필요한 부분은 아니지만 몇 가지 고급 주제를 다룹니다. 부록 A는 1~12장까지의 연습문제에 대한 답을 제시합니다.
Setting Up
설치 방법에 따라 설치합니다.
대부분 관련자료가 주피터 노트북으로 작성되어 있기 때문에 주피터 노트북 사용법을 간단하게나마 익혀두면 좋습니다.
설치가 끝나고 주피터 노트북을 실행하면 관련 자료가 장별(code-ch01과 같이)로 정리되어 있음을 볼 수 있습니다.
각 장의 폴더 내부에는 Chapter1.ipynb와 같이 해당 장의 이름을 갖는 주피터 노트북 파일이 있습니다. 이 파일의 설명에 따라 연습문제를 풀어나가면 됩니다.
학습을 효과적으로 할 수 있도록 정말 많은 노력을 기울이고 있습니다. 저자는 독자들이 연습문제를 푸는데 집중할 수 있도록 연습문제와 관련 없는 부분들에 대한 코드와 단위테스트를 미리 작성해 두었습니다. 해당 장의 폴더 내에 주피터 노트북 파일을 제외한 파일들을 열어보고 어떤 내용들이 담겨있는지 확인해 보세요. 질문에 대한 답도 answers.py에서 볼 수 있습니다.
Jimmy Song
한국계 미국인으로 영향력 있는 비트코인 코어 개발자로 알려져 있습니다. 트위터를 보면 한국이름은 송재준으로 되어 있네요.
[번역서 인용]
제가 감수에 참여한 번역서가 “밑바닥부터 시작하는 비트코인”이란 타이틀로 출간 되었습니다. 번역서에서 기억할 만한 부분을 [번역서 인용]으로 추가합니다.
“오늘날 비트코인과 블록체인 세상은 아직까지는 대부분 허구의 세상입니다. 실제로 변화를 일으키는 일을 하는 사람보다 현실에 대한 본질적 이해 없이 희망을 팔고 과장광고를 하는 전문가의 목소리가 더 크고 영향력이 있습니다. 공포를 조장하고 정략적인 의도가 다분한 장황한 글귀와 탐욕에 기반한 일확천금의 사기 행각이 유행을 반영한 해시태그를 타고 널리 퍼지고 있습니다.
그러나 백서나 뉴스 해설 기사를 읽어서 블록체인을 이해하려는 것은 비즈니스 스쿨에 가고 파워포인트를 보면서 회사를 세우는 법을 배우는 수준밖에 안 됩니다. 코딩을 해야 합니다.
여러분에게 유용한 무언가를 만드는 것보다 기술을 이해하는 더 좋은 방법은 없습니다. 자신의 손으로 블록체인 애플리케이션의 기본 블록을 코딩하면서 공허한 망상과 실현 가능성 사이의 차이를 직감할 수 있습니다.”
– 켄 리우 추천사 중에서
[아나콘다]
- 아나콘다 설치
- 운영체제에 맞는 버전을 다운로드하고 설치합니다.
- 아나콘다 간단 사용법
- 버전 확인
-
1conda --version
-
- 사용하고 있는 패키지 업데이트
- conda update
- 가상환경 생성
-
12conda create --name [가상환경 이름] python=[설치할 파이썬 버전] [설치할 패키지 이름목록]예) conda create --name blockchaincore python=3.7.5 jupyter requests
-
- 가상환경 활성화
- conda activate [가상환경 이름]
- 가상환경 비활성화
- conda deactivate
- 가상환경 목록 제공
- conda env list
-
1conda info --envs
- 가상환경 삭제
-
1conda remove --name [가상환경 이름] --all
-
- 가상환경 내보내기
-
12conda env export --name [가상환경 이름] > [파일 이름]예) conda env export --name blockchaincore > environment.yml
-
- 추출한 가상환경으로 가상환경 생성
- conda env create -f [경로를 포함한 파일 이름]
- 예) conda env create -f ./environment.yml
- conda env create -f [경로를 포함한 파일 이름]
- 버전 확인
윈도우 python 3.8에서 jupyter 실행 안 되는 문제
가상환경을 만들 때 파이썬의 3.7버전의 마지막 버전을 선택합니다.
- conda search python으로 사용가능한 파이썬 버전 확인
- python=3.7.5
[주피터 노트북 간단 실습]
오프라인 세미나에서는 같이 해 봅니다. 온라인 세미나에서는 구글 검색을 통해 아래 내용을 실습합니다.
- 가상환경을 활성화하고, Jupyter Notebook을 실행
- 예) conda activate blockchaincore
- jupyter notebook
- 홈화면으로 이동
- 파일 이름 바꾸기
- 마크다운 작성, 실행해 보기
- 수식도 작성할 수 있음 LaTeX 서식의 수식
- 마크다운 셀에서 이미지도 드래그앤 드랍으로 삽입 가능
- ! 셀 명령
- % 매직 명령
[주피터 노트북 간단 정리]
- 코드 편집기에서 변수 이름이나 함수 이름 뒤에 ‘?’를 작성하고 실행하면, 변수의 경우 상태를 제공하고 함수인 경우 Docstring을 제공
- tab으로 자동 완성, shift + tab은 툴팁 제공
- 매직 명령
- %time
- 실행 시간을 측정하는 매직 명령
- 예) %time sum(range(10000))
- 실행 시간을 측정하는 매직 명령
- %timeit
- 여러 번 시행한 결과의 측정 값을 요약
- %timeit -n 반복횟수 -r 시행횟수
- 예) %timeit -n 2000 -r 5 sum(range(10000))
- 코드 셀 전체에 적용할 때는 %%
- %history
- 실행 이력을 목록으로 제공
- %history -l 목록갯수
- %ls
- 현재 디렉토리의 파일 목록 제공
- %autosave 자동저장간격(초)
- 자동저장간격을 0으로 설정하면 자동저장 취소
- %time
- 노트북 공유
- 깃헙에 공유할 때, 출력 내용도 포함해서 공유하고 싶은 경우, 한 번 코드 셀을 실행한 후에 노트북을 저장하고 깃헙에 배포해야 한다.
- nbviewer – 노트북 파일을 정적 html로 출력하기 위한 소프트웨어
- 독자적으로 환경을 구축할 수도 있지만 https://nbviewer.jupyter.org를 이용할 수 도 있다.
- 파이썬 파일로 변환
- jupyter nbconvert –to script [노트북 이름].ipynb