2020/08/31

[ADA]Cardano Walletを起動するDockerfileを作りました

cardanodocker

やったこと

Building · input-output-hk/cardano-wallet Wikiを参考にしつつ、最新のソースコードからCardano walletを起動するDocker imageを開発しました。

Motivation

inputoutput/cardano-wallet - Docker Hubも準備されていたのですが、将来的に細かい中身の制御などをしたかったので、
debianベースのimageで作ることにしました。

Dockerfile

  • cardano-wallet

がinstallされたdocker imageを作成しました。

  • https://github.com/input-output-hk/cardano-wallet の最新の master branchを元にビルドするようにしています。
    • (現時点(2020/08/31)では、v1.19.0 の nodeに対応するものが master branchだからです。)
    • (特定のrelease versionを指定する必要があれば、tagを指定すればOKです。)

cardano-wallet-version-min.png

FROM debian:stretch-slim

# Install dependencies
RUN apt-get update -y
RUN apt-get install -y --no-install-recommends \
      libgmp-dev \
      libsystemd-dev \
      sqlite3 \
      git \
      curl \
      automake \
      build-essential \
      pkg-config \
      libtool \
      autoconf

# avoid ssl error when wget https site
RUN apt-get install -y --no-install-recommends ca-certificates

WORKDIR /usr/local/src

# Install Haskell Tool Stack
RUN curl -sSL https://get.haskellstack.org/ | sh
ENV PATH=/root/.local/bin:${PATH}

# Install Libsodium
RUN git clone https://github.com/input-output-hk/libsodium && \
    cd libsodium && \
    git checkout 66f017f1 && \
    ./autogen.sh && \
    ./configure && \
    make && \
    make install
ENV LD_LIBRARY_PATH=/usr/local/lib
ENV PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

# Download the source code for cardano-wallet and Build and install the wallet
RUN git clone https://github.com/input-output-hk/cardano-wallet.git && \
    cd cardano-wallet && \
    git fetch --all --tags && \
    git checkout master && \
    stack build --test --no-run-tests && \
    stack install

こちらを元に、起動スクリプトを足して完成になります。

(実際は)Wallet command line interface · input-output-hk/cardano-wallet Wikiを参考にして testnetの場合は、byron genesis fileをパラメータで指定できるようにしたりなどをしています。

  • 起動する際は、host上にcardano-nodeのsocketをvolumeで共有させて使用する必要があります。

起動後の確認

Log

正しく起動できると、以下のようなログが出力されます。(wallet機能側で、blockを処理している模様)

[cardano-wallet.pools-engine:Info:19] [2020-08-31 13:34:54.92 UTC] Applying blocks [4459485 ... 4479926]
[cardano-wallet.pools-engine:Info:19] [2020-08-31 13:34:55.05 UTC] Applying blocks [4479929 ... 4500383]
[cardano-wallet.pools-engine:Info:19] [2020-08-31 13:34:55.14 UTC] Applying blocks [4500400 ... 4511657]
[cardano-wallet.pools-engine:Info:19] [2020-08-31 13:34:59.59 UTC] Applying blocks [4511683 ... 4511683]

最終的に以下のようなログが定期的に出力されるようになりました。

[cardano-wallet.network:Info:62] [2020-08-31 13:53:29.87 UTC] Query GetCurrentPParams took 0.00524683s
[cardano-wallet.network:Info:62] [2020-08-31 13:53:29.87 UTC] Query GetUpdateInterfaceState took 0.000900645s
[cardano-wallet.pools-engine:Info:19] [2020-08-31 13:53:36.57 UTC] Applying blocks [4512800 ... 4512800]
[cardano-wallet.network:Info:16] [2020-08-31 13:53:36.58 UTC] Querying the reward account balance for [] at 70617265<-[3e65e7c1-4512800#1741587]
[cardano-wallet.network:Info:62] [2020-08-31 13:53:36.58 UTC] Query GetEraStart took 0.002155571s
[cardano-wallet.network:Info:16] [2020-08-31 13:53:36.58 UTC] Query getAccountBalance took 0.00312281s
[cardano-wallet.network:Info:16] [2020-08-31 13:53:36.58 UTC]   delegations = fromList []
  rewards = fromList []

[cardano-wallet.network:Info:62] [2020-08-31 13:53:36.58 UTC] Query GetCurrentPParams took 0.002781961s
[cardano-wallet.network:Info:62] [2020-08-31 13:53:36.58 UTC] Query GetUpdateInterfaceState took 0.001913254s

APIの確認

起動しているdocker containerにログインして、以下を実行しました。

# curl -X GET http://localhost:8090/v2/network/information
{"network_tip":{"epoch_number":80,"slot_number":321923},"node_tip":{"height":{"quantity":1741565,"unit":"block"},"epoch_number":80,"slot_number":321914},"sync_progress":{"status":"ready"},"next_epoch":{"epoch_start_time":"2020-09-01T20:20:16Z","epoch_number":81}}

# curl -X GET http://localhost:8090/v2/wallets
[]

問題なく動作していることを確認しました。

以上になります。