2020/09/30

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

cardanopythondocker

やったこと

cardano-submit-apiは、cardanoのトランザクションデータを受取、Cardano NodeにブロードキャストするWebアプリケーションです。
input-output-hk/cardano-restの中でWebアプリとして開発されています。

以下のドキュメントを参考にしつつ
最新のGithubリリースからcardano-submit-apiを起動するDocker imageを開発しました。

Motivation

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

Dockerfile

  • cardano-submit-api

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

FROM debian:stretch-slim

ENV CARDANO_REST_VERSION=2.1.3

# Install dependencies
RUN apt-get update -y
RUN apt-get install -y --no-install-recommends \
      sudo \
      locales \
      git \
      curl \
      wget \
      gnupg \
      xz-utils

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

# install postgresql client
RUN wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - && \
    echo "deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main" | tee /etc/apt/sources.list.d/postgresql.list && \
    apt-get update -y && \
    apt-get install -y --no-install-recommends postgresql-client-11

RUN useradd -m -d /home/cardano -s /bin/bash cardano
RUN usermod -a -G sudo cardano
RUN echo " cardano      ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers
RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8

WORKDIR /home/cardano
USER cardano

# Install nix
RUN curl -L https://nixos.org/nix/install | sh
ENV PATH=/home/cardano/.nix-profile/bin:${PATH}
ENV NIX_PATH=/home/cardano/.nix-defexpr/channels
ENV NIX_PROFILES=/home/cardano/.nix-profile
ENV NIX_SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt

# To improve build speed, it is possible to set up a binary cache maintained by IOHK (this is optional):
# https://github.com/input-output-hk/cardano-node/blob/468f52e5a6a2f18a2a89218a849d702481819f0b/doc/getting-started/building-the-node-using-nix.md#building-under-nix
# https://www.mankier.com/5/nix.conf
ADD nix.conf /home/cardano/.config/nix/

# Download the source code for cardano-wallet and Build and install the wallet
RUN git clone https://github.com/input-output-hk/cardano-rest.git && \
    cd cardano-rest && \
    git fetch --all --tags && \
    git checkout tags/${CARDANO_REST_VERSION} && \
    nix-build -A scripts.testnet.submit-api && \
    sudo mv result /usr/local/bin/submit-api

起動時の注意点

以下の引数を指定して起動しました

key value memo
config コンフィグファイルのpath
socket-path cardano-nodeのsocketのpath docker volumeを使ってcardano nodeのsocketを共有しました
port サーバーの待受ポート番号

以下のような感じで、起動します。

submit-api \
--config ${CONFIG_FILE_PATH} \
--socket-path ${CARDANO_NODE_SOCKET_PATH} \
--port ${CARDANO_SUBMIT_API_PORT}

起動後の確認

github.com/kumanote/cardano-serialization-libのライブラリを使って
Cardanoのトランザクションを生成し、バイナリーデータとして、Cardano Submit APIに送信します。

import requests
import cardano_serialization_lib

# 署名付のtransactionを生成します。(hex文字列)
tx_str = cardano_serialization_lib.generate_transaction_from_bip32_enterprise_address(...省略...)

# cardano submit apiのサーバーへPOSTします
url = "http://127.0.0.1:8090/api/submit/tx"
headers = {
    "Content-Type": "application/cbor"
}
tx_data = bytes.fromhex(tx_str)  # submit apiへtransactionをbinaryデータとして送信します
response = requests.post(url=url, headers=headers, data=tx_data, verify=False)

こちらで、ちゃんとトランザクションが送信でき、ADAの送金ができることを確認できました。

以上になります。