以前cardano-submit-apiを試してみましたが、今回はtx-submit-apiというものに乗り換えてみたいと思います。
GitHubはこちら
tx-submit-apiのほうが設定項目が少ないのでお勧めです。
ダウンロードフォルダを作成する
mkdir -p $HOME/git/tx-submit-api cd $HOME/git/tx-submit-api
tx-submit-apiバイナリをダウンロードする
wget https://github.com/blinklabs-io/tx-submit-api/releases/download/v0.20.8/tx-submit-api-v0.20.8-linux-amd64
実行権限を付与する
chmod +x tx-submit-api-v0.20.8-linux-amd64
/usr/local/binディレクトリに配置する
sudo cp tx-submit-api-v0.20.8-linux-amd64 /usr/local/bin/tx-submit-api
起動スクリプトを作成する
cat > $NODE_HOME/startTxSubmitAPI.sh << EOF #!/bin/bash export DIRECTORY="${NODE_HOME}" export API_LISTEN_ADDRESS="127.0.0.1" export API_LISTEN_PORT=8091 export CARDANO_NETWORK=mainnet export CARDANO_NODE_SOCKET_PATH="\${DIRECTORY}/db/socket" /usr/local/bin/tx-submit-api EOF
常時起動させるためのサービスファイルを作成する
cat > $NODE_HOME/service/tx-submit-api.service << EOF # file: /etc/systemd/system/tx-submit-api.service [Unit] Description=Tx Submit API After=cardano-node.service [Service] Type=simple Restart=always RestartSec=5 User=cardano WorkingDirectory=${NODE_HOME} ExecStart=/bin/bash -c '${NODE_HOME}/startTxSubmitAPI.sh' KillSignal=SIGINT RestartKillSignal=SIGINT SuccessExitStatus=143 TimeoutStopSec=300 StandardOutput=syslog StandardError=syslog SyslogIdentifier=tx-submit-api [Install] WantedBy=cardano-node.service EOF
起動スクリプトに実行権限を付与する
chmod +x $NODE_HOME/startTxSubmitAPI.sh
サービスファイルを規定のディレクトリに配置
sudo cp $NODE_HOME/service/cardano-submit-api.service /etc/systemd/system/cardano-submit-api.service
パーミッションを設定する
sudo chmod 644 /etc/systemd/system/cardano-submit-api.service
サービスファイルを再読み込み
sudo systemctl daemon-reload
tx-submit-apiサービスを有効化する
sudo systemctl enable tx-submit-api.service
tx-submit-apiサービスを開始する
sudo systemctl start tx-submit-api.service
tx-submit-apiサービスの起動状態を確認する
sudo systemctl status tx-submit-api.service
"msg":"starting tx-submit-api v0.20.8 (commit 22b3305)"
"msg":"maxprocs: Leaving GOMAXPROCS=8: CPU quota undefined"
"msg":"starting API listener on 127.0.0.1:8091"
"msg":"starting metrics listener on :8081"
nginxリバースプロキシの設定(/etc/nginx/sites-available/submit-api)
server { listen 443; server_name submit-api.example.com; location /api/submit/ { proxy_pass http://127.0.0.1:8091/api/submit/; proxy_set_header Host $host; add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' '*'; if ($request_method = OPTIONS) { add_header 'Access-Control-Max-Age' 1728000; add_header 'Content-Type' 'text/plain; charset=utf-8'; add_header 'Content-Length' 0; return 204; } } }
リバースプロキシ有効化
sudo ln -s /etc/nginx/sites-available/submit-api /etc/nginx/sites-enabled/
sudo systemctl reload nginx
HTTPS化 (Let's Encrypt)
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d submit-api.example.com
ファイアーウォールの設定(ufw)
sudo ufw allow 443
テスト(外部クライアントからtx.signedを送信)
curl -X POST \ -H "Content-Type: application/cbor" \ --data-binary @"tx.signed" \ https://submit-api.example.com/api/submit/tx
eternlウォレットの場合の設定 設定→アプリ設定→カスタム送信エンドポイント→エンドポイントを追加 で以下を追加する
https://submit-api.example.com/api/submit/tx
やはりトランザクション送信時にエラーが発生するが、送信は成功している。
こちらも要調査