2021-07-19 10:31:18 +00:00
|
|
|
import os
|
2023-07-31 12:36:48 +00:00
|
|
|
from typing import Dict, Optional
|
2021-07-19 10:31:18 +00:00
|
|
|
|
2021-07-21 14:30:29 +00:00
|
|
|
from bugout.app import Bugout
|
2023-06-15 11:58:10 +00:00
|
|
|
from moonstreamdb.blockchain import AvailableBlockchainType
|
2023-02-14 14:58:10 +00:00
|
|
|
|
2021-07-21 14:30:29 +00:00
|
|
|
# Bugout
|
2021-08-03 11:41:51 +00:00
|
|
|
BUGOUT_BROOD_URL = os.environ.get("BUGOUT_BROOD_URL", "https://auth.bugout.dev")
|
|
|
|
BUGOUT_SPIRE_URL = os.environ.get("BUGOUT_SPIRE_URL", "https://spire.bugout.dev")
|
2023-10-26 17:12:13 +00:00
|
|
|
BUGOUT_SPIRE_EXTERNAL_URL = os.environ.get(
|
|
|
|
"BUGOUT_SPIRE_EXTERNAL_URL", "https://spire.bugout.dev"
|
|
|
|
)
|
2021-10-26 16:07:33 +00:00
|
|
|
|
|
|
|
|
2023-10-26 17:12:13 +00:00
|
|
|
bugout_client = Bugout(
|
|
|
|
brood_api_url=BUGOUT_BROOD_URL, spire_api_url=BUGOUT_SPIRE_EXTERNAL_URL
|
|
|
|
)
|
2023-04-27 16:04:07 +00:00
|
|
|
|
2021-08-12 18:38:15 +00:00
|
|
|
BUGOUT_REQUEST_TIMEOUT_SECONDS = 5
|
|
|
|
|
2021-09-01 13:43:44 +00:00
|
|
|
HUMBUG_REPORTER_BACKEND_TOKEN = os.environ.get("HUMBUG_REPORTER_BACKEND_TOKEN")
|
2021-09-01 12:03:44 +00:00
|
|
|
|
2021-07-28 17:28:17 +00:00
|
|
|
# Default value is "" instead of None so that mypy understands that MOONSTREAM_APPLICATION_ID is a string
|
|
|
|
MOONSTREAM_APPLICATION_ID = os.environ.get("MOONSTREAM_APPLICATION_ID", "")
|
|
|
|
if MOONSTREAM_APPLICATION_ID == "":
|
2021-07-21 14:30:29 +00:00
|
|
|
raise ValueError("MOONSTREAM_APPLICATION_ID environment variable must be set")
|
|
|
|
|
2021-08-20 18:14:21 +00:00
|
|
|
MOONSTREAM_DATA_JOURNAL_ID = os.environ.get("MOONSTREAM_DATA_JOURNAL_ID", "")
|
|
|
|
if MOONSTREAM_DATA_JOURNAL_ID == "":
|
2021-07-21 14:30:29 +00:00
|
|
|
raise ValueError("MOONSTREAM_DATA_JOURNAL_ID environment variable must be set")
|
|
|
|
|
2022-02-16 00:33:22 +00:00
|
|
|
|
|
|
|
MOONSTREAM_QUERIES_JOURNAL_ID = os.environ.get("MOONSTREAM_QUERIES_JOURNAL_ID", "")
|
|
|
|
if MOONSTREAM_DATA_JOURNAL_ID == "":
|
|
|
|
raise ValueError("MOONSTREAM_QUERIES_JOURNAL_ID environment variable must be set")
|
|
|
|
|
|
|
|
|
2021-08-10 13:10:05 +00:00
|
|
|
MOONSTREAM_ADMIN_ACCESS_TOKEN = os.environ.get("MOONSTREAM_ADMIN_ACCESS_TOKEN", "")
|
|
|
|
if MOONSTREAM_ADMIN_ACCESS_TOKEN == "":
|
2021-08-03 12:31:46 +00:00
|
|
|
raise ValueError("MOONSTREAM_ADMIN_ACCESS_TOKEN environment variable must be set")
|
2021-07-28 13:42:50 +00:00
|
|
|
|
2021-07-19 10:31:18 +00:00
|
|
|
# Origin
|
2021-07-21 16:57:47 +00:00
|
|
|
RAW_ORIGINS = os.environ.get("MOONSTREAM_CORS_ALLOWED_ORIGINS")
|
|
|
|
if RAW_ORIGINS is None:
|
2021-07-19 10:31:18 +00:00
|
|
|
raise ValueError(
|
2021-07-21 14:30:29 +00:00
|
|
|
"MOONSTREAM_CORS_ALLOWED_ORIGINS environment variable must be set (comma-separated list of CORS allowed origins)"
|
2021-07-19 10:31:18 +00:00
|
|
|
)
|
2021-07-21 16:57:47 +00:00
|
|
|
ORIGINS = RAW_ORIGINS.split(",")
|
2021-07-19 10:31:18 +00:00
|
|
|
|
|
|
|
# OpenAPI
|
|
|
|
DOCS_TARGET_PATH = "docs"
|
2021-08-06 14:03:24 +00:00
|
|
|
|
2021-08-09 18:30:44 +00:00
|
|
|
DEFAULT_STREAM_TIMEINTERVAL = 5 * 60
|
2021-08-23 13:47:33 +00:00
|
|
|
|
2021-11-30 14:23:13 +00:00
|
|
|
HUMBUG_TXPOOL_CLIENT_ID = os.environ.get(
|
|
|
|
"HUMBUG_TXPOOL_CLIENT_ID", "client:ethereum-txpool-crawler-0"
|
2021-09-28 15:08:56 +00:00
|
|
|
)
|
|
|
|
|
2021-08-23 13:47:33 +00:00
|
|
|
# S3 Bucket
|
2021-11-30 14:23:13 +00:00
|
|
|
ETHERSCAN_SMARTCONTRACTS_BUCKET = os.environ.get("MOONSTREAM_S3_SMARTCONTRACTS_BUCKET")
|
2021-08-24 11:27:03 +00:00
|
|
|
if ETHERSCAN_SMARTCONTRACTS_BUCKET is None:
|
2021-11-30 14:23:13 +00:00
|
|
|
raise ValueError("MOONSTREAM_S3_SMARTCONTRACTS_BUCKET is not set")
|
2021-10-26 08:12:09 +00:00
|
|
|
|
2021-11-14 07:18:23 +00:00
|
|
|
MOONSTREAM_S3_SMARTCONTRACTS_ABI_BUCKET = os.environ.get(
|
|
|
|
"MOONSTREAM_S3_SMARTCONTRACTS_ABI_BUCKET"
|
|
|
|
)
|
|
|
|
if MOONSTREAM_S3_SMARTCONTRACTS_ABI_BUCKET is None:
|
2021-11-08 15:30:11 +00:00
|
|
|
raise ValueError(
|
2021-11-14 07:18:23 +00:00
|
|
|
"MOONSTREAM_S3_SMARTCONTRACTS_ABI_BUCKET environment variable must be set"
|
2021-11-08 15:30:11 +00:00
|
|
|
)
|
2021-11-14 07:18:23 +00:00
|
|
|
MOONSTREAM_S3_SMARTCONTRACTS_ABI_PREFIX = os.environ.get(
|
|
|
|
"MOONSTREAM_S3_SMARTCONTRACTS_ABI_PREFIX"
|
|
|
|
)
|
|
|
|
if MOONSTREAM_S3_SMARTCONTRACTS_ABI_PREFIX is None:
|
2021-11-08 15:43:48 +00:00
|
|
|
raise ValueError(
|
2021-11-14 07:18:23 +00:00
|
|
|
"MOONSTREAM_S3_SMARTCONTRACTS_ABI_PREFIX environment variable must be set"
|
2021-11-08 15:43:48 +00:00
|
|
|
)
|
2022-03-08 15:10:06 +00:00
|
|
|
MOONSTREAM_S3_SMARTCONTRACTS_ABI_PREFIX = (
|
|
|
|
MOONSTREAM_S3_SMARTCONTRACTS_ABI_PREFIX.rstrip("/")
|
2021-11-14 07:18:23 +00:00
|
|
|
)
|
2021-12-16 13:26:04 +00:00
|
|
|
|
2022-01-17 13:16:31 +00:00
|
|
|
MOONSTREAM_CRAWLERS_SERVER_URL = os.environ.get("MOONSTREAM_CRAWLERS_SERVER_URL")
|
2022-01-17 12:56:47 +00:00
|
|
|
if MOONSTREAM_CRAWLERS_SERVER_URL is None:
|
2022-01-17 13:16:31 +00:00
|
|
|
raise ValueError("MOONSTREAM_CRAWLERS_SERVER_URL environment variable must be set")
|
2022-01-17 12:56:47 +00:00
|
|
|
MOONSTREAM_CRAWLERS_SERVER_URL = MOONSTREAM_CRAWLERS_SERVER_URL.rstrip("/")
|
2021-12-21 15:37:57 +00:00
|
|
|
|
2022-01-17 13:16:31 +00:00
|
|
|
MOONSTREAM_CRAWLERS_SERVER_PORT = os.environ.get("MOONSTREAM_CRAWLERS_SERVER_PORT")
|
|
|
|
if MOONSTREAM_CRAWLERS_SERVER_PORT is None:
|
|
|
|
raise ValueError("MOONSTREAM_CRAWLERS_SERVER_PORT environment variable must be set")
|
|
|
|
MOONSTREAM_CRAWLERS_SERVER_PORT = MOONSTREAM_CRAWLERS_SERVER_PORT.rstrip("/")
|
|
|
|
|
|
|
|
|
2021-12-03 20:53:05 +00:00
|
|
|
MOONSTREAM_MOONWORM_TASKS_JOURNAL = os.environ.get(
|
|
|
|
"MOONSTREAM_MOONWORM_TASKS_JOURNAL", ""
|
|
|
|
)
|
|
|
|
if MOONSTREAM_MOONWORM_TASKS_JOURNAL == "":
|
|
|
|
raise ValueError(
|
|
|
|
"MOONSTREAM_MOONWORM_TASKS_JOURNAL environment variable must be set"
|
|
|
|
)
|
2021-12-22 09:07:37 +00:00
|
|
|
|
|
|
|
# Web3
|
|
|
|
MOONSTREAM_ETHEREUM_WEB3_PROVIDER_URI = os.environ.get(
|
|
|
|
"MOONSTREAM_ETHEREUM_WEB3_PROVIDER_URI", ""
|
|
|
|
)
|
|
|
|
if MOONSTREAM_ETHEREUM_WEB3_PROVIDER_URI == "":
|
|
|
|
raise ValueError(
|
|
|
|
"MOONSTREAM_ETHEREUM_WEB3_PROVIDER_URI environment variable must be set"
|
|
|
|
)
|
2023-06-08 13:34:41 +00:00
|
|
|
MOONSTREAM_POLYGON_WEB3_PROVIDER_URI = os.environ.get(
|
|
|
|
"MOONSTREAM_POLYGON_WEB3_PROVIDER_URI", ""
|
|
|
|
)
|
|
|
|
if MOONSTREAM_POLYGON_WEB3_PROVIDER_URI == "":
|
|
|
|
raise Exception("MOONSTREAM_POLYGON_WEB3_PROVIDER_URI env variable is not set")
|
|
|
|
|
|
|
|
MOONSTREAM_MUMBAI_WEB3_PROVIDER_URI = os.environ.get(
|
|
|
|
"MOONSTREAM_MUMBAI_WEB3_PROVIDER_URI", ""
|
|
|
|
)
|
|
|
|
if MOONSTREAM_MUMBAI_WEB3_PROVIDER_URI == "":
|
|
|
|
raise Exception("MOONSTREAM_MUMBAI_WEB3_PROVIDER_URI env variable is not set")
|
|
|
|
|
|
|
|
MOONSTREAM_XDAI_WEB3_PROVIDER_URI = os.environ.get(
|
|
|
|
"MOONSTREAM_XDAI_WEB3_PROVIDER_URI", ""
|
|
|
|
)
|
|
|
|
if MOONSTREAM_XDAI_WEB3_PROVIDER_URI == "":
|
|
|
|
raise Exception("MOONSTREAM_XDAI_WEB3_PROVIDER_URI env variable is not set")
|
|
|
|
|
|
|
|
MOONSTREAM_WYRM_WEB3_PROVIDER_URI = os.environ.get(
|
|
|
|
"MOONSTREAM_WYRM_WEB3_PROVIDER_URI", ""
|
|
|
|
)
|
|
|
|
if MOONSTREAM_WYRM_WEB3_PROVIDER_URI == "":
|
|
|
|
raise Exception("MOONSTREAM_WYRM_WEB3_PROVIDER_URI env variable is not set")
|
|
|
|
|
2023-07-13 14:37:42 +00:00
|
|
|
MOONSTREAM_ZKSYNC_ERA_TESTNET_WEB3_PROVIDER_URI = os.environ.get(
|
|
|
|
"MOONSTREAM_ZKSYNC_ERA_TESTNET_WEB3_PROVIDER_URI", ""
|
|
|
|
)
|
|
|
|
if MOONSTREAM_ZKSYNC_ERA_TESTNET_WEB3_PROVIDER_URI == "":
|
|
|
|
raise Exception(
|
|
|
|
"MOONSTREAM_ZKSYNC_ERA_TESTNET_WEB3_PROVIDER_URI env variable is not set"
|
|
|
|
)
|
2022-02-17 10:22:20 +00:00
|
|
|
|
2023-08-29 03:29:01 +00:00
|
|
|
MOONSTREAM_ZKSYNC_ERA_WEB3_PROVIDER_URI = os.environ.get(
|
|
|
|
"MOONSTREAM_ZKSYNC_ERA_WEB3_PROVIDER_URI", ""
|
|
|
|
)
|
|
|
|
if MOONSTREAM_ZKSYNC_ERA_WEB3_PROVIDER_URI == "":
|
|
|
|
raise Exception("MOONSTREAM_ZKSYNC_ERA_WEB3_PROVIDER_URI env variable is not set")
|
|
|
|
|
2022-03-09 12:44:54 +00:00
|
|
|
MOONSTREAM_S3_QUERIES_BUCKET = os.environ.get("MOONSTREAM_S3_QUERIES_BUCKET", "")
|
|
|
|
if MOONSTREAM_S3_QUERIES_BUCKET == "":
|
|
|
|
raise ValueError("MOONSTREAM_S3_QUERIES_BUCKET environment variable must be set")
|
2022-03-07 17:14:56 +00:00
|
|
|
|
2022-03-09 12:44:54 +00:00
|
|
|
MOONSTREAM_S3_QUERIES_BUCKET_PREFIX = os.environ.get(
|
|
|
|
"MOONSTREAM_S3_QUERIES_BUCKET_PREFIX", ""
|
2022-03-07 17:14:56 +00:00
|
|
|
)
|
2022-03-09 12:44:54 +00:00
|
|
|
if MOONSTREAM_S3_QUERIES_BUCKET_PREFIX == "":
|
2022-03-07 17:14:56 +00:00
|
|
|
raise ValueError(
|
2022-03-09 12:44:54 +00:00
|
|
|
"MOONSTREAM_S3_QUERIES_BUCKET_PREFIX environment variable must be set"
|
2022-03-07 17:14:56 +00:00
|
|
|
)
|
2023-01-26 15:19:25 +00:00
|
|
|
|
2023-07-13 12:16:15 +00:00
|
|
|
# Entities reserved tags
|
|
|
|
MOONSTREAM_ENTITIES_RESERVED_TAGS = [
|
|
|
|
"type",
|
|
|
|
"subscription_type_id",
|
|
|
|
"color",
|
|
|
|
"label",
|
|
|
|
"user_id",
|
|
|
|
"address",
|
|
|
|
"blockchain",
|
|
|
|
]
|
2023-01-26 15:19:25 +00:00
|
|
|
|
2023-02-14 14:55:52 +00:00
|
|
|
## Moonstream resources types
|
2023-01-26 15:19:25 +00:00
|
|
|
|
2023-02-14 14:55:52 +00:00
|
|
|
BUGOUT_RESOURCE_TYPE_SUBSCRIPTION = "subscription"
|
2023-02-27 10:47:10 +00:00
|
|
|
BUGOUT_RESOURCE_TYPE_ENTITY_SUBSCRIPTION = "entity_subscription"
|
|
|
|
BUGOUT_RESOURCE_TYPE_DASHBOARD = "dashboards"
|
2023-06-22 16:13:16 +00:00
|
|
|
MOONSTREAM_QUERY_TEMPLATE_CONTEXT_TYPE = "moonstream_query_template"
|
2023-06-18 21:05:45 +00:00
|
|
|
|
|
|
|
|
2023-06-08 13:34:41 +00:00
|
|
|
# Node balancer
|
|
|
|
NB_ACCESS_ID_HEADER = os.environ.get("NB_ACCESS_ID_HEADER", "x-node-balancer-access-id")
|
|
|
|
NB_DATA_SOURCE_HEADER = os.environ.get(
|
|
|
|
"NB_DATA_SOURCE_HEADER", "x-node-balancer-data-source"
|
|
|
|
)
|
2023-06-22 08:47:53 +00:00
|
|
|
NB_DATA_SOURCE_HEADER_VALUE = os.environ.get(
|
|
|
|
"NB_DATA_SOURCE_HEADER_VALUE", "blockchain"
|
|
|
|
)
|
2023-06-08 13:34:41 +00:00
|
|
|
|
|
|
|
|
2023-06-22 08:59:36 +00:00
|
|
|
# Thread timeout
|
|
|
|
|
|
|
|
THREAD_TIMEOUT_SECONDS = 10
|
|
|
|
|
2023-06-15 11:58:10 +00:00
|
|
|
multicall_contracts: Dict[AvailableBlockchainType, str] = {
|
|
|
|
AvailableBlockchainType.POLYGON: "0xc8E51042792d7405184DfCa245F2d27B94D013b6",
|
|
|
|
AvailableBlockchainType.MUMBAI: "0xe9939e7Ea7D7fb619Ac57f648Da7B1D425832631",
|
|
|
|
AvailableBlockchainType.ETHEREUM: "0x5BA1e12693Dc8F9c48aAD8770482f4739bEeD696",
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2023-06-15 12:19:04 +00:00
|
|
|
multicall_contract_abi = [
|
|
|
|
{
|
|
|
|
"inputs": [
|
|
|
|
{"internalType": "bool", "name": "requireSuccess", "type": "bool"},
|
|
|
|
{
|
|
|
|
"components": [
|
|
|
|
{
|
|
|
|
"internalType": "address",
|
|
|
|
"name": "target",
|
|
|
|
"type": "address",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"internalType": "bytes",
|
|
|
|
"name": "callData",
|
|
|
|
"type": "bytes",
|
|
|
|
},
|
|
|
|
],
|
|
|
|
"internalType": "struct Multicall2.Call[]",
|
|
|
|
"name": "calls",
|
|
|
|
"type": "tuple[]",
|
|
|
|
},
|
|
|
|
],
|
|
|
|
"name": "tryAggregate",
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"components": [
|
|
|
|
{"internalType": "bool", "name": "success", "type": "bool"},
|
|
|
|
{
|
|
|
|
"internalType": "bytes",
|
|
|
|
"name": "returnData",
|
|
|
|
"type": "bytes",
|
|
|
|
},
|
|
|
|
],
|
|
|
|
"internalType": "struct Multicall2.Result[]",
|
|
|
|
"name": "returnData",
|
|
|
|
"type": "tuple[]",
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"stateMutability": "nonpayable",
|
|
|
|
"type": "function",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"inputs": [{"internalType": "bytes", "name": "data", "type": "bytes"}],
|
|
|
|
"name": "aggregate",
|
|
|
|
"outputs": [
|
|
|
|
{"internalType": "bool", "name": "success", "type": "bool"},
|
|
|
|
{"internalType": "bytes", "name": "result", "type": "bytes"},
|
|
|
|
],
|
|
|
|
"stateMutability": "payable",
|
|
|
|
"type": "function",
|
|
|
|
},
|
|
|
|
]
|
2023-06-15 11:58:10 +00:00
|
|
|
|
|
|
|
|
|
|
|
supportsInterface_abi = [
|
|
|
|
{
|
|
|
|
"inputs": [{"internalType": "bytes4", "name": "interfaceId", "type": "bytes4"}],
|
|
|
|
"name": "supportsInterface",
|
|
|
|
"outputs": [{"internalType": "bool", "name": "", "type": "bool"}],
|
|
|
|
"stateMutability": "view",
|
|
|
|
"type": "function",
|
|
|
|
}
|
2023-06-08 13:34:41 +00:00
|
|
|
]
|
2023-12-14 01:17:50 +00:00
|
|
|
|
|
|
|
MOONSTREAM_INTERNAL_REQUEST_TIMEOUT_SECONDS = os.environ.get(
|
|
|
|
"MOONSTREAM_INTERNAL_REQUEST_TIMEOUT_SECONDS", "10"
|
|
|
|
)
|
|
|
|
|
|
|
|
MOONSTREAM_INTERNAL_REQUEST_TIMEOUT_SECONDS = int(
|
|
|
|
MOONSTREAM_INTERNAL_REQUEST_TIMEOUT_SECONDS
|
|
|
|
)
|