⛸️

Tapyrus Coreをdevモードで構築する 〜Docker編〜

7 min read

Start Tapyrus-Core in dev mode on Docker

この記事の目標は「Docker上でTapyrusのdevモードを起動する」ことです。

Dockerを使わないでUbuntu上で直接起動する方法はこちらの記事をご覧ください。

元ネタはこちらの記事で、本記事では初心者向けにさらに事細かな手順を記すことを目的としています。

TapyrusとはChaintope社が開発するコンソーシアム型ブロックチェーンです。詳しはこちらをご覧ください。

https://www.chaintope.com/chaintope-blockchain-protocol/

前提

macOSとLinux向けに解説していきます。シェルはbashです。macOSユーザーでzsh使いの人は都度読み替えてください。

Windows向けの解説は含まれません。ご了承。

下準備

Rubyをインストールする

  • macOS

    macOSには標準でRubyが入っていますがバージョン関係で何かと不便なのでrbenvで環境を構築していきます。

    次のコマンドをターミナルで順に叩いてください。

    # rbenvをインストール
    $ brew install rbenv
    
    # rbenvを設定
    $ rbenv init
    
    # bashrcを更新
    $ echo '# ruby' >> ~/.bashrc
    $ echo 'eval "$(rbenv init - )"' >> ~/.bashrc
    $ source ~/.bashrc
    
    # Ruby 3.0.1 をインストール
    $ rbenv install 3.0.1
    
    # デフォルトを3.0.1に設定
    $ rbenv global 3.0.1
    
    # 確認
    $ ruby -v
    
  • Ubuntu

    Ubuntuも標準で入れてくれてますが古いです。古いしapt経由でインストールされたRubyでは何かと不便なので一度アンインストールし、rbenvで環境を構築していきます。

    次のコマンドをターミナルで順に叩いてください。

    # aptのRubyをアンインストール
    $ sudo apt purge ruby rbenv ruby-build
    $ rm -rf ~/.rbenv
    
    # rbenv, ruby-buildをクローン
    $ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
    $ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
    
    # bashrcを更新
    $ echo '# ruby' >> ~/.bashrc
    $ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
    $ echo 'eval "$(rbenv init - )"' >> ~/.bashrc
    $ source ~/.bashrc
    
    # ruby 3.0.1 をインストール
    $ rbenv install 3.0.1
    
    # デフォルトを3.0.1に設定
    $ rbenv global 3.0.1
    
    # 確認
    $ ruby -v
    

Dockerをインストールする

  • macOS

    Docker Desktopがここからダウンロードできます。

  • Ubuntu

    aptで貰ってきます。

    # apt-get
    $ sudo apt install docker.io
    
    # 確認
    $ docker --version
    

    初期の権限設定ではsudoが必須になりますが非常に鬱陶しいので現在のユーザーをdockerグループへ追加し、グループに書き込み権限を付与します。次のコマンドを順に実行してください。

    # ユーザーを追加
    $ sudo gpasswd -a $(whoami) docker
    
    # docker.sockの書き込み権限を付与
    $ sudo chgrp docker /var/run/docker.sock
    
    # dockerを再起動
    $ sudo service docker restart
    

補足

  • (macOS) Homebrewが入ってない

    HomebrewとはmacOS用のパッケージマネージャーです。brew で使用します。

    次のコマンドをターミナルで叩いてください。

    $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    
  • (Ubuntu) gitが入ってない

    次のコマンドをターミナルで叩いてください。

    $ sudo apt-get install git
    

鍵の準備

1. tapyrusrbを用意する

TapyrusのRuby用ライブラリ、tapyrusrbをgemでインストールします。

$ gem install tapyrus

この先はirbで操作していきます。irbとはRubyの対話型シェルです。

次のコマンドでirbを起動します。

$ irb

irbでは > 以降に入力、 => 以降に返答が返ってきます。

irbでtapyrusrbを有効にします。> 以降を入力してください。=> 以降が返って来れば成功です。

> require 'tapyrus'
=> true

tapyrusrbをdevモードに設定します。

> Tapyrus.chain_params = :dev
=> true

2. 拡張鍵のseedを取得

SHA-256で16進数表示の拡張鍵のseedを取得します。

拡張鍵とは公開鍵や秘密鍵などを保持した単一の鍵です。

> OpenSSL::Digest::SHA256.hexdigest(SecureRandom.hex(32))
=> "拡張鍵"

返答をメモしておきます。

3. 拡張鍵をインスタンス化

一つ前で取得した拡張鍵を引数にインスタンスを生成します。

> ext_key = Tapyrus::ExtKey.generate_master("拡張鍵")
=> #<Tapyrus::ExtKey:0x00007fb299041c00...

インスタンスは ext_key に格納されるので返答は無視で大丈夫です。

4. 鍵の強化導出

安全性向上のために強化導出を行います。拡張鍵インスタンスに .derive 関数を実行し、ext_key1に格納します。

> ext_key1 = ext_key.derive(1)
=> #<Tapyrus::ExtKey:0x00007fb29c92b7c8...

強化導出後の拡張鍵インスタンスは ext_key1 に格納されます。

5. 公開鍵を取得

拡張鍵から公開鍵を取得します。強化導出後の拡張鍵インスタンス ext_key1pub を参照します。

> pub = ext_key1.pub
=> "公開鍵(hex)"

hex表示の公開鍵が返ってきます。返答をメモしておきます。

6. 秘密鍵を取得

拡張鍵から秘密鍵を取得します。公開鍵同様の手順で priv を参照します。

> priv = ext_key1.priv
=> "秘密鍵(hex)"

hex表示の秘密鍵が返ってきます。返答をメモしておきます。

7. 秘密鍵をWIF形式で取得

拡張鍵からWIF形式で秘密鍵を取得します。

WIFとは Wallet Import Format の略でBitcoinのwalletを扱うために開発された鍵の表示形式です。

> wif = ext_key1.key.to_wif
=> "秘密鍵(WIF)"

WIF表示の秘密鍵が返ってきます。返答をメモしておきます。

以上で鍵の準備は完了です。

8. おまけ:ニーモックを生成し保管

任意ですがニーモックを生成し補完することもできます。

空のニーモックオブジェクトを生成します。

> mnemonic = Tapyrus::Mnemonic.new("english")
=> #<Tapyrus::Mnemonic:0x00007fb299c15ea0 @word_list="english">

拡張鍵からニーモックを生成します。

> words = mnemonic.to_mnemonic("拡張鍵")
=> 
["inside",
...

生成されたニーモックを表示してみます。

> pp words
=>
["inside",
 "castle",
 .
 .
 .
 "lawsuit",
 "answer"]

表示された単語集を安全に保管してください。

また、復元手順は以下です。

拡張鍵のseedは以下で復元できます。配列 words は保管してある単語集を用いて事前に用意してください。

> seed = mnemonic.to_entropy(words)
=> "拡張鍵"

インスタンスは生成と同様の手順で取得できます。

> ext_key1 = ext_key.derive(1)
=> #<Tapyrus::ExtKey:0x00007fb29c92b7c8...

Tapyrus Coreの起動

1. ジェネシスブロック用パラメーターを用意

Docker経由でtapyrus-genesisを使いパラメーターを取得します。

Dockerが起動していなければ起動します。macOSはDesktopアプリを起動してください。Ubuntuは以下のコマンドで起動させます。

$ systemctl start docker

起動したらパラメーターを取得します。次のコマンドを公開鍵・秘密鍵を書き換えた上で叩いてください。

$ docker run --rm tapyrus/tapyrusd:edge tapyrus-genesis -dev -signblockpubkey=公開鍵 -signblockprivatekey=秘密鍵(WIF)

秘密鍵はWIF形式のものを使ってください。

2. Dockerコンテナを作成

作成したジェネシスブロック用パラメーターを使ってコンテナを作成します。

$ docker run -d --name 'tapyrus_node_dev' -p 12381:12381 -e GENESIS_BLOCK_WITH_SIG='パラメーター' tapyrus/tapyrusd:edge

コンテナを確認します。

$ docker container ls

tapyrus_node_devが起動していることを確認できるはずです。

3. Tapyrus Coreの起動を確認

ブロックチェーン情報を取得することで起動を確認します。

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

チェーン情報が返って来れば成功、オレオレTapyrusブロックチェーンの完成です。

おまけ:ちょっと使ってみる

せっかくなので少し使ってみましょう。

アドレスを作成する

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

アドレスが作成され返ってきます。

ブロックを作成する

$ docker exec tapyrus_node_dev tapyrus-cli -conf=/etc/tapyrus/tapyrus.conf generatetoaddress 1 "アドレス" "秘密鍵(WIF)"

秘密鍵について、TapyrusCoreのバージョンが0.4.1より古い場合はhex、より新しい場合はWIFのものを指定します。

UTXOのリストを表示する

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

UTXOのリストが表示されます。

終わり

以上でTapyrus CoreのdevモードがDocker上で立ち上がりました。
以降の開発はtapyrusrbGluebyなどを用いると簡単に進みます。これらは今回建てたTapyrus CoreへRPC接続し稼働します。

参考

https://qiita.com/John110/items/0ac6deb458af976b0cf8

Discussion

ログインするとコメントできます