Tapyrus環境構築(dev)


Tapyrus 環境構築(dev)

Tapyrus とは

Bitcoinをベースによりビジネスユース向けにカスタマイズしたブロックチェーン。

詳しくはTapyrusチャンネル1, Github2をご覧ください。

環境構築

今回は dev モード3での環境構築を行います。

前準備

Tapyrus では genesis ブロックを生成する前に鍵を用意する必要があります。(とりあえず試したいだけの方は前準備をスキップしてこちらを実行したら環境構築できるかと思います。

鍵の生成には tapyrusrb を使用します。

鍵の生成

キーペアを生成します。今回は拡張鍵4を用意することにします。

tapyrusrb を使用しますので、 gem 'tapyrus' が使える状態にしてください。

irb
# 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"

鍵を保管する必要がある場合はニーモニックにしてメモしておきましょう。

irb
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 ブロックを生成するのに必要なパラメータを取得しましょう。

zsh
docker run --rm tapyrus/tapyrusd:latest tapyrus-genesis -dev -signblockpubkey=0371b1a3106152a24f8683a9e155a4b6b0703d20e48c0c681bab6049bfbc2a1b3c -signblockprivatekey=cRAhgvWNPRTjzRr7E1LRep5dimpNyB6EiFWVNe6pJ3PjMhCef2EN
#=> 010000000000000000000000000000000000000000000000000000000000000000000000a93122e79d1da3bf27f9693d4fefe17520b96bfa125b7a1a85000059abc89c383966acacd0691335763c9a6ce8bd33110b9d8022289a993c66ddb3461b13d8d840cce26001210371b1a3106152a24f8683a9e155a4b6b0703d20e48c0c681bab6049bfbc2a1b3c4048bf19244a06b4efbb3f5c60d7674dc664483ee05825aad111508817087651bc5c4caafb96c961b52e62b72fc1b2319a71baff41e8cd7b97e900d912176e268f01010000000100000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0100f2052a010000001976a9148f018e28ff9677439c88472fe9bec0b15b7e2bc188ac00000000

docker で起動

tapyrus.conf が必要なので作成します。
コンテナにマウントするのでパスは適宜読み替えてください。
networkid2 ~ 2147483647 の範囲で任意の値を指定してください。(networkid 1 はメインネット)
今回は 1 ノードしか立てないので特に影響ありません。

zsh
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

コンテナ名は任意です。

zsh
docker run -d --name 'core' -v "$(pwd)/tapyrus.conf":"/etc/tapyrus/tapyrus.conf" -e GENESIS_BLOCK_WITH_SIG='010000000000000000000000000000000000000000000000000000000000000000000000a93122e79d1da3bf27f9693d4fefe17520b96bfa125b7a1a85000059abc89c383966acacd0691335763c9a6ce8bd33110b9d8022289a993c66ddb3461b13d8d840cce26001210371b1a3106152a24f8683a9e155a4b6b0703d20e48c0c681bab6049bfbc2a1b3c4048bf19244a06b4efbb3f5c60d7674dc664483ee05825aad111508817087651bc5c4caafb96c961b52e62b72fc1b2319a71baff41e8cd7b97e900d912176e268f01010000000100000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0100f2052a010000001976a9148f018e28ff9677439c88472fe9bec0b15b7e2bc188ac00000000' tapyrus/tapyrusd:latest

ノードが動作しているか確認します。

zsh
docker exec core tapyrus-cli -conf=/etc/tapyrus/tapyrus.conf getblockchaininfo

docker-compose で起動

tapyrus.conf が必要なので作成します。
コンテナにマウントするのでパスは適宜読み替えてください。
networkid2 ~ 2147483647 の範囲で任意の値を指定してください。(networkid 1 はメインネット)
今回は 1 ノードしか立てないので特に影響ありません。

zsh
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-compose.yml
version: "3"
services:
  core:
    image: "tapyrus/tapyrusd:latest"
    environment:
      GENESIS_BLOCK_WITH_SIG: "010000000000000000000000000000000000000000000000000000000000000000000000a93122e79d1da3bf27f9693d4fefe17520b96bfa125b7a1a85000059abc89c383966acacd0691335763c9a6ce8bd33110b9d8022289a993c66ddb3461b13d8d840cce26001210371b1a3106152a24f8683a9e155a4b6b0703d20e48c0c681bab6049bfbc2a1b3c4048bf19244a06b4efbb3f5c60d7674dc664483ee05825aad111508817087651bc5c4caafb96c961b52e62b72fc1b2319a71baff41e8cd7b97e900d912176e268f01010000000100000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0100f2052a010000001976a9148f018e28ff9677439c88472fe9bec0b15b7e2bc188ac00000000"
    volumes:
      - ./tapyrus.conf:/etc/tapyrus/tapyrus.conf

コンテナを立ち上げます。

zsh
docker compose up -d

ノードが動いているか確認します。

zsh
docker compose exec core tapyrus-cli -conf=/etc/tapyrus/tapyrus.conf getblockchaininfo

Tapyrus の使い方

アドレス作成

zsh
docker exec core tapyrus-cli -conf=/etc/tapyrus/tapyrus.conf getnewaddress
# もしくは docker compose exec core tapyrus-cli -conf=/etc/tapyrus/tapyrus.conf getnewaddress
#=> mwgwG7uUoLGPZ4EucSR5EqN1rKwuekHERQ

ブロック生成

zsh
docker exec core tapyrus-cli -conf=/etc/tapyrus/tapyrus.conf generatetoaddress 1 "mwgwG7uUoLGPZ4EucSR5EqN1rKwuekHERQ" "6b00e140030c8167388b4600a14d55604c290fd4676397372944a94d22c06a32"

TapyrusCore v0.4.1 より新しいバージョン

zsh
docker exec core tapyrus-cli -conf=/etc/tapyrus/tapyrus.conf generatetoaddress 1 "mypjiCm9DgySsEXgYjpcGwKNMvajiXauWA" "cRAhgvWNPRTjzRr7E1LRep5dimpNyB6EiFWVNe6pJ3PjMhCef2EN"

残高確認

zsh
docker exec core tapyrus-cli -conf=/etc/tapyrus/tapyrus.conf listunspent

参考URL