Tapyrus 環境構築(dev)
Tapyrus とは
Bitcoinをベースによりビジネスユース向けにカスタマイズしたブロックチェーン。
詳しくはTapyrusチャンネル1, Github2をご覧ください。
環境構築
今回は dev モード3での環境構築を行います。
前準備
Tapyrus では genesis ブロックを生成する前に鍵を用意する必要があります。(とりあえず試したいだけの方は前準備をスキップしてこちらを実行したら環境構築できるかと思います。
鍵の生成には tapyrusrb を使用します。
鍵の生成
キーペアを生成します。今回は拡張鍵4を用意することにします。
tapyrusrb を使用しますので、 gem 'tapyrus'
が使える状態にしてください。
# Tapyrusの dev モード設定値をロード
Tapyrus.chain_params = :dev
# 拡張鍵の seed を適当に生成
OpenSSL::Digest::SHA256.hexdigest(SecureRandom.hex(32))
#=> "c3fc8ba0d84ec65bdc569cd303149147035f407bc4b31a7910541d1e1cf0ee8d"
# 拡張鍵インスタンスを生成
ext_key = Tapyrus::ExtKey.generate_master("c3fc8ba0d84ec65bdc569cd303149147035f407bc4b31a7910541d1e1cf0ee8d")
# 鍵の安全性を高めるため強化導出
ext_key1 = ext_key.derive(1)
# 公開鍵(hex)を確認
pub = ext_key1.pub
#=> "0371b1a3106152a24f8683a9e155a4b6b0703d20e48c0c681bab6049bfbc2a1b3c"
# 秘密鍵(hex)を確認
priv = ext_key1.priv
#=> "6b00e140030c8167388b4600a14d55604c290fd4676397372944a94d22c06a32"
# 秘密鍵(WIF)を確認
wif = ext_key1.key.to_wif
#=> "cRAhgvWNPRTjzRr7E1LRep5dimpNyB6EiFWVNe6pJ3PjMhCef2EN"
鍵を保管する必要がある場合はニーモニックにしてメモしておきましょう。
mnemonic = Tapyrus::Mnemonic.new("english")
words = mnemonic.to_mnemonic("c3fc8ba0d84ec65bdc569cd303149147035f407bc4b31a7910541d1e1cf0ee8d")
# => ["sentence", "tone", "trial", "rack", "unaware", "combine", "image", "squeeze", "spread", "board", "cattle", "mix", "curious", "parent", "upper", "nose", "bounce", "silk", "bench", "demand", "tide", "journey", "riot", "rude"]
# 復元する際はニーモニックを seed 値に戻します
seed = mnemonic.to_entropy(words)
ext_key = Tapyrus::ExtKey.generate_master(seed)
TapyrusCore の起動
今回は dev 環境の構築なのでDockerを使います。
genesis ブロックを生成するのに必要なパラメータを取得しましょう。
docker run --rm tapyrus/tapyrusd:latest tapyrus-genesis -dev -signblockpubkey=0371b1a3106152a24f8683a9e155a4b6b0703d20e48c0c681bab6049bfbc2a1b3c -signblockprivatekey=cRAhgvWNPRTjzRr7E1LRep5dimpNyB6EiFWVNe6pJ3PjMhCef2EN
#=> 010000000000000000000000000000000000000000000000000000000000000000000000a93122e79d1da3bf27f9693d4fefe17520b96bfa125b7a1a85000059abc89c383966acacd0691335763c9a6ce8bd33110b9d8022289a993c66ddb3461b13d8d840cce26001210371b1a3106152a24f8683a9e155a4b6b0703d20e48c0c681bab6049bfbc2a1b3c4048bf19244a06b4efbb3f5c60d7674dc664483ee05825aad111508817087651bc5c4caafb96c961b52e62b72fc1b2319a71baff41e8cd7b97e900d912176e268f01010000000100000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0100f2052a010000001976a9148f018e28ff9677439c88472fe9bec0b15b7e2bc188ac00000000
docker で起動
tapyrus.conf が必要なので作成します。
コンテナにマウントするのでパスは適宜読み替えてください。
networkid
は 2 ~ 2147483647
の範囲で任意の値を指定してください。(networkid 1 はメインネット)
今回は 1 ノードしか立てないので特に影響ありません。
cat << EOS > tapyrus.conf
networkid=777
dev=1
[dev]
txindex=1
server=1
rest=1
rpcuser=rpcuser
rpcpassword=rpcpassword
rpcbind=0.0.0.0
rpcallowip=127.0.0.1
addseeder=static-seed.tapyrus.dev.chaintope.com
EOS
コンテナ名は任意です。
docker run -d --name 'core' -v "$(pwd)/tapyrus.conf":"/etc/tapyrus/tapyrus.conf" -e GENESIS_BLOCK_WITH_SIG='010000000000000000000000000000000000000000000000000000000000000000000000a93122e79d1da3bf27f9693d4fefe17520b96bfa125b7a1a85000059abc89c383966acacd0691335763c9a6ce8bd33110b9d8022289a993c66ddb3461b13d8d840cce26001210371b1a3106152a24f8683a9e155a4b6b0703d20e48c0c681bab6049bfbc2a1b3c4048bf19244a06b4efbb3f5c60d7674dc664483ee05825aad111508817087651bc5c4caafb96c961b52e62b72fc1b2319a71baff41e8cd7b97e900d912176e268f01010000000100000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0100f2052a010000001976a9148f018e28ff9677439c88472fe9bec0b15b7e2bc188ac00000000' tapyrus/tapyrusd:latest
ノードが動作しているか確認します。
docker exec core tapyrus-cli -conf=/etc/tapyrus/tapyrus.conf getblockchaininfo
docker-compose で起動
tapyrus.conf が必要なので作成します。
コンテナにマウントするのでパスは適宜読み替えてください。
networkid
は 2 ~ 2147483647
の範囲で任意の値を指定してください。(networkid 1 はメインネット)
今回は 1 ノードしか立てないので特に影響ありません。
cat << EOS > tapyrus.conf
networkid=777
dev=1
[dev]
txindex=1
server=1
rest=1
rpcuser=rpcuser
rpcpassword=rpcpassword
rpcbind=0.0.0.0
rpcallowip=127.0.0.1
addseeder=static-seed.tapyrus.dev.chaintope.com
EOS
version: "3"
services:
core:
image: "tapyrus/tapyrusd:latest"
environment:
GENESIS_BLOCK_WITH_SIG: "010000000000000000000000000000000000000000000000000000000000000000000000a93122e79d1da3bf27f9693d4fefe17520b96bfa125b7a1a85000059abc89c383966acacd0691335763c9a6ce8bd33110b9d8022289a993c66ddb3461b13d8d840cce26001210371b1a3106152a24f8683a9e155a4b6b0703d20e48c0c681bab6049bfbc2a1b3c4048bf19244a06b4efbb3f5c60d7674dc664483ee05825aad111508817087651bc5c4caafb96c961b52e62b72fc1b2319a71baff41e8cd7b97e900d912176e268f01010000000100000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0100f2052a010000001976a9148f018e28ff9677439c88472fe9bec0b15b7e2bc188ac00000000"
volumes:
- ./tapyrus.conf:/etc/tapyrus/tapyrus.conf
コンテナを立ち上げます。
docker compose up -d
ノードが動いているか確認します。
docker compose exec core tapyrus-cli -conf=/etc/tapyrus/tapyrus.conf getblockchaininfo
Tapyrus の使い方
アドレス作成
docker exec core tapyrus-cli -conf=/etc/tapyrus/tapyrus.conf getnewaddress
# もしくは docker compose exec core tapyrus-cli -conf=/etc/tapyrus/tapyrus.conf getnewaddress
#=> mwgwG7uUoLGPZ4EucSR5EqN1rKwuekHERQ
ブロック生成
docker exec core tapyrus-cli -conf=/etc/tapyrus/tapyrus.conf generatetoaddress 1 "mwgwG7uUoLGPZ4EucSR5EqN1rKwuekHERQ" "6b00e140030c8167388b4600a14d55604c290fd4676397372944a94d22c06a32"
TapyrusCore v0.4.1 より新しいバージョン
docker exec core tapyrus-cli -conf=/etc/tapyrus/tapyrus.conf generatetoaddress 1 "mypjiCm9DgySsEXgYjpcGwKNMvajiXauWA" "cRAhgvWNPRTjzRr7E1LRep5dimpNyB6EiFWVNe6pJ3PjMhCef2EN"
残高確認
docker exec core tapyrus-cli -conf=/etc/tapyrus/tapyrus.conf listunspent
参考URL
-
BitcoinCoreでいうところの regtest モード ↩
-
https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki ↩