目的
MacにBitcoindをインストールして、bitcoin-cliを使ってテストネット環境で送金をする
環境
macOS High Sierra 10.13.6
Homebrewインストール済み
作成
Bitcoindインストール
MACのコマンドラインツールのインストール
xcode-select --install
依存ライブラリの取得
brew install automake berkeley-db4 libtool boost miniupnpc openssl pkg-config protobuf python qt libevent qrencode
Bitcoin Coreのソースコード取得
git clone https://github.com/bitcoin/bitcoin
cd bitcoin
ビルド&インストール
./autogen.sh
./configure
make
sudo make install
インストールが完了すると、bitcoind
およびbitcoin-cli
コマンドが使えるようになります。
$ bitcoind -version
Bitcoin Core Daemon version v0.16.99.0-0de7cc848
設定ファイル作成
Bitcoind
でテストネットデータを取得するのに必要な設定ファイルを準備します。
設定ファイルの基本的設置場所は~/Library/Application Support/Bitcoin/
になります。
デフォルトの設置場所にデータをブロックデータをダウンロードするようにしてもいいのですが、testnetでもデータが21.4GBほど(2018/11/5現在)あるので、今回は別のディレクトリに保存しようと思います。
例としてホームディレクトリ直下に作成しますが、必要に応じて外付けHDDなどにパスを変更してください。
mkdir ~/.bitcoind
cd ~/.bitcoind
touch bitcoin.conf
vi bitcoin.conf
testnet=3
txindex=1
それぞれの設定値の意味は以下の通り
testnet
:testnetモードで起動した時の接続先testnetバージョン番号
txindex
:indexを作成して全てのトランザクションIDを参照可能にする
bitcoind、bitcoin-cliコマンド実行
以下のbitcoindコマンドを実行することでtestnetのデータを取得を開始します
bitcoind -datadir=/Users/ユーザー名/.bitcoind -daemon -testnet
※ユーザー名は適宜変更してください
それぞれのオプションの意味は以下の通り
-datadir
:保存作ディレクトリ
-daemon
:バックグラウンド実行状態で起動
-testnet
:テストネット環境で実行
bitcoindが動いている状態になることでbitcoin-cli
が使えるようになります。
以下がbitcoin-cliの基本形、これだけだと実行するコマンドが無いためなにも実行されません
bitcoin-cli -datadir=/Users/ユーザー名/.bitcoind -testnet
それぞれのオプションの意味は以下の通り
-datadir
:保存作ディレクトリ
-testnet
:テストネット環境で実行
-datadir
を設定している場合は毎回打ち込むのがめんどうなのでエイリアスを設定してしまうと楽になります。
alias btc-test="bitcoind -datadir=/Users/ユーザー名/.bitcoind -daemon -testnet"
alias btc-cli-test="bitcoin-cli -datadir=/Users/ユーザー名/.bitcoind -testnet"
source ~/.bashrc
で反映
bitcoin-cliの追加コマンド紹介
bitcoin-cli -datadir=/Users/ユーザー名/.bitcoind -testnet
の後に続くコマンドをいくつが紹介します。
stop
:bitcoindを停止します。
getblockchaininfo
:ブロックの情報が表示されます。自分の場合これに | grep -e "blocks" -e "headers" -e "size_on_disk"
をくっつけて、
「現在のブロック取得状態」「最大ブロック数」「データサイズ」を表示してブロックデータのダウンロード状態を調べたりしてます。
getnewaddress
:アドレス作成します。
getbalance
:ウォレット残高が確認できます。
sendtoaddress
:ビットコインを送金することができます。
getrawtransaction
:指定したトランザクションのhex値を表示します。
decoderawtransaction
:指定したトランザクションのhex値から詳細を表示します。
testnetのビットコインの送受信
受信用アドレス作成
getnewaddress
でアドレスを作成します。
$ bitcoin-cli -datadir=/Users/ユーザー名/.bitcoind -testnet getnewaddress
2N54STfB94e9A5LN1ERgnmPySW6zk56MZWw
エイリアスをはった場合はbtc-cli-test getnewaddress
となります。
testnetのコイン取得
まず現時点での残高を確認します。getbalance
を使って残高を確認します。
$ bitcoin-cli -datadir=/Users/ユーザー名/.bitcoind -testnet getbalance
0.29766122
テスト用でいくつか取得しているので、現時点では上記の量です。
作ったばかりの状態であればコインは0です。
では、コインを取得します。
こちらのサイトでtestnet3のコインをもらうことができます。
https://testnet.coinfaucet.eu/en/
アドレスを入力し、「Get bitcoins!」ボタンを押せば、テストコインを取得できます。
0.14910148コインもらえるようです。
数分後、トランザクションが確定されてから再度残高を確認します。
$ bitcoin-cli -datadir=/Users/ユーザー名/.bitcoind -testnet getbalance
0.44676270
送られた分だけ増えてることがわかります。
トランザクションの確認
数分たつとブロック情報が確定されます。トランザクション情報の確認は以下のようにおこないます。
トランザクションIDは上記サイトでテスト送金した際に表示されます。
getrawtransaction
とdecoderawtransaction
を使って取引データを確認します。
$ bitcoin-cli -datadir=/Users/ユーザー名/.bitcoind -testnet getrawtransaction 2749c8613475b5dbfcf3a0a2bbf26bf3296a0fb169cc48de90a2c724d8174976
0200000000010161fa1e7a55cfed9d0faf0a3efac9c7dfd64fdf9cb79f538e1abf6eaf591a58d20100000017160014f541639ef189db0be5e83c0857a0e4878d3bebeffeffffff026a5f42e42300000017a9140808203a29bac7886d6e2e109a3c2b85c6b9340987c482e3000000000017a9148197584c3cbc3f2ef3b6c1f57d153c097e57297e8702483045022100a84c41de602e3e7858b98e7a9f3255668d99b3a0a47446a0f2125d57903a9de302206e5581eeea29386a3f73a9acf8e5d52f4f458fb9c13fc0264a45d4472e6ea20c012103ef1b2a59d57f9c5befb16426e6f752c19cea1072a19a84fd9a9e56f1c99d895b42011600
$ bitcoin-cli -datadir=/Users/ユーザー名/.bitcoind -testnet decoderawtransaction 0200000000010161fa1e7a55cfed9d0faf0a3efac9c7dfd64fdf9cb79f538e1abf6eaf591a58d20100000017160014f541639ef189db0be5e83c0857a0e4878d3bebeffeffffff026a5f42e42300000017a9140808203a29bac7886d6e2e109a3c2b85c6b9340987c482e3000000000017a9148197584c3cbc3f2ef3b6c1f57d153c097e57297e8702483045022100a84c41de602e3e7858b98e7a9f3255668d99b3a0a47446a0f2125d57903a9de302206e5581eeea29386a3f73a9acf8e5d52f4f458fb9c13fc0264a45d4472e6ea20c012103ef1b2a59d57f9c5befb16426e6f752c19cea1072a19a84fd9a9e56f1c99d895b42011600
{
"txid": "2749c8613475b5dbfcf3a0a2bbf26bf3296a0fb169cc48de90a2c724d8174976",
"hash": "71438a82abe28aa672c233aa0865f391a93e57995051b91d8b8559b049d9d68d",
"version": 2,
"size": 248,
"vsize": 166,
"weight": 662,
"locktime": 1442114,
"vin": [
{
"txid": "d2581a59af6ebf1a8e539fb79cdf4fd6dfc7c9fa3e0aaf0f9dedcf557a1efa61",
"vout": 1,
"scriptSig": {
"asm": "0014f541639ef189db0be5e83c0857a0e4878d3bebef",
"hex": "160014f541639ef189db0be5e83c0857a0e4878d3bebef"
},
"txinwitness": [
"3045022100a84c41de602e3e7858b98e7a9f3255668d99b3a0a47446a0f2125d57903a9de302206e5581eeea29386a3f73a9acf8e5d52f4f458fb9c13fc0264a45d4472e6ea20c01",
"03ef1b2a59d57f9c5befb16426e6f752c19cea1072a19a84fd9a9e56f1c99d895b"
],
"sequence": 4294967294
}
],
"vout": [
{
"value": 1541.53410410,
"n": 0,
"scriptPubKey": {
"asm": "OP_HASH160 0808203a29bac7886d6e2e109a3c2b85c6b93409 OP_EQUAL",
"hex": "a9140808203a29bac7886d6e2e109a3c2b85c6b9340987",
"reqSigs": 1,
"type": "scripthash",
"addresses": [
"2Msyh8R2qmkvwa5D1qWDnEfufrWuFsgebXB"
]
}
},
{
"value": 0.14910148,
"n": 1,
"scriptPubKey": {
"asm": "OP_HASH160 8197584c3cbc3f2ef3b6c1f57d153c097e57297e OP_EQUAL",
"hex": "a9148197584c3cbc3f2ef3b6c1f57d153c097e57297e87",
"reqSigs": 1,
"type": "scripthash",
"addresses": [
"2N54STfB94e9A5LN1ERgnmPySW6zk56MZWw"
]
}
}
]
}
テスト送信
もうひとつの送り先になっていた「2Msyh8R2qmkvwa5D1qWDnEfufrWuFsgebXB」宛にコインを送ってみます
$ bitcoin-cli -datadir=/Users/ユーザー名/.bitcoind -testnet sendtoaddress 2Msyh8R2qmkvwa5D1qWDnEfufrWuFsgebXB 0.01000000
45c37068286a6441419d5413ec5c15746f0752db8254f912966b2f3118dcc3c7
返り値としてトランザクションIDが返却されます。
このトランザクションIDをもとにトランザクション情報を確認してみます。
$ bitcoin-cli -datadir=/Users/ユーザー名/.bitcoind -testnet getrawtransaction 45c37068286a6441419d5413ec5c15746f0752db8254f912966b2f3118dcc3c7
02000000000101ac7fa3f0bf0873cdb5ceed74773000a319a3fdbe169fe6fdd8fca8906861af5a00000000171600145b12e8893f903e9b6f2cb661476b91761d9b7039feffffff02beae93000000000017a914e9d9e509ddb0a6bb43928ce2dafaf11c97ec96c58740420f000000000017a9140808203a29bac7886d6e2e109a3c2b85c6b93409870247304402200e166794d473607c11a0a4dab3335922785e70a0a8c56aebbef5899d9d3453c502200bda32537f2edaf20d3bdf6cc12bcd3cb09e3e7a4c0873154166a46084f9b4a9012102968e23056c7d6d521a11a49af1cb945eff5dde929197747df233b6fcbcd2d04717011600
bitcoin-cli -datadir=/Users/ユーザー名/.bitcoind -testnet decoderawtransaction 02000000000101ac7fa3f0bf0873cdb5ceed74773000a319a3fdbe169fe6fdd8fca8906861af5a00000000171600145b12e8893f903e9b6f2cb661476b91761d9b7039feffffff02beae93000000000017a914e9d9e509ddb0a6bb43928ce2dafaf11c97ec96c58740420f000000000017a9140808203a29bac7886d6e2e109a3c2b85c6b93409870247304402200e166794d473607c11a0a4dab3335922785e70a0a8c56aebbef5899d9d3453c502200bda32537f2edaf20d3bdf6cc12bcd3cb09e3e7a4c0873154166a46084f9b4a9012102968e23056c7d6d521a11a49af1cb945eff5dde929197747df233b6fcbcd2d04717011600
{
"txid": "45c37068286a6441419d5413ec5c15746f0752db8254f912966b2f3118dcc3c7",
"hash": "12e248f3c0e581e1246bf2ef089276675e8b8fc0069a72952b08ba82d6996754",
"version": 2,
"size": 247,
"vsize": 166,
"weight": 661,
"locktime": 1442071,
"vin": [
{
"txid": "5aaf616890a8fcd8fde69f16befda319a300307774edceb5cd7308bff0a37fac",
"vout": 0,
"scriptSig": {
"asm": "00145b12e8893f903e9b6f2cb661476b91761d9b7039",
"hex": "1600145b12e8893f903e9b6f2cb661476b91761d9b7039"
},
"txinwitness": [
"304402200e166794d473607c11a0a4dab3335922785e70a0a8c56aebbef5899d9d3453c502200bda32537f2edaf20d3bdf6cc12bcd3cb09e3e7a4c0873154166a46084f9b4a901",
"02968e23056c7d6d521a11a49af1cb945eff5dde929197747df233b6fcbcd2d047"
],
"sequence": 4294967294
}
],
"vout": [
{
"value": 0.09678526,
"n": 0,
"scriptPubKey": {
"asm": "OP_HASH160 e9d9e509ddb0a6bb43928ce2dafaf11c97ec96c5 OP_EQUAL",
"hex": "a914e9d9e509ddb0a6bb43928ce2dafaf11c97ec96c587",
"reqSigs": 1,
"type": "scripthash",
"addresses": [
"2NEZiTZvAkohprqhfK9zLkQYNAWtj2kbVzr"
]
}
},
{
"value": 0.01000000,
"n": 1,
"scriptPubKey": {
"asm": "OP_HASH160 0808203a29bac7886d6e2e109a3c2b85c6b93409 OP_EQUAL",
"hex": "a9140808203a29bac7886d6e2e109a3c2b85c6b9340987",
"reqSigs": 1,
"type": "scripthash",
"addresses": [
"2Msyh8R2qmkvwa5D1qWDnEfufrWuFsgebXB"
]
}
}
]
}
これでテスト送信ができていることが確認できました。