5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

bitcoindのregtestで送金を行うチュートリアル

Last updated at Posted at 2019-11-03

#はじめに
bitcoindのチュートリアルに当たるものがなさそうなので自分で作ってみた。
ローカルに2つのノード立てて、aliceとbobの二者間で送金を行うシミュレーションをする。
regtestで複数のノードを建てたい人にも必見。
bitcoindのインストール方法は記事を書いている人がすでにたくさんいるので省略する。

使うターミナルは最低4つ。
それぞれ$の前にbob1、bob2、alice1、alice2と明示化している。

#環境
私の環境は以下の通り。
PC:Thinkpad X1 Carbon
OS:Ubuntu 18.04 LTS

私の環境がubunutuなのでディレクトリのPATHなどがLinux仕様になっているかもしれないが、自分の環境に合わせたパスを調べればMacやWindowsでもできるはずだ。

regtestとは

regtestはローカルで使うtest環境でbtcdで言うsimnetに近い。
testnetとは違いローカルでblockchainを作るため、マイニングされるのを待つ必要は無い。
regtestを使うためにbitcoin.conf

regtest=1

を追加する。

準備

先ずはalice用、bob用の作業ディレクトリを作り、それぞれにbitoin.confを作成する

cd ~
mkdir dev
cd dev
mkdir alice bob

cd alice
vim bitcoin.conf

cd ../bob
vim bitcoin.conf

bitcoin.confの中身はこんな感じ。

bitcoin.conf
regtest=1
txindex=1
server=1
rpcuser=kek
rpcpassword=kek

aliceのノードを起動

alice1 $ cd ~/dev
alice1 $ bitcoind -regtest -conf=/home/{PCのユーザー名}/dev/alice/bitcoin.conf -datadir=./alice/ -rpcport=10001 -port=10011
  • -regtest: regtestモードで起動。
  • -conf: bitcoin.confの場所。
  • -datadir: ノードの情報を記録するディレクトリの場所。コマンド入力後~/dev/aliceにregtestというディレクトリが作成されているはず。
  • -rpcport: JSON-RPCのconnectionを受け付けるport番号。デフォルトでtestnetは18332、mainnetは8322となっている。

詳しくはbitcoin -helpで確認できる。

-confはフルパスで指定しないとエラーになることがある。
オプションは順番が違うとエラーが出ることがあるので是非注意して頂きたい。
以後チュートリアル中はこのターミナルを開いたまま放置する。

bobのノードを起動&aliceのノードに接続

新しいターミナルを開く。私のオススメはalice1のターミナルに新しいタブを開くこと。

bob1 $ cd ~/dev
bob1 $ bitcoind -regtest -conf=/home/{PCのユーザー名}/dev/bob/bitcoin.conf -datadir=./bob -rpcport=10002 -listen=0 -connect=127.0.0.1:10011

基本的には同じだがbobの場合aliceのノードに接続するため-connectオプションでaliceのhost:portを指定している。

#aliceのノードでマイニング

Aliceのノードでbobに送金するためのコインを生み出す。
Alice用に新しいターミナルを開くいて、まずは自分のWalletのアドレスを確認。

alice2 $ bitcoin-cli -regtest -conf=/home/{PCのユーザー名}/dev/alice/bitcoin.conf -datadir=. -rpcport=10001 getnewaddress

するとハッシュ値が表示されるはずだ。それがaliceのWalletのアドレスだ。
次にマイニングを行うために以下のコマンドを打つ。

alice2 $ bitcoin-cli -regtest -conf=/home/{PCのユーザー名}/dev/alice/bitcoin.conf -datadir=. generatetoaddress 101 <aliceのWalletのアドレス>

すると配列形式でハッシュ値が101個表示されるはずだ。

--------------注意-------------
ビットコインのgenereteのためにgeneratetoaddressを用いた。
古いバージョンでは
bitcoin-cli -regtest setgenerate true 101bitcoin-cli -regtest generate 101を使っていたが、これらのgenerete方法は最近完全に削除されgeneratetoaddressを使うことが推奨されている。
----------------------------------

balanceを確認する。

alice2 $ bitcoin-cli -regtest -conf=/home/{PCのユーザー名}/dev/Alice/bitcoin.conf -datadir=. -rpcport=10001 getbalance
50.00000000

Aliceのwalletに50BTC入っているのが確認できた

#bobのアドレスを確認 & aliceで送金
別ターミナルを開きbobのセッティングを行っていく。

bob2 $ bitcoin-cli -regtest -conf=/home/{PCのユーザー名}/dev/bob/bitcoin.conf -datadir=. -rpcport=10002 getnewaddress

bobのアドレスが表示される。
念のためbobのwalletのbalanceを確認する。

bob2 $ bitcoin-cli -regtest -conf=/home/{PCのユーザー名}/dev/bob/bitcoin.conf -datadir=. -rpcport=10002 getbalance
0.00000000

もちろん空だ。

続いてAlice側で送金を行う。

alice2 $ bitcoin-cli -regtest -conf=/home/{PCのユーザー名}/dev/alice/bitcoin.conf -datadir=. -rpcport=10001 sendtoaddress <bobのwalletのアドレス>

このコマンドを入力すると、transactionのハッシュ値が表示されるはずだ。
トランザクションの中身を確認してみる。

alice2 $ bitcoin-cli -regtest -conf=/home/{PCのユーザー名}/dev/alice/bitcoin.conf -datadir=. -rpcport=10001 gettransaction <transactionのハッシュ値>

表示されたのがtransactionの内容だ。
amountが-10.00000000になっているのが確認できるだろうか。
さらに手数料としてfeeもいくらか引かれているはずだ。

#送金を完了する
この段階ではまだ送金は完了していない。
bobのbalanceをもう一度確認してみよう。

bob2 $ bitcoin-cli -regtest -conf=/home/{PCのユーザー名}/dev/bob/bitcoin.conf -datadir=. -rpcport=10002 getbalance
0.00000000

bobにはまだなにも送金されていない。
transactionが承認されておらず、blockchainに記録されていないからだ。
もう一度アリスのターミナルでマイニングを行う。

alice2 $ bitcoin-cli -regtest -conf=/home/{PCのユーザー名}/dev/alice/bitcoin.conf -datadir=. generatetoaddress 1 <aliceのWalletのアドレス>

これでbobに送金が完了したはずだ。

bob2 $ bitcoin-cli -regtest -conf=/home/{PCのユーザー名}/dev/bob/bitcoin.conf -datadir=. -rpcport=10002 getbalance
10.00000000

10BTC入っていることが確認できた。
ついでにbobの側でtransactionを確認してみる。

alice2 $ bitcoin-cli -regtest -conf=/home/{PCのユーザー名}/dev/bob/bitcoin.conf -datadir=. -rpcport=10002 gettransaction <transactionのハッシュ値>

transactionの内容をみるとAliceの側とは違って、amountが10.00000000になっているはずだ。

bitcoindをstopする

最後にノードを終了させる。

alice2 $ bitcoin-cli -regtest -conf=./bitcoin.conf -datadir=./ -rpcport=10001 -rpcuser=kek -rpcpassword=kek stop

bob2 $ bitcoin-cli -regtest -conf=./bitcoin.conf -datadir=./ -rpcport=10002 -rpcuser=kek -rpcpassword=kek stop

以上で終了。
気になったことはコマンドを打って遊んでみることで勉強になる。
次はlightningdのチュートリアルを作ろうかな。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?