본문 바로가기
  • 클라우드야 나랑 친해지자!
서버/Docker&Kubernetes

도커로 가상 비트코인 거래하기

by 정민규 2021. 5. 9.
반응형

수업을 듣고 배운 내용과 연습한 내용을 정리하였습니다

개인 공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.

 

잘못된 부분이 있거나 질문사항은 댓글로 남겨주시면 성심성의껏 답변해드리겠습니다. 감사합니다!


 

 

 

요즘 핫한 비트코인을 주제로 도커를 이용해 가상 비트코인을 생성하고 거래까지 하는 실습을 진행해보겠습니다!

실습환경은 Ubuntu에 Docker가 설치되어 있다는 가정하에 진행하도록 하겠습니다!

 

 

 

 

 

* 실습요약

1. 도커허브에서 비트코인 도커이미지 가져오기

2. 컨테이너 실행

3. 환경 설정

4. 비트코인 노드 실행

5. 계좌번호 생성

6. 블록 생성

7. 계좌 조회 및 이체

 

 

 

 

 

 

1. 도커허브에서 비트코인 도커이미지 가져오기

 

root 권한으로 실행하며 bitcoin 이라는 이름으로 디렉토리를 생성하고 시작합니다.

 

$sudo -s
#mkdir bitcoin
#cd bitcoin

 

 

 

도커허브에서 pjt3591oo님의 비트코인 도커 이미지를 가져옵니다.

파일용량이 크다보니 5~10분정도 소요됩니다.

#docker pull pjt3591oo/bitcoin:0.17.01

 

 

 

 

 

 

 

2. 컨테이너 실행

 

도커 이미지로 bitcoin.mingyu 라는 이름의 컨테이너를 생성합니다.

#docker run -it --name bitcoin.mingyu pjt3591oo/bitcoin:0.17.01  

 

 

 

 

 

3. 환경 설정

 

비트코인 노드 실행을 위해 설정을 진행합니다.

시작 쉘 스크립트를 수정해보도록 하겠습니다.

#cd $HOME
$ls
start.sh

 

 

#vi start.sh를 실행해 노란박스와 같이 아래 내용을 삽입하고 저장합니다.

-deprecatedrpc=accounts

 

 

 

 

 

 

 

시작 쉘 스크립트에는 아래와 같이 기본적으로 ./bitcoin에 블록이 저장되도록 설정되어 있습니다.

 

 

 

 

 

시작 쉘 스크립트로 노드를 실행하면 ./bitcoin 디렉토리 안에 "blocks" 디렉토리에 블록이 보관됩니다.

#./start.sh

 

 

 

 

 

 

블록이 저장되는 위치를 변경하려면 /.bitcoin 부분에 블록을 저장할 새 디렉토리 위치로 수정하면 됩니다.

 

 

 

 

 

 

 

 

블록 데이터를 저장할 새 디렉토리를 생성해보도록 하겠습니다.

#mkdir test1 test2
#cd test1

 

 

 

 

 

 

4. 비트코인 노드 실행

 

시작 쉘 스크립트 안의 내용을 통해 노드를 실행시킵니다.

bitcoind -regtest -rpcuser=test -rpcpassword=test -server -rpcport=12345 \
> --datadir="$PWD/.bitoin" -deprecatedrpc=accounts

 

 

 

 

 

5. 계좌번호 생성

 

새로운 터미널에서 이어서 진행합니다.

#docker exec -it <비트코인 컨테이너ID> bin/bash

 

 

 

다음의 명령어를 입력해 계좌번호를 출력합니다.

bitcoin-cli  -regtest  -rpcuser=test  -rpcpassword=test  -rpcport=12345 \
-rpcconnect="127.0.0.1" -datadir="$PWD/test1" getnewaddress <계좌명>

 

 

 

 

 

6. 블록 생성

 

100개의 블록을 생성할 경우, [ ] 안에 총 101개의 암호화된 문장이 출력됩니다.

암호문 1개당 1개의 블록으로, 블록을 생성할 때 100개까지는 보상이 없고 101개째 블록부터 1개로 인정이 됩니다.

따라서, 계좌를 조회하면 50개의 비트코인이 있을 것입니다. (1블록 = 50비트코인))

 

bitcoin-cli  -regtest  -rpcuser=test  -rpcpassword=test  -rpcport=12345  \
-datadir=/bitcoin/test1  generate 101

 

 

 

 

 

7. 계좌 조회 및 이체

 

아래 명령어를 통해 계좌에 50개의 비트코인이 생성된 것을 확인할 수 있습니다.

bitcoin-cli  -regtest  -rpcuser=test -rpcpassword=test -rpcport=12345  \
 -rpcconnect=127.0.0.1  -datadir=/bitcoin/test1  listaccounts

 

 

 

 

그렇다면 이제 이체를 하기위해 새로운 계좌를 생성해보도록 하겠습니다.

마찬가지로 새로운 터미널을 실행합니다. (현재까지 3개의 터미널이 실행되고 있어야 합니다.)

#docker exec -it bitcoin.mingyu  /bin/bash

 

 

 

아래 명령어를 통해 /bitcoin/test2 에 새로운 계좌를 생성합니다.

bitcoin-cli -regtest -rpcuser=test -rpcpassword=test -rpcport=12345 \
 -rpcconnect=127.0.0.1 -datadir=/bitcoin/test2 getnewaddress <계좌명>

 

 

 

 

 

2번째 터미널(test1)(50비트코인 소유)로 돌아와서 3번째 터미널(test2)에서 만든 새로운 계좌로 비트코인을 이체합니다.

bitcoin-cli -regtest -rpcuser=test  -rpcpassword=test -rpcport=12345 -rpcconnect=127.0.0.1 \
> -datadir=/bitcoin/test1 sendtoaddress <새로운 계좌번호> <보낼 비트코인 수>

 

 

 

 

 

3번째 터미널로 돌아와 비트코인이 정상적으로 이체됐는지 확인합니다.

bitcoin-cli  -regtest  -rpcuser=test -rpcpassword=test -rpcport=12345  \
 -rpcconnect=127.0.0.1  -datadir=/bitcoin/test1  listaccounts

 

 

 

 

 

이상하게도 비트코인을 받지 못했습니다.

 

WHY???

 

1. 이체 수수료 발생

2. 이체의 공식 거래를 증명하는 과정이 필요(블록 생성)

 

 

 

 

1개의 블록을 생성한 뒤,

bitcoin-cli  -regtest  -rpcuser=test  -rpcpassword=test  -rpcport=12345  \
-datadir=/bitcoin/test1  generate 1

 

 

다시 조회합니다.

bitcoin-cli  -regtest  -rpcuser=test -rpcpassword=test -rpcport=12345  \
 -rpcconnect=127.0.0.1  -datadir=/bitcoin/test1  listaccounts

 

 

 

1개의 블록(50비트코인)의 수수료가 발생되고 정상적으로 이체된 것을 확인할 수 있습니다.

 

 

 

 

 

 

여기서 잠깐!

 

 

move 명령어를 통해 수수료와 블록을 통한 증명 과정을 생략하고 비트코인을 이체할 수 있습니다.

bitcoin-cli -regtest -rpcuser=test  -rpcpassword=test -rpcport=12345 -rpcconnect=127.0.0.1 \
> -datadir=/bitcoin/<블록데이터 저장을 위해 생성한 디렉터리> move [보낼주소] [받는주소] <보낼 비트코인 수>

 

 

 

 

 

지금까지 도커를 이용해 비트코인 계좌 생성 및 거래를 해봤습니다~!

언제까지나 가상의 비트코인입니다 ㅎㅎ

반응형

댓글