Tapyrus Coreノード devモード起動方法(Docker版)

この記事ではDocker環境上に、devモードでTapyrus Coreノードを起動する方法を解説します。 devモードとは開発やテストの際、ローカルでSigner Networkを用いずにTapyrus Core単体でブロックの生成を行い、単一のTapyrusノードを実行するための開発用環境です。 公式のドキュメントはこちらです。

また、本記事ではコマンドの実行にターミナルアプリケーション使用します。
記載されたコマンドを順に実行することでdevモードでTapyrusノード起動が完了します。

Docker Hub上に公開されたtapyrus/tapyrusdv0.5.1を使用します。

前提

本記事ではDockerがインストール済みの前提で解説を行います。
また、本記事では鍵導出のため、rubyライブラリのtapyrusrbを用います。 事前にruby 3.0をインストールして置いてください。
tapyrus.confファイルはデフォルトでdevモード用のものがコンテナ内に生成されるため、作成は不要です。

鍵導出

鍵導出の方法は様々ありますが、本記事ではtapyrusebライブラリを用います。
以下のコマンドでtapyrusebのgemをインストールします。

$ gem install tapyrus

Github上の鍵導出用Rubyファイル(generate_key_pair.rb)をダウンロードしてください。 ファイルには以下のようなコードが書かれています。

require 'tapyrus'

Tapyrus.chain_params = :dev
key_pair = Tapyrus::Key.generate
puts "秘密鍵(WIF): #{key_pair.to_wif}"
puts "公開鍵: #{key_pair.pubkey}"

以下のようにファイルの実行、もしくはRubyの対話モード(irb)で上記コードを一行づつ実行してください。

$ ruby generate_key_pair.rb

実行すると以下のような出力が表示されます。 <秘密鍵>, <公開鍵>に表示されている文字列の値を控えておきます。

秘密鍵(WIF): <秘密鍵>
公開鍵: <公開鍵>

また、将来的にtapyrus-genesiscreatekeyコマンドの実装を予定しており、上記のような手順を用いずにコマンドラインからの鍵導出が可能になります。

genesisブロックの生成

tapyrus/tapyrusd:v0.5.1のイメージを指定し、devモードで動作するためのチェーンのgenesisブロックの生成を行ないます。
genesisブロックの生成にはtapyrus-genesisコマンドを用います。 -devでdevモードであることを指定し、控えておいた<秘密鍵>signblockprivatekeyに、<公開鍵>signblockpubkeyにオプションとして指定して以下のコマンドを実行します。 実行すると表示される文字列の値がgenesisブロックです。 genesisブロックの値は次に使用するため控えておいてください。

$ docker run tapyrus/tapyrusd:v0.5.1 tapyrus-genesis -dev -signblockpubkey=<公開鍵> -signblockprivatekey=<秘密鍵>

Tapyrusノードを起動する

Dockerコンテナの作成・起動を行います。
コンテナ作成時に-eオプションを使用しGENESIS_BLOCK_WITH_SIGに先程控えておいてgenesisブロックの値をを指定します。

$ docker run -d --name 'tapyrus_node_dev' -e GENESIS_BLOCK_WITH_SIG='<genesisブロック>' tapyrus/tapyrusd:v0.5.1

上記のコマンドを実行し、ハッシュ値のコンテナIDが表示されると起動成功です。

コンテナ内でtapyrus-cligetblockchaininfoコマンドを用いて、ブロックチェーンの情報を確認します。  

$ docker exec tapyrus_node_dev tapyrus-cli -conf=/etc/tapyrus/tapyrus.conf getblockchaininfo

以下のようなブロックチェーンの情報を確認できればTapyrus Coreがdevモードで動作していることが確認できます。(詳細な数値は環境ごとに異なります)

{
  "chain": "1905960821",
  "mode": "dev",
  "blocks": 0,
  "headers": 0,
  "bestblockhash": "444670fdee18be68683c9c6f413f38de8d2471fd51c8cbf50cf6ac442af49d94",
  "mediantime": 1657067469,
  "verificationprogress": 1,
  "initialblockdownload": false,
  "size_on_disk": 298,
  "pruned": false,
  "aggregatePubkeys": [
    {
      "02030c6a9d43ab96e7440f549d4b0447b4444b44f0c0287bc78ef70d5295813fb4": 0
    }
  ],
  "warnings": ""
}

以上でDocker環境でTapyrus Coreノードがdevモードで立ち上がりました。

ブロックの生成

devモードではSignerノードが存在しないため、コマンドを実行しブロックの生成を行なう必要があります。 まずはブロック生成に用いるアドレスを生成します。

$ docker exec tapyrus_node_dev tapyrus-cli -conf=/etc/tapyrus/tapyrus.conf getnewaddress

ブロックの生成にはgeneratetoaddressコマンドを用います。
引数として、ブロック報酬を受け取るアドレスブロック報酬を受け取るアドレスgenesisブロックの生成に使用した秘密鍵を指定します。

$  docker exec tapyrus_node_dev tapyrus-cli -conf=/etc/tapyrus/tapyrus.conf generatetoaddress 1 <ブロック報酬を受け取るアドレス> <genesisブロックの生成に使用した秘密鍵>

以下のような配列で文字列のブロックハッシュが表示されるとブロックの生成は成功です。(詳細な値は実行した環境ごとに異なります)

[
  "95879e38c65c010b7cf9d734dbcdffd8ec59db33cdd943ab627dc9789686e6b9"
]

ノードの停止

コンテナを停止する場合、以下のコマンドを実行します。

$ docker stop tapyrus_node_dev