SYSTEM := $(shell uname -s) HOST := host.docker.internal DOCKER_REPO := blockscout APP_NAME := blockscout BS_CONTAINER_IMAGE := $(DOCKER_REPO)/$(APP_NAME) BS_CONTAINER_NAME := blockscout PG_CONTAINER_IMAGE := postgres:14 PG_CONTAINER_NAME := db THIS_FILE = $(lastword $(MAKEFILE_LIST)) RELEASE_VERSION ?= '5.2.1' PORT ?= '4000' TAG := $(RELEASE_VERSION)-commit-$(shell git log -1 --pretty=format:"%h") STABLE_TAG := $(RELEASE_VERSION) ifeq ($(SYSTEM), Linux) HOST=localhost endif ifdef DATABASE_URL DB_URL = $(DATABASE_URL) else DB_URL = postgresql://postgres:@$(HOST):5432/blockscout?ssl=false ECTO_USE_SSL = 'false' endif BLOCKSCOUT_CONTAINER_PARAMS = -e 'MIX_ENV=prod' \ -e 'DATABASE_URL=$(DB_URL)' ifeq ($(SYSTEM), Linux) BLOCKSCOUT_CONTAINER_PARAMS += --network=host endif ifdef NETWORK BLOCKSCOUT_CONTAINER_PARAMS += -e 'NETWORK=$(NETWORK)' endif ifdef SUBNETWORK BLOCKSCOUT_CONTAINER_PARAMS += -e 'SUBNETWORK=$(SUBNETWORK)' endif ifdef LOGO BLOCKSCOUT_CONTAINER_PARAMS += -e 'LOGO=$(LOGO)' endif ifdef ETHEREUM_JSONRPC_VARIANT BLOCKSCOUT_CONTAINER_PARAMS += -e 'ETHEREUM_JSONRPC_VARIANT=$(ETHEREUM_JSONRPC_VARIANT)' endif ifdef ETHEREUM_JSONRPC_HTTP_URL BLOCKSCOUT_CONTAINER_PARAMS += -e 'ETHEREUM_JSONRPC_HTTP_URL=$(ETHEREUM_JSONRPC_HTTP_URL)' endif ifdef ETHEREUM_JSONRPC_FALLBACK_HTTP_URL BLOCKSCOUT_CONTAINER_PARAMS += -e 'ETHEREUM_JSONRPC_FALLBACK_HTTP_URL=$(ETHEREUM_JSONRPC_FALLBACK_HTTP_URL)' endif ifdef ETHEREUM_JSONRPC_TRACE_URL BLOCKSCOUT_CONTAINER_PARAMS += -e 'ETHEREUM_JSONRPC_TRACE_URL=$(ETHEREUM_JSONRPC_TRACE_URL)' endif ifdef ETHEREUM_JSONRPC_FALLBACK_TRACE_URL BLOCKSCOUT_CONTAINER_PARAMS += -e 'ETHEREUM_JSONRPC_FALLBACK_TRACE_URL=$(ETHEREUM_JSONRPC_FALLBACK_TRACE_URL)' endif ifdef ETHEREUM_JSONRPC_WS_URL BLOCKSCOUT_CONTAINER_PARAMS += -e 'ETHEREUM_JSONRPC_WS_URL=$(ETHEREUM_JSONRPC_WS_URL)' endif ifdef ETHEREUM_JSONRPC_TRANSPORT BLOCKSCOUT_CONTAINER_PARAMS += -e 'ETHEREUM_JSONRPC_TRANSPORT=$(ETHEREUM_JSONRPC_TRANSPORT)' endif ifdef ETHEREUM_JSONRPC_DISABLE_ARCHIVE_BALANCES BLOCKSCOUT_CONTAINER_PARAMS += -e 'ETHEREUM_JSONRPC_DISABLE_ARCHIVE_BALANCES=$(ETHEREUM_JSONRPC_DISABLE_ARCHIVE_BALANCES)' endif ifdef ETHEREUM_JSONRPC_HTTP_HEADERS BLOCKSCOUT_CONTAINER_PARAMS += -e 'ETHEREUM_JSONRPC_HTTP_HEADERS=$(ETHEREUM_JSONRPC_HTTP_HEADERS)' endif ifdef IPC_PATH BLOCKSCOUT_CONTAINER_PARAMS += -e 'IPC_PATH=$(IPC_PATH)' endif ifdef NETWORK_PATH BLOCKSCOUT_CONTAINER_PARAMS += -e 'NETWORK_PATH=$(NETWORK_PATH)' endif ifdef CHECK_ORIGIN BLOCKSCOUT_CONTAINER_PARAMS += -e 'CHECK_ORIGIN=$(CHECK_ORIGIN)' endif ifdef COIN BLOCKSCOUT_CONTAINER_PARAMS += -e 'COIN=$(COIN)' endif ifdef METADATA_CONTRACT BLOCKSCOUT_CONTAINER_PARAMS += -e 'METADATA_CONTRACT=$(METADATA_CONTRACT)' endif ifdef VALIDATORS_CONTRACT BLOCKSCOUT_CONTAINER_PARAMS += -e 'VALIDATORS_CONTRACT=$(VALIDATORS_CONTRACT)' endif ifdef KEYS_MANAGER_CONTRACT BLOCKSCOUT_CONTAINER_PARAMS += -e 'KEYS_MANAGER_CONTRACT=$(KEYS_MANAGER_CONTRACT)' endif ifdef SUPPLY_MODULE BLOCKSCOUT_CONTAINER_PARAMS += -e 'SUPPLY_MODULE=$(SUPPLY_MODULE)' endif ifdef POOL_SIZE BLOCKSCOUT_CONTAINER_PARAMS += -e 'POOL_SIZE=$(POOL_SIZE)' endif ifdef ECTO_USE_SSL BLOCKSCOUT_CONTAINER_PARAMS += -e 'ECTO_USE_SSL=$(ECTO_USE_SSL)' endif ifdef DATADOG_HOST BLOCKSCOUT_CONTAINER_PARAMS += -e 'DATADOG_HOST=$(DATADOG_HOST)' endif ifdef DATADOG_PORT BLOCKSCOUT_CONTAINER_PARAMS += -e 'DATADOG_PORT=$(DATADOG_PORT)' endif ifdef SPANDEX_BATCH_SIZE BLOCKSCOUT_CONTAINER_PARAMS += -e 'SPANDEX_BATCH_SIZE=$(SPANDEX_BATCH_SIZE)' endif ifdef SPANDEX_SYNC_THRESHOLD BLOCKSCOUT_CONTAINER_PARAMS += -e 'SPANDEX_SYNC_THRESHOLD=$(SPANDEX_SYNC_THRESHOLD)' endif ifdef HEART_BEAT_TIMEOUT BLOCKSCOUT_CONTAINER_PARAMS += -e 'HEART_BEAT_TIMEOUT=$(HEART_BEAT_TIMEOUT)' endif ifdef HEART_COMMAND BLOCKSCOUT_CONTAINER_PARAMS += -e 'HEART_COMMAND=$(HEART_COMMAND)' endif ifdef BLOCKSCOUT_VERSION BLOCKSCOUT_CONTAINER_PARAMS += -e 'BLOCKSCOUT_VERSION=$(BLOCKSCOUT_VERSION)' endif ifdef RELEASE_LINK BLOCKSCOUT_CONTAINER_PARAMS += -e 'RELEASE_LINK=$(RELEASE_LINK)' endif ifdef ELIXIR_VERSION BLOCKSCOUT_CONTAINER_PARAMS += -e 'ELIXIR_VERSION=$(ELIXIR_VERSION)' endif ifdef BLOCK_TRANSFORMER BLOCKSCOUT_CONTAINER_PARAMS += -e 'BLOCK_TRANSFORMER=$(BLOCK_TRANSFORMER)' endif ifdef GRAPHIQL_TRANSACTION BLOCKSCOUT_CONTAINER_PARAMS += -e 'GRAPHIQL_TRANSACTION=$(GRAPHIQL_TRANSACTION)' endif ifdef BLOCK_RANGES BLOCKSCOUT_CONTAINER_PARAMS += -e 'BLOCK_RANGES=$(BLOCK_RANGES)' endif ifdef FIRST_BLOCK BLOCKSCOUT_CONTAINER_PARAMS += -e 'FIRST_BLOCK=$(FIRST_BLOCK)' endif ifdef LAST_BLOCK BLOCKSCOUT_CONTAINER_PARAMS += -e 'LAST_BLOCK=$(LAST_BLOCK)' endif ifdef TRACE_FIRST_BLOCK BLOCKSCOUT_CONTAINER_PARAMS += -e 'TRACE_FIRST_BLOCK=$(TRACE_FIRST_BLOCK)' endif ifdef TRACE_LAST_BLOCK BLOCKSCOUT_CONTAINER_PARAMS += -e 'TRACE_LAST_BLOCK=$(TRACE_LAST_BLOCK)' endif ifdef CACHE_TXS_COUNT_PERIOD BLOCKSCOUT_CONTAINER_PARAMS += -e 'CACHE_TXS_COUNT_PERIOD=$(CACHE_TXS_COUNT_PERIOD)' endif ifdef CACHE_ADDRESS_WITH_BALANCES_UPDATE_INTERVAL BLOCKSCOUT_CONTAINER_PARAMS += -e 'CACHE_ADDRESS_WITH_BALANCES_UPDATE_INTERVAL=$(CACHE_ADDRESS_WITH_BALANCES_UPDATE_INTERVAL)' endif ifdef SUPPORTED_CHAINS BLOCKSCOUT_CONTAINER_PARAMS += -e 'SUPPORTED_CHAINS=$(SUPPORTED_CHAINS)' endif ifdef CACHE_BLOCK_COUNT_PERIOD BLOCKSCOUT_CONTAINER_PARAMS += -e 'CACHE_BLOCK_COUNT_PERIOD=$(CACHE_BLOCK_COUNT_PERIOD)' endif ifdef CACHE_ADDRESS_SUM_PERIOD BLOCKSCOUT_CONTAINER_PARAMS += -e 'CACHE_ADDRESS_SUM_PERIOD=$(CACHE_ADDRESS_SUM_PERIOD)' endif ifdef UNCLES_IN_AVERAGE_BLOCK_TIME BLOCKSCOUT_CONTAINER_PARAMS += -e 'UNCLES_IN_AVERAGE_BLOCK_TIME=$(UNCLES_IN_AVERAGE_BLOCK_TIME)' endif ifdef CACHE_AVERAGE_BLOCK_PERIOD BLOCKSCOUT_CONTAINER_PARAMS += -e 'CACHE_AVERAGE_BLOCK_PERIOD=$(CACHE_AVERAGE_BLOCK_PERIOD)' endif ifdef CACHE_MARKET_HISTORY_PERIOD BLOCKSCOUT_CONTAINER_PARAMS += -e 'CACHE_MARKET_HISTORY_PERIOD=$(CACHE_MARKET_HISTORY_PERIOD)' endif ifdef DISABLE_WEBAPP BLOCKSCOUT_CONTAINER_PARAMS += -e 'DISABLE_WEBAPP=$(DISABLE_WEBAPP)' endif ifdef API_V1_READ_METHODS_DISABLED BLOCKSCOUT_CONTAINER_PARAMS += -e 'API_V1_READ_METHODS_DISABLED=$(API_V1_READ_METHODS_DISABLED)' endif ifdef API_V1_WRITE_METHODS_DISABLED BLOCKSCOUT_CONTAINER_PARAMS += -e 'API_V1_WRITE_METHODS_DISABLED=$(API_V1_WRITE_METHODS_DISABLED)' endif ifdef DISABLE_INDEXER BLOCKSCOUT_CONTAINER_PARAMS += -e 'DISABLE_INDEXER=$(DISABLE_INDEXER)' endif ifdef DISABLE_REALTIME_INDEXER BLOCKSCOUT_CONTAINER_PARAMS += -e 'DISABLE_REALTIME_INDEXER=$(DISABLE_REALTIME_INDEXER)' endif ifdef INDEXER_DISABLE_TOKEN_INSTANCE_REALTIME_FETCHER BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_DISABLE_TOKEN_INSTANCE_REALTIME_FETCHER=$(INDEXER_DISABLE_TOKEN_INSTANCE_REALTIME_FETCHER)' endif ifdef INDEXER_DISABLE_TOKEN_INSTANCE_RETRY_FETCHER BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_DISABLE_TOKEN_INSTANCE_RETRY_FETCHER=$(INDEXER_DISABLE_TOKEN_INSTANCE_RETRY_FETCHER)' endif ifdef INDEXER_DISABLE_TOKEN_INSTANCE_SANITIZE_FETCHER BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_DISABLE_TOKEN_INSTANCE_SANITIZE_FETCHER=$(INDEXER_DISABLE_TOKEN_INSTANCE_SANITIZE_FETCHER)' endif ifdef WEBAPP_URL BLOCKSCOUT_CONTAINER_PARAMS += -e 'WEBAPP_URL=$(WEBAPP_URL)' endif ifdef API_URL BLOCKSCOUT_CONTAINER_PARAMS += -e 'API_URL=$(API_URL)' endif ifdef CHAIN_SPEC_PATH BLOCKSCOUT_CONTAINER_PARAMS += -e 'CHAIN_SPEC_PATH=$(CHAIN_SPEC_PATH)' endif ifdef EMISSION_FORMAT BLOCKSCOUT_CONTAINER_PARAMS += -e 'EMISSION_FORMAT=$(EMISSION_FORMAT)' endif ifdef REWARDS_CONTRACT BLOCKSCOUT_CONTAINER_PARAMS += -e 'REWARDS_CONTRACT=$(REWARDS_CONTRACT)' endif ifdef SHOW_ADDRESS_MARKETCAP_PERCENTAGE BLOCKSCOUT_CONTAINER_PARAMS += -e 'SHOW_ADDRESS_MARKETCAP_PERCENTAGE=$(SHOW_ADDRESS_MARKETCAP_PERCENTAGE)' endif ifdef BLOCKSCOUT_PROTOCOL BLOCKSCOUT_CONTAINER_PARAMS += -e 'BLOCKSCOUT_PROTOCOL=$(BLOCKSCOUT_PROTOCOL)' endif ifdef BLOCKSCOUT_HOST BLOCKSCOUT_CONTAINER_PARAMS += -e 'BLOCKSCOUT_HOST=$(BLOCKSCOUT_HOST)' endif ifdef DECOMPILED_SMART_CONTRACT_TOKEN BLOCKSCOUT_CONTAINER_PARAMS += -e 'DECOMPILED_SMART_CONTRACT_TOKEN=$(DECOMPILED_SMART_CONTRACT_TOKEN)' endif ifdef CHECKSUM_ADDRESS_HASHES BLOCKSCOUT_CONTAINER_PARAMS += -e 'CHECKSUM_ADDRESS_HASHES=$(CHECKSUM_ADDRESS_HASHES)' endif ifdef CHECKSUM_FUNCTION BLOCKSCOUT_CONTAINER_PARAMS += -e 'CHECKSUM_FUNCTION=$(CHECKSUM_FUNCTION)' endif ifdef EXCHANGE_RATES_COIN BLOCKSCOUT_CONTAINER_PARAMS += -e 'EXCHANGE_RATES_COIN=$(EXCHANGE_RATES_COIN)' endif ifdef EXCHANGE_RATES_SOURCE BLOCKSCOUT_CONTAINER_PARAMS += -e 'EXCHANGE_RATES_SOURCE=$(EXCHANGE_RATES_SOURCE)' endif ifdef EXCHANGE_RATES_COINGECKO_COIN_ID BLOCKSCOUT_CONTAINER_PARAMS += -e 'EXCHANGE_RATES_COINGECKO_COIN_ID=$(EXCHANGE_RATES_COINGECKO_COIN_ID)' endif ifdef EXCHANGE_RATES_COINGECKO_API_KEY BLOCKSCOUT_CONTAINER_PARAMS += -e 'EXCHANGE_RATES_COINGECKO_API_KEY=$(EXCHANGE_RATES_COINGECKO_API_KEY)' endif ifdef EXCHANGE_RATES_COINGECKO_PLATFORM_ID BLOCKSCOUT_CONTAINER_PARAMS += -e 'EXCHANGE_RATES_COINGECKO_PLATFORM_ID=$(EXCHANGE_RATES_COINGECKO_PLATFORM_ID)' endif ifdef EXCHANGE_RATES_COINMARKETCAP_API_KEY BLOCKSCOUT_CONTAINER_PARAMS += -e 'EXCHANGE_RATES_COINMARKETCAP_API_KEY=$(EXCHANGE_RATES_COINMARKETCAP_API_KEY)' endif ifdef EXCHANGE_RATES_COINMARKETCAP_COIN_ID BLOCKSCOUT_CONTAINER_PARAMS += -e 'EXCHANGE_RATES_COINMARKETCAP_COIN_ID=$(EXCHANGE_RATES_COINMARKETCAP_COIN_ID)' endif ifdef DISABLE_EXCHANGE_RATES BLOCKSCOUT_CONTAINER_PARAMS += -e 'DISABLE_EXCHANGE_RATES=$(DISABLE_EXCHANGE_RATES)' endif ifdef TOKEN_EXCHANGE_RATE_INTERVAL BLOCKSCOUT_CONTAINER_PARAMS += -e 'TOKEN_EXCHANGE_RATE_INTERVAL=$(TOKEN_EXCHANGE_RATE_INTERVAL)' endif ifdef TOKEN_EXCHANGE_RATE_REFETCH_INTERVAL BLOCKSCOUT_CONTAINER_PARAMS += -e 'TOKEN_EXCHANGE_RATE_REFETCH_INTERVAL=$(TOKEN_EXCHANGE_RATE_REFETCH_INTERVAL)' endif ifdef TOKEN_EXCHANGE_RATE_MAX_BATCH_SIZE BLOCKSCOUT_CONTAINER_PARAMS += -e 'TOKEN_EXCHANGE_RATE_MAX_BATCH_SIZE=$(TOKEN_EXCHANGE_RATE_MAX_BATCH_SIZE)' endif ifdef DISABLE_TOKEN_EXCHANGE_RATE BLOCKSCOUT_CONTAINER_PARAMS += -e 'DISABLE_TOKEN_EXCHANGE_RATE=$(DISABLE_TOKEN_EXCHANGE_RATE)' endif ifdef SHOW_PRICE_CHART BLOCKSCOUT_CONTAINER_PARAMS += -e 'SHOW_PRICE_CHART=$(SHOW_PRICE_CHART)' endif ifdef SHOW_PRICE_CHART_LEGEND BLOCKSCOUT_CONTAINER_PARAMS += -e 'SHOW_PRICE_CHART_LEGEND=$(SHOW_PRICE_CHART_LEGEND)' endif ifdef SHOW_TXS_CHART BLOCKSCOUT_CONTAINER_PARAMS += -e 'SHOW_TXS_CHART=$(SHOW_TXS_CHART)' endif ifdef TXS_HISTORIAN_INIT_LAG BLOCKSCOUT_CONTAINER_PARAMS += -e 'TXS_HISTORIAN_INIT_LAG=$(TXS_HISTORIAN_INIT_LAG)' endif ifdef TXS_STATS_DAYS_TO_COMPILE_AT_INIT BLOCKSCOUT_CONTAINER_PARAMS += -e 'TXS_STATS_DAYS_TO_COMPILE_AT_INIT=$(TXS_STATS_DAYS_TO_COMPILE_AT_INIT)' endif ifdef APPS_MENU BLOCKSCOUT_CONTAINER_PARAMS += -e 'APPS_MENU=$(APPS_MENU)' endif ifdef EXTERNAL_APPS BLOCKSCOUT_CONTAINER_PARAMS += -e 'EXTERNAL_APPS=$(EXTERNAL_APPS)' endif ifdef GAS_PRICE BLOCKSCOUT_CONTAINER_PARAMS += -e 'GAS_PRICE=$(GAS_PRICE)' endif ifdef GAS_PRICE_ORACLE_NUM_OF_BLOCKS BLOCKSCOUT_CONTAINER_PARAMS += -e 'GAS_PRICE_ORACLE_NUM_OF_BLOCKS=$(GAS_PRICE_ORACLE_NUM_OF_BLOCKS)' endif ifdef GAS_PRICE_ORACLE_SAFELOW_PERCENTILE BLOCKSCOUT_CONTAINER_PARAMS += -e 'GAS_PRICE_ORACLE_SAFELOW_PERCENTILE=$(GAS_PRICE_ORACLE_SAFELOW_PERCENTILE)' endif ifdef GAS_PRICE_ORACLE_AVERAGE_PERCENTILE BLOCKSCOUT_CONTAINER_PARAMS += -e 'GAS_PRICE_ORACLE_AVERAGE_PERCENTILE=$(GAS_PRICE_ORACLE_AVERAGE_PERCENTILE)' endif ifdef GAS_PRICE_ORACLE_FAST_PERCENTILE BLOCKSCOUT_CONTAINER_PARAMS += -e 'GAS_PRICE_ORACLE_FAST_PERCENTILE=$(GAS_PRICE_ORACLE_FAST_PERCENTILE)' endif ifdef GAS_PRICE_ORACLE_CACHE_PERIOD BLOCKSCOUT_CONTAINER_PARAMS += -e 'GAS_PRICE_ORACLE_CACHE_PERIOD=$(GAS_PRICE_ORACLE_CACHE_PERIOD)' endif ifdef TOKEN_METADATA_UPDATE_INTERVAL BLOCKSCOUT_CONTAINER_PARAMS += -e 'TOKEN_METADATA_UPDATE_INTERVAL=$(TOKEN_METADATA_UPDATE_INTERVAL)' endif ifdef RESTRICTED_LIST BLOCKSCOUT_CONTAINER_PARAMS += -e 'RESTRICTED_LIST=$(RESTRICTED_LIST)' endif ifdef RESTRICTED_LIST_KEY BLOCKSCOUT_CONTAINER_PARAMS += -e 'RESTRICTED_LIST_KEY=$(RESTRICTED_LIST_KEY)' endif ifdef CACHE_ADDRESS_TRANSACTIONS_COUNTER_PERIOD BLOCKSCOUT_CONTAINER_PARAMS += -e 'CACHE_ADDRESS_TRANSACTIONS_COUNTER_PERIOD=$(CACHE_ADDRESS_TRANSACTIONS_COUNTER_PERIOD)' endif ifdef CACHE_ADDRESS_TRANSACTIONS_GAS_USAGE_COUNTER_PERIOD BLOCKSCOUT_CONTAINER_PARAMS += -e 'CACHE_ADDRESS_TRANSACTIONS_GAS_USAGE_COUNTER_PERIOD=$(CACHE_ADDRESS_TRANSACTIONS_GAS_USAGE_COUNTER_PERIOD)' endif ifdef CACHE_TOTAL_GAS_USAGE_PERIOD BLOCKSCOUT_CONTAINER_PARAMS += -e 'CACHE_TOTAL_GAS_USAGE_PERIOD=$(CACHE_TOTAL_GAS_USAGE_PERIOD)' endif ifdef CACHE_TOTAL_GAS_USAGE_COUNTER_ENABLED BLOCKSCOUT_CONTAINER_PARAMS += -e 'CACHE_TOTAL_GAS_USAGE_COUNTER_ENABLED=$(CACHE_TOTAL_GAS_USAGE_COUNTER_ENABLED)' endif ifdef DISABLE_LP_TOKENS_IN_MARKET_CAP BLOCKSCOUT_CONTAINER_PARAMS += -e 'DISABLE_LP_TOKENS_IN_MARKET_CAP=$(DISABLE_LP_TOKENS_IN_MARKET_CAP)' endif ifdef HIDE_BLOCK_MINER BLOCKSCOUT_CONTAINER_PARAMS += -e 'HIDE_BLOCK_MINER=$(HIDE_BLOCK_MINER)' endif ifdef COIN_BALANCE_HISTORY_DAYS BLOCKSCOUT_CONTAINER_PARAMS += -e 'COIN_BALANCE_HISTORY_DAYS=$(COIN_BALANCE_HISTORY_DAYS)' endif ifdef CACHE_ADDRESS_TOKENS_USD_SUM_PERIOD BLOCKSCOUT_CONTAINER_PARAMS += -e 'CACHE_ADDRESS_TOKENS_USD_SUM_PERIOD=$(CACHE_ADDRESS_TOKENS_USD_SUM_PERIOD)' endif ifdef SHOW_MAINTENANCE_ALERT BLOCKSCOUT_CONTAINER_PARAMS += -e 'SHOW_MAINTENANCE_ALERT=$(SHOW_MAINTENANCE_ALERT)' endif ifdef MAINTENANCE_ALERT_MESSAGE BLOCKSCOUT_CONTAINER_PARAMS += -e 'MAINTENANCE_ALERT_MESSAGE=$(MAINTENANCE_ALERT_MESSAGE)' endif ifdef SOURCIFY_INTEGRATION_ENABLED BLOCKSCOUT_CONTAINER_PARAMS += -e 'SOURCIFY_INTEGRATION_ENABLED=$(SOURCIFY_INTEGRATION_ENABLED)' endif ifdef SOURCIFY_SERVER_URL BLOCKSCOUT_CONTAINER_PARAMS += -e 'SOURCIFY_SERVER_URL=$(SOURCIFY_SERVER_URL)' endif ifdef SOURCIFY_REPO_URL BLOCKSCOUT_CONTAINER_PARAMS += -e 'SOURCIFY_REPO_URL=$(SOURCIFY_REPO_URL)' endif ifdef CHAIN_ID BLOCKSCOUT_CONTAINER_PARAMS += -e 'CHAIN_ID=$(CHAIN_ID)' endif ifdef JSON_RPC BLOCKSCOUT_CONTAINER_PARAMS += -e 'JSON_RPC=$(JSON_RPC)' endif ifdef MAX_SIZE_UNLESS_HIDE_ARRAY BLOCKSCOUT_CONTAINER_PARAMS += -e 'MAX_SIZE_UNLESS_HIDE_ARRAY=$(MAX_SIZE_UNLESS_HIDE_ARRAY)' endif ifdef DISPLAY_TOKEN_ICONS BLOCKSCOUT_CONTAINER_PARAMS += -e 'DISPLAY_TOKEN_ICONS=$(DISPLAY_TOKEN_ICONS)' endif ifdef SHOW_TENDERLY_LINK BLOCKSCOUT_CONTAINER_PARAMS += -e 'SHOW_TENDERLY_LINK=$(SHOW_TENDERLY_LINK)' endif ifdef TENDERLY_CHAIN_PATH BLOCKSCOUT_CONTAINER_PARAMS += -e 'TENDERLY_CHAIN_PATH=$(TENDERLY_CHAIN_PATH)' endif ifdef RE_CAPTCHA_SECRET_KEY BLOCKSCOUT_CONTAINER_PARAMS += -e 'RE_CAPTCHA_SECRET_KEY=$(RE_CAPTCHA_SECRET_KEY)' endif ifdef RE_CAPTCHA_CLIENT_KEY BLOCKSCOUT_CONTAINER_PARAMS += -e 'RE_CAPTCHA_CLIENT_KEY=$(RE_CAPTCHA_CLIENT_KEY)' endif ifdef RE_CAPTCHA_V3_SECRET_KEY BLOCKSCOUT_CONTAINER_PARAMS += -e 'RE_CAPTCHA_V3_SECRET_KEY=$(RE_CAPTCHA_V3_SECRET_KEY)' endif ifdef RE_CAPTCHA_V3_CLIENT_KEY BLOCKSCOUT_CONTAINER_PARAMS += -e 'RE_CAPTCHA_V3_CLIENT_KEY=$(RE_CAPTCHA_V3_CLIENT_KEY)' endif ifdef RE_CAPTCHA_DISABLED BLOCKSCOUT_CONTAINER_PARAMS += -e 'RE_CAPTCHA_DISABLED=$(RE_CAPTCHA_DISABLED)' endif ifdef CACHE_ADDRESS_TOKEN_TRANSFERS_COUNTER_PERIOD BLOCKSCOUT_CONTAINER_PARAMS += -e 'CACHE_ADDRESS_TOKEN_TRANSFERS_COUNTER_PERIOD=$(CACHE_ADDRESS_TOKEN_TRANSFERS_COUNTER_PERIOD)' endif ifdef API_RATE_LIMIT BLOCKSCOUT_CONTAINER_PARAMS += -e 'API_RATE_LIMIT=$(API_RATE_LIMIT)' endif ifdef API_RATE_LIMIT_BY_KEY BLOCKSCOUT_CONTAINER_PARAMS += -e 'API_RATE_LIMIT_BY_KEY=$(API_RATE_LIMIT_BY_KEY)' endif ifdef API_RATE_LIMIT_BY_WHITELISTED_IP BLOCKSCOUT_CONTAINER_PARAMS += -e 'API_RATE_LIMIT_BY_WHITELISTED_IP=$(API_RATE_LIMIT_BY_WHITELISTED_IP)' endif ifdef API_RATE_LIMIT_STATIC_API_KEY BLOCKSCOUT_CONTAINER_PARAMS += -e 'API_RATE_LIMIT_STATIC_API_KEY=$(API_RATE_LIMIT_STATIC_API_KEY)' endif ifdef API_RATE_LIMIT_WHITELISTED_IPS BLOCKSCOUT_CONTAINER_PARAMS += -e 'API_RATE_LIMIT_WHITELISTED_IPS=$(API_RATE_LIMIT_WHITELISTED_IPS)' endif ifdef API_RATE_LIMIT_DISABLED BLOCKSCOUT_CONTAINER_PARAMS += -e 'API_RATE_LIMIT_DISABLED=$(API_RATE_LIMIT_DISABLED)' endif ifdef API_RATE_LIMIT_HAMMER_REDIS_URL BLOCKSCOUT_CONTAINER_PARAMS += -e 'API_RATE_LIMIT_HAMMER_REDIS_URL=$(API_RATE_LIMIT_HAMMER_REDIS_URL)' endif ifdef API_RATE_LIMIT_IS_BLOCKSCOUT_BEHIND_PROXY BLOCKSCOUT_CONTAINER_PARAMS += -e 'API_RATE_LIMIT_IS_BLOCKSCOUT_BEHIND_PROXY=$(API_RATE_LIMIT_IS_BLOCKSCOUT_BEHIND_PROXY)' endif ifdef API_RATE_LIMIT_UI_V2_WITH_TOKEN BLOCKSCOUT_CONTAINER_PARAMS += -e 'API_RATE_LIMIT_UI_V2_WITH_TOKEN=$(API_RATE_LIMIT_UI_V2_WITH_TOKEN)' endif ifdef API_RATE_LIMIT_BY_IP BLOCKSCOUT_CONTAINER_PARAMS += -e 'API_RATE_LIMIT_BY_IP=$(API_RATE_LIMIT_BY_IP)' endif ifdef API_RATE_LIMIT_TIME_INTERVAL BLOCKSCOUT_CONTAINER_PARAMS += -e 'API_RATE_LIMIT_TIME_INTERVAL=$(API_RATE_LIMIT_TIME_INTERVAL)' endif ifdef API_RATE_LIMIT_BY_IP_TIME_INTERVAL BLOCKSCOUT_CONTAINER_PARAMS += -e 'API_RATE_LIMIT_BY_IP_TIME_INTERVAL=$(API_RATE_LIMIT_BY_IP_TIME_INTERVAL)' endif ifdef API_RATE_LIMIT_UI_V2_TOKEN_TTL_IN_SECONDS BLOCKSCOUT_CONTAINER_PARAMS += -e 'API_RATE_LIMIT_UI_V2_TOKEN_TTL_IN_SECONDS=$(API_RATE_LIMIT_UI_V2_TOKEN_TTL_IN_SECONDS)' endif ifdef TOKEN_BALANCE_ON_DEMAND_FETCHER_THRESHOLD BLOCKSCOUT_CONTAINER_PARAMS += -e 'TOKEN_BALANCE_ON_DEMAND_FETCHER_THRESHOLD=$(TOKEN_BALANCE_ON_DEMAND_FETCHER_THRESHOLD)' endif ifdef COIN_BALANCE_ON_DEMAND_FETCHER_THRESHOLD BLOCKSCOUT_CONTAINER_PARAMS += -e 'COIN_BALANCE_ON_DEMAND_FETCHER_THRESHOLD=$(COIN_BALANCE_ON_DEMAND_FETCHER_THRESHOLD)' endif ifdef ETHEREUM_JSONRPC_DEBUG_TRACE_TRANSACTION_TIMEOUT BLOCKSCOUT_CONTAINER_PARAMS += -e 'ETHEREUM_JSONRPC_DEBUG_TRACE_TRANSACTION_TIMEOUT=$(ETHEREUM_JSONRPC_DEBUG_TRACE_TRANSACTION_TIMEOUT)' endif ifdef ETHEREUM_JSONRPC_HTTP_TIMEOUT BLOCKSCOUT_CONTAINER_PARAMS += -e 'ETHEREUM_JSONRPC_HTTP_TIMEOUT=$(ETHEREUM_JSONRPC_HTTP_TIMEOUT)' endif ifdef FETCH_REWARDS_WAY BLOCKSCOUT_CONTAINER_PARAMS += -e 'FETCH_REWARDS_WAY=$(FETCH_REWARDS_WAY)' endif ifdef FOOTER_LOGO BLOCKSCOUT_CONTAINER_PARAMS += -e 'FOOTER_LOGO=$(FOOTER_LOGO)' endif ifdef FOOTER_CHAT_LINK BLOCKSCOUT_CONTAINER_PARAMS += -e 'FOOTER_CHAT_LINK=$(FOOTER_CHAT_LINK)' endif ifdef FOOTER_GITHUB_LINK BLOCKSCOUT_CONTAINER_PARAMS += -e 'FOOTER_GITHUB_LINK=$(FOOTER_GITHUB_LINK)' endif ifdef FOOTER_FORUM_LINK_ENABLED BLOCKSCOUT_CONTAINER_PARAMS += -e 'FOOTER_FORUM_LINK_ENABLED=$(FOOTER_FORUM_LINK_ENABLED)' endif ifdef FOOTER_FORUM_LINK BLOCKSCOUT_CONTAINER_PARAMS += -e 'FOOTER_FORUM_LINK=$(FOOTER_FORUM_LINK)' endif ifdef FOOTER_TELEGRAM_LINK_ENABLED BLOCKSCOUT_CONTAINER_PARAMS += -e 'FOOTER_TELEGRAM_LINK_ENABLED=$(FOOTER_TELEGRAM_LINK_ENABLED)' endif ifdef FOOTER_TELEGRAM_LINK BLOCKSCOUT_CONTAINER_PARAMS += -e 'FOOTER_TELEGRAM_LINK=$(FOOTER_TELEGRAM_LINK)' endif ifdef FOOTER_LINK_TO_OTHER_EXPLORERS BLOCKSCOUT_CONTAINER_PARAMS += -e 'FOOTER_LINK_TO_OTHER_EXPLORERS=$(FOOTER_LINK_TO_OTHER_EXPLORERS)' endif ifdef FOOTER_OTHER_EXPLORERS BLOCKSCOUT_CONTAINER_PARAMS += -e 'FOOTER_OTHER_EXPLORERS=$(FOOTER_OTHER_EXPLORERS)' endif ifdef NETWORK_ICON BLOCKSCOUT_CONTAINER_PARAMS += -e 'NETWORK_ICON=$(NETWORK_ICON)' endif ifdef LOGO_TEXT BLOCKSCOUT_CONTAINER_PARAMS += -e 'LOGO_TEXT=$(LOGO_TEXT)' endif ifdef SHOW_TESTNET_LABEL BLOCKSCOUT_CONTAINER_PARAMS += -e 'SHOW_TESTNET_LABEL=$(SHOW_TESTNET_LABEL)' endif ifdef TESTNET_LABEL_TEXT BLOCKSCOUT_CONTAINER_PARAMS += -e 'TESTNET_LABEL_TEXT=$(TESTNET_LABEL_TEXT)' endif ifdef CUSTOM_CONTRACT_ADDRESSES_DARK_FOREST BLOCKSCOUT_CONTAINER_PARAMS += -e 'CUSTOM_CONTRACT_ADDRESSES_DARK_FOREST=$(CUSTOM_CONTRACT_ADDRESSES_DARK_FOREST)' endif ifdef CUSTOM_CONTRACT_ADDRESSES_DARK_FOREST_V_0_5 BLOCKSCOUT_CONTAINER_PARAMS += -e 'CUSTOM_CONTRACT_ADDRESSES_DARK_FOREST_V_0_5=$(CUSTOM_CONTRACT_ADDRESSES_DARK_FOREST_V_0_5)' endif ifdef CUSTOM_CONTRACT_ADDRESSES_CIRCLES BLOCKSCOUT_CONTAINER_PARAMS += -e 'CUSTOM_CONTRACT_ADDRESSES_CIRCLES=$(CUSTOM_CONTRACT_ADDRESSES_CIRCLES)' endif ifdef HEALTHY_BLOCKS_PERIOD BLOCKSCOUT_CONTAINER_PARAMS += -e 'HEALTHY_BLOCKS_PERIOD=$(HEALTHY_BLOCKS_PERIOD)' endif ifdef EXCHANGE_RATES_FETCH_BTC_VALUE BLOCKSCOUT_CONTAINER_PARAMS += -e 'EXCHANGE_RATES_FETCH_BTC_VALUE=$(EXCHANGE_RATES_FETCH_BTC_VALUE)' endif ifdef TXS_STATS_ENABLED BLOCKSCOUT_CONTAINER_PARAMS += -e 'TXS_STATS_ENABLED=$(TXS_STATS_ENABLED)' endif ifdef INDEXER_MEMORY_LIMIT BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_MEMORY_LIMIT=$(INDEXER_MEMORY_LIMIT)' endif ifdef INDEXER_DISABLE_PENDING_TRANSACTIONS_FETCHER BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_DISABLE_PENDING_TRANSACTIONS_FETCHER=$(INDEXER_DISABLE_PENDING_TRANSACTIONS_FETCHER)' endif ifdef INDEXER_DISABLE_INTERNAL_TRANSACTIONS_FETCHER BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_DISABLE_INTERNAL_TRANSACTIONS_FETCHER=$(INDEXER_DISABLE_INTERNAL_TRANSACTIONS_FETCHER)' endif ifdef INDEXER_DISABLE_BLOCK_REWARD_FETCHER BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_DISABLE_BLOCK_REWARD_FETCHER=$(INDEXER_DISABLE_BLOCK_REWARD_FETCHER)' endif ifdef INDEXER_DISABLE_ADDRESS_COIN_BALANCE_FETCHER BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_DISABLE_ADDRESS_COIN_BALANCE_FETCHER=$(INDEXER_DISABLE_ADDRESS_COIN_BALANCE_FETCHER)' endif ifdef INDEXER_DISABLE_CATALOGED_TOKEN_UPDATER_FETCHER BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_DISABLE_CATALOGED_TOKEN_UPDATER_FETCHER=$(INDEXER_DISABLE_CATALOGED_TOKEN_UPDATER_FETCHER)' endif ifdef INDEXER_DISABLE_EMPTY_BLOCKS_SANITIZER BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_DISABLE_EMPTY_BLOCKS_SANITIZER=$(INDEXER_DISABLE_EMPTY_BLOCKS_SANITIZER)' endif ifdef INDEXER_CATCHUP_BLOCKS_BATCH_SIZE BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_CATCHUP_BLOCKS_BATCH_SIZE=$(INDEXER_CATCHUP_BLOCKS_BATCH_SIZE)' endif ifdef INDEXER_CATCHUP_BLOCKS_CONCURRENCY BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_CATCHUP_BLOCKS_CONCURRENCY=$(INDEXER_CATCHUP_BLOCKS_CONCURRENCY)' endif ifdef INDEXER_CATCHUP_BLOCK_INTERVAL BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_CATCHUP_BLOCK_INTERVAL=$(INDEXER_CATCHUP_BLOCK_INTERVAL)' endif ifdef INDEXER_INTERNAL_TRANSACTIONS_BATCH_SIZE BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_INTERNAL_TRANSACTIONS_BATCH_SIZE=$(INDEXER_INTERNAL_TRANSACTIONS_BATCH_SIZE)' endif ifdef INDEXER_INTERNAL_TRANSACTIONS_CONCURRENCY BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_INTERNAL_TRANSACTIONS_CONCURRENCY=$(INDEXER_INTERNAL_TRANSACTIONS_CONCURRENCY)' endif ifdef INDEXER_BLOCK_REWARD_BATCH_SIZE BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_BLOCK_REWARD_BATCH_SIZE=$(INDEXER_BLOCK_REWARD_BATCH_SIZE)' endif ifdef INDEXER_BLOCK_REWARD_CONCURRENCY BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_BLOCK_REWARD_CONCURRENCY=$(INDEXER_BLOCK_REWARD_CONCURRENCY)' endif ifdef INDEXER_TOKEN_INSTANCE_RETRY_REFETCH_INTERVAL BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_TOKEN_INSTANCE_RETRY_REFETCH_INTERVAL=$(INDEXER_TOKEN_INSTANCE_RETRY_REFETCH_INTERVAL)' endif ifdef INDEXER_TOKEN_INSTANCE_RETRY_CONCURRENCY BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_TOKEN_INSTANCE_RETRY_CONCURRENCY=$(INDEXER_TOKEN_INSTANCE_RETRY_CONCURRENCY)' endif ifdef INDEXER_TOKEN_INSTANCE_REALTIME_CONCURRENCY BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_TOKEN_INSTANCE_REALTIME_CONCURRENCY=$(INDEXER_TOKEN_INSTANCE_REALTIME_CONCURRENCY)' endif ifdef INDEXER_TOKEN_INSTANCE_SANITIZE_CONCURRENCY BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_TOKEN_INSTANCE_SANITIZE_CONCURRENCY=$(INDEXER_TOKEN_INSTANCE_SANITIZE_CONCURRENCY)' endif ifdef INDEXER_COIN_BALANCES_BATCH_SIZE BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_RECEIPTS_BATCH_SIZE=$(INDEXER_RECEIPTS_BATCH_SIZE)' endif ifdef INDEXER_COIN_BALANCES_CONCURRENCY BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_RECEIPTS_CONCURRENCY=$(INDEXER_RECEIPTS_CONCURRENCY)' endif ifdef INDEXER_RECEIPTS_BATCH_SIZE BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_RECEIPTS_BATCH_SIZE=$(INDEXER_RECEIPTS_BATCH_SIZE)' endif ifdef INDEXER_RECEIPTS_CONCURRENCY BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_RECEIPTS_CONCURRENCY=$(INDEXER_RECEIPTS_CONCURRENCY)' endif ifdef INDEXER_EMPTY_BLOCKS_SANITIZER_BATCH_SIZE BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_EMPTY_BLOCKS_SANITIZER_BATCH_SIZE=$(INDEXER_EMPTY_BLOCKS_SANITIZER_BATCH_SIZE)' endif ifdef INDEXER_TOKEN_BALANCES_BATCH_SIZE BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_TOKEN_BALANCES_BATCH_SIZE=$(INDEXER_TOKEN_BALANCES_BATCH_SIZE)' endif ifdef INDEXER_REALTIME_FETCHER_MAX_GAP BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_REALTIME_FETCHER_MAX_GAP=$(INDEXER_REALTIME_FETCHER_MAX_GAP)' endif ifdef INDEXER_FETCHER_INIT_QUERY_LIMIT BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_FETCHER_INIT_QUERY_LIMIT=$(INDEXER_FETCHER_INIT_QUERY_LIMIT)' endif ifdef INDEXER_INTERNAL_TRANSACTIONS_TRACER_TYPE BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_INTERNAL_TRANSACTIONS_TRACER_TYPE=$(INDEXER_INTERNAL_TRANSACTIONS_TRACER_TYPE)' endif ifdef INDEXER_DISABLE_WITHDRAWALS_FETCHER BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_DISABLE_WITHDRAWALS_FETCHER=$(INDEXER_DISABLE_WITHDRAWALS_FETCHER)' endif ifdef WITHDRAWALS_FIRST_BLOCK BLOCKSCOUT_CONTAINER_PARAMS += -e 'WITHDRAWALS_FIRST_BLOCK=$(WITHDRAWALS_FIRST_BLOCK)' endif ifdef TOKEN_ID_MIGRATION_FIRST_BLOCK BLOCKSCOUT_CONTAINER_PARAMS += -e 'TOKEN_ID_MIGRATION_FIRST_BLOCK=$(TOKEN_ID_MIGRATION_FIRST_BLOCK)' endif ifdef TOKEN_ID_MIGRATION_CONCURRENCY BLOCKSCOUT_CONTAINER_PARAMS += -e 'TOKEN_ID_MIGRATION_CONCURRENCY=$(TOKEN_ID_MIGRATION_CONCURRENCY)' endif ifdef TOKEN_ID_MIGRATION_BATCH_SIZE BLOCKSCOUT_CONTAINER_PARAMS += -e 'TOKEN_ID_MIGRATION_BATCH_SIZE=$(TOKEN_ID_MIGRATION_BATCH_SIZE)' endif ifdef INDEXER_TX_ACTIONS_ENABLE BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_TX_ACTIONS_ENABLE=$(INDEXER_TX_ACTIONS_ENABLE)' endif ifdef INDEXER_TX_ACTIONS_MAX_TOKEN_CACHE_SIZE BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_TX_ACTIONS_MAX_TOKEN_CACHE_SIZE=$(INDEXER_TX_ACTIONS_MAX_TOKEN_CACHE_SIZE)' endif ifdef INDEXER_TX_ACTIONS_REINDEX_FIRST_BLOCK BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_TX_ACTIONS_REINDEX_FIRST_BLOCK=$(INDEXER_TX_ACTIONS_REINDEX_FIRST_BLOCK)' endif ifdef INDEXER_TX_ACTIONS_REINDEX_LAST_BLOCK BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_TX_ACTIONS_REINDEX_LAST_BLOCK=$(INDEXER_TX_ACTIONS_REINDEX_LAST_BLOCK)' endif ifdef INDEXER_TX_ACTIONS_REINDEX_PROTOCOLS BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_TX_ACTIONS_REINDEX_PROTOCOLS=$(INDEXER_TX_ACTIONS_REINDEX_PROTOCOLS)' endif ifdef INDEXER_TX_ACTIONS_AAVE_V3_POOL_CONTRACT BLOCKSCOUT_CONTAINER_PARAMS += -e 'INDEXER_TX_ACTIONS_AAVE_V3_POOL_CONTRACT=$(INDEXER_TX_ACTIONS_AAVE_V3_POOL_CONTRACT)' endif ifdef SECRET_KEY_BASE BLOCKSCOUT_CONTAINER_PARAMS += -e 'SECRET_KEY_BASE=$(SECRET_KEY_BASE)' endif ifdef PORT BLOCKSCOUT_CONTAINER_PARAMS += -e 'PORT=$(PORT)' endif ifdef DATABASE_READ_ONLY_API_URL BLOCKSCOUT_CONTAINER_PARAMS += -e 'DATABASE_READ_ONLY_API_URL=$(DATABASE_READ_ONLY_API_URL)' endif ifdef POOL_SIZE_API BLOCKSCOUT_CONTAINER_PARAMS += -e 'POOL_SIZE_API=$(POOL_SIZE_API)' endif ifdef MICROSERVICE_SC_VERIFIER_ENABLED BLOCKSCOUT_CONTAINER_PARAMS += -e 'MICROSERVICE_SC_VERIFIER_ENABLED=$(MICROSERVICE_SC_VERIFIER_ENABLED)' endif ifdef MICROSERVICE_SC_VERIFIER_URL BLOCKSCOUT_CONTAINER_PARAMS += -e 'MICROSERVICE_SC_VERIFIER_URL=$(MICROSERVICE_SC_VERIFIER_URL)' endif ifdef MICROSERVICE_SC_VERIFIER_TYPE BLOCKSCOUT_CONTAINER_PARAMS += -e 'MICROSERVICE_SC_VERIFIER_TYPE=$(MICROSERVICE_SC_VERIFIER_TYPE)' endif ifdef MICROSERVICE_ETH_BYTECODE_DB_INTERVAL_BETWEEN_LOOKUPS BLOCKSCOUT_CONTAINER_PARAMS += -e 'MICROSERVICE_ETH_BYTECODE_DB_INTERVAL_BETWEEN_LOOKUPS=$(MICROSERVICE_ETH_BYTECODE_DB_INTERVAL_BETWEEN_LOOKUPS)' endif ifdef MICROSERVICE_VISUALIZE_SOL2UML_ENABLED BLOCKSCOUT_CONTAINER_PARAMS += -e 'MICROSERVICE_VISUALIZE_SOL2UML_ENABLED=$(MICROSERVICE_VISUALIZE_SOL2UML_ENABLED)' endif ifdef MICROSERVICE_VISUALIZE_SOL2UML_URL BLOCKSCOUT_CONTAINER_PARAMS += -e 'MICROSERVICE_VISUALIZE_SOL2UML_URL=$(MICROSERVICE_VISUALIZE_SOL2UML_URL)' endif ifdef MICROSERVICE_SIG_PROVIDER_ENABLED BLOCKSCOUT_CONTAINER_PARAMS += -e 'MICROSERVICE_SIG_PROVIDER_ENABLED=$(MICROSERVICE_SIG_PROVIDER_ENABLED)' endif ifdef MICROSERVICE_SIG_PROVIDER_URL BLOCKSCOUT_CONTAINER_PARAMS += -e 'MICROSERVICE_SIG_PROVIDER_URL=$(MICROSERVICE_SIG_PROVIDER_URL)' endif ifdef ACCOUNT_ENABLED BLOCKSCOUT_CONTAINER_PARAMS += -e 'ACCOUNT_ENABLED=$(ACCOUNT_ENABLED)' endif ifdef ACCOUNT_REDIS_URL BLOCKSCOUT_CONTAINER_PARAMS += -e 'ACCOUNT_REDIS_URL=$(ACCOUNT_REDIS_URL)' endif ifdef COIN_NAME BLOCKSCOUT_CONTAINER_PARAMS += -e 'COIN_NAME=$(COIN_NAME)' endif ifdef ACCOUNT_AUTH0_DOMAIN BLOCKSCOUT_CONTAINER_PARAMS += -e 'ACCOUNT_AUTH0_DOMAIN=$(ACCOUNT_AUTH0_DOMAIN)' endif ifdef ACCOUNT_AUTH0_CLIENT_ID BLOCKSCOUT_CONTAINER_PARAMS += -e 'ACCOUNT_AUTH0_CLIENT_ID=$(ACCOUNT_AUTH0_CLIENT_ID)' endif ifdef ACCOUNT_AUTH0_CLIENT_SECRET BLOCKSCOUT_CONTAINER_PARAMS += -e 'ACCOUNT_AUTH0_CLIENT_SECRET=$(ACCOUNT_AUTH0_CLIENT_SECRET)' endif ifdef ACCOUNT_SENDGRID_API_KEY BLOCKSCOUT_CONTAINER_PARAMS += -e 'ACCOUNT_SENDGRID_API_KEY=$(ACCOUNT_SENDGRID_API_KEY)' endif ifdef ACCOUNT_SENDGRID_SENDER BLOCKSCOUT_CONTAINER_PARAMS += -e 'ACCOUNT_SENDGRID_SENDER=$(ACCOUNT_SENDGRID_SENDER)' endif ifdef ACCOUNT_SENDGRID_TEMPLATE BLOCKSCOUT_CONTAINER_PARAMS += -e 'ACCOUNT_SENDGRID_TEMPLATE=$(ACCOUNT_SENDGRID_TEMPLATE)' endif ifdef ACCOUNT_PUBLIC_TAGS_AIRTABLE_URL BLOCKSCOUT_CONTAINER_PARAMS += -e 'ACCOUNT_PUBLIC_TAGS_AIRTABLE_URL=$(ACCOUNT_PUBLIC_TAGS_AIRTABLE_URL)' endif ifdef ACCOUNT_PUBLIC_TAGS_AIRTABLE_API_KEY BLOCKSCOUT_CONTAINER_PARAMS += -e 'ACCOUNT_PUBLIC_TAGS_AIRTABLE_API_KEY=$(ACCOUNT_PUBLIC_TAGS_AIRTABLE_API_KEY)' endif ifdef ACCOUNT_DATABASE_URL BLOCKSCOUT_CONTAINER_PARAMS += -e 'ACCOUNT_DATABASE_URL=$(ACCOUNT_DATABASE_URL)' endif ifdef ACCOUNT_POOL_SIZE BLOCKSCOUT_CONTAINER_PARAMS += -e 'ACCOUNT_POOL_SIZE=$(ACCOUNT_POOL_SIZE)' endif ifdef ACCOUNT_CLOAK_KEY BLOCKSCOUT_CONTAINER_PARAMS += -e 'ACCOUNT_CLOAK_KEY=$(ACCOUNT_CLOAK_KEY)' endif ifdef MIXPANEL_TOKEN BLOCKSCOUT_CONTAINER_PARAMS += -e 'MIXPANEL_TOKEN=$(MIXPANEL_TOKEN)' endif ifdef MIXPANEL_URL BLOCKSCOUT_CONTAINER_PARAMS += -e 'MIXPANEL_URL=$(MIXPANEL_URL)' endif ifdef AMPLITUDE_API_KEY BLOCKSCOUT_CONTAINER_PARAMS += -e 'AMPLITUDE_API_KEY=$(AMPLITUDE_API_KEY)' endif ifdef AMPLITUDE_URL BLOCKSCOUT_CONTAINER_PARAMS += -e 'AMPLITUDE_URL=$(AMPLITUDE_URL)' endif ifdef DECODE_NOT_A_CONTRACT_CALLS BLOCKSCOUT_CONTAINER_PARAMS += -e 'DECODE_NOT_A_CONTRACT_CALLS=$(DECODE_NOT_A_CONTRACT_CALLS)' endif ifdef CONTRACT_VERIFICATION_ALLOWED_SOLIDITY_EVM_VERSIONS BLOCKSCOUT_CONTAINER_PARAMS += -e 'CONTRACT_VERIFICATION_ALLOWED_SOLIDITY_EVM_VERSIONS=$(CONTRACT_VERIFICATION_ALLOWED_SOLIDITY_EVM_VERSIONS)' endif ifdef CONTRACT_VERIFICATION_ALLOWED_VYPER_EVM_VERSIONS BLOCKSCOUT_CONTAINER_PARAMS += -e 'CONTRACT_VERIFICATION_ALLOWED_VYPER_EVM_VERSIONS=$(CONTRACT_VERIFICATION_ALLOWED_VYPER_EVM_VERSIONS)' endif ifdef CONTRACT_VERIFICATION_MAX_LIBRARIES BLOCKSCOUT_CONTAINER_PARAMS += -e 'CONTRACT_VERIFICATION_MAX_LIBRARIES=$(CONTRACT_VERIFICATION_MAX_LIBRARIES)' endif ifdef CONTRACT_MAX_STRING_LENGTH_WITHOUT_TRIMMING BLOCKSCOUT_CONTAINER_PARAMS += -e 'CONTRACT_MAX_STRING_LENGTH_WITHOUT_TRIMMING=$(CONTRACT_MAX_STRING_LENGTH_WITHOUT_TRIMMING)' endif ifdef CONTRACT_DISABLE_INTERACTION BLOCKSCOUT_CONTAINER_PARAMS += -e 'CONTRACT_DISABLE_INTERACTION=$(CONTRACT_DISABLE_INTERACTION)' endif ifdef EIP_1559_ELASTICITY_MULTIPLIER BLOCKSCOUT_CONTAINER_PARAMS += -e 'EIP_1559_ELASTICITY_MULTIPLIER=$(EIP_1559_ELASTICITY_MULTIPLIER)' endif ifdef API_SENSITIVE_ENDPOINTS_KEY BLOCKSCOUT_CONTAINER_PARAMS += -e 'API_SENSITIVE_ENDPOINTS_KEY=$(API_SENSITIVE_ENDPOINTS_KEY)' endif ifdef ACCOUNT_VERIFICATION_EMAIL_RESEND_INTERVAL BLOCKSCOUT_CONTAINER_PARAMS += -e 'ACCOUNT_VERIFICATION_EMAIL_RESEND_INTERVAL=$(ACCOUNT_VERIFICATION_EMAIL_RESEND_INTERVAL)' endif HAS_BLOCKSCOUT_IMAGE := $(shell docker images | grep -sw "${BS_CONTAINER_IMAGE} ") build: @echo "==> Checking for blockscout image $(BS_CONTAINER_IMAGE)" ifdef HAS_BLOCKSCOUT_IMAGE @echo "==> Image exist. Using $(BS_CONTAINER_IMAGE)" else @echo "==> No image found, trying to build one..." @docker build -f ./Dockerfile --build-arg RELEASE_VERSION=$(RELEASE_VERSION) -t $(BS_CONTAINER_IMAGE) ../ endif migrate_only: @echo "==> Running migrations" @docker run --rm \ $(BLOCKSCOUT_CONTAINER_PARAMS) \ $(BS_CONTAINER_IMAGE) /bin/sh -c "echo $$MIX_ENV && ./bin/blockscout eval \"Elixir.Explorer.ReleaseTasks.create_and_migrate()\"" migrate: build postgres @$(MAKE) -f $(THIS_FILE) migrate_only PG_EXIST := $(shell docker ps -a --no-trunc --filter name=^/${PG_CONTAINER_NAME}$ | grep ${PG_CONTAINER_NAME}) PG_STARTED := $(shell docker ps --no-trunc --filter name=^/${PG_CONTAINER_NAME}$ | grep ${PG_CONTAINER_NAME}) postgres: ifdef DATABASE_URL @echo "==> DATABASE_URL of external DB provided. There is no need to start a container for DB." @$(MAKE) -f $(THIS_FILE) migrate_only else ifdef PG_EXIST @echo "==> Checking PostrgeSQL container" ifdef PG_STARTED @echo "==> PostgreSQL Already started" @$(MAKE) -f $(THIS_FILE) migrate_only else @echo "==> Starting PostgreSQL container" @docker start $(PG_CONTAINER_NAME) @$(MAKE) -f $(THIS_FILE) migrate_only endif else @echo "==> Creating new PostgreSQL container" @docker run -d --name $(PG_CONTAINER_NAME) \ -e POSTGRES_PASSWORD="" \ -e POSTGRES_USER="postgres" \ -e POSTGRES_HOST_AUTH_METHOD="trust" \ -p 5432:5432 \ $(PG_CONTAINER_IMAGE) @sleep 1 @$(MAKE) -f $(THIS_FILE) migrate_only endif endif start: build postgres @echo "==> Starting blockscout" @docker run --rm --name $(BS_CONTAINER_NAME) \ $(BLOCKSCOUT_CONTAINER_PARAMS) \ -p 4000:4000 \ $(BS_CONTAINER_IMAGE) /bin/sh -c "./bin/blockscout start" BS_STARTED := $(shell docker ps --no-trunc --filter name=^/${BS_CONTAINER_NAME}$) stop: ifdef BS_STARTED @echo "==> Stopping BlockScout container." @docker stop $(BS_CONTAINER_NAME) @echo "==> BlockScout container stopped." else @echo "==> BlockScout container already stopped before." endif ifdef PG_STARTED @echo "==> Stopping Postgres container." @docker stop $(PG_CONTAINER_NAME) @echo "==> Postgres container stopped." else @echo "==> Postgres container already stopped before." endif run: start docker-login: ## login to DockerHub with credentials found in env docker login -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD} # Docker release - build, tag and push the container pre-release: build publish ## Make a release by building and publishing the `{version}` ans `latest` tagged containers to hub release: build publish-stable ## Make a release by building and publishing the `{version}` ans `latest` tagged containers to hub # Docker publish publish: docker-login publish-latest publish-version ## publish the `{version}` ans `latest` tagged containers to hub publish-stable: docker-login publish-latest publish-stable-version ## publish the `{version}` ans `latest` tagged containers to hub publish-latest: tag-latest ## publish the `latest` tagged container to hub @echo 'publish latest to $(DOCKER_REPO)' docker push $(BS_CONTAINER_IMAGE):latest publish-version: tag-version ## publish the `{version}` tagged container to hub @echo 'publish $(TAG) to $(DOCKER_REPO)' docker push $(BS_CONTAINER_IMAGE):$(TAG) publish-stable-version: tag-stable-version ## publish the `{version}` tagged container to hub @echo 'publish $(STABLE_TAG) to $(DOCKER_REPO)' docker push $(BS_CONTAINER_IMAGE):$(STABLE_TAG) # Docker tagging tag: tag-latest tag-version ## Generate container tags for the `{version}` ans `latest` tags tag-stable: tag-latest tag-stable-version ## Generate container tags for the `{version}` ans `latest` tags tag-latest: ## Generate container `latest` tag @echo 'create latest tag' docker tag $(BS_CONTAINER_IMAGE) $(BS_CONTAINER_IMAGE):latest tag-version: ## Generate container `{version}` tag @echo 'create tag $(TAG)' docker tag $(BS_CONTAINER_IMAGE) $(BS_CONTAINER_IMAGE):$(TAG) tag-stable-version: ## Generate container `{version}` tag @echo 'create tag $(STABLE_TAG)' docker tag $(BS_CONTAINER_IMAGE) $(BS_CONTAINER_IMAGE):$(STABLE_TAG) .PHONY: build \ migrate \ start \ stop \ postgres \ run \ docker-login \ release \ publish \ publish-latest \ publish-version \ tag \ tag-latest \ tag-version