판교 경기도경제과학진흥원에서 진행하는 2019 블록체인 캠퍼스 참여.
>> 교육 포스터
*전문가 과정1 : *
블록체인 플랫폼 분석 - 1
▶ 블록체인 동향
- 나카코토 사토시 논문이 시초
요약 : 전자 화폐의 순수한 P2P 버전은 금융기관을 거치지 않고도 한쪽에서 다른 쪽으로 직접 보내는 온라인 지불을 가능하게 한다.
=> 중개인 없는 금융거래 플랫폼 개발, P2P상 사기 및 이중지불 문제 해결!
플랫폼 | 코인(토큰) | 비고 |
---|---|---|
아이콘 | ICX | 한국대표 코인 홈페이지 |
클레이튼(Klaytn) | 카카오톡 | |
리브라(Libra) | 페이스북, 자체발행 암호화폐 | |
칼리브라(Calibra) | 암호화폐 지갑 | |
컨센시스 | 유명한 블록체인 회사 | |
모네로 | XMR | 이용자 프라이버시 보호라는 특징을 악용하여 다크웹에서 주로 쓰임 |
비트코인 | BTC | 블록체인 개념, 전송 |
이더리움 | private network, p2p 연결, Dapp 운영, 가스비 | |
EOS | 권한관리(키 관리), Dapp 이용자 수수료 무료 C++ | |
스팀잇 | 커뮤니티 형, 댓글 보상 | |
하이퍼레저 | 채굴 없음, MSP 관리 |
그 외 유명한 코인으로 Ripple(XRP), Stellar(XLM) 등..
▶ 비트코인 플랫폼
BitcoinCore란? Github 바로가기
- 비트코인 네트워크를 이용하기 위한 클라이언트 프로그램
- 비트코인 네트워크 접속 및 비트코인 교환, 잔액확인 등의 기능 제공
BitCoinCore 프로그램
- bitcoin-qt(GUI) : 일반 사용자 용, full-node와 wallet 기능 제공
- bitcoind(bitcoind-deamon, CLI) : 개발자 용, RPC를 통해 원격 제어할수 있는 full-node기능 제공
- bitcoin-cli(CLI) : 실행중인 bitcoind로 RPC명령어를 보낼 수 있는 프로그램
BitcoinCore 및 실습환경 구축
* CLI환경으로 진행 예정
1. os 환경 (클라우드 서버 사용)
root@iottest:/# cat /etc/issue
Ubuntu 16.04.6 LTS \n \l
2. 실습 파일 만들기 & bitcoincore 설치
root@iottest:~# cd /
root@iottest:/# sudo mkdir bitcoincore
root@iottest:/# cd bitcoincore
root@iottest:/bitcoincore# sudo mkdir src
root@iottest:/bitcoincore# cd src
root@iottest:/bitcoincore/src# sudo git clone https://github.com/bitcoin/bitcoin.git
Cloning into 'bitcoin'...
remote: Enumerating objects: 2, done.
remote: Counting objects: 100% (2/2), done.
remote: Total 142993 (delta 1), reused 1 (delta 1), pack-reused 142991
Receiving objects: 100% (142993/142993), 127.72 MiB | 20.26 MiB/s, done.
Resolving deltas: 100% (99673/99673), done.
Checking connectivity... done.
3. 버전 내리기 (0.17.0 버전으로)
root@iottest:/bitcoincore/src# cd bitcoin
root@iottest:/bitcoincore/src/bitcoin# git reset --hard e1ed37edaedc85b8c3468bd9a726046344036243
HEAD is now at e1ed37e Merge #14157: [0.17] doc: merge upstream release-notes from bitcoin-core/bitcoin-devwiki
root@iottest:/bitcoincore/src/bitcoin# git log -n1
.... Merge #14157: [0.17] doc: merge upstream release-notes from bitcoin-core/bitcoin-devwiki ...
4. 필요한 라이브러리&툴 설치
root@iottest:/bitcoincore/src/bitcoin# sudo apt-get update
root@iottest:/bitcoincore/src/bitcoin# sudo apt-get install build-essential automake pkg-config libevent-dev bsdmainutils //gcc 설치(컴파일러)
root@iottest:/bitcoincore/src/bitcoin# sudo apt-get install libtool autotools-dev autoconf //openssh 설치
root@iottest:/bitcoincore/src/bitcoin# sudo apt-get install libssl-dev
root@iottest:/bitcoincore/src/bitcoin# sudo apt-get install libboost-all-dev //Boost 설치
root@iottest:/bitcoincore/src/bitcoin# sudo add-apt-repository ppa:bitcoin/bitcoin //libdb4.8 설치
root@iottest:/bitcoincore/src/bitcoin# sudo apt-get update
root@iottest:/bitcoincore/src/bitcoin# sudo apt-get install libdb4.8-dev
root@iottest:/bitcoincore/src/bitcoin# sudo apt-get install libdb4.8++-dev
root@iottest:/bitcoincore/src/bitcoin# sudo apt-get install libminiupnpc-dev //관련 라이브러리
root@iottest:/bitcoincore/src/bitcoin# sudo apt-get install libqrencode-dev
root@iottest:/bitcoincore/src/bitcoin# sudo apt-get install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler //GUI 라이브러리 설치
*참고 : [Linux]gcc란?
5. 빌드
root@iottest:/bitcoincore/src/bitcoin# sudo ./autogen.sh
root@iottest:/bitcoincore/src/bitcoin# sudo ./configure // 소스파일에 대한 환경설정
root@iottest:/bitcoincore/src/bitcoin# sudo make // bitcoincore 빌드 (컴파일) - 오래걸림..
root@iottest:/bitcoincore/src/bitcoin# sudo make install // make를 통해 만들어진 bitcoincore 설치
*참고 : 리눅스 - configure, make, make install 개념
BitcoinCore 테스트넷 실습
- testnet: 인터넷상에서 동작하는 테스트 네트워크, 테스트용 BTC사용,
대량의 블록체인이 존재하기 때문에 처음 시작할 때 모든 데이터 취득
- regtest: 로컬PC내에서의 테스트 네트워크, 계정 생성 및 채굴, 블록체인 초기화도 쉽게 하기 위한 실험용
*실행결과로 나오는 해시결과값은 개인마다 다 다릅니다!!*
(비트코인 데몬 실행중일 시)
0. 비트코인 데몬 종료
root@iottest:/bitcoincore/src/bitcoin# ps -aux | grep bitcoind
root 6206 0.0 0.0 14224 964 pts/0 R+ 15:37 0:00 grep --color=auto bitcoind
root 9693 0.0 1.8 1016488 73436 ? Ssl 11:47 0:11 bitcoind -regtest -daemon -deprecatedrpc=generate
root@iottest:/bitcoincore/src/bitcoin# kill -9 9693 //본인의 프로세스 번호 입력
1. 비트코인 테스트 모드로 실행
root@iottest:/bitcoincore/src/bitcoin# bitcoind -regtest -daemon -deprecatedrpc=generate
Bitcoin server starting
2. (새로운 터미널에서) 101개 블록 생성 - 블록이 100개 이상 생기지 않으면 송금 등에 이용할 수 없기 때문
root@iottest:/bitcoincore/src/bitcoin# bitcoin-cli -regtest generate 101
[
.....
]
3. 블록 수 확인
root@iottest:/bitcoincore/src/bitcoin# bitcoin-cli -regtest getblockcount
101
4. 계좌 생성
root@iottest:/bitcoincore/src/bitcoin# bitcoin-cli -regtest getnewaddress testuser1
2MvAvSWciBtryEkkWe3LysKxN2TSjzrmQ6G // 랜덤한 지갑 값
root@iottest:/bitcoincore/src/bitcoin# bitcoin-cli -regtest getnewaddress testuser2
2MwjgFQENaSAW2C9aVctePe31SwzcWFFWSG // 랜덤한 지갑 값
5. 잔고 확인 - 채굴자가 소유한 BTC
root@iottest:/bitcoincore/src/bitcoin# bitcoin-cli -regtest getbalance "*" 0
50.00000000
6. 송금 - testuser1 에게 송금 (결과 : txid 트랜잭션식별번호)
root@iottest:~/bitcoin# bitcoin-cli -regtest sendtoaddress 2Mu6Kwq6wDrfHgVhNKPcxpA22GEv12L4Gwc 10
a57b88f1b9de3d2752e770af2c9833a75b134da07c818ac6501e8a540c368283
root@iottest:~/bitcoin# bitcoin-cli -regtest sendtoaddress 2Mu6Kwq6wDrfHgVhNKPcxpA22GEv12L4Gwc 20
b5d4734f2398eb48e2764743b173443bbc72d7ac80d8cd77025cbdaa4f9d133f
7. 출력결과 (블록생성 전)
root@iottest:~/bitcoin# bitcoin-cli -regtest listunspent
[
]
- 출력 결과는 빈 상태, listunspent는 확정된 트랜잭션을 확인하는 명령.
인수에 0 을 추가해 실행하면 미확정 트랜잭션을 확인 가능
root@iottest:~/bitcoin# bitcoin-cli -regtest listunspent 0
[
"txid":..., "vout":..., "address":...., "label":testuser1, "account":testuser1,
]
8. 채굴 - 미확정 트랜잭션을 확정하기 위해 채굴 실행
root@iottest:~/bitcoin# bitcoin-cli -regtest generate 1
[
"09928e88803e783268e6494fdb7c439a5adb77796c55793fbf3c2112ea9d0d51"
]
9. 송금 확인 - 채굴 진행전에는 송금 안됌
root@iottest:~/bitcoin# bitcoin-cli -regtest listunspent
[
"txid":..., "vout":..., "address":...., "label":testuser1, "account":testuser1,........
]
root@iottest:~/bitcoin# bitcoin-cli -regtest getbalance testuser1
30.00000000
10. 블록해시 구하기
root@iottest:~/bitcoin# bitcoin-cli -regtest getblockhash 102
0d75efdca222c2e5483e10d6f1eaf1d9ab20c1f19fabfd723e5a0812012e285a
11. 블록 확인
root@iottest:~/bitcoin#
bitcoin-cli -regtest getblock 0d75efdca222c2e5483e10d6f1eaf1d9ab20c1f19fabfd723e5a0812012e285a
[
"hash":..., "confirmations":..., "strippedsize":...., "size":...., "weight":....,
"height":..., "version":..., "versionHex":...., "merkleroot":...., "tx":....,
"time":..., "mediantime":..., "nonce":...., "bits":...., "difficulty":...., "chainwork":...., "previousblockhash":....,
]
12. 검증해보기
101번째 블록해시를 구하여 블록 확인 후, 101번째 블록의 hash값과 102번째 블록의 previousblockhash 가 일치하면 제대로된 블록인것.. 이렇게 이전해시값을 체인삼아 계속 블록이 늘어난다.
참고자료- 본 포스팅은 철저히 실습위주로 작성하였으며 더 자세한 이론 내용은 아래 참조
- 수업자료
- 비트코인 코어 실습을 통해 트랜잭션을 이해하고 UTXO를 이해해보자
- [Dev] Bitcoin core 설치부터 조작까지
이상 *^^*
'공부' 카테고리의 다른 글
MYSQL 명령어 정리(DML) (0) | 2022.07.02 |
---|---|
MYSQL 비밀번호 재설정 (0) | 2021.09.27 |
IT 정보 (0) | 2021.09.23 |
[오늘의 issue] 오늘도 버튼이 먹지 않는다! (0) | 2018.02.23 |
[정리] 개념이 명확하지 않은 단어 개념 정리! (0) | 2018.02.23 |
댓글