# Blockchain course HW2 ## Steps Bitcoin Core is an open-source software that could generate bitcoin node and provides a bitcoin wallet which fully verifies payments. For developer, it provide serial command to start genesis block, transactions, mining, etc. Before we getting start, we first talk about `bitcoin.conf` file which is a configuration file. Next we will give you some hand-on experience to build you own wallet, mining and have BTC transaction. [freewil/bitcoin-testnet-box](https://github.com/freewil/bitcoin-testnet-box#using-with-docker) ## To Build Environment We assume that you have already install these. ```shell= # Build under ubuntu 16.04 sudo apt -y install git build-essential libtool autotools-dev automake pkg-config bsdmainutils python3 sudo apt -y install libevent-dev libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-test-dev libboost-thread-dev sudo apt -y install qt5-default qttools5-dev-tools libdb++-dev # Install berkeley DB # https://github.com/bitcoin/bitcoin/issues/2998 wget https://download.oracle.com/berkeley-db/db-4.8.30.tar.gz tar zxvf db-4.8.30.tar.gz cd db-4.8.30/build_unix ../dist/configure --prefix=/usr/local --enable-cxx make -j4 sudo make install # Install bitcoin core (iunclude bitcoind, bitcoin-cli, bitcoin-qt) git clone https://github.com/bitcoin/bitcoin.git cd bitcoin/ ./autogen.sh ./configure --with-gui make -j4 sudo make install ``` use docker ```shell= docker run -d -it -p 19000:19000/tcp --name btctestnet tony92151/btc_testnet docker exec -it btctestnet /bin/bash ``` ## `bitcoin.conf` file `bitcoin.conf` file is quite important to give some parameter when we start a node or use other tools. `bitcoin.conf` example [here](https://github.com/bitcoin/bitcoin/blob/master/share/examples/bitcoin.conf). ``` . ├── btctest │ └── bitcoin.conf ├── node1 │ └── bitcoin.conf └── node2 └── bitcoin.conf ``` ## Start genesis block ```shell= mkdir btctest wget https://github.com/freewil/bitcoin-testnet-box/raw/master/1/bitcoin.conf -P btctest # start node wothout screen bitcoind -datadir=btctest -daemon # stop node bitcoin-cli -datadir=btctest stop # get node information bitcoin-cli -datadir=btctest -getinfo ``` ## Start client ```shell= mkdir btcnode && cd btcnode bitcoin-qt -regtest=1 -connect=localhost:19000 -datadir=btcnode ``` ![](https://i.imgur.com/eBa2vC5.png) Go to `windows`>`information` . It will show you number of blocks. ![](https://i.imgur.com/0SBuvFI.png) ## Mining First we need an account to mining. Click `Receive` and enter label then click `Create new ...` then copy the address. ![](https://i.imgur.com/GDmsexa.png) copy the address ![](https://i.imgur.com/x0sY6Ra.png) ```shell= bitcoin-cli -datadir={path to btctest} generatetoaddress 10 bcrt1qflkldhvhgq900dvfpyzarvq5j259znucakrggq ``` ![](https://i.imgur.com/06bEciT.png) Now, we have some Immature coin. ![](https://i.imgur.com/20BeCGk.png) It need mining to confirm. But `I'am the only miner` Try to mine more. In `Transaction`, we can see the processing bar the left, please mine more to confirm that. ![](https://i.imgur.com/Jie9s3P.png) ## Transaction Find another pc and start the client in the same way ```shell= mkdir btcnode bitcoin-qt -regtest=1 -connect=localhost:19000 -datadir=btcnode ``` ![](https://i.imgur.com/TAu2DQT.png) Then click `Receive` > `Create new ...` and copy the address. Next paste the address back to the previous wallet's `Send` tab. ![](https://i.imgur.com/Uxvn2Ok.png) Final, mine some coin to comfirm that transaction. ![](https://i.imgur.com/GusiSi7.png) ## Reference [1][freewil/bitcoin-testnet-box](https://github.com/freewil/bitcoin-testnet-box#using-with-docker) [2][Day27|現實中的區塊鏈(4):用Command Line操作Bitcoin](https://ithelp.ithome.com.tw/articles/10216368) ## Youtube tutorial This is for old version, some commend didn't work. **reating a Local Bitcoin Testnet / Regtest - Programming Bitcoin** {%youtube LLZNvl90PC0 %}