nim-codex/docker/docker-entrypoint.sh

74 lines
2.3 KiB
Bash

#!/bin/bash
# Environment variables from files
if [[ -n "${ENV_PATH}" ]]; then
set -a
[[ -f "${ENV_PATH}" ]] && source "${ENV_PATH}" || for f in "${ENV_PATH}"/*; do source "$f"; done
set +a
fi
# Parameters
if [[ -z "${CODEX_NAT}" ]]; then
if [[ "${NAT_IP_AUTO}" == "true" && -z "${NAT_PUBLIC_IP_AUTO}" ]]; then
export CODEX_NAT=$(hostname --ip-address)
echo "Private: CODEX_NAT=${CODEX_NAT}"
elif [[ -n "${NAT_PUBLIC_IP_AUTO}" ]]; then
# Run for 60 seconds if fail
WAIT=120
SECONDS=0
SLEEP=5
while (( SECONDS < WAIT )); do
export CODEX_NAT=$(curl -s -f -m 5 "${NAT_PUBLIC_IP_AUTO}")
# Check if exit code is 0 and returned value is not empty
if [[ $? -eq 0 && -n "${CODEX_NAT}" ]]; then
echo "Public: CODEX_NAT=${CODEX_NAT}"
break
else
# Sleep and check again
echo "Can't get Public IP - Retry in $SLEEP seconds / $((WAIT - SECONDS))"
sleep $SLEEP
fi
done
fi
fi
# Stop Codex run if can't get NAT IP when requested
if [[ "${NAT_IP_AUTO}" == "true" && -z "${CODEX_NAT}" ]]; then
echo "Can't get Private IP - Stop Codex run"
exit 1
elif [[ -n "${NAT_PUBLIC_IP_AUTO}" && -z "${CODEX_NAT}" ]]; then
echo "Can't get Public IP in $WAIT seconds - Stop Codex run"
exit 1
fi
# If marketplace is enabled from the testing environment,
# The file has to be written before Codex starts.
if [ -n "${PRIV_KEY}" ]; then
echo ${PRIV_KEY} > "private.key"
chmod 600 "private.key"
export CODEX_ETH_PRIVATE_KEY="private.key"
echo "Private key set"
fi
# Circuit downloader
# cirdl [circuitPath] [rpcEndpoint] [marketplaceAddress]
if [[ "$@" == *"prover"* ]]; then
echo "Run Circuit downloader"
# Set circuits dir from CODEX_CIRCOM_* variables if set
CIRCUIT_DIR=$(dirname "${CODEX_CIRCOM_R1CS}")
if [[ "${CIRCUIT_DIR}" == "." ]]; then
CIRCUIT_DIR="${CODEX_DATA_DIR}/circuits"
export CODEX_CIRCOM_R1CS="${CIRCUIT_DIR}/proof_main.r1cs"
export CODEX_CIRCOM_WASM="${CIRCUIT_DIR}/proof_main.wasm"
export CODEX_CIRCOM_ZKEY="${CIRCUIT_DIR}/proof_main.zkey"
fi
# Download circuits
mkdir -p "${CIRCUIT_DIR}"
cirdl "${CIRCUIT_DIR}" "${CODEX_ETH_PROVIDER}" "${CODEX_MARKETPLACE_ADDRESS}"
[[ $? -ne 0 ]] && { echo "Failed to download circuit files"; exit 1; }
fi
# Run
echo "Run Codex node"
exec "$@"