├── iota ├── peering.json ├── assets │ ├── grafana │ │ ├── datasources │ │ │ └── datasource.yaml │ │ └── dashboards │ │ │ └── dashboard.yaml │ └── prometheus │ │ └── prometheus.yml ├── README.md ├── prepare_docker.sh ├── docker-compose-https.yml ├── config.json ├── env_template ├── config_defaults.json └── docker-compose.yml ├── shimmer ├── peering.json ├── assets │ ├── grafana │ │ ├── datasources │ │ │ └── datasource.yaml │ │ └── dashboards │ │ │ └── dashboard.yaml │ └── prometheus │ │ └── prometheus.yml ├── README.md ├── prepare_docker.sh ├── docker-compose-https.yml ├── config.json ├── env_template ├── config_defaults.json └── docker-compose.yml ├── iota-testnet ├── peering.json ├── assets │ ├── grafana │ │ ├── datasources │ │ │ └── datasource.yaml │ │ └── dashboards │ │ │ └── dashboard.yaml │ └── prometheus │ │ └── prometheus.yml ├── README.md ├── prepare_docker.sh ├── config.json ├── docker-compose-https.yml ├── env_template ├── config_defaults.json └── docker-compose.yml ├── iota2-testnet ├── peering.json ├── assets │ ├── grafana │ │ ├── datasources │ │ │ └── datasource.yaml │ │ └── dashboards │ │ │ ├── dashboard.yaml │ │ │ ├── iota-core_monitoring.json │ │ │ ├── slot_metrics.json │ │ │ └── commitments-overview.json │ └── prometheus │ │ └── prometheus.yml ├── config.json ├── prepare_docker.sh ├── docker-compose-https.yml ├── config_defaults.json ├── env_template └── docker-compose.yml ├── shimmer-testnet ├── peering.json ├── assets │ ├── grafana │ │ ├── datasources │ │ │ └── datasource.yaml │ │ └── dashboards │ │ │ └── dashboard.yaml │ └── prometheus │ │ └── prometheus.yml ├── README.md ├── prepare_docker.sh ├── config.json ├── docker-compose-https.yml ├── env_template ├── config_defaults.json └── docker-compose.yml ├── .gitignore ├── README.md └── .github ├── ISSUE_TEMPLATE ├── feature_request.md └── bug_report.md └── workflows └── release.yml /iota/peering.json: -------------------------------------------------------------------------------- 1 | { 2 | "peers": [] 3 | } -------------------------------------------------------------------------------- /shimmer/peering.json: -------------------------------------------------------------------------------- 1 | { 2 | "peers": [] 3 | } -------------------------------------------------------------------------------- /iota-testnet/peering.json: -------------------------------------------------------------------------------- 1 | { 2 | "peers": [] 3 | } -------------------------------------------------------------------------------- /iota2-testnet/peering.json: -------------------------------------------------------------------------------- 1 | { 2 | "peers": [] 3 | } -------------------------------------------------------------------------------- /shimmer-testnet/peering.json: -------------------------------------------------------------------------------- 1 | { 2 | "peers": [] 3 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .env 3 | 4 | iota/data 5 | iota-testnet/data 6 | iota2-testnet/data 7 | shimmer/data 8 | shimmer-testnet/data -------------------------------------------------------------------------------- /iota/assets/grafana/datasources/datasource.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: 1 2 | 3 | deleteDatasources: 4 | - name: Prometheus 5 | orgId: 1 6 | 7 | datasources: 8 | - name: Prometheus 9 | type: prometheus 10 | access: proxy 11 | url: http://prometheus:9090 12 | -------------------------------------------------------------------------------- /shimmer/assets/grafana/datasources/datasource.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: 1 2 | 3 | deleteDatasources: 4 | - name: Prometheus 5 | orgId: 1 6 | 7 | datasources: 8 | - name: Prometheus 9 | type: prometheus 10 | access: proxy 11 | url: http://prometheus:9090 12 | -------------------------------------------------------------------------------- /iota-testnet/assets/grafana/datasources/datasource.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: 1 2 | 3 | deleteDatasources: 4 | - name: Prometheus 5 | orgId: 1 6 | 7 | datasources: 8 | - name: Prometheus 9 | type: prometheus 10 | access: proxy 11 | url: http://prometheus:9090 12 | -------------------------------------------------------------------------------- /iota2-testnet/assets/grafana/datasources/datasource.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: 1 2 | 3 | deleteDatasources: 4 | - name: Prometheus 5 | orgId: 1 6 | 7 | datasources: 8 | - name: Prometheus 9 | type: prometheus 10 | access: proxy 11 | url: http://prometheus:9090 12 | -------------------------------------------------------------------------------- /shimmer-testnet/assets/grafana/datasources/datasource.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: 1 2 | 3 | deleteDatasources: 4 | - name: Prometheus 5 | orgId: 1 6 | 7 | datasources: 8 | - name: Prometheus 9 | type: prometheus 10 | access: proxy 11 | url: http://prometheus:9090 12 | -------------------------------------------------------------------------------- /iota/assets/grafana/dashboards/dashboard.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: 1 2 | 3 | providers: 4 | - name: 'Prometheus' 5 | orgId: 1 6 | folder: '' 7 | type: file 8 | disableDeletion: true 9 | allowUiUpdates: false 10 | options: 11 | path: /etc/grafana/provisioning/dashboards 12 | -------------------------------------------------------------------------------- /shimmer/assets/grafana/dashboards/dashboard.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: 1 2 | 3 | providers: 4 | - name: 'Prometheus' 5 | orgId: 1 6 | folder: '' 7 | type: file 8 | disableDeletion: true 9 | allowUiUpdates: false 10 | options: 11 | path: /etc/grafana/provisioning/dashboards 12 | -------------------------------------------------------------------------------- /iota-testnet/assets/grafana/dashboards/dashboard.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: 1 2 | 3 | providers: 4 | - name: 'Prometheus' 5 | orgId: 1 6 | folder: '' 7 | type: file 8 | disableDeletion: true 9 | allowUiUpdates: false 10 | options: 11 | path: /etc/grafana/provisioning/dashboards 12 | -------------------------------------------------------------------------------- /shimmer-testnet/assets/grafana/dashboards/dashboard.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: 1 2 | 3 | providers: 4 | - name: 'Prometheus' 5 | orgId: 1 6 | folder: '' 7 | type: file 8 | disableDeletion: true 9 | allowUiUpdates: false 10 | options: 11 | path: /etc/grafana/provisioning/dashboards 12 | -------------------------------------------------------------------------------- /iota2-testnet/assets/grafana/dashboards/dashboard.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: 1 2 | 3 | providers: 4 | - name: 'Prometheus' 5 | orgId: 1 6 | folder: '' 7 | type: file 8 | disableDeletion: false 9 | editable: true 10 | allowUiUpdates: true 11 | options: 12 | path: /etc/grafana/provisioning/dashboards 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Node Docker Setup 2 | This setup lets you run an [IOTA Hornet node](https://wiki.iota.org/hornet/welcome) and additional services using Docker and Traefik as [a reverse proxy](https://en.wikipedia.org/wiki/Reverse_proxy) to enable (optional) TLS using [Let's Encrypt](https://letsencrypt.org/), control access to your node and route requests to the correct endpoints. 3 | 4 | See [this guide](https://wiki.iota.org/hornet/how_tos/using_docker) to set up your node. -------------------------------------------------------------------------------- /iota/README.md: -------------------------------------------------------------------------------- 1 | # Node Docker Setup - IOTA Mainnet 2 | This setup lets you run an [IOTA Hornet node](https://wiki.iota.org/hornet/welcome) and additional services using Docker and Traefik as [a reverse proxy](https://en.wikipedia.org/wiki/Reverse_proxy) to enable (optional) TLS using [Let's Encrypt](https://letsencrypt.org/), control access to your node and route requests to the correct endpoints. 3 | 4 | See [this guide](https://wiki.iota.org/hornet/how_tos/using_docker) to set up your node. 5 | -------------------------------------------------------------------------------- /shimmer/README.md: -------------------------------------------------------------------------------- 1 | # Node Docker Setup - Shimmer 2 | This setup lets you run an [IOTA Hornet node](https://wiki.iota.org/hornet/welcome) and additional services using Docker and Traefik as [a reverse proxy](https://en.wikipedia.org/wiki/Reverse_proxy) to enable (optional) TLS using [Let's Encrypt](https://letsencrypt.org/), control access to your node and route requests to the correct endpoints. 3 | 4 | See [this guide](https://wiki.iota.org/hornet/how_tos/using_docker) to set up your node. 5 | -------------------------------------------------------------------------------- /iota-testnet/README.md: -------------------------------------------------------------------------------- 1 | # Node Docker Setup - IOTA Testnet 2 | This setup lets you run an [IOTA Hornet node](https://wiki.iota.org/hornet/welcome) and additional services using Docker and Traefik as [a reverse proxy](https://en.wikipedia.org/wiki/Reverse_proxy) to enable (optional) TLS using [Let's Encrypt](https://letsencrypt.org/), control access to your node and route requests to the correct endpoints. 3 | 4 | See [this guide](https://wiki.iota.org/hornet/how_tos/using_docker) to set up your node. 5 | -------------------------------------------------------------------------------- /iota2-testnet/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "protocol": { 3 | "baseToken": { 4 | "name": "TST", 5 | "tickerSymbol": "TST", 6 | "unit": "TST", 7 | "subunit": "testies", 8 | "decimals": 6, 9 | "useMetricPrefix": false 10 | } 11 | }, 12 | "p2p": { 13 | "autopeering": { 14 | "bootstrapPeers": [ 15 | "/dns/access-0.h.nova-testnet.iotaledger.net/tcp/15600/p2p/12D3KooWRKnwe6FrswrVSq2jFuDTBEAb7iAKUTLkmCK6MDPBySMo" 16 | ] 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /shimmer-testnet/README.md: -------------------------------------------------------------------------------- 1 | # Node Docker Setup - Shimmer Testnet 2 | This setup lets you run an [IOTA Hornet node](https://wiki.iota.org/hornet/welcome) and additional services using Docker and Traefik as [a reverse proxy](https://en.wikipedia.org/wiki/Reverse_proxy) to enable (optional) TLS using [Let's Encrypt](https://letsencrypt.org/), control access to your node and route requests to the correct endpoints. 3 | 4 | See [this guide](https://wiki.iota.org/hornet/how_tos/using_docker) to set up your node. 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: "" 5 | labels: feature 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /iota/prepare_docker.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # node-docker-setup __VERSION__ 5 | # https://github.com/iotaledger/node-docker-setup 6 | # 7 | 8 | if [ ! -f .env ]; then 9 | echo "No .env file found. Please see README.md for more details" 10 | fi 11 | 12 | if [[ "$OSTYPE" != "darwin"* && "$EUID" -ne 0 ]]; then 13 | echo "Please run as root or with sudo" 14 | exit 15 | fi 16 | 17 | # Pull latest images 18 | docker compose pull 19 | 20 | # Prepare db directory 21 | mkdir -p data 22 | mkdir -p data/grafana 23 | mkdir -p data/prometheus 24 | mkdir -p data/dashboard 25 | mkdir -p data/database_legacy 26 | mkdir -p data/database_chrysalis 27 | mkdir -p data/wasp 28 | 29 | if [ ! -f data/wasp/users.json ]; then 30 | echo "{}" >> data/wasp/users.json 31 | fi 32 | 33 | if [[ "$OSTYPE" != "darwin"* ]]; then 34 | chown -R 65532:65532 data 35 | chown 65532:65532 peering.json 36 | fi 37 | -------------------------------------------------------------------------------- /shimmer/prepare_docker.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # node-docker-setup __VERSION__ 5 | # https://github.com/iotaledger/node-docker-setup 6 | # 7 | 8 | if [ ! -f .env ]; then 9 | echo "No .env file found. Please see README.md for more details" 10 | fi 11 | 12 | if [[ "$OSTYPE" != "darwin"* && "$EUID" -ne 0 ]]; then 13 | echo "Please run as root or with sudo" 14 | exit 15 | fi 16 | 17 | # Pull latest images 18 | docker compose pull 19 | 20 | # Prepare db directory 21 | mkdir -p data 22 | mkdir -p data/grafana 23 | mkdir -p data/prometheus 24 | mkdir -p data/dashboard 25 | mkdir -p data/database_legacy 26 | mkdir -p data/database_chrysalis 27 | mkdir -p data/wasp 28 | 29 | if [ ! -f data/wasp/users.json ]; then 30 | echo "{}" >> data/wasp/users.json 31 | fi 32 | 33 | if [[ "$OSTYPE" != "darwin"* ]]; then 34 | chown -R 65532:65532 data 35 | chown 65532:65532 peering.json 36 | fi 37 | -------------------------------------------------------------------------------- /iota-testnet/prepare_docker.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # node-docker-setup __VERSION__ 5 | # https://github.com/iotaledger/node-docker-setup 6 | # 7 | 8 | if [ ! -f .env ]; then 9 | echo "No .env file found. Please see README.md for more details" 10 | fi 11 | 12 | if [[ "$OSTYPE" != "darwin"* && "$EUID" -ne 0 ]]; then 13 | echo "Please run as root or with sudo" 14 | exit 15 | fi 16 | 17 | # Pull latest images 18 | docker compose pull 19 | 20 | # Prepare db directory 21 | mkdir -p data 22 | mkdir -p data/grafana 23 | mkdir -p data/prometheus 24 | mkdir -p data/dashboard 25 | mkdir -p data/database_legacy 26 | mkdir -p data/database_chrysalis 27 | mkdir -p data/wasp 28 | 29 | if [ ! -f data/wasp/users.json ]; then 30 | echo "{}" >> data/wasp/users.json 31 | fi 32 | 33 | if [[ "$OSTYPE" != "darwin"* ]]; then 34 | chown -R 65532:65532 data 35 | chown 65532:65532 peering.json 36 | fi 37 | -------------------------------------------------------------------------------- /shimmer-testnet/prepare_docker.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # node-docker-setup __VERSION__ 5 | # https://github.com/iotaledger/node-docker-setup 6 | # 7 | 8 | if [ ! -f .env ]; then 9 | echo "No .env file found. Please see README.md for more details" 10 | fi 11 | 12 | if [[ "$OSTYPE" != "darwin"* && "$EUID" -ne 0 ]]; then 13 | echo "Please run as root or with sudo" 14 | exit 15 | fi 16 | 17 | # Pull latest images 18 | docker compose pull 19 | 20 | # Prepare db directory 21 | mkdir -p data 22 | mkdir -p data/grafana 23 | mkdir -p data/prometheus 24 | mkdir -p data/dashboard 25 | mkdir -p data/database_legacy 26 | mkdir -p data/database_chrysalis 27 | mkdir -p data/wasp 28 | 29 | if [ ! -f data/wasp/users.json ]; then 30 | echo "{}" >> data/wasp/users.json 31 | fi 32 | 33 | if [[ "$OSTYPE" != "darwin"* ]]; then 34 | chown -R 65532:65532 data 35 | chown 65532:65532 peering.json 36 | fi 37 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: "" 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | 12 | 13 | **Describe the bug** 14 | A clear and concise description of what the bug is. 15 | 16 | **To Reproduce** 17 | Steps to reproduce the behavior: 18 | - Go to ... 19 | - Edit config to ... 20 | - See error 21 | 22 | **Expected behavior** 23 | A clear and concise description of what you expected to happen. 24 | 25 | **Environment information:** 26 | - OS: [e.g. Ubuntu 18.04] 27 | - RAM: [e.g. 4 GB] 28 | - Cores: [e.g. 4 Cores] 29 | - Type: [e.g. Raspberry Pi 3B+, VPS, ...] 30 | - Browser [e.g. chrome, safari] (e.g. for Dashboard issues) 31 | - node-docker-setup version [e.g. 0.2.1] 32 | 33 | **Additional context** 34 | Add any other context about the problem here [e.g. Docker logs, errors, screenshots] 35 | -------------------------------------------------------------------------------- /iota2-testnet/assets/prometheus/prometheus.yml: -------------------------------------------------------------------------------- 1 | scrape_configs: 2 | - job_name: cadvisor 3 | scrape_interval: 5s 4 | scrape_timeout: 5s 5 | static_configs: 6 | - targets: 7 | - 'cadvisor:8080' 8 | 9 | - job_name: iota-core 10 | scrape_interval: 5s 11 | scrape_timeout: 5s 12 | static_configs: 13 | - targets: 14 | - 'iota-core:9311' 15 | 16 | - job_name: inx-indexer 17 | scrape_interval: 5s 18 | scrape_timeout: 5s 19 | static_configs: 20 | - targets: 21 | - 'inx-indexer:9312' 22 | 23 | - job_name: inx-mqtt 24 | scrape_interval: 5s 25 | scrape_timeout: 5s 26 | static_configs: 27 | - targets: 28 | - 'inx-mqtt:9312' 29 | 30 | - job_name: inx-dashboard 31 | scrape_interval: 5s 32 | scrape_timeout: 5s 33 | static_configs: 34 | - targets: 35 | - 'inx-dashboard:9312' 36 | 37 | - job_name: traefik 38 | scrape_interval: 5s 39 | scrape_timeout: 5s 40 | static_configs: 41 | - targets: 42 | - 'traefik:8080' -------------------------------------------------------------------------------- /iota2-testnet/prepare_docker.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # node-docker-setup __VERSION__ 5 | # https://github.com/iotaledger/node-docker-setup 6 | # 7 | 8 | SNAPSHOT_FILE_PATH="data/snapshots/snapshot.bin" 9 | SNAPSHOT_URL="https://files.nova-testnet.iotaledger.net/snapshots/latest-snapshot.bin" 10 | 11 | if [ ! -f .env ]; then 12 | echo "No .env file found. Please see README.md for more details" 13 | fi 14 | 15 | if [[ "$OSTYPE" != "darwin"* && "$EUID" -ne 0 ]]; then 16 | echo "Please run as root or with sudo" 17 | exit 18 | fi 19 | 20 | # Pull latest images 21 | docker compose pull 22 | 23 | # Prepare db directory 24 | mkdir -p data 25 | mkdir -p data/grafana 26 | mkdir -p data/prometheus 27 | mkdir -p data/snapshots 28 | mkdir -p data/dashboard 29 | if [[ "$OSTYPE" != "darwin"* ]]; then 30 | chown -R 65532:65532 data 31 | chown 65532:65532 peering.json 32 | fi 33 | 34 | # Check if the snapshot file already exists and delete it if it does 35 | if [ -f "$SNAPSHOT_FILE_PATH" ]; then 36 | echo "Delete existing snapshot at $SNAPSHOT_FILE_PATH..." 37 | rm $SNAPSHOT_FILE_PATH 38 | fi 39 | 40 | # Download the snapshot file 41 | echo "Downloading latest snapshot from $SNAPSHOT_URL..." 42 | curl -L -o $SNAPSHOT_FILE_PATH $SNAPSHOT_URL 43 | 44 | # Check if the snapshot download was successful 45 | if [ $? -eq 0 ]; then 46 | echo "Snapshot download completed successfully!" 47 | else 48 | echo "Error downloading the snapshot file." 49 | fi -------------------------------------------------------------------------------- /iota/assets/prometheus/prometheus.yml: -------------------------------------------------------------------------------- 1 | scrape_configs: 2 | - job_name: cadvisor 3 | scrape_interval: 5s 4 | scrape_timeout: 5s 5 | static_configs: 6 | - targets: 7 | - 'cadvisor:8080' 8 | 9 | - job_name: hornet 10 | scrape_interval: 5s 11 | scrape_timeout: 5s 12 | static_configs: 13 | - targets: 14 | - 'hornet:9311' 15 | 16 | - job_name: inx-indexer 17 | scrape_interval: 5s 18 | scrape_timeout: 5s 19 | static_configs: 20 | - targets: 21 | - 'inx-indexer:9312' 22 | 23 | - job_name: inx-mqtt 24 | scrape_interval: 5s 25 | scrape_timeout: 5s 26 | static_configs: 27 | - targets: 28 | - 'inx-mqtt:9312' 29 | 30 | - job_name: inx-spammer 31 | scrape_interval: 5s 32 | scrape_timeout: 5s 33 | static_configs: 34 | - targets: 35 | - 'inx-spammer:9312' 36 | 37 | - job_name: inx-dashboard 38 | scrape_interval: 5s 39 | scrape_timeout: 5s 40 | static_configs: 41 | - targets: 42 | - 'inx-dashboard:9312' 43 | 44 | - job_name: inx-api-core-v0 45 | scrape_interval: 5s 46 | scrape_timeout: 5s 47 | static_configs: 48 | - targets: 49 | - 'inx-api-core-v0:9312' 50 | 51 | - job_name: inx-api-core-v1 52 | scrape_interval: 5s 53 | scrape_timeout: 5s 54 | static_configs: 55 | - targets: 56 | - 'inx-api-core-v1:9312' 57 | 58 | - job_name: wasp 59 | scrape_interval: 5s 60 | scrape_timeout: 5s 61 | static_configs: 62 | - targets: 63 | - 'wasp:9312' 64 | 65 | - job_name: traefik 66 | scrape_interval: 5s 67 | scrape_timeout: 5s 68 | static_configs: 69 | - targets: 70 | - 'traefik:8080' -------------------------------------------------------------------------------- /shimmer/assets/prometheus/prometheus.yml: -------------------------------------------------------------------------------- 1 | scrape_configs: 2 | - job_name: cadvisor 3 | scrape_interval: 5s 4 | scrape_timeout: 5s 5 | static_configs: 6 | - targets: 7 | - 'cadvisor:8080' 8 | 9 | - job_name: hornet 10 | scrape_interval: 5s 11 | scrape_timeout: 5s 12 | static_configs: 13 | - targets: 14 | - 'hornet:9311' 15 | 16 | - job_name: inx-indexer 17 | scrape_interval: 5s 18 | scrape_timeout: 5s 19 | static_configs: 20 | - targets: 21 | - 'inx-indexer:9312' 22 | 23 | - job_name: inx-mqtt 24 | scrape_interval: 5s 25 | scrape_timeout: 5s 26 | static_configs: 27 | - targets: 28 | - 'inx-mqtt:9312' 29 | 30 | - job_name: inx-spammer 31 | scrape_interval: 5s 32 | scrape_timeout: 5s 33 | static_configs: 34 | - targets: 35 | - 'inx-spammer:9312' 36 | 37 | - job_name: inx-dashboard 38 | scrape_interval: 5s 39 | scrape_timeout: 5s 40 | static_configs: 41 | - targets: 42 | - 'inx-dashboard:9312' 43 | 44 | - job_name: inx-api-core-v0 45 | scrape_interval: 5s 46 | scrape_timeout: 5s 47 | static_configs: 48 | - targets: 49 | - 'inx-api-core-v0:9312' 50 | 51 | - job_name: inx-api-core-v1 52 | scrape_interval: 5s 53 | scrape_timeout: 5s 54 | static_configs: 55 | - targets: 56 | - 'inx-api-core-v1:9312' 57 | 58 | - job_name: wasp 59 | scrape_interval: 5s 60 | scrape_timeout: 5s 61 | static_configs: 62 | - targets: 63 | - 'wasp:9312' 64 | 65 | - job_name: traefik 66 | scrape_interval: 5s 67 | scrape_timeout: 5s 68 | static_configs: 69 | - targets: 70 | - 'traefik:8080' -------------------------------------------------------------------------------- /iota-testnet/assets/prometheus/prometheus.yml: -------------------------------------------------------------------------------- 1 | scrape_configs: 2 | - job_name: cadvisor 3 | scrape_interval: 5s 4 | scrape_timeout: 5s 5 | static_configs: 6 | - targets: 7 | - 'cadvisor:8080' 8 | 9 | - job_name: hornet 10 | scrape_interval: 5s 11 | scrape_timeout: 5s 12 | static_configs: 13 | - targets: 14 | - 'hornet:9311' 15 | 16 | - job_name: inx-indexer 17 | scrape_interval: 5s 18 | scrape_timeout: 5s 19 | static_configs: 20 | - targets: 21 | - 'inx-indexer:9312' 22 | 23 | - job_name: inx-mqtt 24 | scrape_interval: 5s 25 | scrape_timeout: 5s 26 | static_configs: 27 | - targets: 28 | - 'inx-mqtt:9312' 29 | 30 | - job_name: inx-spammer 31 | scrape_interval: 5s 32 | scrape_timeout: 5s 33 | static_configs: 34 | - targets: 35 | - 'inx-spammer:9312' 36 | 37 | - job_name: inx-dashboard 38 | scrape_interval: 5s 39 | scrape_timeout: 5s 40 | static_configs: 41 | - targets: 42 | - 'inx-dashboard:9312' 43 | 44 | - job_name: inx-api-core-v0 45 | scrape_interval: 5s 46 | scrape_timeout: 5s 47 | static_configs: 48 | - targets: 49 | - 'inx-api-core-v0:9312' 50 | 51 | - job_name: inx-api-core-v1 52 | scrape_interval: 5s 53 | scrape_timeout: 5s 54 | static_configs: 55 | - targets: 56 | - 'inx-api-core-v1:9312' 57 | 58 | - job_name: wasp 59 | scrape_interval: 5s 60 | scrape_timeout: 5s 61 | static_configs: 62 | - targets: 63 | - 'wasp:9312' 64 | 65 | - job_name: traefik 66 | scrape_interval: 5s 67 | scrape_timeout: 5s 68 | static_configs: 69 | - targets: 70 | - 'traefik:8080' -------------------------------------------------------------------------------- /shimmer-testnet/assets/prometheus/prometheus.yml: -------------------------------------------------------------------------------- 1 | scrape_configs: 2 | - job_name: cadvisor 3 | scrape_interval: 5s 4 | scrape_timeout: 5s 5 | static_configs: 6 | - targets: 7 | - 'cadvisor:8080' 8 | 9 | - job_name: hornet 10 | scrape_interval: 5s 11 | scrape_timeout: 5s 12 | static_configs: 13 | - targets: 14 | - 'hornet:9311' 15 | 16 | - job_name: inx-indexer 17 | scrape_interval: 5s 18 | scrape_timeout: 5s 19 | static_configs: 20 | - targets: 21 | - 'inx-indexer:9312' 22 | 23 | - job_name: inx-mqtt 24 | scrape_interval: 5s 25 | scrape_timeout: 5s 26 | static_configs: 27 | - targets: 28 | - 'inx-mqtt:9312' 29 | 30 | - job_name: inx-spammer 31 | scrape_interval: 5s 32 | scrape_timeout: 5s 33 | static_configs: 34 | - targets: 35 | - 'inx-spammer:9312' 36 | 37 | - job_name: inx-dashboard 38 | scrape_interval: 5s 39 | scrape_timeout: 5s 40 | static_configs: 41 | - targets: 42 | - 'inx-dashboard:9312' 43 | 44 | - job_name: inx-api-core-v0 45 | scrape_interval: 5s 46 | scrape_timeout: 5s 47 | static_configs: 48 | - targets: 49 | - 'inx-api-core-v0:9312' 50 | 51 | - job_name: inx-api-core-v1 52 | scrape_interval: 5s 53 | scrape_timeout: 5s 54 | static_configs: 55 | - targets: 56 | - 'inx-api-core-v1:9312' 57 | 58 | - job_name: wasp 59 | scrape_interval: 5s 60 | scrape_timeout: 5s 61 | static_configs: 62 | - targets: 63 | - 'wasp:9312' 64 | 65 | - job_name: traefik 66 | scrape_interval: 5s 67 | scrape_timeout: 5s 68 | static_configs: 69 | - targets: 70 | - 'traefik:8080' -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | release: 5 | types: [published] 6 | 7 | jobs: 8 | release: 9 | name: Release 10 | runs-on: ubuntu-latest 11 | strategy: 12 | matrix: 13 | tag_prefix: ['iota', 'iota-testnet', 'iota2-testnet', 'shimmer', 'shimmer-testnet'] 14 | steps: 15 | - name: Check out code into the Go module directory 16 | if: startsWith(github.ref_name, matrix.tag_prefix) && (contains(matrix.ref_name, 'testnet') == contains(matrix.tag_prefix, 'testnet')) 17 | uses: actions/checkout@v4 18 | 19 | - name: Find and Replace VERSION 20 | if: startsWith(github.ref_name, matrix.tag_prefix) && (contains(matrix.ref_name, 'testnet') == contains(matrix.tag_prefix, 'testnet')) 21 | uses: jacobtomlinson/gha-find-replace@v3 22 | with: 23 | find: "__VERSION__" 24 | replace: ${{ github.ref_name }} 25 | regex: false 26 | 27 | - name: Create node-docker-setup_${{ matrix.tag_prefix }}.tar.gz 28 | if: startsWith(github.ref_name, matrix.tag_prefix) && (contains(matrix.ref_name, 'testnet') == contains(matrix.tag_prefix, 'testnet')) 29 | uses: ihiroky/archive-action@v1 30 | with: 31 | root_dir: ${{ matrix.tag_prefix }} 32 | file_path: node-docker-setup_${{ matrix.tag_prefix }}.tar.gz 33 | 34 | - name: Upload node-docker-setup_${{ matrix.tag_prefix }}.tar.gz file 35 | if: startsWith(github.ref_name, matrix.tag_prefix) && (contains(matrix.ref_name, 'testnet') == contains(matrix.tag_prefix, 'testnet')) 36 | uses: Shopify/upload-to-release@v2.0.0 37 | with: 38 | name: node-docker-setup_${{ github.ref_name }}.tar.gz 39 | path: node-docker-setup_${{ matrix.tag_prefix }}.tar.gz 40 | repo-token: ${{ secrets.GITHUB_TOKEN }} 41 | -------------------------------------------------------------------------------- /iota-testnet/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "protocol": { 3 | "targetNetworkName": "testnet", 4 | "milestonePublicKeyCount": 3, 5 | "baseToken": { 6 | "name": "TST", 7 | "tickerSymbol": "TST", 8 | "unit": "TST", 9 | "subunit": "testies", 10 | "decimals": 6, 11 | "useMetricPrefix": false 12 | }, 13 | "publicKeyRanges": [ 14 | { 15 | "key": "7d151cd708741225baee87b5e1082e4bd56531ac65b10c2195b107c5fe0c0ccf", 16 | "start": 0, 17 | "end": 0 18 | }, 19 | { 20 | "key": "c0b16af888f80a248f3f3caacff291007fbd53ef73b5a52a4127ecfc7112abd7", 21 | "start": 0, 22 | "end": 0 23 | }, 24 | { 25 | "key": "6f759a559af073e85314b7d02b8f46578942f85e743d471eb66e96df1f346ef7", 26 | "start": 0, 27 | "end": 0 28 | }, 29 | { 30 | "key": "3e96b6bfb39d972212918fea5996941a0289fa109f249f0bafc033c46bb4fec0", 31 | "start": 0, 32 | "end": 0 33 | } 34 | ] 35 | }, 36 | "db": { 37 | "path": "iota-testnet/database" 38 | }, 39 | "p2p": { 40 | "db": { 41 | "path": "iota-testnet/p2pstore" 42 | }, 43 | "autopeering": { 44 | "enabled": true, 45 | "entryNodes": [ 46 | "/dns/entry-hornet-0.h.iota-testnet.iotaledger.net/udp/14626/autopeering/JB36e6D3a33dLQQQRemLKnz4Q9JQmnHd6Lq7TGxe24C2", 47 | "/dns/entry-hornet-1.h.iota-testnet.iotaledger.net/udp/14626/autopeering/2ppC5FczJ1XrBGiF2Ng4emH6qYfiDyBvJDYu9NbYfwdv" 48 | ] 49 | } 50 | }, 51 | "snapshots": { 52 | "fullPath": "iota-testnet/snapshots/full_snapshot.bin", 53 | "deltaPath": "iota-testnet/snapshots/delta_snapshot.bin", 54 | "downloadURLs": [ 55 | { 56 | "full": "https://files.iota-testnet.iotaledger.net/snapshots/latest-full_snapshot.bin", 57 | "delta": "https://files.iota-testnet.iotaledger.net/snapshots/latest-delta_snapshot.bin" 58 | } 59 | ] 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /iota2-testnet/docker-compose-https.yml: -------------------------------------------------------------------------------- 1 | # 2 | # node-docker-setup __VERSION__ 3 | # https://github.com/iotaledger/node-docker-setup 4 | # 5 | 6 | services: 7 | 8 | ################################################################## 9 | # IOTA-CORE # 10 | ################################################################## 11 | 12 | iota-core: 13 | labels: 14 | - "traefik.http.routers.iota-core.entrypoints=websecure" 15 | - "traefik.http.routers.iota-core.tls=true" 16 | - "traefik.http.routers.iota-core.tls.certresolver=myresolver" 17 | 18 | ################################################################## 19 | # Reverse Proxy and SSL # 20 | ################################################################## 21 | 22 | traefik: 23 | command: 24 | - "--providers.docker=true" 25 | - "--providers.docker.exposedbydefault=false" 26 | - "--metrics.prometheus=true" 27 | - "--entrypoints.web.address=:80" 28 | - "--entrypoints.websecure.address=:443" 29 | - "--entrypoints.web.http.redirections.entrypoint.to=websecure" 30 | - "--entrypoints.web.http.redirections.entrypoint.scheme=https" 31 | - "--certificatesresolvers.myresolver.acme.tlschallenge=true" 32 | - "--certificatesresolvers.myresolver.acme.email=${ACME_EMAIL}" 33 | - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json" 34 | ports: 35 | - "443:443/tcp" 36 | 37 | ################################################################## 38 | # Monitoring # 39 | ################################################################## 40 | 41 | grafana: 42 | labels: 43 | - "traefik.http.routers.grafana.entrypoints=websecure" 44 | - "traefik.http.routers.grafana.tls=true" 45 | 46 | ################################################################## 47 | # INX Extensions # 48 | # disable them out by commenting out the services # 49 | ################################################################## 50 | 51 | inx-dashboard: 52 | labels: 53 | - "traefik.http.routers.iota-core-dashboard.entrypoints=websecure" 54 | - "traefik.http.routers.iota-core-dashboard.tls=true" 55 | -------------------------------------------------------------------------------- /shimmer-testnet/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "protocol": { 3 | "targetNetworkName": "testnet-2", 4 | "milestonePublicKeyCount": 7, 5 | "baseToken": { 6 | "name": "Shimmer", 7 | "tickerSymbol": "SMR", 8 | "unit": "SMR", 9 | "subunit": "glow", 10 | "decimals": 6, 11 | "useMetricPrefix": false 12 | }, 13 | "publicKeyRanges": [ 14 | { 15 | "key": "13ccdc2f5d3d9a3ebe06074c6b49b49090dd79ca72e04abf20f10f871ad8293b", 16 | "start": 0, 17 | "end": 0 18 | }, 19 | { 20 | "key": "f18f3f6a2d940b9bacd3084713f6877db22064ada4335cb53ae1da75044f978d", 21 | "start": 0, 22 | "end": 0 23 | }, 24 | { 25 | "key": "b3b4c920909720ba5f7c30dddc0f9169bf8243b529b601fc4776b8cb0a8ca253", 26 | "start": 0, 27 | "end": 0 28 | }, 29 | { 30 | "key": "bded01e93adf7a623118fd375fd93dc7d7ddf222324239cae33e4e4c47ec3b0e", 31 | "start": 0, 32 | "end": 0 33 | }, 34 | { 35 | "key": "488ac3fb1b8df5ef8c4acb4ef1f3e3d039c5d7197db87094a61af66320722313", 36 | "start": 0, 37 | "end": 0 38 | }, 39 | { 40 | "key": "61f95fed30b6e9bf0b2d03938f56d35789ff7f0ea122d01c5c1b7e869525e218", 41 | "start": 0, 42 | "end": 0 43 | }, 44 | { 45 | "key": "4587040de05907b70806c8725bdae1f7370785993b2a139208e247885d4ed1f8", 46 | "start": 0, 47 | "end": 0 48 | }, 49 | { 50 | "key": "aa6b36116206cc7d6c8f688e22113aa46f0de88d51aa7acf881ec2bd9d015f62", 51 | "start": 0, 52 | "end": 0 53 | }, 54 | { 55 | "key": "ede9760c7f2aaa4618a58a1357705cdc1874962ad369309543230394bb77548b", 56 | "start": 0, 57 | "end": 0 58 | }, 59 | { 60 | "key": "98d1f907caa99f9320f0e0eb64a5cf208751c2171c7938da5659328061e82a8e", 61 | "start": 0, 62 | "end": 0 63 | } 64 | ] 65 | }, 66 | "db": { 67 | "path": "testnet/database" 68 | }, 69 | "p2p": { 70 | "db": { 71 | "path": "testnet/p2pstore" 72 | }, 73 | "autopeering": { 74 | "enabled": true, 75 | "entryNodes": [ 76 | "/dns/entry-hornet-0.h.testnet.shimmer.network/udp/14626/autopeering/ANrRwJv2xs1S7TonyenM9qzkB8hfZ4Y6Gg2xsNUGozTJ", 77 | "/dns/entry-hornet-1.h.testnet.shimmer.network/udp/14626/autopeering/3bTUFwKXzhHSv2kBs6gja8BbeawHNzMwUdJraXWmLkNk" 78 | ] 79 | } 80 | }, 81 | "snapshots": { 82 | "fullPath": "testnet/snapshots/full_snapshot.bin", 83 | "deltaPath": "testnet/snapshots/delta_snapshot.bin", 84 | "downloadURLs": [ 85 | { 86 | "full": "https://files.testnet.shimmer.network/snapshots/latest-full_snapshot.bin", 87 | "delta": "https://files.testnet.shimmer.network/snapshots/latest-delta_snapshot.bin" 88 | } 89 | ] 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /iota/docker-compose-https.yml: -------------------------------------------------------------------------------- 1 | # 2 | # node-docker-setup __VERSION__ 3 | # https://github.com/iotaledger/node-docker-setup 4 | # 5 | 6 | services: 7 | 8 | ################################################################## 9 | # HORNET # 10 | ################################################################## 11 | 12 | hornet: 13 | labels: 14 | - "traefik.http.routers.hornet.entrypoints=websecure" 15 | - "traefik.http.routers.hornet.tls=true" 16 | - "traefik.http.routers.hornet.tls.certresolver=myresolver" 17 | 18 | ################################################################## 19 | # Reverse Proxy and SSL # 20 | ################################################################## 21 | 22 | traefik: 23 | command: 24 | - "--providers.docker=true" 25 | - "--providers.docker.exposedbydefault=false" 26 | - "--metrics.prometheus=true" 27 | - "--entrypoints.web.address=:80" 28 | - "--entrypoints.websecure.address=:443" 29 | - "--entrypoints.web.http.redirections.entrypoint.to=websecure" 30 | - "--entrypoints.web.http.redirections.entrypoint.scheme=https" 31 | - "--certificatesresolvers.myresolver.acme.tlschallenge=true" 32 | - "--certificatesresolvers.myresolver.acme.email=${ACME_EMAIL}" 33 | - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json" 34 | ports: 35 | - "443:443/tcp" 36 | 37 | ################################################################## 38 | # Monitoring # 39 | ################################################################## 40 | 41 | grafana: 42 | labels: 43 | - "traefik.http.routers.grafana.entrypoints=websecure" 44 | - "traefik.http.routers.grafana.tls=true" 45 | 46 | ################################################################## 47 | # INX Extensions # 48 | # disable them out by commenting out the services # 49 | ################################################################## 50 | 51 | inx-dashboard: 52 | labels: 53 | - "traefik.http.routers.hornet-dashboard.entrypoints=websecure" 54 | - "traefik.http.routers.hornet-dashboard.tls=true" 55 | 56 | ################################################################## 57 | # WASP # 58 | ################################################################## 59 | 60 | wasp: 61 | labels: 62 | - "traefik.http.routers.wasp-api.entrypoints=websecure" 63 | - "traefik.http.routers.wasp-api.tls=true" 64 | 65 | wasp-dashboard: 66 | labels: 67 | - "traefik.http.routers.wasp-dashboard.entrypoints=websecure" 68 | - "traefik.http.routers.wasp-dashboard.tls=true" 69 | environment: 70 | - WASP_API_URL=https://${NODE_HOST:-localhost}/wasp/api 71 | - L1_API_URL=https://${NODE_HOST:-localhost} 72 | -------------------------------------------------------------------------------- /shimmer/docker-compose-https.yml: -------------------------------------------------------------------------------- 1 | # 2 | # node-docker-setup __VERSION__ 3 | # https://github.com/iotaledger/node-docker-setup 4 | # 5 | 6 | services: 7 | 8 | ################################################################## 9 | # HORNET # 10 | ################################################################## 11 | 12 | hornet: 13 | labels: 14 | - "traefik.http.routers.hornet.entrypoints=websecure" 15 | - "traefik.http.routers.hornet.tls=true" 16 | - "traefik.http.routers.hornet.tls.certresolver=myresolver" 17 | 18 | ################################################################## 19 | # Reverse Proxy and SSL # 20 | ################################################################## 21 | 22 | traefik: 23 | command: 24 | - "--providers.docker=true" 25 | - "--providers.docker.exposedbydefault=false" 26 | - "--metrics.prometheus=true" 27 | - "--entrypoints.web.address=:80" 28 | - "--entrypoints.websecure.address=:443" 29 | - "--entrypoints.web.http.redirections.entrypoint.to=websecure" 30 | - "--entrypoints.web.http.redirections.entrypoint.scheme=https" 31 | - "--certificatesresolvers.myresolver.acme.tlschallenge=true" 32 | - "--certificatesresolvers.myresolver.acme.email=${ACME_EMAIL}" 33 | - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json" 34 | ports: 35 | - "443:443/tcp" 36 | 37 | ################################################################## 38 | # Monitoring # 39 | ################################################################## 40 | 41 | grafana: 42 | labels: 43 | - "traefik.http.routers.grafana.entrypoints=websecure" 44 | - "traefik.http.routers.grafana.tls=true" 45 | 46 | 47 | ################################################################## 48 | # INX Extensions # 49 | # disable them out by commenting out the services # 50 | ################################################################## 51 | 52 | inx-dashboard: 53 | labels: 54 | - "traefik.http.routers.hornet-dashboard.entrypoints=websecure" 55 | - "traefik.http.routers.hornet-dashboard.tls=true" 56 | 57 | ################################################################## 58 | # WASP # 59 | ################################################################## 60 | 61 | wasp: 62 | labels: 63 | - "traefik.http.routers.wasp-api.entrypoints=websecure" 64 | - "traefik.http.routers.wasp-api.tls=true" 65 | 66 | wasp-dashboard: 67 | labels: 68 | - "traefik.http.routers.wasp-dashboard.entrypoints=websecure" 69 | - "traefik.http.routers.wasp-dashboard.tls=true" 70 | environment: 71 | - WASP_API_URL=https://${NODE_HOST:-localhost}/wasp/api 72 | - L1_API_URL=https://${NODE_HOST:-localhost} 73 | -------------------------------------------------------------------------------- /shimmer-testnet/docker-compose-https.yml: -------------------------------------------------------------------------------- 1 | # 2 | # node-docker-setup __VERSION__ 3 | # https://github.com/iotaledger/node-docker-setup 4 | # 5 | 6 | services: 7 | 8 | ################################################################## 9 | # HORNET # 10 | ################################################################## 11 | 12 | hornet: 13 | labels: 14 | - "traefik.http.routers.hornet.entrypoints=websecure" 15 | - "traefik.http.routers.hornet.tls=true" 16 | - "traefik.http.routers.hornet.tls.certresolver=myresolver" 17 | 18 | ################################################################## 19 | # Reverse Proxy and SSL # 20 | ################################################################## 21 | 22 | traefik: 23 | command: 24 | - "--providers.docker=true" 25 | - "--providers.docker.exposedbydefault=false" 26 | - "--metrics.prometheus=true" 27 | - "--entrypoints.web.address=:80" 28 | - "--entrypoints.websecure.address=:443" 29 | - "--entrypoints.web.http.redirections.entrypoint.to=websecure" 30 | - "--entrypoints.web.http.redirections.entrypoint.scheme=https" 31 | - "--certificatesresolvers.myresolver.acme.tlschallenge=true" 32 | - "--certificatesresolvers.myresolver.acme.email=${ACME_EMAIL}" 33 | - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json" 34 | ports: 35 | - "443:443/tcp" 36 | 37 | ################################################################## 38 | # Monitoring # 39 | ################################################################## 40 | 41 | grafana: 42 | labels: 43 | - "traefik.http.routers.grafana.entrypoints=websecure" 44 | - "traefik.http.routers.grafana.tls=true" 45 | 46 | 47 | ################################################################## 48 | # INX Extensions # 49 | # disable them out by commenting out the services # 50 | ################################################################## 51 | 52 | inx-dashboard: 53 | labels: 54 | - "traefik.http.routers.hornet-dashboard.entrypoints=websecure" 55 | - "traefik.http.routers.hornet-dashboard.tls=true" 56 | 57 | ################################################################## 58 | # WASP # 59 | ################################################################## 60 | 61 | wasp: 62 | labels: 63 | - "traefik.http.routers.wasp-api.entrypoints=websecure" 64 | - "traefik.http.routers.wasp-api.tls=true" 65 | 66 | wasp-dashboard: 67 | labels: 68 | - "traefik.http.routers.wasp-dashboard.entrypoints=websecure" 69 | - "traefik.http.routers.wasp-dashboard.tls=true" 70 | environment: 71 | - WASP_API_URL=https://${NODE_HOST:-localhost}/wasp/api 72 | - L1_API_URL=https://${NODE_HOST:-localhost} 73 | -------------------------------------------------------------------------------- /iota-testnet/docker-compose-https.yml: -------------------------------------------------------------------------------- 1 | # 2 | # node-docker-setup __VERSION__ 3 | # https://github.com/iotaledger/node-docker-setup 4 | # 5 | 6 | version: '3' 7 | services: 8 | 9 | ################################################################## 10 | # HORNET # 11 | ################################################################## 12 | 13 | hornet: 14 | labels: 15 | - "traefik.http.routers.hornet.entrypoints=websecure" 16 | - "traefik.http.routers.hornet.tls=true" 17 | - "traefik.http.routers.hornet.tls.certresolver=myresolver" 18 | 19 | ################################################################## 20 | # Reverse Proxy and SSL # 21 | ################################################################## 22 | 23 | traefik: 24 | command: 25 | - "--providers.docker=true" 26 | - "--providers.docker.exposedbydefault=false" 27 | - "--metrics.prometheus=true" 28 | - "--entrypoints.web.address=:80" 29 | - "--entrypoints.websecure.address=:443" 30 | - "--entrypoints.web.http.redirections.entrypoint.to=websecure" 31 | - "--entrypoints.web.http.redirections.entrypoint.scheme=https" 32 | - "--certificatesresolvers.myresolver.acme.tlschallenge=true" 33 | - "--certificatesresolvers.myresolver.acme.email=${ACME_EMAIL}" 34 | - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json" 35 | ports: 36 | - "443:443/tcp" 37 | 38 | ################################################################## 39 | # Monitoring # 40 | ################################################################## 41 | 42 | grafana: 43 | labels: 44 | - "traefik.http.routers.grafana.entrypoints=websecure" 45 | - "traefik.http.routers.grafana.tls=true" 46 | 47 | 48 | ################################################################## 49 | # INX Extensions # 50 | # disable them out by commenting out the services # 51 | ################################################################## 52 | 53 | inx-dashboard: 54 | labels: 55 | - "traefik.http.routers.hornet-dashboard.entrypoints=websecure" 56 | - "traefik.http.routers.hornet-dashboard.tls=true" 57 | 58 | ################################################################## 59 | # WASP # 60 | ################################################################## 61 | 62 | wasp: 63 | labels: 64 | - "traefik.http.routers.wasp-api.entrypoints=websecure" 65 | - "traefik.http.routers.wasp-api.tls=true" 66 | 67 | wasp-dashboard: 68 | labels: 69 | - "traefik.http.routers.wasp-dashboard.entrypoints=websecure" 70 | - "traefik.http.routers.wasp-dashboard.tls=true" 71 | environment: 72 | - WASP_API_URL=https://${NODE_HOST:-localhost}/wasp/api 73 | - L1_API_URL=https://${NODE_HOST:-localhost} 74 | -------------------------------------------------------------------------------- /shimmer/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "protocol": { 3 | "targetNetworkName": "shimmer", 4 | "milestonePublicKeyCount": 7, 5 | "baseToken": { 6 | "name": "Shimmer", 7 | "tickerSymbol": "SMR", 8 | "unit": "SMR", 9 | "subunit": "glow", 10 | "decimals": 6, 11 | "useMetricPrefix": false 12 | }, 13 | "publicKeyRanges": [ 14 | { 15 | "key": "a507d2a592a5f0424ed8530603c08acebe088ae26211e90b79bfec0970a2397f", 16 | "start": 0, 17 | "end": 0 18 | }, 19 | { 20 | "key": "71a09774449a081450a51e0245a1e9850190f93508fd8f21bb9b9ca169765f30", 21 | "start": 0, 22 | "end": 0 23 | }, 24 | { 25 | "key": "a375515bfe5adf7fedb64ef4cebe1e621e85a056b0ccd5db72bc0d474325bf38", 26 | "start": 0, 27 | "end": 0 28 | }, 29 | { 30 | "key": "1df26178a7914126fd8cb934c7a7437073794c1c8ce99319172436b1d4973eba", 31 | "start": 0, 32 | "end": 0 33 | }, 34 | { 35 | "key": "45432d7c767e16586403262331a725c7eaa0b2dd79ea442f373c845ae3443aa9", 36 | "start": 0, 37 | "end": 0 38 | }, 39 | { 40 | "key": "9d87b4d2538b10799b582e25ace4726d92d7798ddfb696ff08e450db7917c9ad", 41 | "start": 0, 42 | "end": 0 43 | }, 44 | { 45 | "key": "a921841628d64c3f08bd344118b8106ade072e68c774beff30135e036194493a", 46 | "start": 0, 47 | "end": 0 48 | }, 49 | { 50 | "key": "16ee3356c21e410a0aaab42896021b1a857eb8d97a14a66fed9b13d634c21317", 51 | "start": 0, 52 | "end": 0 53 | }, 54 | { 55 | "key": "99c7d9752c295cb56b550191015ab5a40226fb632e8b02ec15cfe574ea17cf67", 56 | "start": 0, 57 | "end": 0 58 | }, 59 | { 60 | "key": "4af647910ba47000108b87c63abe0545643f9b203eacee2b713729b0450983fe", 61 | "start": 0, 62 | "end": 0 63 | } 64 | ] 65 | }, 66 | "db": { 67 | "path": "shimmer/database" 68 | }, 69 | "p2p": { 70 | "db": { 71 | "path": "shimmer/p2pstore" 72 | }, 73 | "autopeering": { 74 | "enabled": true, 75 | "entryNodes": [ 76 | "/dns/entry-hornet-0.h.shimmer.network/udp/14626/autopeering/HK6EKbNtjwve9HMbL6PH6R3uLXZYQoBoqNPD5LsoWuA6", 77 | "/dns/entry-hornet-1.h.shimmer.network/udp/14626/autopeering/BT8EiSRXTixnH2wMoy4ecNpVtiAXxfXKfYsJ2KvU3WLx", 78 | "/dns/entry-0.shimmer-mainnet.tanglebay.com/udp/14636/autopeering/22aGL1rL7yh4emm1CSN5XyVXYC15GehZok3hNYHtMMnw", 79 | "/dns/entry-1.shimmer-mainnet.tanglebay.com/udp/14636/autopeering/CvF69T6NbVstwu6NfLVQHcDS1Dsd8XxCMTDHNC2rvJTZ" 80 | ] 81 | } 82 | }, 83 | "snapshots": { 84 | "fullPath": "shimmer/snapshots/full_snapshot.bin", 85 | "deltaPath": "shimmer/snapshots/delta_snapshot.bin", 86 | "downloadURLs": [ 87 | { 88 | "full": "https://files.shimmer.network/snapshots/latest-full_snapshot.bin", 89 | "delta": "https://files.shimmer.network/snapshots/latest-delta_snapshot.bin" 90 | } 91 | ] 92 | } 93 | } -------------------------------------------------------------------------------- /iota/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "protocol": { 3 | "targetNetworkName": "iota-mainnet", 4 | "milestonePublicKeyCount": 7, 5 | "baseToken": { 6 | "name": "IOTA", 7 | "tickerSymbol": "IOTA", 8 | "unit": "IOTA", 9 | "subunit": "micro", 10 | "decimals": 6, 11 | "useMetricPrefix": false 12 | }, 13 | "publicKeyRanges": [ 14 | { 15 | "key": "2fb1d7ec714adf365eefa343b66c0c459a9930276aff08cde482cb8050028624", 16 | "start": 0, 17 | "end": 0 18 | }, 19 | { 20 | "key": "8845cd560d66d50070c6e251d7a0a19f8de217fabf53a78ee15b41d85a489cc6", 21 | "start": 0, 22 | "end": 0 23 | }, 24 | { 25 | "key": "1d61aab6f7e52129b78fcdf9568def0baa9c71112964f5b4d86ffc406866a986", 26 | "start": 0, 27 | "end": 0 28 | }, 29 | { 30 | "key": "fa94be504dfb10876a449db5272f19393ded922cbe3b023b4e57b62a53835721", 31 | "start": 0, 32 | "end": 0 33 | }, 34 | { 35 | "key": "5fadfabe6944f5f0166ada11452c642010339f916e28187ecf8b4a207c8dba47", 36 | "start": 0, 37 | "end": 0 38 | }, 39 | { 40 | "key": "347e6892d72b71e0423bd14daaf61d2ac35e91852fa5b155b92ddda0e064f55f", 41 | "start": 0, 42 | "end": 0 43 | }, 44 | { 45 | "key": "0e403f526a66b4c0b18e8b0257671b07892a419e4b6e4540707d9a4793d1e3be", 46 | "start": 0, 47 | "end": 0 48 | }, 49 | { 50 | "key": "3af73a609696ff6fe63c36d060455cd83ec23edea2d2b87d5317004849cc0e9a", 51 | "start": 0, 52 | "end": 0 53 | }, 54 | { 55 | "key": "ee1bfa9e791a9f57ea72c6192b000d906f21479ba8f40bb20cdd8badb7ddcb78", 56 | "start": 0, 57 | "end": 0 58 | }, 59 | { 60 | "key": "083d7af99250a06d086b07bdd5bccd2bff406ee17e19332ccdb08d8be72218ce", 61 | "start": 0, 62 | "end": 0 63 | } 64 | ] 65 | }, 66 | "db": { 67 | "path": "mainnet/database" 68 | }, 69 | "p2p": { 70 | "db": { 71 | "path": "mainnet/p2pstore" 72 | }, 73 | "autopeering": { 74 | "enabled": true, 75 | "entryNodes": [ 76 | "/dns/entry-hornet-0.h.stardust-mainnet.iotaledger.net/udp/14626/autopeering/K4cHM64KxzYJ5ZB2a9P3stJUHjvQDh4bzhCw49xDowi", 77 | "/dns/entry-hornet-1.h.stardust-mainnet.iotaledger.net/udp/14626/autopeering/8UbVu5MjRZH2c9fnEdpfPvd7qqDgrVFsNsvc933FuMTm", 78 | "/dns/entry-0.iota-mainnet.tanglebay.com/udp/14626/autopeering/iot4By1FD4pFLrGJ6AAe7YEeSu9RbW9xnPUmxMdQenC", 79 | "/dns/entry-1.iota-mainnet.tanglebay.com/udp/14626/autopeering/CATsx21mFVvQQPXeDineGs9DDeKvoBBQdzcmR6ffCkVA" 80 | ] 81 | } 82 | }, 83 | "snapshots": { 84 | "fullPath": "mainnet/snapshots/full_snapshot.bin", 85 | "deltaPath": "mainnet/snapshots/delta_snapshot.bin", 86 | "downloadURLs": [ 87 | { 88 | "full": "https://files.stardust-mainnet.iotaledger.net/snapshots/latest-full_snapshot.bin", 89 | "delta": "https://files.stardust-mainnet.iotaledger.net/snapshots/latest-delta_snapshot.bin" 90 | } 91 | ] 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /iota2-testnet/config_defaults.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": { 3 | "checkForUpdates": true, 4 | "shutdown": { 5 | "stopGracePeriod": "5m", 6 | "log": { 7 | "enabled": true, 8 | "filePath": "shutdown.log" 9 | } 10 | } 11 | }, 12 | "logger": { 13 | "name": "", 14 | "level": "info", 15 | "timeFormat": "rfc3339", 16 | "outputPaths": [ 17 | "stdout" 18 | ] 19 | }, 20 | "p2p": { 21 | "bindMultiAddresses": [ 22 | "/ip4/0.0.0.0/tcp/15600", 23 | "/ip6/::/tcp/15600" 24 | ], 25 | "connectionManager": { 26 | "highWatermark": 10, 27 | "lowWatermark": 5 28 | }, 29 | "identityPrivateKey": "", 30 | "identityPrivateKeyFilePath": "testnet/p2p/identity.key", 31 | "autopeering": { 32 | "maxPeers": 5, 33 | "bootstrapPeers": [], 34 | "allowLocalIPs": false, 35 | "externalMultiAddresses": [] 36 | } 37 | }, 38 | "profiling": { 39 | "enabled": false, 40 | "bindAddress": "localhost:6060" 41 | }, 42 | "restAPI": { 43 | "bindAddress": "0.0.0.0:14265", 44 | "publicRoutes": [ 45 | "/health", 46 | "/api/routes", 47 | "/api/core/v3/info", 48 | "/api/core/v3/network*", 49 | "/api/core/v3/blocks*", 50 | "/api/core/v3/transactions*", 51 | "/api/core/v3/commitments*", 52 | "/api/core/v3/outputs*", 53 | "/api/core/v3/accounts*", 54 | "/api/core/v3/validators*", 55 | "/api/core/v3/rewards*", 56 | "/api/core/v3/committee*", 57 | "/api/debug/v2/*", 58 | "/api/indexer/v2/*", 59 | "/api/mqtt/v2", 60 | "/api/blockissuer/v1/*" 61 | ], 62 | "protectedRoutes": [ 63 | "/api/*" 64 | ], 65 | "debugRequestLoggerEnabled": false, 66 | "maxPageSize": 100, 67 | "maxCacheSize": "50MB", 68 | "jwtAuth": { 69 | "salt": "IOTA" 70 | }, 71 | "limits": { 72 | "maxBodyLength": "1M", 73 | "maxResults": 1000 74 | } 75 | }, 76 | "debugAPI": { 77 | "enabled": false, 78 | "db": { 79 | "path": "testnet/debug", 80 | "maxOpenDBs": 2, 81 | "granularity": 100, 82 | "pruning": { 83 | "threshold": 1 84 | } 85 | } 86 | }, 87 | "metricsTracker": { 88 | "enabled": true 89 | }, 90 | "db": { 91 | "engine": "rocksdb", 92 | "path": "testnet/database", 93 | "maxOpenDBs": 5, 94 | "pruning": { 95 | "threshold": 30, 96 | "size": { 97 | "enabled": true, 98 | "targetSize": "30GB", 99 | "reductionPercentage": 10, 100 | "cooldownTime": "5m" 101 | } 102 | } 103 | }, 104 | "protocol": { 105 | "snapshot": { 106 | "path": "testnet/snapshot.bin", 107 | "depth": 5 108 | }, 109 | "commitmentCheck": true, 110 | "filter": { 111 | "maxAllowedClockDrift": "5s" 112 | }, 113 | "protocolParametersPath": "testnet/protocol_parameters.json", 114 | "baseToken": { 115 | "name": "Shimmer", 116 | "tickerSymbol": "SMR", 117 | "unit": "SMR", 118 | "subunit": "glow", 119 | "decimals": 6 120 | } 121 | }, 122 | "retainer": { 123 | "debugStoreErrorMessages": false 124 | }, 125 | "node": { 126 | "alias": "IOTA-Core node" 127 | }, 128 | "prometheus": { 129 | "enabled": true, 130 | "bindAddress": "0.0.0.0:9311", 131 | "goMetrics": false, 132 | "processMetrics": false, 133 | "promhttpMetrics": false 134 | }, 135 | "inx": { 136 | "enabled": false, 137 | "bindAddress": "localhost:9029" 138 | } 139 | } 140 | -------------------------------------------------------------------------------- /iota2-testnet/env_template: -------------------------------------------------------------------------------- 1 | # This is an example configuration file. 2 | # Keep this file as an example and make a working file with the following command: 3 | # 4 | # cp env_template .env 5 | # 6 | # You can edit the .env file with a command like: 7 | # 8 | # nano .env 9 | # 10 | # The .env file is your personal configuration and is used by Docker. 11 | # Uncomment and edit the lines to fit your needs 12 | 13 | # 14 | # HINT: You either have to choose a HTTP or a HTTPS setup. 15 | # Do not uncomment lines in both sections. 16 | # 17 | 18 | ###################### 19 | # HTTP setup section # 20 | ###################### 21 | 22 | # The default port for the HTTP setup is 80. If you want to change that, uncomment the following line. 23 | #HTTP_PORT=8080 24 | 25 | # HTTP setup is exposed on localhost only by default. 26 | # If you want to expose it in your local network, specify the local IP address of the node in your network. 27 | #NODE_HOST=192.168.1.10 28 | 29 | ####################### 30 | # HTTPS setup section # 31 | ####################### 32 | 33 | # The following line needs to be uncommented to activate HTTPS (HTTP access will be deactivated). 34 | #COMPOSE_FILE=docker-compose.yml:docker-compose-https.yml 35 | 36 | # You need to specify your email address to automatically get a valid SSL certificate via "letsencrypt.org" 37 | #ACME_EMAIL=your-email@example.com 38 | 39 | # You need to specify the domain name of your node to automatically get a valid SSL certificate via "letsencrypt.org" 40 | #NODE_HOST=node.your-domain.com 41 | 42 | #################### 43 | # profiles section # 44 | #################### 45 | 46 | # Uncomment the following line to enable prometheus and grafana 47 | # Grafana will be available under /grafana 48 | # WARNING: Do not forget to set a new password after the first start (default: admin/admin) 49 | #COMPOSE_PROFILES=${COMPOSE_PROFILES},monitoring 50 | 51 | # Uncomment the following line to enable the blockissuer service 52 | # Blockissuer API will be available under /api/blockissuer/v1 53 | # WARNING: Do not forget to set BLOCKISSUER_ACCOUNT_ADDR and BLOCKISSUER_PRV_KEY in the blockissuer section 54 | #COMPOSE_PROFILES=${COMPOSE_PROFILES},blockissuer 55 | 56 | # Uncomment the following line to enable the validator service 57 | # WARNING: Do not forget to set VALIDATOR_ACCOUNT_ADDR and VALIDATOR_PRV_KEY in the validator section 58 | #COMPOSE_PROFILES=${COMPOSE_PROFILES},validator 59 | 60 | ##################### 61 | # IOTA-Core section # 62 | ##################### 63 | 64 | # Overwrite the default config file by uncommenting the following line (default: config.json). 65 | #IOTA_CORE_CONFIG_FILE=config.json 66 | 67 | # Uncomment the following line change the IOTA-Core gossip TCP port (default: 15600). 68 | #IOTA_CORE_GOSSIP_PORT=15600 69 | 70 | # Uncomment the following line to expose your DNS address for autopeering instead of the IP address. 71 | #IOTA_CORE_EXTERNAL_P2P_MULTIADDRESS=/dns/${NODE_HOST}/tcp/${IOTA_CORE_GOSSIP_PORT:-15600} 72 | 73 | ##################### 74 | # dashboard section # 75 | ##################### 76 | 77 | # Choose a dashboard username (default: admin) 78 | #DASHBOARD_USERNAME=admin 79 | 80 | # Generate a new password and salt by using the following command: 81 | # 82 | # docker compose run iota-core tools pwd-hash 83 | # 84 | # or if you are not in the same directory as the docker-compose.yml file: 85 | # 86 | # docker run -it --rm iotaledger/iota-core:1.0-beta tools pwd-hash 87 | # 88 | 89 | # Generate a new password and salt using the following command: 90 | # docker compose run iota-core tools pwd-hash 91 | #DASHBOARD_PASSWORD=0000000000000000000000000000000000000000000000000000000000000000 92 | #DASHBOARD_SALT=0000000000000000000000000000000000000000000000000000000000000000 93 | 94 | ####################### 95 | # blockissuer section # 96 | ####################### 97 | 98 | # Set the account address of the blockissuer service. 99 | #BLOCKISSUER_ACCOUNT_ADDR="" 100 | 101 | # Set the private key of the blockissuer service. 102 | #BLOCKISSUER_PRV_KEY="" 103 | 104 | ##################### 105 | # validator section # 106 | ##################### 107 | 108 | # Set the account address of the validator. 109 | #VALIDATOR_ACCOUNT_ADDR="" 110 | 111 | # Set the private key of the validator. 112 | #VALIDATOR_PRV_KEY="" 113 | -------------------------------------------------------------------------------- /shimmer/env_template: -------------------------------------------------------------------------------- 1 | # This is an example configuration file. 2 | # Keep this file as an example and make a working file with the following command: 3 | # 4 | # cp env_template .env 5 | # 6 | # You can edit the .env file with a command like: 7 | # 8 | # nano .env 9 | # 10 | # The .env file is your personal configuration and is used by Docker. 11 | # Uncomment and edit the lines to fit your needs 12 | 13 | # 14 | # HINT: You either have to choose a HTTP or a HTTPS setup. 15 | # Do not uncomment lines in both sections. 16 | # 17 | 18 | ###################### 19 | # HTTP setup section # 20 | ###################### 21 | 22 | # The default port for the HTTP setup is 80. If you want to change that, uncomment the following line. 23 | #HTTP_PORT=8080 24 | 25 | # HTTP setup is exposed on localhost only by default. 26 | # If you want to expose it in your local network, specify the local IP address of the node in your network. 27 | #NODE_HOST=192.168.1.10 28 | 29 | ####################### 30 | # HTTPS setup section # 31 | ####################### 32 | 33 | # The following line needs to be uncommented to activate HTTPS (HTTP access will be deactivated). 34 | #COMPOSE_FILE=docker-compose.yml:docker-compose-https.yml 35 | 36 | # You need to specify your email address to automatically get a valid SSL certificate via "letsencrypt.org" 37 | #ACME_EMAIL=your-email@example.com 38 | 39 | # You need to specify the domain name of your node to automatically get a valid SSL certificate via "letsencrypt.org" 40 | #NODE_HOST=node.your-domain.com 41 | 42 | #################### 43 | # profiles section # 44 | #################### 45 | 46 | # Uncomment the following line to enable prometheus and grafana 47 | # Grafana will be available under /grafana 48 | # WARNING: Do not forget to set a new password after the first start (default: admin/admin) 49 | #COMPOSE_PROFILES=${COMPOSE_PROFILES},monitoring 50 | 51 | # Uncomment the following line to enable the API endpoint for historical data of the legacy network. 52 | # Legacy API will be available under /api/core/v0 53 | # You need to provide a legacy database under "data/database_legacy/". (Subfolders: "snapshot", "spent", "tangle") 54 | #COMPOSE_PROFILES=${COMPOSE_PROFILES},history-legacy 55 | 56 | # Uncomment the following line to enable the API endpoint for historical data of the chrysalis network. 57 | # Chrysalis API will be available under /api/core/v1 58 | # You need to provide a chrysalis database under "data/database_chrysalis/". (Subfolders: "tangle", "utxo") 59 | #COMPOSE_PROFILES=${COMPOSE_PROFILES},history-chrysalis 60 | 61 | # Uncomment the following line to enable wasp 62 | # WASP API will be available under /wasp/api 63 | # WASP Dashboard will be available under /wasp/dashboard 64 | #COMPOSE_PROFILES=${COMPOSE_PROFILES},wasp 65 | 66 | ################## 67 | # HORNET section # 68 | ################## 69 | 70 | # Overwrite the default config file by uncommenting the following line (default: config.json). 71 | #HORNET_CONFIG_FILE=config.json 72 | 73 | # Uncomment the following line change the HORNET gossip TCP port (default: 15600). 74 | #HORNET_GOSSIP_PORT=15600 75 | 76 | # Uncomment the following line change the HORNET autopeering UDP port (default: 14626). 77 | #HORNET_AUTOPEERING_PORT=14626 78 | 79 | ##################### 80 | # Dashboard section # 81 | ##################### 82 | 83 | # Choose a dashboard username (default: admin) 84 | #DASHBOARD_USERNAME=admin 85 | 86 | # Generate a new password and salt by using the following command: 87 | # 88 | # docker compose run hornet tools pwd-hash 89 | # 90 | # or if you are not in the same directory as the docker-compose.yml file: 91 | # 92 | # docker run -it --rm iotaledger/hornet:latest tools pwd-hash 93 | # 94 | #DASHBOARD_PASSWORD=0000000000000000000000000000000000000000000000000000000000000000 95 | #DASHBOARD_SALT=0000000000000000000000000000000000000000000000000000000000000000 96 | 97 | ################ 98 | # WASP section # 99 | ################ 100 | 101 | # Uncomment the following line if you want to change how many states are kept in wasp (default: 10000). 102 | #WASP_PRUNING_MIN_STATES_TO_KEEP=10000 103 | 104 | # Uncomment the following line if you want to change the wasp snapshot source. 105 | #WASP_SNAPSHOT_NETWORK_PATHS=https://files.shimmer.shimmer.network/wasp_snapshots 106 | -------------------------------------------------------------------------------- /shimmer-testnet/env_template: -------------------------------------------------------------------------------- 1 | # This is an example configuration file. 2 | # Keep this file as an example and make a working file with the following command: 3 | # 4 | # cp env_template .env 5 | # 6 | # You can edit the .env file with a command like: 7 | # 8 | # nano .env 9 | # 10 | # The .env file is your personal configuration and is used by Docker. 11 | # Uncomment and edit the lines to fit your needs 12 | 13 | # 14 | # HINT: You either have to choose a HTTP or a HTTPS setup. 15 | # Do not uncomment lines in both sections. 16 | # 17 | 18 | ###################### 19 | # HTTP setup section # 20 | ###################### 21 | 22 | # The default port for the HTTP setup is 80. If you want to change that, uncomment the following line. 23 | #HTTP_PORT=8080 24 | 25 | # HTTP setup is exposed on localhost only by default. 26 | # If you want to expose it in your local network, specify the local IP address of the node in your network. 27 | #NODE_HOST=192.168.1.10 28 | 29 | ####################### 30 | # HTTPS setup section # 31 | ####################### 32 | 33 | # The following line needs to be uncommented to activate HTTPS (HTTP access will be deactivated). 34 | #COMPOSE_FILE=docker-compose.yml:docker-compose-https.yml 35 | 36 | # You need to specify your email address to automatically get a valid SSL certificate via "letsencrypt.org" 37 | #ACME_EMAIL=your-email@example.com 38 | 39 | # You need to specify the domain name of your node to automatically get a valid SSL certificate via "letsencrypt.org" 40 | #NODE_HOST=node.your-domain.com 41 | 42 | #################### 43 | # profiles section # 44 | #################### 45 | 46 | # Uncomment the following line to enable prometheus and grafana 47 | # Grafana will be available under /grafana 48 | # WARNING: Do not forget to set a new password after the first start (default: admin/admin) 49 | #COMPOSE_PROFILES=${COMPOSE_PROFILES},monitoring 50 | 51 | # Uncomment the following line to enable the API endpoint for historical data of the legacy network. 52 | # Legacy API will be available under /api/core/v0 53 | # You need to provide a legacy database under "data/database_legacy/". (Subfolders: "snapshot", "spent", "tangle") 54 | #COMPOSE_PROFILES=${COMPOSE_PROFILES},history-legacy 55 | 56 | # Uncomment the following line to enable the API endpoint for historical data of the chrysalis network. 57 | # Chrysalis API will be available under /api/core/v1 58 | # You need to provide a chrysalis database under "data/database_chrysalis/". (Subfolders: "tangle", "utxo") 59 | #COMPOSE_PROFILES=${COMPOSE_PROFILES},history-chrysalis 60 | 61 | # Uncomment the following line to enable wasp 62 | # WASP API will be available under /wasp/api 63 | # WASP Dashboard will be available under /wasp/dashboard 64 | #COMPOSE_PROFILES=${COMPOSE_PROFILES},wasp 65 | 66 | ################## 67 | # HORNET section # 68 | ################## 69 | 70 | # Overwrite the default config file by uncommenting the following line (default: config.json). 71 | #HORNET_CONFIG_FILE=config.json 72 | 73 | # Uncomment the following line change the HORNET gossip TCP port (default: 15600). 74 | #HORNET_GOSSIP_PORT=15600 75 | 76 | # Uncomment the following line change the HORNET autopeering UDP port (default: 14626). 77 | #HORNET_AUTOPEERING_PORT=14626 78 | 79 | ##################### 80 | # Dashboard section # 81 | ##################### 82 | 83 | # Choose a dashboard username (default: admin) 84 | #DASHBOARD_USERNAME=admin 85 | 86 | # Generate a new password and salt by using the following command: 87 | # 88 | # docker compose run hornet tools pwd-hash 89 | # 90 | # or if you are not in the same directory as the docker-compose.yml file: 91 | # 92 | # docker run -it --rm iotaledger/hornet:latest tools pwd-hash 93 | # 94 | #DASHBOARD_PASSWORD=0000000000000000000000000000000000000000000000000000000000000000 95 | #DASHBOARD_SALT=0000000000000000000000000000000000000000000000000000000000000000 96 | 97 | ################ 98 | # WASP section # 99 | ################ 100 | 101 | # Uncomment the following line if you want to change how many states are kept in wasp (default: 10000). 102 | #WASP_PRUNING_MIN_STATES_TO_KEEP=10000 103 | 104 | # Uncomment the following line if you want to change the wasp snapshot source. 105 | #WASP_SNAPSHOT_NETWORK_PATHS=https://files.testnet.shimmer.network/wasp_snapshots 106 | -------------------------------------------------------------------------------- /iota-testnet/env_template: -------------------------------------------------------------------------------- 1 | # This is an example configuration file. 2 | # Keep this file as an example and make a working file with the following command: 3 | # 4 | # cp env_template .env 5 | # 6 | # You can edit the .env file with a command like: 7 | # 8 | # nano .env 9 | # 10 | # The .env file is your personal configuration and is used by Docker. 11 | # Uncomment and edit the lines to fit your needs 12 | 13 | # 14 | # HINT: You either have to choose a HTTP or a HTTPS setup. 15 | # Do not uncomment lines in both sections. 16 | # 17 | 18 | ###################### 19 | # HTTP setup section # 20 | ###################### 21 | 22 | # The default port for the HTTP setup is 80. If you want to change that, uncomment the following line. 23 | #HTTP_PORT=8080 24 | 25 | # HTTP setup is exposed on localhost only by default. 26 | # If you want to expose it in your local network, specify the local IP address of the node in your network. 27 | #NODE_HOST=192.168.1.10 28 | 29 | ####################### 30 | # HTTPS setup section # 31 | ####################### 32 | 33 | # The following line needs to be uncommented to activate HTTPS (HTTP access will be deactivated). 34 | #COMPOSE_FILE=docker-compose.yml:docker-compose-https.yml 35 | 36 | # You need to specify your email address to automatically get a valid SSL certificate via "letsencrypt.org" 37 | #ACME_EMAIL=your-email@example.com 38 | 39 | # You need to specify the domain name of your node to automatically get a valid SSL certificate via "letsencrypt.org" 40 | #NODE_HOST=node.your-domain.com 41 | 42 | #################### 43 | # profiles section # 44 | #################### 45 | 46 | # Uncomment the following line to enable prometheus and grafana 47 | # Grafana will be available under /grafana 48 | # WARNING: Do not forget to set a new password after the first start (default: admin/admin) 49 | #COMPOSE_PROFILES=${COMPOSE_PROFILES},monitoring 50 | 51 | # Uncomment the following line to enable the API endpoint for historical data of the legacy network. 52 | # Legacy API will be available under /api/core/v0 53 | # You need to provide a legacy database under "data/database_legacy/". (Subfolders: "snapshot", "spent", "tangle") 54 | #COMPOSE_PROFILES=${COMPOSE_PROFILES},history-legacy 55 | 56 | # Uncomment the following line to enable the API endpoint for historical data of the chrysalis network. 57 | # Chrysalis API will be available under /api/core/v1 58 | # You need to provide a chrysalis database under "data/database_chrysalis/". (Subfolders: "tangle", "utxo") 59 | #COMPOSE_PROFILES=${COMPOSE_PROFILES},history-chrysalis 60 | 61 | # Uncomment the following line to enable wasp 62 | # WASP API will be available under /wasp/api 63 | # WASP Dashboard will be available under /wasp/dashboard 64 | #COMPOSE_PROFILES=${COMPOSE_PROFILES},wasp 65 | 66 | ################## 67 | # HORNET section # 68 | ################## 69 | 70 | # Overwrite the default config file by uncommenting the following line (default: config.json). 71 | #HORNET_CONFIG_FILE=config.json 72 | 73 | # Uncomment the following line change the HORNET gossip TCP port (default: 15600). 74 | #HORNET_GOSSIP_PORT=15600 75 | 76 | # Uncomment the following line change the HORNET autopeering UDP port (default: 14626). 77 | #HORNET_AUTOPEERING_PORT=14626 78 | 79 | ##################### 80 | # Dashboard section # 81 | ##################### 82 | 83 | # Choose a dashboard username (default: admin) 84 | #DASHBOARD_USERNAME=admin 85 | 86 | # Generate a new password and salt by using the following command: 87 | # 88 | # docker compose run hornet tools pwd-hash 89 | # 90 | # or if you are not in the same directory as the docker-compose.yml file: 91 | # 92 | # docker run -it --rm iotaledger/hornet:latest tools pwd-hash 93 | # 94 | #DASHBOARD_PASSWORD=0000000000000000000000000000000000000000000000000000000000000000 95 | #DASHBOARD_SALT=0000000000000000000000000000000000000000000000000000000000000000 96 | 97 | ################ 98 | # WASP section # 99 | ################ 100 | 101 | # Uncomment the following line if you want to change how many states are kept in wasp (default: 10000). 102 | #WASP_PRUNING_MIN_STATES_TO_KEEP=10000 103 | 104 | # Uncomment the following line if you want to change the wasp snapshot source. 105 | #WASP_SNAPSHOT_NETWORK_PATHS=https://files.iota-testnet.iotaledger.net/?prefix=wasp_snapshots/tst1pzxsrr7apqkdzz633dyntmvxwtyvk029p39te5j0m33q6946h7akzv663zu/ 106 | -------------------------------------------------------------------------------- /iota/env_template: -------------------------------------------------------------------------------- 1 | # This is an example configuration file. 2 | # Keep this file as an example and make a working file with the following command: 3 | # 4 | # cp env_template .env 5 | # 6 | # You can edit the .env file with a command like: 7 | # 8 | # nano .env 9 | # 10 | # The .env file is your personal configuration and is used by Docker. 11 | # Uncomment and edit the lines to fit your needs 12 | 13 | # 14 | # HINT: You either have to choose a HTTP or a HTTPS setup. 15 | # Do not uncomment lines in both sections. 16 | # 17 | 18 | ###################### 19 | # HTTP setup section # 20 | ###################### 21 | 22 | # The default port for the HTTP setup is 80. If you want to change that, uncomment the following line. 23 | #HTTP_PORT=8080 24 | 25 | # HTTP setup is exposed on localhost only by default. 26 | # If you want to expose it in your local network, specify the local IP address of the node in your network. 27 | #NODE_HOST=192.168.1.10 28 | 29 | ####################### 30 | # HTTPS setup section # 31 | ####################### 32 | 33 | # The following line needs to be uncommented to activate HTTPS (HTTP access will be deactivated). 34 | #COMPOSE_FILE=docker-compose.yml:docker-compose-https.yml 35 | 36 | # You need to specify your email address to automatically get a valid SSL certificate via "letsencrypt.org" 37 | #ACME_EMAIL=your-email@example.com 38 | 39 | # You need to specify the domain name of your node to automatically get a valid SSL certificate via "letsencrypt.org" 40 | #NODE_HOST=node.your-domain.com 41 | 42 | #################### 43 | # profiles section # 44 | #################### 45 | 46 | # Uncomment the following line to enable prometheus and grafana 47 | # Grafana will be available under /grafana 48 | # WARNING: Do not forget to set a new password after the first start (default: admin/admin) 49 | #COMPOSE_PROFILES=${COMPOSE_PROFILES},monitoring 50 | 51 | # Uncomment the following line to enable the API endpoint for historical data of the legacy network. 52 | # Legacy API will be available under /api/core/v0 53 | # You need to provide a legacy database under "data/database_legacy/". (Subfolders: "snapshot", "spent", "tangle") 54 | #COMPOSE_PROFILES=${COMPOSE_PROFILES},history-legacy 55 | 56 | # Uncomment the following line to enable the API endpoint for historical data of the chrysalis network. 57 | # Chrysalis API will be available under /api/core/v1 58 | # You need to provide a chrysalis database under "data/database_chrysalis/". (Subfolders: "tangle", "utxo") 59 | #COMPOSE_PROFILES=${COMPOSE_PROFILES},history-chrysalis 60 | 61 | # Uncomment the following line to enable wasp 62 | # WASP API will be available under /wasp/api 63 | # WASP Dashboard will be available under /wasp/dashboard 64 | #COMPOSE_PROFILES=${COMPOSE_PROFILES},wasp 65 | 66 | ################## 67 | # HORNET section # 68 | ################## 69 | 70 | # Overwrite the default config file by uncommenting the following line (default: config.json). 71 | #HORNET_CONFIG_FILE=config.json 72 | 73 | # Uncomment the following line change the HORNET gossip TCP port (default: 15600). 74 | #HORNET_GOSSIP_PORT=15600 75 | 76 | # Uncomment the following line change the HORNET autopeering UDP port (default: 14626). 77 | #HORNET_AUTOPEERING_PORT=14626 78 | 79 | ##################### 80 | # Dashboard section # 81 | ##################### 82 | 83 | # Choose a dashboard username (default: admin) 84 | #DASHBOARD_USERNAME=admin 85 | 86 | # Generate a new password and salt by using the following command: 87 | # 88 | # docker compose run hornet tools pwd-hash 89 | # 90 | # or if you are not in the same directory as the docker-compose.yml file: 91 | # 92 | # docker run -it --rm iotaledger/hornet:latest tools pwd-hash 93 | # 94 | #DASHBOARD_PASSWORD=0000000000000000000000000000000000000000000000000000000000000000 95 | #DASHBOARD_SALT=0000000000000000000000000000000000000000000000000000000000000000 96 | 97 | ################ 98 | # WASP section # 99 | ################ 100 | 101 | # Uncomment the following line if you want to change how many states are kept in wasp (default: 10000). 102 | #WASP_PRUNING_MIN_STATES_TO_KEEP=10000 103 | 104 | # Uncomment the following line if you want to change the wasp snapshot source. 105 | #WASP_SNAPSHOT_NETWORK_PATHS=https://files.stardust-mainnet.iotaledger.net/?prefix=wasp_snapshots/iota1pzt3mstq6khgc3tl0mwuzk3eqddkryqnpdxmk4nr25re2466uxwm28qqxu5/ 106 | -------------------------------------------------------------------------------- /iota2-testnet/assets/grafana/dashboards/iota-core_monitoring.json: -------------------------------------------------------------------------------- 1 | { 2 | "annotations": { 3 | "list": [ 4 | { 5 | "builtIn": 1, 6 | "datasource": { 7 | "type": "datasource", 8 | "uid": "grafana" 9 | }, 10 | "enable": true, 11 | "hide": true, 12 | "iconColor": "rgba(0, 211, 255, 1)", 13 | "name": "Annotations & Alerts", 14 | "target": { 15 | "limit": 100, 16 | "matchAny": false, 17 | "tags": [], 18 | "type": "dashboard" 19 | }, 20 | "type": "dashboard" 21 | } 22 | ] 23 | }, 24 | "editable": true, 25 | "fiscalYearStartMonth": 0, 26 | "graphTooltip": 0, 27 | "id": 2, 28 | "links": [], 29 | "liveNow": false, 30 | "panels": [ 31 | { 32 | "alert": { 33 | "alertRuleTags": {}, 34 | "block": "Some of the iota-core instances are out of sync. Please fix ASAP! Below is the list of the nodes currently out of sync.", 35 | "conditions": [ 36 | { 37 | "evaluator": { 38 | "params": [ 39 | 1 40 | ], 41 | "type": "lt" 42 | }, 43 | "operator": { 44 | "type": "and" 45 | }, 46 | "query": { 47 | "params": [ 48 | "A", 49 | "1m", 50 | "now" 51 | ] 52 | }, 53 | "reducer": { 54 | "params": [], 55 | "type": "min" 56 | }, 57 | "type": "query" 58 | } 59 | ], 60 | "executionErrorState": "alerting", 61 | "for": "5m", 62 | "frequency": "1m", 63 | "handler": 1, 64 | "name": "iota-core Sync Monitoring", 65 | "noDataState": "alerting", 66 | "notifications": [] 67 | }, 68 | "datasource": { 69 | "type": "prometheus", 70 | "uid": "PBFA97CFB590B2093" 71 | }, 72 | "fieldConfig": { 73 | "defaults": { 74 | "color": { 75 | "mode": "palette-classic" 76 | }, 77 | "custom": { 78 | "axisCenteredZero": false, 79 | "axisColorMode": "text", 80 | "axisLabel": "", 81 | "axisPlacement": "auto", 82 | "barAlignment": 0, 83 | "drawStyle": "line", 84 | "fillOpacity": 0, 85 | "gradientMode": "none", 86 | "hideFrom": { 87 | "legend": false, 88 | "tooltip": false, 89 | "viz": false 90 | }, 91 | "lineInterpolation": "linear", 92 | "lineWidth": 1, 93 | "pointSize": 5, 94 | "scaleDistribution": { 95 | "type": "linear" 96 | }, 97 | "showPoints": "auto", 98 | "spanNulls": false, 99 | "stacking": { 100 | "group": "A", 101 | "mode": "none" 102 | }, 103 | "thresholdsStyle": { 104 | "mode": "off" 105 | } 106 | }, 107 | "mappings": [], 108 | "thresholds": { 109 | "mode": "absolute", 110 | "steps": [ 111 | { 112 | "color": "green", 113 | "value": null 114 | }, 115 | { 116 | "color": "red", 117 | "value": 80 118 | } 119 | ] 120 | } 121 | }, 122 | "overrides": [] 123 | }, 124 | "gridPos": { 125 | "h": 8, 126 | "w": 24, 127 | "x": 0, 128 | "y": 0 129 | }, 130 | "id": 4, 131 | "options": { 132 | "legend": { 133 | "calcs": [], 134 | "displayMode": "list", 135 | "placement": "bottom", 136 | "showLegend": true 137 | }, 138 | "tooltip": { 139 | "mode": "single", 140 | "sort": "none" 141 | } 142 | }, 143 | "targets": [ 144 | { 145 | "datasource": { 146 | "type": "prometheus", 147 | "uid": "PBFA97CFB590B2093" 148 | }, 149 | "exemplar": true, 150 | "expr": "info_sync_status", 151 | "interval": "", 152 | "legendFormat": "{{instance}}", 153 | "refId": "A" 154 | } 155 | ], 156 | "thresholds": [ 157 | { 158 | "colorMode": "critical", 159 | "op": "lt", 160 | "value": 1, 161 | "visible": true 162 | } 163 | ], 164 | "title": "iota-core Sync Monitoring", 165 | "type": "timeseries" 166 | } 167 | ], 168 | "refresh": "10s", 169 | "schemaVersion": 38, 170 | "style": "dark", 171 | "tags": [], 172 | "templating": { 173 | "list": [] 174 | }, 175 | "time": { 176 | "from": "now-30m", 177 | "to": "now" 178 | }, 179 | "timepicker": {}, 180 | "timezone": "", 181 | "title": "Node Monitoring", 182 | "uid": "oZ_NLw17k", 183 | "version": 2, 184 | "weekStart": "" 185 | } 186 | -------------------------------------------------------------------------------- /iota/config_defaults.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": { 3 | "checkForUpdates": true, 4 | "shutdown": { 5 | "stopGracePeriod": "5m", 6 | "log": { 7 | "enabled": true, 8 | "filePath": "shutdown.log" 9 | } 10 | } 11 | }, 12 | "logger": { 13 | "level": "info", 14 | "disableCaller": true, 15 | "disableStacktrace": false, 16 | "stacktraceLevel": "panic", 17 | "encoding": "console", 18 | "encodingConfig": { 19 | "timeEncoder": "rfc3339" 20 | }, 21 | "outputPaths": [ 22 | "stdout" 23 | ], 24 | "disableEvents": true 25 | }, 26 | "node": { 27 | "profile": "auto", 28 | "alias": "HORNET node" 29 | }, 30 | "protocol": { 31 | "targetNetworkName": "iota-mainnet", 32 | "milestonePublicKeyCount": 7, 33 | "baseToken": { 34 | "name": "IOTA", 35 | "tickerSymbol": "IOTA", 36 | "unit": "IOTA", 37 | "subunit": "micro", 38 | "decimals": 6, 39 | "useMetricPrefix": false 40 | }, 41 | "publicKeyRanges": [ 42 | { 43 | "key": "2fb1d7ec714adf365eefa343b66c0c459a9930276aff08cde482cb8050028624", 44 | "start": 0, 45 | "end": 0 46 | }, 47 | { 48 | "key": "8845cd560d66d50070c6e251d7a0a19f8de217fabf53a78ee15b41d85a489cc6", 49 | "start": 0, 50 | "end": 0 51 | }, 52 | { 53 | "key": "1d61aab6f7e52129b78fcdf9568def0baa9c71112964f5b4d86ffc406866a986", 54 | "start": 0, 55 | "end": 0 56 | }, 57 | { 58 | "key": "fa94be504dfb10876a449db5272f19393ded922cbe3b023b4e57b62a53835721", 59 | "start": 0, 60 | "end": 0 61 | }, 62 | { 63 | "key": "5fadfabe6944f5f0166ada11452c642010339f916e28187ecf8b4a207c8dba47", 64 | "start": 0, 65 | "end": 0 66 | }, 67 | { 68 | "key": "347e6892d72b71e0423bd14daaf61d2ac35e91852fa5b155b92ddda0e064f55f", 69 | "start": 0, 70 | "end": 0 71 | }, 72 | { 73 | "key": "0e403f526a66b4c0b18e8b0257671b07892a419e4b6e4540707d9a4793d1e3be", 74 | "start": 0, 75 | "end": 0 76 | }, 77 | { 78 | "key": "3af73a609696ff6fe63c36d060455cd83ec23edea2d2b87d5317004849cc0e9a", 79 | "start": 0, 80 | "end": 0 81 | }, 82 | { 83 | "key": "ee1bfa9e791a9f57ea72c6192b000d906f21479ba8f40bb20cdd8badb7ddcb78", 84 | "start": 0, 85 | "end": 0 86 | }, 87 | { 88 | "key": "083d7af99250a06d086b07bdd5bccd2bff406ee17e19332ccdb08d8be72218ce", 89 | "start": 0, 90 | "end": 0 91 | } 92 | ] 93 | }, 94 | "db": { 95 | "engine": "rocksdb", 96 | "path": "mainnet/database", 97 | "autoRevalidation": false, 98 | "checkLedgerStateOnStartup": false 99 | }, 100 | "pow": { 101 | "refreshTipsInterval": "5s" 102 | }, 103 | "p2p": { 104 | "bindMultiAddresses": [ 105 | "/ip4/0.0.0.0/tcp/15600", 106 | "/ip6/::/tcp/15600" 107 | ], 108 | "connectionManager": { 109 | "highWatermark": 10, 110 | "lowWatermark": 5 111 | }, 112 | "identityPrivateKey": "", 113 | "db": { 114 | "path": "mainnet/p2pstore" 115 | }, 116 | "reconnectInterval": "30s", 117 | "gossip": { 118 | "unknownPeersLimit": 4, 119 | "streamReadTimeout": "1m", 120 | "streamWriteTimeout": "10s" 121 | }, 122 | "autopeering": { 123 | "enabled": false, 124 | "bindAddress": "0.0.0.0:14626", 125 | "entryNodes": [ 126 | "/dns/entry-hornet-0.h.stardust-mainnet.iotaledger.net/udp/14626/autopeering/K4cHM64KxzYJ5ZB2a9P3stJUHjvQDh4bzhCw49xDowi", 127 | "/dns/entry-hornet-1.h.stardust-mainnet.iotaledger.net/udp/14626/autopeering/8UbVu5MjRZH2c9fnEdpfPvd7qqDgrVFsNsvc933FuMTm" 128 | ], 129 | "entryNodesPreferIPv6": false, 130 | "runAsEntryNode": false 131 | } 132 | }, 133 | "requests": { 134 | "discardOlderThan": "15s", 135 | "pendingReEnqueueInterval": "5s" 136 | }, 137 | "tangle": { 138 | "milestoneTimeout": "30s", 139 | "maxDeltaBlockYoungestConeRootIndexToCMI": 8, 140 | "maxDeltaBlockOldestConeRootIndexToCMI": 13, 141 | "whiteFlagParentsSolidTimeout": "2s" 142 | }, 143 | "snapshots": { 144 | "enabled": false, 145 | "depth": 50, 146 | "interval": 200, 147 | "fullPath": "mainnet/snapshots/full_snapshot.bin", 148 | "deltaPath": "mainnet/snapshots/delta_snapshot.bin", 149 | "deltaSizeThresholdPercentage": 50, 150 | "deltaSizeThresholdMinSize": "50M", 151 | "downloadURLs": [ 152 | { 153 | "full": "https://files.stardust-mainnet.iotaledger.net/snapshots/latest-full_snapshot.bin", 154 | "delta": "https://files.stardust-mainnet.iotaledger.net/snapshots/latest-delta_snapshot.bin" 155 | } 156 | ] 157 | }, 158 | "pruning": { 159 | "milestones": { 160 | "enabled": false, 161 | "maxMilestonesToKeep": 60480 162 | }, 163 | "size": { 164 | "enabled": true, 165 | "targetSize": "30GB", 166 | "thresholdPercentage": 10, 167 | "cooldownTime": "5m" 168 | }, 169 | "pruneReceipts": false 170 | }, 171 | "profiling": { 172 | "enabled": false, 173 | "bindAddress": "localhost:6060" 174 | }, 175 | "restAPI": { 176 | "enabled": true, 177 | "bindAddress": "0.0.0.0:14265", 178 | "publicRoutes": [ 179 | "/health", 180 | "/api/routes", 181 | "/api/core/v2/info", 182 | "/api/core/v2/tips", 183 | "/api/core/v2/blocks*", 184 | "/api/core/v2/transactions*", 185 | "/api/core/v2/milestones*", 186 | "/api/core/v2/outputs*", 187 | "/api/core/v2/treasury", 188 | "/api/core/v2/receipts*", 189 | "/api/debug/v1/*", 190 | "/api/indexer/v1/*", 191 | "/api/mqtt/v1", 192 | "/api/participation/v1/events*", 193 | "/api/participation/v1/outputs*", 194 | "/api/participation/v1/addresses*" 195 | ], 196 | "protectedRoutes": [ 197 | "/api/*" 198 | ], 199 | "debugRequestLoggerEnabled": false, 200 | "jwtAuth": { 201 | "salt": "HORNET" 202 | }, 203 | "pow": { 204 | "enabled": false, 205 | "workerCount": 1 206 | }, 207 | "limits": { 208 | "maxBodyLength": "1M", 209 | "maxResults": 1000 210 | } 211 | }, 212 | "warpsync": { 213 | "enabled": true, 214 | "advancementRange": 150 215 | }, 216 | "tipsel": { 217 | "enabled": true, 218 | "nonLazy": { 219 | "retentionRulesTipsLimit": 100, 220 | "maxReferencedTipAge": "3s", 221 | "maxChildren": 30 222 | }, 223 | "semiLazy": { 224 | "retentionRulesTipsLimit": 20, 225 | "maxReferencedTipAge": "3s", 226 | "maxChildren": 2 227 | } 228 | }, 229 | "receipts": { 230 | "enabled": false, 231 | "backup": { 232 | "enabled": false, 233 | "path": "receipts" 234 | }, 235 | "validator": { 236 | "validate": false, 237 | "ignoreSoftErrors": false, 238 | "api": { 239 | "address": "http://localhost:14266", 240 | "timeout": "5s" 241 | }, 242 | "coordinator": { 243 | "address": "UDYXTZBE9GZGPM9SSQV9LTZNDLJIZMPUVVXYXFYVBLIEUHLSEWFTKZZLXYRHHWVQV9MNNX9KZC9D9UZWZ", 244 | "merkleTreeDepth": 24 245 | } 246 | } 247 | }, 248 | "prometheus": { 249 | "enabled": false, 250 | "bindAddress": "localhost:9311", 251 | "fileServiceDiscovery": { 252 | "enabled": false, 253 | "path": "target.json", 254 | "target": "localhost:9311" 255 | }, 256 | "databaseMetrics": true, 257 | "nodeMetrics": true, 258 | "gossipMetrics": true, 259 | "cachesMetrics": true, 260 | "restAPIMetrics": true, 261 | "inxMetrics": true, 262 | "migrationMetrics": true, 263 | "debugMetrics": false, 264 | "goMetrics": false, 265 | "processMetrics": false, 266 | "promhttpMetrics": false 267 | }, 268 | "inx": { 269 | "enabled": false, 270 | "bindAddress": "localhost:9029", 271 | "pow": { 272 | "workerCount": 0 273 | } 274 | }, 275 | "debug": { 276 | "enabled": false 277 | } 278 | } 279 | -------------------------------------------------------------------------------- /shimmer/config_defaults.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": { 3 | "checkForUpdates": true, 4 | "shutdown": { 5 | "stopGracePeriod": "5m", 6 | "log": { 7 | "enabled": true, 8 | "filePath": "shutdown.log" 9 | } 10 | } 11 | }, 12 | "logger": { 13 | "level": "info", 14 | "disableCaller": true, 15 | "disableStacktrace": false, 16 | "stacktraceLevel": "panic", 17 | "encoding": "console", 18 | "encodingConfig": { 19 | "timeEncoder": "rfc3339" 20 | }, 21 | "outputPaths": [ 22 | "stdout" 23 | ], 24 | "disableEvents": true 25 | }, 26 | "node": { 27 | "profile": "auto", 28 | "alias": "HORNET node" 29 | }, 30 | "protocol": { 31 | "targetNetworkName": "iota-mainnet", 32 | "milestonePublicKeyCount": 7, 33 | "baseToken": { 34 | "name": "IOTA", 35 | "tickerSymbol": "IOTA", 36 | "unit": "IOTA", 37 | "subunit": "micro", 38 | "decimals": 6, 39 | "useMetricPrefix": false 40 | }, 41 | "publicKeyRanges": [ 42 | { 43 | "key": "2fb1d7ec714adf365eefa343b66c0c459a9930276aff08cde482cb8050028624", 44 | "start": 0, 45 | "end": 0 46 | }, 47 | { 48 | "key": "8845cd560d66d50070c6e251d7a0a19f8de217fabf53a78ee15b41d85a489cc6", 49 | "start": 0, 50 | "end": 0 51 | }, 52 | { 53 | "key": "1d61aab6f7e52129b78fcdf9568def0baa9c71112964f5b4d86ffc406866a986", 54 | "start": 0, 55 | "end": 0 56 | }, 57 | { 58 | "key": "fa94be504dfb10876a449db5272f19393ded922cbe3b023b4e57b62a53835721", 59 | "start": 0, 60 | "end": 0 61 | }, 62 | { 63 | "key": "5fadfabe6944f5f0166ada11452c642010339f916e28187ecf8b4a207c8dba47", 64 | "start": 0, 65 | "end": 0 66 | }, 67 | { 68 | "key": "347e6892d72b71e0423bd14daaf61d2ac35e91852fa5b155b92ddda0e064f55f", 69 | "start": 0, 70 | "end": 0 71 | }, 72 | { 73 | "key": "0e403f526a66b4c0b18e8b0257671b07892a419e4b6e4540707d9a4793d1e3be", 74 | "start": 0, 75 | "end": 0 76 | }, 77 | { 78 | "key": "3af73a609696ff6fe63c36d060455cd83ec23edea2d2b87d5317004849cc0e9a", 79 | "start": 0, 80 | "end": 0 81 | }, 82 | { 83 | "key": "ee1bfa9e791a9f57ea72c6192b000d906f21479ba8f40bb20cdd8badb7ddcb78", 84 | "start": 0, 85 | "end": 0 86 | }, 87 | { 88 | "key": "083d7af99250a06d086b07bdd5bccd2bff406ee17e19332ccdb08d8be72218ce", 89 | "start": 0, 90 | "end": 0 91 | } 92 | ] 93 | }, 94 | "db": { 95 | "engine": "rocksdb", 96 | "path": "mainnet/database", 97 | "autoRevalidation": false, 98 | "checkLedgerStateOnStartup": false 99 | }, 100 | "pow": { 101 | "refreshTipsInterval": "5s" 102 | }, 103 | "p2p": { 104 | "bindMultiAddresses": [ 105 | "/ip4/0.0.0.0/tcp/15600", 106 | "/ip6/::/tcp/15600" 107 | ], 108 | "connectionManager": { 109 | "highWatermark": 10, 110 | "lowWatermark": 5 111 | }, 112 | "identityPrivateKey": "", 113 | "db": { 114 | "path": "mainnet/p2pstore" 115 | }, 116 | "reconnectInterval": "30s", 117 | "gossip": { 118 | "unknownPeersLimit": 4, 119 | "streamReadTimeout": "1m", 120 | "streamWriteTimeout": "10s" 121 | }, 122 | "autopeering": { 123 | "enabled": false, 124 | "bindAddress": "0.0.0.0:14626", 125 | "entryNodes": [ 126 | "/dns/entry-hornet-0.h.stardust-mainnet.iotaledger.net/udp/14626/autopeering/K4cHM64KxzYJ5ZB2a9P3stJUHjvQDh4bzhCw49xDowi", 127 | "/dns/entry-hornet-1.h.stardust-mainnet.iotaledger.net/udp/14626/autopeering/8UbVu5MjRZH2c9fnEdpfPvd7qqDgrVFsNsvc933FuMTm" 128 | ], 129 | "entryNodesPreferIPv6": false, 130 | "runAsEntryNode": false 131 | } 132 | }, 133 | "requests": { 134 | "discardOlderThan": "15s", 135 | "pendingReEnqueueInterval": "5s" 136 | }, 137 | "tangle": { 138 | "milestoneTimeout": "30s", 139 | "maxDeltaBlockYoungestConeRootIndexToCMI": 8, 140 | "maxDeltaBlockOldestConeRootIndexToCMI": 13, 141 | "whiteFlagParentsSolidTimeout": "2s" 142 | }, 143 | "snapshots": { 144 | "enabled": false, 145 | "depth": 50, 146 | "interval": 200, 147 | "fullPath": "mainnet/snapshots/full_snapshot.bin", 148 | "deltaPath": "mainnet/snapshots/delta_snapshot.bin", 149 | "deltaSizeThresholdPercentage": 50, 150 | "deltaSizeThresholdMinSize": "50M", 151 | "downloadURLs": [ 152 | { 153 | "full": "https://files.stardust-mainnet.iotaledger.net/snapshots/latest-full_snapshot.bin", 154 | "delta": "https://files.stardust-mainnet.iotaledger.net/snapshots/latest-delta_snapshot.bin" 155 | } 156 | ] 157 | }, 158 | "pruning": { 159 | "milestones": { 160 | "enabled": false, 161 | "maxMilestonesToKeep": 60480 162 | }, 163 | "size": { 164 | "enabled": true, 165 | "targetSize": "30GB", 166 | "thresholdPercentage": 10, 167 | "cooldownTime": "5m" 168 | }, 169 | "pruneReceipts": false 170 | }, 171 | "profiling": { 172 | "enabled": false, 173 | "bindAddress": "localhost:6060" 174 | }, 175 | "restAPI": { 176 | "enabled": true, 177 | "bindAddress": "0.0.0.0:14265", 178 | "publicRoutes": [ 179 | "/health", 180 | "/api/routes", 181 | "/api/core/v2/info", 182 | "/api/core/v2/tips", 183 | "/api/core/v2/blocks*", 184 | "/api/core/v2/transactions*", 185 | "/api/core/v2/milestones*", 186 | "/api/core/v2/outputs*", 187 | "/api/core/v2/treasury", 188 | "/api/core/v2/receipts*", 189 | "/api/debug/v1/*", 190 | "/api/indexer/v1/*", 191 | "/api/mqtt/v1", 192 | "/api/participation/v1/events*", 193 | "/api/participation/v1/outputs*", 194 | "/api/participation/v1/addresses*" 195 | ], 196 | "protectedRoutes": [ 197 | "/api/*" 198 | ], 199 | "debugRequestLoggerEnabled": false, 200 | "jwtAuth": { 201 | "salt": "HORNET" 202 | }, 203 | "pow": { 204 | "enabled": false, 205 | "workerCount": 1 206 | }, 207 | "limits": { 208 | "maxBodyLength": "1M", 209 | "maxResults": 1000 210 | } 211 | }, 212 | "warpsync": { 213 | "enabled": true, 214 | "advancementRange": 150 215 | }, 216 | "tipsel": { 217 | "enabled": true, 218 | "nonLazy": { 219 | "retentionRulesTipsLimit": 100, 220 | "maxReferencedTipAge": "3s", 221 | "maxChildren": 30 222 | }, 223 | "semiLazy": { 224 | "retentionRulesTipsLimit": 20, 225 | "maxReferencedTipAge": "3s", 226 | "maxChildren": 2 227 | } 228 | }, 229 | "receipts": { 230 | "enabled": false, 231 | "backup": { 232 | "enabled": false, 233 | "path": "receipts" 234 | }, 235 | "validator": { 236 | "validate": false, 237 | "ignoreSoftErrors": false, 238 | "api": { 239 | "address": "http://localhost:14266", 240 | "timeout": "5s" 241 | }, 242 | "coordinator": { 243 | "address": "UDYXTZBE9GZGPM9SSQV9LTZNDLJIZMPUVVXYXFYVBLIEUHLSEWFTKZZLXYRHHWVQV9MNNX9KZC9D9UZWZ", 244 | "merkleTreeDepth": 24 245 | } 246 | } 247 | }, 248 | "prometheus": { 249 | "enabled": false, 250 | "bindAddress": "localhost:9311", 251 | "fileServiceDiscovery": { 252 | "enabled": false, 253 | "path": "target.json", 254 | "target": "localhost:9311" 255 | }, 256 | "databaseMetrics": true, 257 | "nodeMetrics": true, 258 | "gossipMetrics": true, 259 | "cachesMetrics": true, 260 | "restAPIMetrics": true, 261 | "inxMetrics": true, 262 | "migrationMetrics": true, 263 | "debugMetrics": false, 264 | "goMetrics": false, 265 | "processMetrics": false, 266 | "promhttpMetrics": false 267 | }, 268 | "inx": { 269 | "enabled": false, 270 | "bindAddress": "localhost:9029", 271 | "pow": { 272 | "workerCount": 0 273 | } 274 | }, 275 | "debug": { 276 | "enabled": false 277 | } 278 | } 279 | -------------------------------------------------------------------------------- /iota-testnet/config_defaults.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": { 3 | "checkForUpdates": true, 4 | "shutdown": { 5 | "stopGracePeriod": "5m", 6 | "log": { 7 | "enabled": true, 8 | "filePath": "shutdown.log" 9 | } 10 | } 11 | }, 12 | "logger": { 13 | "level": "info", 14 | "disableCaller": true, 15 | "disableStacktrace": false, 16 | "stacktraceLevel": "panic", 17 | "encoding": "console", 18 | "encodingConfig": { 19 | "timeEncoder": "rfc3339" 20 | }, 21 | "outputPaths": [ 22 | "stdout" 23 | ], 24 | "disableEvents": true 25 | }, 26 | "node": { 27 | "profile": "auto", 28 | "alias": "HORNET node" 29 | }, 30 | "protocol": { 31 | "targetNetworkName": "iota-mainnet", 32 | "milestonePublicKeyCount": 7, 33 | "baseToken": { 34 | "name": "IOTA", 35 | "tickerSymbol": "IOTA", 36 | "unit": "IOTA", 37 | "subunit": "micro", 38 | "decimals": 6, 39 | "useMetricPrefix": false 40 | }, 41 | "publicKeyRanges": [ 42 | { 43 | "key": "2fb1d7ec714adf365eefa343b66c0c459a9930276aff08cde482cb8050028624", 44 | "start": 0, 45 | "end": 0 46 | }, 47 | { 48 | "key": "8845cd560d66d50070c6e251d7a0a19f8de217fabf53a78ee15b41d85a489cc6", 49 | "start": 0, 50 | "end": 0 51 | }, 52 | { 53 | "key": "1d61aab6f7e52129b78fcdf9568def0baa9c71112964f5b4d86ffc406866a986", 54 | "start": 0, 55 | "end": 0 56 | }, 57 | { 58 | "key": "fa94be504dfb10876a449db5272f19393ded922cbe3b023b4e57b62a53835721", 59 | "start": 0, 60 | "end": 0 61 | }, 62 | { 63 | "key": "5fadfabe6944f5f0166ada11452c642010339f916e28187ecf8b4a207c8dba47", 64 | "start": 0, 65 | "end": 0 66 | }, 67 | { 68 | "key": "347e6892d72b71e0423bd14daaf61d2ac35e91852fa5b155b92ddda0e064f55f", 69 | "start": 0, 70 | "end": 0 71 | }, 72 | { 73 | "key": "0e403f526a66b4c0b18e8b0257671b07892a419e4b6e4540707d9a4793d1e3be", 74 | "start": 0, 75 | "end": 0 76 | }, 77 | { 78 | "key": "3af73a609696ff6fe63c36d060455cd83ec23edea2d2b87d5317004849cc0e9a", 79 | "start": 0, 80 | "end": 0 81 | }, 82 | { 83 | "key": "ee1bfa9e791a9f57ea72c6192b000d906f21479ba8f40bb20cdd8badb7ddcb78", 84 | "start": 0, 85 | "end": 0 86 | }, 87 | { 88 | "key": "083d7af99250a06d086b07bdd5bccd2bff406ee17e19332ccdb08d8be72218ce", 89 | "start": 0, 90 | "end": 0 91 | } 92 | ] 93 | }, 94 | "db": { 95 | "engine": "rocksdb", 96 | "path": "mainnet/database", 97 | "autoRevalidation": false, 98 | "checkLedgerStateOnStartup": false 99 | }, 100 | "pow": { 101 | "refreshTipsInterval": "5s" 102 | }, 103 | "p2p": { 104 | "bindMultiAddresses": [ 105 | "/ip4/0.0.0.0/tcp/15600", 106 | "/ip6/::/tcp/15600" 107 | ], 108 | "connectionManager": { 109 | "highWatermark": 10, 110 | "lowWatermark": 5 111 | }, 112 | "identityPrivateKey": "", 113 | "db": { 114 | "path": "mainnet/p2pstore" 115 | }, 116 | "reconnectInterval": "30s", 117 | "gossip": { 118 | "unknownPeersLimit": 4, 119 | "streamReadTimeout": "1m", 120 | "streamWriteTimeout": "10s" 121 | }, 122 | "autopeering": { 123 | "enabled": false, 124 | "bindAddress": "0.0.0.0:14626", 125 | "entryNodes": [ 126 | "/dns/entry-hornet-0.h.stardust-mainnet.iotaledger.net/udp/14626/autopeering/K4cHM64KxzYJ5ZB2a9P3stJUHjvQDh4bzhCw49xDowi", 127 | "/dns/entry-hornet-1.h.stardust-mainnet.iotaledger.net/udp/14626/autopeering/8UbVu5MjRZH2c9fnEdpfPvd7qqDgrVFsNsvc933FuMTm" 128 | ], 129 | "entryNodesPreferIPv6": false, 130 | "runAsEntryNode": false 131 | } 132 | }, 133 | "requests": { 134 | "discardOlderThan": "15s", 135 | "pendingReEnqueueInterval": "5s" 136 | }, 137 | "tangle": { 138 | "milestoneTimeout": "30s", 139 | "maxDeltaBlockYoungestConeRootIndexToCMI": 8, 140 | "maxDeltaBlockOldestConeRootIndexToCMI": 13, 141 | "whiteFlagParentsSolidTimeout": "2s" 142 | }, 143 | "snapshots": { 144 | "enabled": false, 145 | "depth": 50, 146 | "interval": 200, 147 | "fullPath": "mainnet/snapshots/full_snapshot.bin", 148 | "deltaPath": "mainnet/snapshots/delta_snapshot.bin", 149 | "deltaSizeThresholdPercentage": 50, 150 | "deltaSizeThresholdMinSize": "50M", 151 | "downloadURLs": [ 152 | { 153 | "full": "https://files.stardust-mainnet.iotaledger.net/snapshots/latest-full_snapshot.bin", 154 | "delta": "https://files.stardust-mainnet.iotaledger.net/snapshots/latest-delta_snapshot.bin" 155 | } 156 | ] 157 | }, 158 | "pruning": { 159 | "milestones": { 160 | "enabled": false, 161 | "maxMilestonesToKeep": 60480 162 | }, 163 | "size": { 164 | "enabled": true, 165 | "targetSize": "30GB", 166 | "thresholdPercentage": 10, 167 | "cooldownTime": "5m" 168 | }, 169 | "pruneReceipts": false 170 | }, 171 | "profiling": { 172 | "enabled": false, 173 | "bindAddress": "localhost:6060" 174 | }, 175 | "restAPI": { 176 | "enabled": true, 177 | "bindAddress": "0.0.0.0:14265", 178 | "publicRoutes": [ 179 | "/health", 180 | "/api/routes", 181 | "/api/core/v2/info", 182 | "/api/core/v2/tips", 183 | "/api/core/v2/blocks*", 184 | "/api/core/v2/transactions*", 185 | "/api/core/v2/milestones*", 186 | "/api/core/v2/outputs*", 187 | "/api/core/v2/treasury", 188 | "/api/core/v2/receipts*", 189 | "/api/debug/v1/*", 190 | "/api/indexer/v1/*", 191 | "/api/mqtt/v1", 192 | "/api/participation/v1/events*", 193 | "/api/participation/v1/outputs*", 194 | "/api/participation/v1/addresses*" 195 | ], 196 | "protectedRoutes": [ 197 | "/api/*" 198 | ], 199 | "debugRequestLoggerEnabled": false, 200 | "jwtAuth": { 201 | "salt": "HORNET" 202 | }, 203 | "pow": { 204 | "enabled": false, 205 | "workerCount": 1 206 | }, 207 | "limits": { 208 | "maxBodyLength": "1M", 209 | "maxResults": 1000 210 | } 211 | }, 212 | "warpsync": { 213 | "enabled": true, 214 | "advancementRange": 150 215 | }, 216 | "tipsel": { 217 | "enabled": true, 218 | "nonLazy": { 219 | "retentionRulesTipsLimit": 100, 220 | "maxReferencedTipAge": "3s", 221 | "maxChildren": 30 222 | }, 223 | "semiLazy": { 224 | "retentionRulesTipsLimit": 20, 225 | "maxReferencedTipAge": "3s", 226 | "maxChildren": 2 227 | } 228 | }, 229 | "receipts": { 230 | "enabled": false, 231 | "backup": { 232 | "enabled": false, 233 | "path": "receipts" 234 | }, 235 | "validator": { 236 | "validate": false, 237 | "ignoreSoftErrors": false, 238 | "api": { 239 | "address": "http://localhost:14266", 240 | "timeout": "5s" 241 | }, 242 | "coordinator": { 243 | "address": "UDYXTZBE9GZGPM9SSQV9LTZNDLJIZMPUVVXYXFYVBLIEUHLSEWFTKZZLXYRHHWVQV9MNNX9KZC9D9UZWZ", 244 | "merkleTreeDepth": 24 245 | } 246 | } 247 | }, 248 | "prometheus": { 249 | "enabled": false, 250 | "bindAddress": "localhost:9311", 251 | "fileServiceDiscovery": { 252 | "enabled": false, 253 | "path": "target.json", 254 | "target": "localhost:9311" 255 | }, 256 | "databaseMetrics": true, 257 | "nodeMetrics": true, 258 | "gossipMetrics": true, 259 | "cachesMetrics": true, 260 | "restAPIMetrics": true, 261 | "inxMetrics": true, 262 | "migrationMetrics": true, 263 | "debugMetrics": false, 264 | "goMetrics": false, 265 | "processMetrics": false, 266 | "promhttpMetrics": false 267 | }, 268 | "inx": { 269 | "enabled": false, 270 | "bindAddress": "localhost:9029", 271 | "pow": { 272 | "workerCount": 0 273 | } 274 | }, 275 | "debug": { 276 | "enabled": false 277 | } 278 | } 279 | -------------------------------------------------------------------------------- /shimmer-testnet/config_defaults.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": { 3 | "checkForUpdates": true, 4 | "shutdown": { 5 | "stopGracePeriod": "5m", 6 | "log": { 7 | "enabled": true, 8 | "filePath": "shutdown.log" 9 | } 10 | } 11 | }, 12 | "logger": { 13 | "level": "info", 14 | "disableCaller": true, 15 | "disableStacktrace": false, 16 | "stacktraceLevel": "panic", 17 | "encoding": "console", 18 | "encodingConfig": { 19 | "timeEncoder": "rfc3339" 20 | }, 21 | "outputPaths": [ 22 | "stdout" 23 | ], 24 | "disableEvents": true 25 | }, 26 | "node": { 27 | "profile": "auto", 28 | "alias": "HORNET node" 29 | }, 30 | "protocol": { 31 | "targetNetworkName": "iota-mainnet", 32 | "milestonePublicKeyCount": 7, 33 | "baseToken": { 34 | "name": "IOTA", 35 | "tickerSymbol": "IOTA", 36 | "unit": "IOTA", 37 | "subunit": "micro", 38 | "decimals": 6, 39 | "useMetricPrefix": false 40 | }, 41 | "publicKeyRanges": [ 42 | { 43 | "key": "2fb1d7ec714adf365eefa343b66c0c459a9930276aff08cde482cb8050028624", 44 | "start": 0, 45 | "end": 0 46 | }, 47 | { 48 | "key": "8845cd560d66d50070c6e251d7a0a19f8de217fabf53a78ee15b41d85a489cc6", 49 | "start": 0, 50 | "end": 0 51 | }, 52 | { 53 | "key": "1d61aab6f7e52129b78fcdf9568def0baa9c71112964f5b4d86ffc406866a986", 54 | "start": 0, 55 | "end": 0 56 | }, 57 | { 58 | "key": "fa94be504dfb10876a449db5272f19393ded922cbe3b023b4e57b62a53835721", 59 | "start": 0, 60 | "end": 0 61 | }, 62 | { 63 | "key": "5fadfabe6944f5f0166ada11452c642010339f916e28187ecf8b4a207c8dba47", 64 | "start": 0, 65 | "end": 0 66 | }, 67 | { 68 | "key": "347e6892d72b71e0423bd14daaf61d2ac35e91852fa5b155b92ddda0e064f55f", 69 | "start": 0, 70 | "end": 0 71 | }, 72 | { 73 | "key": "0e403f526a66b4c0b18e8b0257671b07892a419e4b6e4540707d9a4793d1e3be", 74 | "start": 0, 75 | "end": 0 76 | }, 77 | { 78 | "key": "3af73a609696ff6fe63c36d060455cd83ec23edea2d2b87d5317004849cc0e9a", 79 | "start": 0, 80 | "end": 0 81 | }, 82 | { 83 | "key": "ee1bfa9e791a9f57ea72c6192b000d906f21479ba8f40bb20cdd8badb7ddcb78", 84 | "start": 0, 85 | "end": 0 86 | }, 87 | { 88 | "key": "083d7af99250a06d086b07bdd5bccd2bff406ee17e19332ccdb08d8be72218ce", 89 | "start": 0, 90 | "end": 0 91 | } 92 | ] 93 | }, 94 | "db": { 95 | "engine": "rocksdb", 96 | "path": "mainnet/database", 97 | "autoRevalidation": false, 98 | "checkLedgerStateOnStartup": false 99 | }, 100 | "pow": { 101 | "refreshTipsInterval": "5s" 102 | }, 103 | "p2p": { 104 | "bindMultiAddresses": [ 105 | "/ip4/0.0.0.0/tcp/15600", 106 | "/ip6/::/tcp/15600" 107 | ], 108 | "connectionManager": { 109 | "highWatermark": 10, 110 | "lowWatermark": 5 111 | }, 112 | "identityPrivateKey": "", 113 | "db": { 114 | "path": "mainnet/p2pstore" 115 | }, 116 | "reconnectInterval": "30s", 117 | "gossip": { 118 | "unknownPeersLimit": 4, 119 | "streamReadTimeout": "1m", 120 | "streamWriteTimeout": "10s" 121 | }, 122 | "autopeering": { 123 | "enabled": false, 124 | "bindAddress": "0.0.0.0:14626", 125 | "entryNodes": [ 126 | "/dns/entry-hornet-0.h.stardust-mainnet.iotaledger.net/udp/14626/autopeering/K4cHM64KxzYJ5ZB2a9P3stJUHjvQDh4bzhCw49xDowi", 127 | "/dns/entry-hornet-1.h.stardust-mainnet.iotaledger.net/udp/14626/autopeering/8UbVu5MjRZH2c9fnEdpfPvd7qqDgrVFsNsvc933FuMTm" 128 | ], 129 | "entryNodesPreferIPv6": false, 130 | "runAsEntryNode": false 131 | } 132 | }, 133 | "requests": { 134 | "discardOlderThan": "15s", 135 | "pendingReEnqueueInterval": "5s" 136 | }, 137 | "tangle": { 138 | "milestoneTimeout": "30s", 139 | "maxDeltaBlockYoungestConeRootIndexToCMI": 8, 140 | "maxDeltaBlockOldestConeRootIndexToCMI": 13, 141 | "whiteFlagParentsSolidTimeout": "2s" 142 | }, 143 | "snapshots": { 144 | "enabled": false, 145 | "depth": 50, 146 | "interval": 200, 147 | "fullPath": "mainnet/snapshots/full_snapshot.bin", 148 | "deltaPath": "mainnet/snapshots/delta_snapshot.bin", 149 | "deltaSizeThresholdPercentage": 50, 150 | "deltaSizeThresholdMinSize": "50M", 151 | "downloadURLs": [ 152 | { 153 | "full": "https://files.stardust-mainnet.iotaledger.net/snapshots/latest-full_snapshot.bin", 154 | "delta": "https://files.stardust-mainnet.iotaledger.net/snapshots/latest-delta_snapshot.bin" 155 | } 156 | ] 157 | }, 158 | "pruning": { 159 | "milestones": { 160 | "enabled": false, 161 | "maxMilestonesToKeep": 60480 162 | }, 163 | "size": { 164 | "enabled": true, 165 | "targetSize": "30GB", 166 | "thresholdPercentage": 10, 167 | "cooldownTime": "5m" 168 | }, 169 | "pruneReceipts": false 170 | }, 171 | "profiling": { 172 | "enabled": false, 173 | "bindAddress": "localhost:6060" 174 | }, 175 | "restAPI": { 176 | "enabled": true, 177 | "bindAddress": "0.0.0.0:14265", 178 | "publicRoutes": [ 179 | "/health", 180 | "/api/routes", 181 | "/api/core/v2/info", 182 | "/api/core/v2/tips", 183 | "/api/core/v2/blocks*", 184 | "/api/core/v2/transactions*", 185 | "/api/core/v2/milestones*", 186 | "/api/core/v2/outputs*", 187 | "/api/core/v2/treasury", 188 | "/api/core/v2/receipts*", 189 | "/api/debug/v1/*", 190 | "/api/indexer/v1/*", 191 | "/api/mqtt/v1", 192 | "/api/participation/v1/events*", 193 | "/api/participation/v1/outputs*", 194 | "/api/participation/v1/addresses*" 195 | ], 196 | "protectedRoutes": [ 197 | "/api/*" 198 | ], 199 | "debugRequestLoggerEnabled": false, 200 | "jwtAuth": { 201 | "salt": "HORNET" 202 | }, 203 | "pow": { 204 | "enabled": false, 205 | "workerCount": 1 206 | }, 207 | "limits": { 208 | "maxBodyLength": "1M", 209 | "maxResults": 1000 210 | } 211 | }, 212 | "warpsync": { 213 | "enabled": true, 214 | "advancementRange": 150 215 | }, 216 | "tipsel": { 217 | "enabled": true, 218 | "nonLazy": { 219 | "retentionRulesTipsLimit": 100, 220 | "maxReferencedTipAge": "3s", 221 | "maxChildren": 30 222 | }, 223 | "semiLazy": { 224 | "retentionRulesTipsLimit": 20, 225 | "maxReferencedTipAge": "3s", 226 | "maxChildren": 2 227 | } 228 | }, 229 | "receipts": { 230 | "enabled": false, 231 | "backup": { 232 | "enabled": false, 233 | "path": "receipts" 234 | }, 235 | "validator": { 236 | "validate": false, 237 | "ignoreSoftErrors": false, 238 | "api": { 239 | "address": "http://localhost:14266", 240 | "timeout": "5s" 241 | }, 242 | "coordinator": { 243 | "address": "UDYXTZBE9GZGPM9SSQV9LTZNDLJIZMPUVVXYXFYVBLIEUHLSEWFTKZZLXYRHHWVQV9MNNX9KZC9D9UZWZ", 244 | "merkleTreeDepth": 24 245 | } 246 | } 247 | }, 248 | "prometheus": { 249 | "enabled": false, 250 | "bindAddress": "localhost:9311", 251 | "fileServiceDiscovery": { 252 | "enabled": false, 253 | "path": "target.json", 254 | "target": "localhost:9311" 255 | }, 256 | "databaseMetrics": true, 257 | "nodeMetrics": true, 258 | "gossipMetrics": true, 259 | "cachesMetrics": true, 260 | "restAPIMetrics": true, 261 | "inxMetrics": true, 262 | "migrationMetrics": true, 263 | "debugMetrics": false, 264 | "goMetrics": false, 265 | "processMetrics": false, 266 | "promhttpMetrics": false 267 | }, 268 | "inx": { 269 | "enabled": false, 270 | "bindAddress": "localhost:9029", 271 | "pow": { 272 | "workerCount": 0 273 | } 274 | }, 275 | "debug": { 276 | "enabled": false 277 | } 278 | } 279 | -------------------------------------------------------------------------------- /iota2-testnet/docker-compose.yml: -------------------------------------------------------------------------------- 1 | # 2 | # node-docker-setup __VERSION__ 3 | # https://github.com/iotaledger/node-docker-setup 4 | # 5 | 6 | services: 7 | 8 | ################################################################## 9 | # iota-core # 10 | ################################################################## 11 | 12 | iota-core: 13 | container_name: iota-core 14 | image: iotaledger/iota-core:1.0-beta 15 | ulimits: 16 | nofile: 17 | soft: 16384 18 | hard: 16384 19 | stop_grace_period: 5m 20 | depends_on: 21 | traefik: 22 | condition: service_started 23 | ports: 24 | - "${IOTA_CORE_GOSSIP_PORT:-15600}:${IOTA_CORE_GOSSIP_PORT:-15600}/tcp" 25 | labels: 26 | - "traefik.enable=true" 27 | - "traefik.http.routers.iota-core.service=iota-core" 28 | - "traefik.http.routers.iota-core.rule=Host(`${NODE_HOST:-localhost}`)" 29 | - "traefik.http.routers.iota-core.entrypoints=web" 30 | - "traefik.http.services.iota-core.loadbalancer.server.port=14265" 31 | - "traefik.http.routers.iota-core.middlewares=redirect-dashboard" 32 | - "traefik.http.middlewares.redirect-dashboard.redirectregex.regex=^(https?://[^/]+)/?$$" 33 | - "traefik.http.middlewares.redirect-dashboard.redirectregex.replacement=$$1/dashboard/" 34 | - "traefik.http.middlewares.redirect-dashboard.redirectregex.permanent=true" 35 | cap_drop: 36 | - ALL 37 | volumes: 38 | - ./${IOTA_CORE_CONFIG_FILE:-config.json}:/app/config.json:ro 39 | - ./peering.json:/app/peering.json 40 | - ./data:/app/data 41 | command: > 42 | -c config.json 43 | --p2p.bindMultiAddresses=/ip4/0.0.0.0/tcp/${IOTA_CORE_GOSSIP_PORT:-15600},/ip6/::/tcp/${IOTA_CORE_GOSSIP_PORT:-15600} 44 | --p2p.identityPrivateKeyFilePath=data/p2p/identity.key 45 | --p2p.autopeering.externalMultiAddresses=${IOTA_CORE_EXTERNAL_P2P_MULTIADDRESS:-} 46 | --profiling.bindAddress=iota-core:6060 47 | --debugAPI.db.path=data/debug 48 | --db.path=data/database 49 | --protocol.snapshot.path=data/snapshots/snapshot.bin 50 | --protocol.protocolParametersPath=data/protocol_parameters.json 51 | --prometheus.enabled=true 52 | --prometheus.bindAddress=iota-core:9311 53 | --inx.enabled=true 54 | --inx.bindAddress=iota-core:9029 55 | 56 | ################################################################## 57 | # Reverse Proxy and SSL # 58 | ################################################################## 59 | 60 | traefik: 61 | container_name: traefik 62 | image: traefik:v2.11 63 | command: 64 | - "--providers.docker=true" 65 | - "--providers.docker.exposedbydefault=false" 66 | - "--metrics.prometheus=true" 67 | - "--entrypoints.web.address=:80" 68 | ports: 69 | - "${HTTP_PORT:-80}:80/tcp" 70 | volumes: 71 | - "/var/run/docker.sock:/var/run/docker.sock:ro" 72 | - "./data/letsencrypt:/letsencrypt" 73 | 74 | ################################################################## 75 | # Monitoring # 76 | ################################################################## 77 | 78 | prometheus: 79 | container_name: prometheus 80 | image: prom/prometheus:latest 81 | restart: unless-stopped 82 | user: "65532" 83 | volumes: 84 | - ./data/prometheus/:/prometheus 85 | - ./assets/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml 86 | - /etc/localtime:/etc/localtime:ro 87 | profiles: 88 | - monitoring 89 | 90 | cadvisor: 91 | container_name: cadvisor 92 | image: gcr.io/cadvisor/cadvisor:latest 93 | privileged: true 94 | command: 95 | - --housekeeping_interval=30s # kubernetes default args 96 | - --max_housekeeping_interval=35s 97 | - --event_storage_event_limit=default=0 98 | - --event_storage_age_limit=default=0 99 | - --store_container_labels=false 100 | - --global_housekeeping_interval=30s 101 | - --event_storage_event_limit=default=0 102 | - --event_storage_age_limit=default=0 103 | - --disable_metrics=advtcp,cpu_topology,disk,hugetlb,memory_numa,percpu,referenced_memory,resctrl,sched,tcp,udp 104 | - --enable_load_reader=true 105 | - --docker_only=true # only show stats for docker containers 106 | - --allow_dynamic_housekeeping=true 107 | - --storage_duration=1m0s 108 | volumes: 109 | - /:/rootfs:ro 110 | - /var/run:/var/run:rw 111 | - /sys:/sys:ro 112 | - /var/lib/docker/:/var/lib/docker:ro 113 | profiles: 114 | - monitoring 115 | 116 | grafana: 117 | container_name: grafana 118 | image: grafana/grafana:latest 119 | restart: unless-stopped 120 | user: "65532" 121 | labels: 122 | - "traefik.enable=true" 123 | - "traefik.http.routers.grafana.rule=Host(`${NODE_HOST:-localhost}`) && (Path(`/grafana`) || PathPrefix(`/grafana/`))" 124 | - "traefik.http.routers.grafana.entrypoints=web" 125 | - "traefik.http.services.grafana.loadbalancer.server.port=3000" 126 | environment: 127 | - GF_SERVER_ROOT_URL=/grafana 128 | - GF_SERVER_SERVE_FROM_SUB_PATH=true 129 | - GF_SERVER_DOMAIN=${NODE_HOST:-localhost} 130 | - GF_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH=/etc/grafana/provisioning/dashboards/local_dashboard.json 131 | volumes: 132 | - ./data/grafana:/var/lib/grafana 133 | - ./assets/grafana/:/etc/grafana/provisioning/ 134 | profiles: 135 | - monitoring 136 | 137 | ################################################################## 138 | # INX Extensions # 139 | # disable them out by commenting out the services # 140 | ################################################################## 141 | 142 | inx-indexer: 143 | container_name: inx-indexer 144 | image: iotaledger/inx-indexer:2.0-beta 145 | ulimits: 146 | nofile: 147 | soft: 16384 148 | hard: 16384 149 | stop_grace_period: 5m 150 | restart: unless-stopped 151 | depends_on: 152 | iota-core: 153 | condition: service_healthy 154 | volumes: 155 | - ./data:/app/database 156 | command: > 157 | --inx.address=iota-core:9029 158 | --indexer.db.sqlite.path=database/indexer 159 | --restAPI.bindAddress=inx-indexer:9091 160 | --prometheus.enabled=true 161 | --prometheus.bindAddress=inx-indexer:9312 162 | 163 | inx-mqtt: 164 | container_name: inx-mqtt 165 | image: iotaledger/inx-mqtt:2.0-beta 166 | stop_grace_period: 1m 167 | restart: unless-stopped 168 | depends_on: 169 | iota-core: 170 | condition: service_healthy 171 | command: > 172 | --inx.address=iota-core:9029 173 | --mqtt.websocket.bindAddress=inx-mqtt:1888 174 | --prometheus.enabled=true 175 | --prometheus.bindAddress=inx-mqtt:9312 176 | 177 | inx-dashboard: 178 | container_name: inx-dashboard 179 | image: iotaledger/inx-dashboard:2.0-beta 180 | stop_grace_period: 1m 181 | restart: unless-stopped 182 | depends_on: 183 | traefik: 184 | condition: service_started 185 | labels: 186 | - "traefik.enable=true" 187 | - "traefik.http.routers.iota-core-dashboard.service=iota-core-dashboard" 188 | - "traefik.http.routers.iota-core-dashboard.rule=Host(`${NODE_HOST:-localhost}`) && (Path(`/dashboard`) || PathPrefix(`/dashboard/`))" 189 | - "traefik.http.routers.iota-core-dashboard.entrypoints=web" 190 | - "traefik.http.services.iota-core-dashboard.loadbalancer.server.port=8081" 191 | volumes: 192 | - ./data/dashboard:/app/dashboard 193 | command: > 194 | --inx.address=iota-core:9029 195 | --dashboard.bindAddress=inx-dashboard:8081 196 | --dashboard.explorerURL=https://explorer.iota.org/iota2-testnet 197 | --dashboard.auth.identityFilePath=/app/dashboard/identity.key 198 | --dashboard.auth.username=${DASHBOARD_USERNAME:-admin} 199 | --dashboard.auth.passwordHash=${DASHBOARD_PASSWORD:-0000000000000000000000000000000000000000000000000000000000000000} 200 | --dashboard.auth.passwordSalt=${DASHBOARD_SALT:-0000000000000000000000000000000000000000000000000000000000000000} 201 | --prometheus.enabled=true 202 | --prometheus.bindAddress=inx-dashboard:9312 203 | 204 | inx-blockissuer: 205 | container_name: inx-blockissuer 206 | image: iotaledger/inx-blockissuer:1.0-beta 207 | stop_grace_period: 1m 208 | restart: unless-stopped 209 | depends_on: 210 | iota-core: 211 | condition: service_healthy 212 | inx-indexer: 213 | condition: service_started 214 | environment: 215 | - "BLOCKISSUER_PRV_KEY=${BLOCKISSUER_PRV_KEY:-}" 216 | command: > 217 | --inx.address=iota-core:9029 218 | --restAPI.bindAddress=inx-blockissuer:9086 219 | --blockIssuer.accountAddress=${BLOCKISSUER_ACCOUNT_ADDR:-} 220 | --blockIssuer.proofOfWork.targetTrailingZeros=25 221 | profiles: 222 | - blockissuer 223 | 224 | inx-validator: 225 | container_name: inx-validator 226 | image: iotaledger/inx-validator:1.0-beta 227 | stop_grace_period: 1m 228 | restart: unless-stopped 229 | depends_on: 230 | iota-core: 231 | condition: service_started 232 | environment: 233 | - "VALIDATOR_PRV_KEY=${VALIDATOR_PRV_KEY:-}" 234 | command: > 235 | --inx.address=iota-core:9029 236 | --validator.accountAddress=${VALIDATOR_ACCOUNT_ADDR:-} 237 | profiles: 238 | - validator 239 | -------------------------------------------------------------------------------- /iota2-testnet/assets/grafana/dashboards/slot_metrics.json: -------------------------------------------------------------------------------- 1 | { 2 | "annotations": { 3 | "list": [ 4 | { 5 | "builtIn": 1, 6 | "datasource": { 7 | "type": "datasource", 8 | "uid": "grafana" 9 | }, 10 | "enable": true, 11 | "hide": true, 12 | "iconColor": "rgba(0, 211, 255, 1)", 13 | "name": "Annotations & Alerts", 14 | "target": { 15 | "limit": 100, 16 | "matchAny": false, 17 | "tags": [], 18 | "type": "dashboard" 19 | }, 20 | "type": "dashboard" 21 | } 22 | ] 23 | }, 24 | "editable": true, 25 | "fiscalYearStartMonth": 0, 26 | "graphTooltip": 0, 27 | "id": 4, 28 | "links": [], 29 | "liveNow": false, 30 | "panels": [ 31 | { 32 | "collapsed": false, 33 | "gridPos": { 34 | "h": 1, 35 | "w": 24, 36 | "x": 0, 37 | "y": 0 38 | }, 39 | "id": 63, 40 | "panels": [], 41 | "title": "Live slot metrics", 42 | "type": "row" 43 | }, 44 | { 45 | "datasource": { 46 | "type": "prometheus", 47 | "uid": "PBFA97CFB590B2093" 48 | }, 49 | "description": "", 50 | "fieldConfig": { 51 | "defaults": { 52 | "color": { 53 | "mode": "thresholds" 54 | }, 55 | "custom": { 56 | "axisCenteredZero": false, 57 | "axisColorMode": "text", 58 | "axisLabel": "", 59 | "axisPlacement": "auto", 60 | "axisSoftMax": 100, 61 | "fillOpacity": 80, 62 | "gradientMode": "none", 63 | "hideFrom": { 64 | "legend": false, 65 | "tooltip": false, 66 | "viz": false 67 | }, 68 | "lineWidth": 1, 69 | "scaleDistribution": { 70 | "type": "linear" 71 | }, 72 | "thresholdsStyle": { 73 | "mode": "off" 74 | } 75 | }, 76 | "mappings": [], 77 | "max": 999, 78 | "min": 0, 79 | "thresholds": { 80 | "mode": "absolute", 81 | "steps": [ 82 | { 83 | "color": "green", 84 | "value": null 85 | } 86 | ] 87 | } 88 | }, 89 | "overrides": [] 90 | }, 91 | "gridPos": { 92 | "h": 6, 93 | "w": 12, 94 | "x": 0, 95 | "y": 1 96 | }, 97 | "id": 115, 98 | "options": { 99 | "barRadius": 0, 100 | "barWidth": 0.5, 101 | "fullHighlight": false, 102 | "groupWidth": 0.7, 103 | "legend": { 104 | "calcs": [], 105 | "displayMode": "list", 106 | "placement": "bottom", 107 | "showLegend": true 108 | }, 109 | "orientation": "auto", 110 | "showValue": "auto", 111 | "stacking": "none", 112 | "tooltip": { 113 | "mode": "multi", 114 | "sort": "none" 115 | }, 116 | "xField": "slot", 117 | "xTickLabelRotation": 45, 118 | "xTickLabelSpacing": 100 119 | }, 120 | "pluginVersion": "9.5.6", 121 | "repeat": "instance", 122 | "repeatDirection": "v", 123 | "targets": [ 124 | { 125 | "datasource": { 126 | "type": "prometheus", 127 | "uid": "PBFA97CFB590B2093" 128 | }, 129 | "editorMode": "code", 130 | "exemplar": false, 131 | "expr": "slots_total_blocks{instance=~\"$instance\"}", 132 | "format": "table", 133 | "hide": false, 134 | "instant": false, 135 | "legendFormat": "__auto", 136 | "range": true, 137 | "refId": "Attached" 138 | } 139 | ], 140 | "title": "Blocks $instance", 141 | "transformations": [ 142 | { 143 | "id": "convertFieldType", 144 | "options": { 145 | "conversions": [ 146 | { 147 | "destinationType": "number", 148 | "targetField": "slot" 149 | } 150 | ], 151 | "fields": {} 152 | } 153 | }, 154 | { 155 | "id": "sortBy", 156 | "options": { 157 | "fields": {}, 158 | "sort": [ 159 | { 160 | "desc": false, 161 | "field": "slot" 162 | } 163 | ] 164 | } 165 | }, 166 | { 167 | "id": "groupBy", 168 | "options": { 169 | "fields": { 170 | "Time": { 171 | "aggregations": [ 172 | "max" 173 | ] 174 | }, 175 | "Value": { 176 | "aggregations": [ 177 | "lastNotNull" 178 | ], 179 | "operation": "aggregate" 180 | }, 181 | "slot": { 182 | "aggregations": [], 183 | "operation": "groupby" 184 | } 185 | } 186 | } 187 | }, 188 | { 189 | "id": "convertFieldType", 190 | "options": { 191 | "conversions": [ 192 | { 193 | "destinationType": "string", 194 | "targetField": "slot" 195 | } 196 | ], 197 | "fields": {} 198 | } 199 | } 200 | ], 201 | "type": "barchart" 202 | }, 203 | { 204 | "datasource": { 205 | "type": "prometheus", 206 | "uid": "PBFA97CFB590B2093" 207 | }, 208 | "description": "", 209 | "fieldConfig": { 210 | "defaults": { 211 | "color": { 212 | "mode": "thresholds" 213 | }, 214 | "custom": { 215 | "axisCenteredZero": false, 216 | "axisColorMode": "text", 217 | "axisLabel": "", 218 | "axisPlacement": "auto", 219 | "axisSoftMax": 5, 220 | "fillOpacity": 80, 221 | "gradientMode": "none", 222 | "hideFrom": { 223 | "legend": false, 224 | "tooltip": false, 225 | "viz": false 226 | }, 227 | "lineWidth": 1, 228 | "scaleDistribution": { 229 | "type": "linear" 230 | }, 231 | "thresholdsStyle": { 232 | "mode": "off" 233 | } 234 | }, 235 | "mappings": [], 236 | "thresholds": { 237 | "mode": "absolute", 238 | "steps": [ 239 | { 240 | "color": "green", 241 | "value": null 242 | }, 243 | { 244 | "color": "red", 245 | "value": 80 246 | } 247 | ] 248 | } 249 | }, 250 | "overrides": [] 251 | }, 252 | "gridPos": { 253 | "h": 6, 254 | "w": 12, 255 | "x": 12, 256 | "y": 1 257 | }, 258 | "id": 207, 259 | "options": { 260 | "barRadius": 0, 261 | "barWidth": 0.97, 262 | "fullHighlight": false, 263 | "groupWidth": 0.7, 264 | "legend": { 265 | "calcs": [], 266 | "displayMode": "list", 267 | "placement": "bottom", 268 | "showLegend": true 269 | }, 270 | "orientation": "auto", 271 | "showValue": "auto", 272 | "stacking": "none", 273 | "tooltip": { 274 | "mode": "single", 275 | "sort": "none" 276 | }, 277 | "xTickLabelRotation": 90, 278 | "xTickLabelSpacing": 100 279 | }, 280 | "pluginVersion": "9.5.6", 281 | "repeat": "instance", 282 | "repeatDirection": "v", 283 | "targets": [ 284 | { 285 | "datasource": { 286 | "type": "prometheus", 287 | "uid": "PBFA97CFB590B2093" 288 | }, 289 | "editorMode": "code", 290 | "expr": "slots_created_conflicts{instance=~\"$instance\"}", 291 | "format": "table", 292 | "hide": false, 293 | "legendFormat": "Conflicts created", 294 | "range": true, 295 | "refId": "Created" 296 | }, 297 | { 298 | "datasource": { 299 | "type": "prometheus", 300 | "uid": "PBFA97CFB590B2093" 301 | }, 302 | "editorMode": "code", 303 | "expr": "slots_accepted_conflicts{instance=~\"$instance\"}\n", 304 | "format": "table", 305 | "hide": false, 306 | "legendFormat": "Conflicts accepted", 307 | "range": true, 308 | "refId": "Accepted" 309 | }, 310 | { 311 | "datasource": { 312 | "type": "prometheus", 313 | "uid": "PBFA97CFB590B2093" 314 | }, 315 | "editorMode": "code", 316 | "expr": "slots_rejected_conflicts{instance=~\"$instance\"}", 317 | "format": "table", 318 | "hide": false, 319 | "legendFormat": "Conflicts rejected", 320 | "range": true, 321 | "refId": "Rejected" 322 | } 323 | ], 324 | "title": "Conflicts per slot $instance", 325 | "transformations": [ 326 | { 327 | "id": "convertFieldType", 328 | "options": { 329 | "conversions": [ 330 | { 331 | "destinationType": "number", 332 | "targetField": "slot" 333 | } 334 | ], 335 | "fields": {} 336 | } 337 | }, 338 | { 339 | "id": "sortBy", 340 | "options": { 341 | "fields": {}, 342 | "sort": [ 343 | { 344 | "desc": false, 345 | "field": "slot" 346 | } 347 | ] 348 | } 349 | }, 350 | { 351 | "id": "groupBy", 352 | "options": { 353 | "fields": { 354 | "Value": { 355 | "aggregations": [ 356 | "last" 357 | ], 358 | "operation": "aggregate" 359 | }, 360 | "Value #A": { 361 | "aggregations": [ 362 | "lastNotNull" 363 | ], 364 | "operation": "aggregate" 365 | }, 366 | "Value #Accepted": { 367 | "aggregations": [ 368 | "lastNotNull" 369 | ], 370 | "operation": "aggregate" 371 | }, 372 | "Value #Created": { 373 | "aggregations": [ 374 | "lastNotNull" 375 | ], 376 | "operation": "aggregate" 377 | }, 378 | "Value #Rejected": { 379 | "aggregations": [ 380 | "lastNotNull" 381 | ], 382 | "operation": "aggregate" 383 | }, 384 | "__name__": { 385 | "aggregations": [] 386 | }, 387 | "slot": { 388 | "aggregations": [], 389 | "operation": "groupby" 390 | } 391 | } 392 | } 393 | }, 394 | { 395 | "id": "joinByField", 396 | "options": { 397 | "byField": "slot", 398 | "mode": "outer" 399 | } 400 | }, 401 | { 402 | "id": "convertFieldType", 403 | "options": { 404 | "conversions": [ 405 | { 406 | "destinationType": "string", 407 | "targetField": "slot" 408 | } 409 | ], 410 | "fields": {} 411 | } 412 | } 413 | ], 414 | "type": "barchart" 415 | } 416 | ], 417 | "refresh": "5s", 418 | "schemaVersion": 38, 419 | "style": "dark", 420 | "tags": [], 421 | "templating": { 422 | "list": [ 423 | { 424 | "current": { 425 | "selected": true, 426 | "text": [ 427 | "All" 428 | ], 429 | "value": [ 430 | "$__all" 431 | ] 432 | }, 433 | "datasource": { 434 | "type": "prometheus", 435 | "uid": "PBFA97CFB590B2093" 436 | }, 437 | "definition": "label_values(instance)", 438 | "hide": 0, 439 | "includeAll": true, 440 | "label": "Instance", 441 | "multi": true, 442 | "name": "instance", 443 | "options": [], 444 | "query": { 445 | "query": "label_values(instance)", 446 | "refId": "PrometheusVariableQueryEditor-VariableQuery" 447 | }, 448 | "refresh": 1, 449 | "regex": ".+:9311", 450 | "skipUrlSync": false, 451 | "sort": 0, 452 | "type": "query" 453 | }, 454 | { 455 | "datasource": { 456 | "type": "prometheus", 457 | "uid": "PBFA97CFB590B2093" 458 | }, 459 | "filters": [ 460 | { 461 | "condition": "", 462 | "key": "job", 463 | "operator": "=", 464 | "value": "metrics" 465 | } 466 | ], 467 | "hide": 0, 468 | "name": "Filters", 469 | "skipUrlSync": false, 470 | "type": "adhoc" 471 | } 472 | ] 473 | }, 474 | "time": { 475 | "from": "now-30m", 476 | "to": "now" 477 | }, 478 | "timepicker": { 479 | "refresh_intervals": [ 480 | "5s", 481 | "10s", 482 | "30s", 483 | "1m", 484 | "5m", 485 | "15m", 486 | "30m", 487 | "1h", 488 | "2h", 489 | "1d" 490 | ] 491 | }, 492 | "timezone": "", 493 | "title": "Global Slots View", 494 | "uid": "9eivfEo4z", 495 | "version": 3, 496 | "weekStart": "" 497 | } -------------------------------------------------------------------------------- /iota/docker-compose.yml: -------------------------------------------------------------------------------- 1 | # 2 | # node-docker-setup __VERSION__ 3 | # https://github.com/iotaledger/node-docker-setup 4 | # 5 | 6 | services: 7 | ################################################################## 8 | # HORNET # 9 | ################################################################## 10 | 11 | hornet: 12 | container_name: hornet 13 | image: iotaledger/hornet:2.0 14 | ulimits: 15 | nofile: 16 | soft: 16384 17 | hard: 16384 18 | stop_grace_period: 5m 19 | depends_on: 20 | traefik: 21 | condition: service_started 22 | ports: 23 | - "${HORNET_GOSSIP_PORT:-15600}:${HORNET_GOSSIP_PORT:-15600}/tcp" 24 | - "${HORNET_AUTOPEERING_PORT:-14626}:${HORNET_AUTOPEERING_PORT:-14626}/udp" 25 | labels: 26 | - "traefik.enable=true" 27 | - "traefik.http.routers.hornet.service=hornet" 28 | - "traefik.http.routers.hornet.rule=Host(`${NODE_HOST:-localhost}`)" 29 | - "traefik.http.routers.hornet.entrypoints=web" 30 | - "traefik.http.services.hornet.loadbalancer.server.port=14265" 31 | - "traefik.http.routers.hornet.middlewares=redirect-dashboard" 32 | - "traefik.http.middlewares.redirect-dashboard.redirectregex.regex=^(https?://[^/]+)/?$$" 33 | - "traefik.http.middlewares.redirect-dashboard.redirectregex.replacement=$$1/dashboard/" 34 | - "traefik.http.middlewares.redirect-dashboard.redirectregex.permanent=true" 35 | cap_drop: 36 | - ALL 37 | volumes: 38 | - ./${HORNET_CONFIG_FILE:-config.json}:/app/config.json:ro 39 | - ./peering.json:/app/peering.json 40 | - ./data:/app/data 41 | command: 42 | - "-c" 43 | - "config.json" 44 | - "--db.path=data/database" 45 | - "--p2p.db.path=data/p2pstore" 46 | - "--p2p.bindMultiAddresses=/ip4/0.0.0.0/tcp/${HORNET_GOSSIP_PORT:-15600},/ip6/::/tcp/${HORNET_GOSSIP_PORT:-15600}" 47 | - "--p2p.autopeering.bindAddress=0.0.0.0:${HORNET_AUTOPEERING_PORT:-14626}" 48 | - "--snapshots.fullPath=data/snapshots/full_snapshot.bin" 49 | - "--snapshots.deltaPath=data/snapshots/delta_snapshot.bin" 50 | - "--inx.enabled=true" 51 | - "--inx.bindAddress=hornet:9029" 52 | - "--prometheus.enabled=true" 53 | - "--prometheus.bindAddress=hornet:9311" 54 | 55 | ################################################################## 56 | # Reverse Proxy and SSL # 57 | ################################################################## 58 | 59 | traefik: 60 | container_name: traefik 61 | image: traefik:v2.10 62 | command: 63 | - "--providers.docker=true" 64 | - "--providers.docker.exposedbydefault=false" 65 | - "--metrics.prometheus=true" 66 | - "--entrypoints.web.address=:80" 67 | ports: 68 | - "${HTTP_PORT:-80}:80/tcp" 69 | volumes: 70 | - "/var/run/docker.sock:/var/run/docker.sock:ro" 71 | - "./data/letsencrypt:/letsencrypt" 72 | 73 | ################################################################## 74 | # Monitoring # 75 | ################################################################## 76 | 77 | prometheus: 78 | container_name: prometheus 79 | image: prom/prometheus:latest 80 | restart: unless-stopped 81 | user: "65532" 82 | volumes: 83 | - ./data/prometheus/:/prometheus 84 | - ./assets/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml 85 | - /etc/localtime:/etc/localtime:ro 86 | profiles: 87 | - monitoring 88 | 89 | cadvisor: 90 | container_name: cadvisor 91 | image: gcr.io/cadvisor/cadvisor:latest 92 | privileged: true 93 | command: 94 | - --housekeeping_interval=30s # kubernetes default args 95 | - --max_housekeeping_interval=35s 96 | - --event_storage_event_limit=default=0 97 | - --event_storage_age_limit=default=0 98 | - --store_container_labels=false 99 | - --global_housekeeping_interval=30s 100 | - --event_storage_event_limit=default=0 101 | - --event_storage_age_limit=default=0 102 | - --disable_metrics=advtcp,cpu_topology,disk,hugetlb,memory_numa,percpu,referenced_memory,resctrl,sched,tcp,udp 103 | - --enable_load_reader=true 104 | - --docker_only=true # only show stats for docker containers 105 | - --allow_dynamic_housekeeping=true 106 | - --storage_duration=1m0s 107 | volumes: 108 | - /:/rootfs:ro 109 | - /var/run:/var/run:rw 110 | - /sys:/sys:ro 111 | - /var/lib/docker/:/var/lib/docker:ro 112 | profiles: 113 | - monitoring 114 | 115 | grafana: 116 | container_name: grafana 117 | image: grafana/grafana:latest 118 | restart: unless-stopped 119 | user: "65532" 120 | labels: 121 | - "traefik.enable=true" 122 | - "traefik.http.routers.grafana.rule=Host(`${NODE_HOST:-localhost}`) && (Path(`/grafana`) || PathPrefix(`/grafana/`))" 123 | - "traefik.http.routers.grafana.entrypoints=web" 124 | - "traefik.http.services.grafana.loadbalancer.server.port=3000" 125 | environment: 126 | - GF_SERVER_ROOT_URL=/grafana 127 | - GF_SERVER_SERVE_FROM_SUB_PATH=true 128 | - GF_SERVER_DOMAIN=${NODE_HOST:-localhost} 129 | - GF_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH=/etc/grafana/provisioning/dashboards/node_dashboard.json 130 | volumes: 131 | - ./data/grafana:/var/lib/grafana 132 | - ./assets/grafana/:/etc/grafana/provisioning/ 133 | profiles: 134 | - monitoring 135 | 136 | ################################################################## 137 | # INX Extensions # 138 | # disable them out by commenting out the services # 139 | ################################################################## 140 | 141 | inx-indexer: 142 | container_name: inx-indexer 143 | image: iotaledger/inx-indexer:1.0 144 | stop_grace_period: 5m 145 | restart: unless-stopped 146 | depends_on: 147 | hornet: 148 | condition: service_healthy 149 | volumes: 150 | - ./data:/app/database 151 | command: 152 | - "--inx.address=hornet:9029" 153 | - "--indexer.db.sqlite.path=database/indexer" 154 | - "--restAPI.bindAddress=inx-indexer:9091" 155 | - "--prometheus.enabled=true" 156 | - "--prometheus.bindAddress=inx-indexer:9312" 157 | 158 | inx-mqtt: 159 | container_name: inx-mqtt 160 | image: iotaledger/inx-mqtt:1.0 161 | stop_grace_period: 5m 162 | restart: unless-stopped 163 | depends_on: 164 | hornet: 165 | condition: service_healthy 166 | command: 167 | - "--inx.address=hornet:9029" 168 | - "--mqtt.websocket.bindAddress=inx-mqtt:1888" 169 | - "--prometheus.enabled=true" 170 | - "--prometheus.bindAddress=inx-mqtt:9312" 171 | 172 | inx-participation: 173 | container_name: inx-participation 174 | image: iotaledger/inx-participation:1.0 175 | stop_grace_period: 5m 176 | restart: unless-stopped 177 | depends_on: 178 | hornet: 179 | condition: service_healthy 180 | ulimits: 181 | nofile: 182 | soft: 16384 183 | hard: 16384 184 | volumes: 185 | - ./data:/app/database 186 | command: 187 | - "--inx.address=hornet:9029" 188 | - "--participation.db.path=database/participation" 189 | - "--restAPI.bindAddress=inx-participation:9892" 190 | 191 | inx-spammer: 192 | container_name: inx-spammer 193 | image: iotaledger/inx-spammer:1.0 194 | stop_grace_period: 5m 195 | restart: unless-stopped 196 | depends_on: 197 | hornet: 198 | condition: service_healthy 199 | inx-indexer: 200 | condition: service_started 201 | command: 202 | - "--inx.address=hornet:9029" 203 | - "--restAPI.bindAddress=inx-spammer:9092" 204 | - "--prometheus.enabled=true" 205 | - "--prometheus.bindAddress=inx-spammer:9312" 206 | 207 | inx-poi: 208 | container_name: inx-poi 209 | image: iotaledger/inx-poi:1.0 210 | stop_grace_period: 5m 211 | restart: unless-stopped 212 | depends_on: 213 | hornet: 214 | condition: service_healthy 215 | command: 216 | - "--inx.address=hornet:9029" 217 | - "--restAPI.bindAddress=inx-poi:9687" 218 | 219 | inx-dashboard: 220 | container_name: inx-dashboard 221 | image: iotaledger/inx-dashboard:1.0 222 | stop_grace_period: 5m 223 | restart: unless-stopped 224 | depends_on: 225 | traefik: 226 | condition: service_started 227 | labels: 228 | - "traefik.enable=true" 229 | - "traefik.http.routers.hornet-dashboard.service=hornet-dashboard" 230 | - "traefik.http.routers.hornet-dashboard.rule=Host(`${NODE_HOST:-localhost}`) && (Path(`/dashboard`) || PathPrefix(`/dashboard/`))" 231 | - "traefik.http.routers.hornet-dashboard.entrypoints=web" 232 | - "traefik.http.services.hornet-dashboard.loadbalancer.server.port=8081" 233 | volumes: 234 | - ./data:/app/database 235 | command: 236 | - "--inx.address=hornet:9029" 237 | - "--dashboard.bindAddress=inx-dashboard:8081" 238 | - "--dashboard.auth.identityFilePath=/app/database/dashboard/identity.key" 239 | - "--dashboard.auth.username=${DASHBOARD_USERNAME:-admin}" 240 | - "--dashboard.auth.passwordHash=${DASHBOARD_PASSWORD:-0000000000000000000000000000000000000000000000000000000000000000}" 241 | - "--dashboard.auth.passwordSalt=${DASHBOARD_SALT:-0000000000000000000000000000000000000000000000000000000000000000}" 242 | - "--prometheus.enabled=true" 243 | - "--prometheus.bindAddress=inx-dashboard:9312" 244 | 245 | ################################################################## 246 | # Historic Data # 247 | ################################################################## 248 | 249 | inx-api-core-v0: 250 | container_name: inx-api-core-v0 251 | image: iotaledger/inx-api-core-v0:1.0 252 | stop_grace_period: 5m 253 | restart: unless-stopped 254 | depends_on: 255 | hornet: 256 | condition: service_healthy 257 | ulimits: 258 | nofile: 259 | soft: 16384 260 | hard: 16384 261 | volumes: 262 | - ./data/database_legacy:/app/data/database 263 | command: 264 | - "--db.tangle.path=data/database/tangle" 265 | - "--db.snapshot.path=data/database/snapshot" 266 | - "--db.spent.path=data/database/spent" 267 | - "--inx.enabled=true" 268 | - "--inx.address=hornet:9029" 269 | - "--restAPI.bindAddress=inx-api-core-v0:9093" 270 | - "--prometheus.enabled=true" 271 | - "--prometheus.bindAddress=inx-api-core-v0:9312" 272 | profiles: 273 | - history-legacy 274 | 275 | inx-api-core-v1: 276 | container_name: inx-api-core-v1 277 | image: iotaledger/inx-api-core-v1:1.0 278 | stop_grace_period: 5m 279 | restart: unless-stopped 280 | depends_on: 281 | hornet: 282 | condition: service_healthy 283 | ulimits: 284 | nofile: 285 | soft: 16384 286 | hard: 16384 287 | volumes: 288 | - ./data/database_chrysalis:/app/data/database 289 | command: 290 | - "--db.tangle.path=data/database/tangle" 291 | - "--db.utxo.path=data/database/utxo" 292 | - "--inx.enabled=true" 293 | - "--inx.address=hornet:9029" 294 | - "--restAPI.bindAddress=inx-api-core-v1:9094" 295 | - "--prometheus.enabled=true" 296 | - "--prometheus.bindAddress=inx-api-core-v1:9312" 297 | profiles: 298 | - history-chrysalis 299 | 300 | ################################################################## 301 | # WASP # 302 | ################################################################## 303 | 304 | wasp: 305 | container_name: wasp 306 | image: iotaledger/wasp:1.1 307 | stop_grace_period: 5m 308 | restart: unless-stopped 309 | depends_on: 310 | hornet: 311 | condition: service_healthy 312 | inx-indexer: 313 | condition: service_started 314 | labels: 315 | - "traefik.enable=true" 316 | - "traefik.http.routers.wasp-api.service=wasp-api" 317 | - "traefik.http.routers.wasp-api.rule=Host(`${NODE_HOST:-localhost}`) && (Path(`/wasp/api`) || PathPrefix(`/wasp/api/`))" 318 | - "traefik.http.routers.wasp-api.entrypoints=web" 319 | - "traefik.http.services.wasp-api.loadbalancer.server.port=9090" 320 | - "traefik.http.routers.wasp-api.middlewares=rewrite-wasp-api" 321 | - "traefik.http.middlewares.rewrite-wasp-api.stripprefix.prefixes=/wasp/api" 322 | ports: 323 | - "4000:4000/tcp" # Peering 324 | volumes: 325 | - ./data/wasp:/app/waspdb 326 | command: 327 | - "--logger.level=debug" 328 | - "--inx.address=hornet:9029" 329 | - "--db.chainState.path=/app/waspdb/chains/data" 330 | - "--p2p.identity.filePath=/app/waspdb/identity/identity.key" 331 | - "--p2p.db.path=/app/waspdb/p2pstore" 332 | - "--registries.chains.filePath=/app/waspdb/chains/chain_registry.json" 333 | - "--registries.dkShares.path=/app/waspdb/dkshares" 334 | - "--registries.trustedPeers.filePath=/app/waspdb/trusted_peers.json" 335 | - "--registries.consensusState.path=/app/waspdb/chains/consensus" 336 | - "--wal.path=/app/waspdb/wal" 337 | - "--prometheus.enabled=true" 338 | - "--prometheus.bindAddress=wasp:9312" 339 | - "--users=/app/waspdb/users.json" 340 | - "--stateManager.pruningMinStatesToKeep=${WASP_PRUNING_MIN_STATES_TO_KEEP:-10000}" 341 | - "--snapshots.networkPaths=${WASP_SNAPSHOT_NETWORK_PATHS:-[]}" 342 | profiles: 343 | - wasp 344 | 345 | wasp-dashboard: 346 | container_name: wasp-dashboard 347 | image: iotaledger/wasp-dashboard:latest 348 | stop_grace_period: 5m 349 | restart: unless-stopped 350 | depends_on: 351 | traefik: 352 | condition: service_started 353 | labels: 354 | - "traefik.enable=true" 355 | - "traefik.http.routers.wasp-dashboard.service=wasp-dashboard" 356 | - "traefik.http.routers.wasp-dashboard.rule=Host(`${NODE_HOST:-localhost}`) && (Path(`/wasp/dashboard`) || PathPrefix(`/wasp/dashboard/`))" 357 | - "traefik.http.routers.wasp-dashboard.entrypoints=web" 358 | - "traefik.http.services.wasp-dashboard.loadbalancer.server.port=80" 359 | - "traefik.http.routers.wasp-dashboard.middlewares=rewrite-wasp-dashboard" 360 | - "traefik.http.middlewares.rewrite-wasp-dashboard.stripprefix.prefixes=/wasp/dashboard" 361 | environment: 362 | - WASP_API_URL=http://${NODE_HOST:-localhost}/wasp/api 363 | - L1_API_URL=http://${NODE_HOST:-localhost} 364 | profiles: 365 | - wasp 366 | -------------------------------------------------------------------------------- /shimmer/docker-compose.yml: -------------------------------------------------------------------------------- 1 | # 2 | # node-docker-setup __VERSION__ 3 | # https://github.com/iotaledger/node-docker-setup 4 | # 5 | 6 | services: 7 | ################################################################## 8 | # HORNET # 9 | ################################################################## 10 | 11 | hornet: 12 | container_name: hornet 13 | image: iotaledger/hornet:2.0 14 | ulimits: 15 | nofile: 16 | soft: 16384 17 | hard: 16384 18 | stop_grace_period: 5m 19 | depends_on: 20 | traefik: 21 | condition: service_started 22 | ports: 23 | - "${HORNET_GOSSIP_PORT:-15600}:${HORNET_GOSSIP_PORT:-15600}/tcp" 24 | - "${HORNET_AUTOPEERING_PORT:-14626}:${HORNET_AUTOPEERING_PORT:-14626}/udp" 25 | labels: 26 | - "traefik.enable=true" 27 | - "traefik.http.routers.hornet.service=hornet" 28 | - "traefik.http.routers.hornet.rule=Host(`${NODE_HOST:-localhost}`)" 29 | - "traefik.http.routers.hornet.entrypoints=web" 30 | - "traefik.http.services.hornet.loadbalancer.server.port=14265" 31 | - "traefik.http.routers.hornet.middlewares=redirect-dashboard" 32 | - "traefik.http.middlewares.redirect-dashboard.redirectregex.regex=^(https?://[^/]+)/?$$" 33 | - "traefik.http.middlewares.redirect-dashboard.redirectregex.replacement=$$1/dashboard/" 34 | - "traefik.http.middlewares.redirect-dashboard.redirectregex.permanent=true" 35 | cap_drop: 36 | - ALL 37 | volumes: 38 | - ./${HORNET_CONFIG_FILE:-config.json}:/app/config.json:ro 39 | - ./peering.json:/app/peering.json 40 | - ./data:/app/data 41 | command: 42 | - "-c" 43 | - "config.json" 44 | - "--db.path=data/database" 45 | - "--p2p.db.path=data/p2pstore" 46 | - "--p2p.bindMultiAddresses=/ip4/0.0.0.0/tcp/${HORNET_GOSSIP_PORT:-15600},/ip6/::/tcp/${HORNET_GOSSIP_PORT:-15600}" 47 | - "--p2p.autopeering.bindAddress=0.0.0.0:${HORNET_AUTOPEERING_PORT:-14626}" 48 | - "--snapshots.fullPath=data/snapshots/full_snapshot.bin" 49 | - "--snapshots.deltaPath=data/snapshots/delta_snapshot.bin" 50 | - "--inx.enabled=true" 51 | - "--inx.bindAddress=hornet:9029" 52 | - "--prometheus.enabled=true" 53 | - "--prometheus.bindAddress=hornet:9311" 54 | 55 | ################################################################## 56 | # Reverse Proxy and SSL # 57 | ################################################################## 58 | 59 | traefik: 60 | container_name: traefik 61 | image: traefik:v2.10 62 | command: 63 | - "--providers.docker=true" 64 | - "--providers.docker.exposedbydefault=false" 65 | - "--metrics.prometheus=true" 66 | - "--entrypoints.web.address=:80" 67 | ports: 68 | - "${HTTP_PORT:-80}:80/tcp" 69 | volumes: 70 | - "/var/run/docker.sock:/var/run/docker.sock:ro" 71 | - "./data/letsencrypt:/letsencrypt" 72 | 73 | ################################################################## 74 | # Monitoring # 75 | ################################################################## 76 | 77 | prometheus: 78 | container_name: prometheus 79 | image: prom/prometheus:latest 80 | restart: unless-stopped 81 | user: "65532" 82 | volumes: 83 | - ./data/prometheus/:/prometheus 84 | - ./assets/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml 85 | - /etc/localtime:/etc/localtime:ro 86 | profiles: 87 | - monitoring 88 | 89 | cadvisor: 90 | container_name: cadvisor 91 | image: gcr.io/cadvisor/cadvisor:latest 92 | privileged: true 93 | command: 94 | - --housekeeping_interval=30s # kubernetes default args 95 | - --max_housekeeping_interval=35s 96 | - --event_storage_event_limit=default=0 97 | - --event_storage_age_limit=default=0 98 | - --store_container_labels=false 99 | - --global_housekeeping_interval=30s 100 | - --event_storage_event_limit=default=0 101 | - --event_storage_age_limit=default=0 102 | - --disable_metrics=advtcp,cpu_topology,disk,hugetlb,memory_numa,percpu,referenced_memory,resctrl,sched,tcp,udp 103 | - --enable_load_reader=true 104 | - --docker_only=true # only show stats for docker containers 105 | - --allow_dynamic_housekeeping=true 106 | - --storage_duration=1m0s 107 | volumes: 108 | - /:/rootfs:ro 109 | - /var/run:/var/run:rw 110 | - /sys:/sys:ro 111 | - /var/lib/docker/:/var/lib/docker:ro 112 | profiles: 113 | - monitoring 114 | 115 | grafana: 116 | container_name: grafana 117 | image: grafana/grafana:latest 118 | restart: unless-stopped 119 | user: "65532" 120 | labels: 121 | - "traefik.enable=true" 122 | - "traefik.http.routers.grafana.rule=Host(`${NODE_HOST:-localhost}`) && (Path(`/grafana`) || PathPrefix(`/grafana/`))" 123 | - "traefik.http.routers.grafana.entrypoints=web" 124 | - "traefik.http.services.grafana.loadbalancer.server.port=3000" 125 | environment: 126 | - GF_SERVER_ROOT_URL=/grafana 127 | - GF_SERVER_SERVE_FROM_SUB_PATH=true 128 | - GF_SERVER_DOMAIN=${NODE_HOST:-localhost} 129 | - GF_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH=/etc/grafana/provisioning/dashboards/node_dashboard.json 130 | volumes: 131 | - ./data/grafana:/var/lib/grafana 132 | - ./assets/grafana/:/etc/grafana/provisioning/ 133 | profiles: 134 | - monitoring 135 | 136 | ################################################################## 137 | # INX Extensions # 138 | # disable them out by commenting out the services # 139 | ################################################################## 140 | 141 | inx-indexer: 142 | container_name: inx-indexer 143 | image: iotaledger/inx-indexer:1.0 144 | stop_grace_period: 5m 145 | restart: unless-stopped 146 | depends_on: 147 | hornet: 148 | condition: service_healthy 149 | volumes: 150 | - ./data:/app/database 151 | command: 152 | - "--inx.address=hornet:9029" 153 | - "--indexer.db.sqlite.path=database/indexer" 154 | - "--restAPI.bindAddress=inx-indexer:9091" 155 | - "--prometheus.enabled=true" 156 | - "--prometheus.bindAddress=inx-indexer:9312" 157 | 158 | inx-mqtt: 159 | container_name: inx-mqtt 160 | image: iotaledger/inx-mqtt:1.0 161 | stop_grace_period: 5m 162 | restart: unless-stopped 163 | depends_on: 164 | hornet: 165 | condition: service_healthy 166 | command: 167 | - "--inx.address=hornet:9029" 168 | - "--mqtt.websocket.bindAddress=inx-mqtt:1888" 169 | - "--prometheus.enabled=true" 170 | - "--prometheus.bindAddress=inx-mqtt:9312" 171 | 172 | inx-participation: 173 | container_name: inx-participation 174 | image: iotaledger/inx-participation:1.0 175 | stop_grace_period: 5m 176 | restart: unless-stopped 177 | depends_on: 178 | hornet: 179 | condition: service_healthy 180 | ulimits: 181 | nofile: 182 | soft: 16384 183 | hard: 16384 184 | volumes: 185 | - ./data:/app/database 186 | command: 187 | - "--inx.address=hornet:9029" 188 | - "--participation.db.path=database/participation" 189 | - "--restAPI.bindAddress=inx-participation:9892" 190 | 191 | inx-spammer: 192 | container_name: inx-spammer 193 | image: iotaledger/inx-spammer:1.0 194 | stop_grace_period: 5m 195 | restart: unless-stopped 196 | depends_on: 197 | hornet: 198 | condition: service_healthy 199 | inx-indexer: 200 | condition: service_started 201 | command: 202 | - "--inx.address=hornet:9029" 203 | - "--restAPI.bindAddress=inx-spammer:9092" 204 | - "--prometheus.enabled=true" 205 | - "--prometheus.bindAddress=inx-spammer:9312" 206 | 207 | inx-poi: 208 | container_name: inx-poi 209 | image: iotaledger/inx-poi:1.0 210 | stop_grace_period: 5m 211 | restart: unless-stopped 212 | depends_on: 213 | hornet: 214 | condition: service_healthy 215 | command: 216 | - "--inx.address=hornet:9029" 217 | - "--restAPI.bindAddress=inx-poi:9687" 218 | 219 | inx-dashboard: 220 | container_name: inx-dashboard 221 | image: iotaledger/inx-dashboard:1.0 222 | stop_grace_period: 5m 223 | restart: unless-stopped 224 | depends_on: 225 | traefik: 226 | condition: service_started 227 | labels: 228 | - "traefik.enable=true" 229 | - "traefik.http.routers.hornet-dashboard.service=hornet-dashboard" 230 | - "traefik.http.routers.hornet-dashboard.rule=Host(`${NODE_HOST:-localhost}`) && (Path(`/dashboard`) || PathPrefix(`/dashboard/`))" 231 | - "traefik.http.routers.hornet-dashboard.entrypoints=web" 232 | - "traefik.http.services.hornet-dashboard.loadbalancer.server.port=8081" 233 | volumes: 234 | - ./data:/app/database 235 | command: 236 | - "--inx.address=hornet:9029" 237 | - "--dashboard.bindAddress=inx-dashboard:8081" 238 | - "--dashboard.auth.identityFilePath=/app/database/dashboard/identity.key" 239 | - "--dashboard.auth.username=${DASHBOARD_USERNAME:-admin}" 240 | - "--dashboard.auth.passwordHash=${DASHBOARD_PASSWORD:-0000000000000000000000000000000000000000000000000000000000000000}" 241 | - "--dashboard.auth.passwordSalt=${DASHBOARD_SALT:-0000000000000000000000000000000000000000000000000000000000000000}" 242 | - "--prometheus.enabled=true" 243 | - "--prometheus.bindAddress=inx-dashboard:9312" 244 | 245 | ################################################################## 246 | # Historic Data # 247 | ################################################################## 248 | 249 | inx-api-core-v0: 250 | container_name: inx-api-core-v0 251 | image: iotaledger/inx-api-core-v0:1.0 252 | stop_grace_period: 5m 253 | restart: unless-stopped 254 | depends_on: 255 | hornet: 256 | condition: service_healthy 257 | ulimits: 258 | nofile: 259 | soft: 16384 260 | hard: 16384 261 | volumes: 262 | - ./data/database_legacy:/app/data/database 263 | command: 264 | - "--db.tangle.path=data/database/tangle" 265 | - "--db.snapshot.path=data/database/snapshot" 266 | - "--db.spent.path=data/database/spent" 267 | - "--inx.enabled=true" 268 | - "--inx.address=hornet:9029" 269 | - "--restAPI.bindAddress=inx-api-core-v0:9093" 270 | - "--prometheus.enabled=true" 271 | - "--prometheus.bindAddress=inx-api-core-v0:9312" 272 | profiles: 273 | - history-legacy 274 | 275 | inx-api-core-v1: 276 | container_name: inx-api-core-v1 277 | image: iotaledger/inx-api-core-v1:1.0 278 | stop_grace_period: 5m 279 | restart: unless-stopped 280 | depends_on: 281 | hornet: 282 | condition: service_healthy 283 | ulimits: 284 | nofile: 285 | soft: 16384 286 | hard: 16384 287 | volumes: 288 | - ./data/database_chrysalis:/app/data/database 289 | command: 290 | - "--db.tangle.path=data/database/tangle" 291 | - "--db.utxo.path=data/database/utxo" 292 | - "--inx.enabled=true" 293 | - "--inx.address=hornet:9029" 294 | - "--restAPI.bindAddress=inx-api-core-v1:9094" 295 | - "--prometheus.enabled=true" 296 | - "--prometheus.bindAddress=inx-api-core-v1:9312" 297 | profiles: 298 | - history-chrysalis 299 | 300 | ################################################################## 301 | # WASP # 302 | ################################################################## 303 | 304 | wasp: 305 | container_name: wasp 306 | image: iotaledger/wasp:1.1-rc 307 | stop_grace_period: 5m 308 | restart: unless-stopped 309 | depends_on: 310 | hornet: 311 | condition: service_healthy 312 | inx-indexer: 313 | condition: service_started 314 | labels: 315 | - "traefik.enable=true" 316 | - "traefik.http.routers.wasp-api.service=wasp-api" 317 | - "traefik.http.routers.wasp-api.rule=Host(`${NODE_HOST:-localhost}`) && (Path(`/wasp/api`) || PathPrefix(`/wasp/api/`))" 318 | - "traefik.http.routers.wasp-api.entrypoints=web" 319 | - "traefik.http.services.wasp-api.loadbalancer.server.port=9090" 320 | - "traefik.http.routers.wasp-api.middlewares=rewrite-wasp-api" 321 | - "traefik.http.middlewares.rewrite-wasp-api.stripprefix.prefixes=/wasp/api" 322 | ports: 323 | - "4000:4000/tcp" # Peering 324 | volumes: 325 | - ./data/wasp:/app/waspdb 326 | command: 327 | - "--logger.level=debug" 328 | - "--inx.address=hornet:9029" 329 | - "--db.chainState.path=/app/waspdb/chains/data" 330 | - "--p2p.identity.filePath=/app/waspdb/identity/identity.key" 331 | - "--p2p.db.path=/app/waspdb/p2pstore" 332 | - "--registries.chains.filePath=/app/waspdb/chains/chain_registry.json" 333 | - "--registries.dkShares.path=/app/waspdb/dkshares" 334 | - "--registries.trustedPeers.filePath=/app/waspdb/trusted_peers.json" 335 | - "--registries.consensusState.path=/app/waspdb/chains/consensus" 336 | - "--wal.path=/app/waspdb/wal" 337 | - "--prometheus.enabled=true" 338 | - "--prometheus.bindAddress=wasp:9312" 339 | - "--users=/app/waspdb/users.json" 340 | - "--stateManager.pruningMinStatesToKeep=${WASP_PRUNING_MIN_STATES_TO_KEEP:-10000}" 341 | - "--snapshots.networkPaths=${WASP_SNAPSHOT_NETWORK_PATHS:-[]}" 342 | profiles: 343 | - wasp 344 | 345 | wasp-dashboard: 346 | container_name: wasp-dashboard 347 | image: iotaledger/wasp-dashboard:latest 348 | stop_grace_period: 5m 349 | restart: unless-stopped 350 | depends_on: 351 | traefik: 352 | condition: service_started 353 | labels: 354 | - "traefik.enable=true" 355 | - "traefik.http.routers.wasp-dashboard.service=wasp-dashboard" 356 | - "traefik.http.routers.wasp-dashboard.rule=Host(`${NODE_HOST:-localhost}`) && (Path(`/wasp/dashboard`) || PathPrefix(`/wasp/dashboard/`))" 357 | - "traefik.http.routers.wasp-dashboard.entrypoints=web" 358 | - "traefik.http.services.wasp-dashboard.loadbalancer.server.port=80" 359 | - "traefik.http.routers.wasp-dashboard.middlewares=rewrite-wasp-dashboard" 360 | - "traefik.http.middlewares.rewrite-wasp-dashboard.stripprefix.prefixes=/wasp/dashboard" 361 | environment: 362 | - WASP_API_URL=http://${NODE_HOST:-localhost}/wasp/api 363 | - L1_API_URL=http://${NODE_HOST:-localhost} 364 | profiles: 365 | - wasp 366 | -------------------------------------------------------------------------------- /iota-testnet/docker-compose.yml: -------------------------------------------------------------------------------- 1 | # 2 | # node-docker-setup __VERSION__ 3 | # https://github.com/iotaledger/node-docker-setup 4 | # 5 | 6 | services: 7 | ################################################################## 8 | # HORNET # 9 | ################################################################## 10 | 11 | hornet: 12 | container_name: hornet 13 | image: iotaledger/hornet:2.0 14 | ulimits: 15 | nofile: 16 | soft: 16384 17 | hard: 16384 18 | stop_grace_period: 5m 19 | depends_on: 20 | traefik: 21 | condition: service_started 22 | ports: 23 | - "${HORNET_GOSSIP_PORT:-15600}:${HORNET_GOSSIP_PORT:-15600}/tcp" 24 | - "${HORNET_AUTOPEERING_PORT:-14626}:${HORNET_AUTOPEERING_PORT:-14626}/udp" 25 | labels: 26 | - "traefik.enable=true" 27 | - "traefik.http.routers.hornet.service=hornet" 28 | - "traefik.http.routers.hornet.rule=Host(`${NODE_HOST:-localhost}`)" 29 | - "traefik.http.routers.hornet.entrypoints=web" 30 | - "traefik.http.services.hornet.loadbalancer.server.port=14265" 31 | - "traefik.http.routers.hornet.middlewares=redirect-dashboard" 32 | - "traefik.http.middlewares.redirect-dashboard.redirectregex.regex=^(https?://[^/]+)/?$$" 33 | - "traefik.http.middlewares.redirect-dashboard.redirectregex.replacement=$$1/dashboard/" 34 | - "traefik.http.middlewares.redirect-dashboard.redirectregex.permanent=true" 35 | cap_drop: 36 | - ALL 37 | volumes: 38 | - ./${HORNET_CONFIG_FILE:-config.json}:/app/config.json:ro 39 | - ./peering.json:/app/peering.json 40 | - ./data:/app/data 41 | command: 42 | - "-c" 43 | - "config.json" 44 | - "--db.path=data/database" 45 | - "--p2p.db.path=data/p2pstore" 46 | - "--p2p.bindMultiAddresses=/ip4/0.0.0.0/tcp/${HORNET_GOSSIP_PORT:-15600},/ip6/::/tcp/${HORNET_GOSSIP_PORT:-15600}" 47 | - "--p2p.autopeering.bindAddress=0.0.0.0:${HORNET_AUTOPEERING_PORT:-14626}" 48 | - "--snapshots.fullPath=data/snapshots/full_snapshot.bin" 49 | - "--snapshots.deltaPath=data/snapshots/delta_snapshot.bin" 50 | - "--inx.enabled=true" 51 | - "--inx.bindAddress=hornet:9029" 52 | - "--prometheus.enabled=true" 53 | - "--prometheus.bindAddress=hornet:9311" 54 | 55 | ################################################################## 56 | # Reverse Proxy and SSL # 57 | ################################################################## 58 | 59 | traefik: 60 | container_name: traefik 61 | image: traefik:v2.10 62 | command: 63 | - "--providers.docker=true" 64 | - "--providers.docker.exposedbydefault=false" 65 | - "--metrics.prometheus=true" 66 | - "--entrypoints.web.address=:80" 67 | ports: 68 | - "${HTTP_PORT:-80}:80/tcp" 69 | volumes: 70 | - "/var/run/docker.sock:/var/run/docker.sock:ro" 71 | - "./data/letsencrypt:/letsencrypt" 72 | 73 | ################################################################## 74 | # Monitoring # 75 | ################################################################## 76 | 77 | prometheus: 78 | container_name: prometheus 79 | image: prom/prometheus:latest 80 | restart: unless-stopped 81 | user: "65532" 82 | volumes: 83 | - ./data/prometheus/:/prometheus 84 | - ./assets/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml 85 | - /etc/localtime:/etc/localtime:ro 86 | profiles: 87 | - monitoring 88 | 89 | cadvisor: 90 | container_name: cadvisor 91 | image: gcr.io/cadvisor/cadvisor:latest 92 | privileged: true 93 | command: 94 | - --housekeeping_interval=30s # kubernetes default args 95 | - --max_housekeeping_interval=35s 96 | - --event_storage_event_limit=default=0 97 | - --event_storage_age_limit=default=0 98 | - --store_container_labels=false 99 | - --global_housekeeping_interval=30s 100 | - --event_storage_event_limit=default=0 101 | - --event_storage_age_limit=default=0 102 | - --disable_metrics=advtcp,cpu_topology,disk,hugetlb,memory_numa,percpu,referenced_memory,resctrl,sched,tcp,udp 103 | - --enable_load_reader=true 104 | - --docker_only=true # only show stats for docker containers 105 | - --allow_dynamic_housekeeping=true 106 | - --storage_duration=1m0s 107 | volumes: 108 | - /:/rootfs:ro 109 | - /var/run:/var/run:rw 110 | - /sys:/sys:ro 111 | - /var/lib/docker/:/var/lib/docker:ro 112 | profiles: 113 | - monitoring 114 | 115 | grafana: 116 | container_name: grafana 117 | image: grafana/grafana:latest 118 | restart: unless-stopped 119 | user: "65532" 120 | labels: 121 | - "traefik.enable=true" 122 | - "traefik.http.routers.grafana.rule=Host(`${NODE_HOST:-localhost}`) && (Path(`/grafana`) || PathPrefix(`/grafana/`))" 123 | - "traefik.http.routers.grafana.entrypoints=web" 124 | - "traefik.http.services.grafana.loadbalancer.server.port=3000" 125 | environment: 126 | - GF_SERVER_ROOT_URL=/grafana 127 | - GF_SERVER_SERVE_FROM_SUB_PATH=true 128 | - GF_SERVER_DOMAIN=${NODE_HOST:-localhost} 129 | - GF_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH=/etc/grafana/provisioning/dashboards/node_dashboard.json 130 | volumes: 131 | - ./data/grafana:/var/lib/grafana 132 | - ./assets/grafana/:/etc/grafana/provisioning/ 133 | profiles: 134 | - monitoring 135 | 136 | ################################################################## 137 | # INX Extensions # 138 | # disable them out by commenting out the services # 139 | ################################################################## 140 | 141 | inx-indexer: 142 | container_name: inx-indexer 143 | image: iotaledger/inx-indexer:1.0 144 | stop_grace_period: 5m 145 | restart: unless-stopped 146 | depends_on: 147 | hornet: 148 | condition: service_healthy 149 | volumes: 150 | - ./data:/app/database 151 | command: 152 | - "--inx.address=hornet:9029" 153 | - "--indexer.db.sqlite.path=database/indexer" 154 | - "--restAPI.bindAddress=inx-indexer:9091" 155 | - "--prometheus.enabled=true" 156 | - "--prometheus.bindAddress=inx-indexer:9312" 157 | 158 | inx-mqtt: 159 | container_name: inx-mqtt 160 | image: iotaledger/inx-mqtt:1.0 161 | stop_grace_period: 5m 162 | restart: unless-stopped 163 | depends_on: 164 | hornet: 165 | condition: service_healthy 166 | command: 167 | - "--inx.address=hornet:9029" 168 | - "--mqtt.websocket.bindAddress=inx-mqtt:1888" 169 | - "--prometheus.enabled=true" 170 | - "--prometheus.bindAddress=inx-mqtt:9312" 171 | 172 | inx-participation: 173 | container_name: inx-participation 174 | image: iotaledger/inx-participation:1.0 175 | stop_grace_period: 5m 176 | restart: unless-stopped 177 | depends_on: 178 | hornet: 179 | condition: service_healthy 180 | ulimits: 181 | nofile: 182 | soft: 16384 183 | hard: 16384 184 | volumes: 185 | - ./data:/app/database 186 | command: 187 | - "--inx.address=hornet:9029" 188 | - "--participation.db.path=database/participation" 189 | - "--restAPI.bindAddress=inx-participation:9892" 190 | 191 | inx-spammer: 192 | container_name: inx-spammer 193 | image: iotaledger/inx-spammer:1.0 194 | stop_grace_period: 5m 195 | restart: unless-stopped 196 | depends_on: 197 | hornet: 198 | condition: service_healthy 199 | inx-indexer: 200 | condition: service_started 201 | command: 202 | - "--inx.address=hornet:9029" 203 | - "--restAPI.bindAddress=inx-spammer:9092" 204 | - "--prometheus.enabled=true" 205 | - "--prometheus.bindAddress=inx-spammer:9312" 206 | 207 | inx-poi: 208 | container_name: inx-poi 209 | image: iotaledger/inx-poi:1.0 210 | stop_grace_period: 5m 211 | restart: unless-stopped 212 | depends_on: 213 | hornet: 214 | condition: service_healthy 215 | command: 216 | - "--inx.address=hornet:9029" 217 | - "--restAPI.bindAddress=inx-poi:9687" 218 | 219 | inx-dashboard: 220 | container_name: inx-dashboard 221 | image: iotaledger/inx-dashboard:1.0 222 | stop_grace_period: 5m 223 | restart: unless-stopped 224 | depends_on: 225 | traefik: 226 | condition: service_started 227 | labels: 228 | - "traefik.enable=true" 229 | - "traefik.http.routers.hornet-dashboard.service=hornet-dashboard" 230 | - "traefik.http.routers.hornet-dashboard.rule=Host(`${NODE_HOST:-localhost}`) && (Path(`/dashboard`) || PathPrefix(`/dashboard/`))" 231 | - "traefik.http.routers.hornet-dashboard.entrypoints=web" 232 | - "traefik.http.services.hornet-dashboard.loadbalancer.server.port=8081" 233 | volumes: 234 | - ./data:/app/database 235 | command: 236 | - "--inx.address=hornet:9029" 237 | - "--dashboard.bindAddress=inx-dashboard:8081" 238 | - "--dashboard.auth.identityFilePath=/app/database/dashboard/identity.key" 239 | - "--dashboard.auth.username=${DASHBOARD_USERNAME:-admin}" 240 | - "--dashboard.auth.passwordHash=${DASHBOARD_PASSWORD:-0000000000000000000000000000000000000000000000000000000000000000}" 241 | - "--dashboard.auth.passwordSalt=${DASHBOARD_SALT:-0000000000000000000000000000000000000000000000000000000000000000}" 242 | - "--prometheus.enabled=true" 243 | - "--prometheus.bindAddress=inx-dashboard:9312" 244 | 245 | ################################################################## 246 | # Historic Data # 247 | ################################################################## 248 | 249 | inx-api-core-v0: 250 | container_name: inx-api-core-v0 251 | image: iotaledger/inx-api-core-v0:1.0 252 | stop_grace_period: 5m 253 | restart: unless-stopped 254 | depends_on: 255 | hornet: 256 | condition: service_healthy 257 | ulimits: 258 | nofile: 259 | soft: 16384 260 | hard: 16384 261 | volumes: 262 | - ./data/database_legacy:/app/data/database 263 | command: 264 | - "--db.tangle.path=data/database/tangle" 265 | - "--db.snapshot.path=data/database/snapshot" 266 | - "--db.spent.path=data/database/spent" 267 | - "--inx.enabled=true" 268 | - "--inx.address=hornet:9029" 269 | - "--restAPI.bindAddress=inx-api-core-v0:9093" 270 | - "--prometheus.enabled=true" 271 | - "--prometheus.bindAddress=inx-api-core-v0:9312" 272 | profiles: 273 | - history-legacy 274 | 275 | inx-api-core-v1: 276 | container_name: inx-api-core-v1 277 | image: iotaledger/inx-api-core-v1:1.0 278 | stop_grace_period: 5m 279 | restart: unless-stopped 280 | depends_on: 281 | hornet: 282 | condition: service_healthy 283 | ulimits: 284 | nofile: 285 | soft: 16384 286 | hard: 16384 287 | volumes: 288 | - ./data/database_chrysalis:/app/data/database 289 | command: 290 | - "--db.tangle.path=data/database/tangle" 291 | - "--db.utxo.path=data/database/utxo" 292 | - "--inx.enabled=true" 293 | - "--inx.address=hornet:9029" 294 | - "--restAPI.bindAddress=inx-api-core-v1:9094" 295 | - "--prometheus.enabled=true" 296 | - "--prometheus.bindAddress=inx-api-core-v1:9312" 297 | profiles: 298 | - history-chrysalis 299 | 300 | ################################################################## 301 | # WASP # 302 | ################################################################## 303 | 304 | wasp: 305 | container_name: wasp 306 | image: iotaledger/wasp:1.2-alpha 307 | stop_grace_period: 5m 308 | restart: unless-stopped 309 | depends_on: 310 | hornet: 311 | condition: service_healthy 312 | inx-indexer: 313 | condition: service_started 314 | labels: 315 | - "traefik.enable=true" 316 | - "traefik.http.routers.wasp-api.service=wasp-api" 317 | - "traefik.http.routers.wasp-api.rule=Host(`${NODE_HOST:-localhost}`) && (Path(`/wasp/api`) || PathPrefix(`/wasp/api/`))" 318 | - "traefik.http.routers.wasp-api.entrypoints=web" 319 | - "traefik.http.services.wasp-api.loadbalancer.server.port=9090" 320 | - "traefik.http.routers.wasp-api.middlewares=rewrite-wasp-api" 321 | - "traefik.http.middlewares.rewrite-wasp-api.stripprefix.prefixes=/wasp/api" 322 | ports: 323 | - "4000:4000/tcp" # Peering 324 | volumes: 325 | - ./data/wasp:/app/waspdb 326 | command: 327 | - "--logger.level=debug" 328 | - "--inx.address=hornet:9029" 329 | - "--db.chainState.path=/app/waspdb/chains/data" 330 | - "--p2p.identity.filePath=/app/waspdb/identity/identity.key" 331 | - "--p2p.db.path=/app/waspdb/p2pstore" 332 | - "--registries.chains.filePath=/app/waspdb/chains/chain_registry.json" 333 | - "--registries.dkShares.path=/app/waspdb/dkshares" 334 | - "--registries.trustedPeers.filePath=/app/waspdb/trusted_peers.json" 335 | - "--registries.consensusState.path=/app/waspdb/chains/consensus" 336 | - "--wal.path=/app/waspdb/wal" 337 | - "--prometheus.enabled=true" 338 | - "--prometheus.bindAddress=wasp:9312" 339 | - "--users=/app/waspdb/users.json" 340 | - "--stateManager.pruningMinStatesToKeep=${WASP_PRUNING_MIN_STATES_TO_KEEP:-10000}" 341 | - "--snapshots.networkPaths=${WASP_SNAPSHOT_NETWORK_PATHS:-[]}" 342 | profiles: 343 | - wasp 344 | 345 | wasp-dashboard: 346 | container_name: wasp-dashboard 347 | image: iotaledger/wasp-dashboard:latest 348 | stop_grace_period: 5m 349 | restart: unless-stopped 350 | depends_on: 351 | traefik: 352 | condition: service_started 353 | labels: 354 | - "traefik.enable=true" 355 | - "traefik.http.routers.wasp-dashboard.service=wasp-dashboard" 356 | - "traefik.http.routers.wasp-dashboard.rule=Host(`${NODE_HOST:-localhost}`) && (Path(`/wasp/dashboard`) || PathPrefix(`/wasp/dashboard/`))" 357 | - "traefik.http.routers.wasp-dashboard.entrypoints=web" 358 | - "traefik.http.services.wasp-dashboard.loadbalancer.server.port=80" 359 | - "traefik.http.routers.wasp-dashboard.middlewares=rewrite-wasp-dashboard" 360 | - "traefik.http.middlewares.rewrite-wasp-dashboard.stripprefix.prefixes=/wasp/dashboard" 361 | environment: 362 | - WASP_API_URL=http://${NODE_HOST:-localhost}/wasp/api 363 | - L1_API_URL=http://${NODE_HOST:-localhost} 364 | profiles: 365 | - wasp 366 | -------------------------------------------------------------------------------- /shimmer-testnet/docker-compose.yml: -------------------------------------------------------------------------------- 1 | # 2 | # node-docker-setup __VERSION__ 3 | # https://github.com/iotaledger/node-docker-setup 4 | # 5 | 6 | services: 7 | ################################################################## 8 | # HORNET # 9 | ################################################################## 10 | 11 | hornet: 12 | container_name: hornet 13 | image: iotaledger/hornet:2.0 14 | ulimits: 15 | nofile: 16 | soft: 16384 17 | hard: 16384 18 | stop_grace_period: 5m 19 | depends_on: 20 | traefik: 21 | condition: service_started 22 | ports: 23 | - "${HORNET_GOSSIP_PORT:-15600}:${HORNET_GOSSIP_PORT:-15600}/tcp" 24 | - "${HORNET_AUTOPEERING_PORT:-14626}:${HORNET_AUTOPEERING_PORT:-14626}/udp" 25 | labels: 26 | - "traefik.enable=true" 27 | - "traefik.http.routers.hornet.service=hornet" 28 | - "traefik.http.routers.hornet.rule=Host(`${NODE_HOST:-localhost}`)" 29 | - "traefik.http.routers.hornet.entrypoints=web" 30 | - "traefik.http.services.hornet.loadbalancer.server.port=14265" 31 | - "traefik.http.routers.hornet.middlewares=redirect-dashboard" 32 | - "traefik.http.middlewares.redirect-dashboard.redirectregex.regex=^(https?://[^/]+)/?$$" 33 | - "traefik.http.middlewares.redirect-dashboard.redirectregex.replacement=$$1/dashboard/" 34 | - "traefik.http.middlewares.redirect-dashboard.redirectregex.permanent=true" 35 | cap_drop: 36 | - ALL 37 | volumes: 38 | - ./${HORNET_CONFIG_FILE:-config.json}:/app/config.json:ro 39 | - ./peering.json:/app/peering.json 40 | - ./data:/app/data 41 | command: 42 | - "-c" 43 | - "config.json" 44 | - "--db.path=data/database" 45 | - "--p2p.db.path=data/p2pstore" 46 | - "--p2p.bindMultiAddresses=/ip4/0.0.0.0/tcp/${HORNET_GOSSIP_PORT:-15600},/ip6/::/tcp/${HORNET_GOSSIP_PORT:-15600}" 47 | - "--p2p.autopeering.bindAddress=0.0.0.0:${HORNET_AUTOPEERING_PORT:-14626}" 48 | - "--snapshots.fullPath=data/snapshots/full_snapshot.bin" 49 | - "--snapshots.deltaPath=data/snapshots/delta_snapshot.bin" 50 | - "--inx.enabled=true" 51 | - "--inx.bindAddress=hornet:9029" 52 | - "--prometheus.enabled=true" 53 | - "--prometheus.bindAddress=hornet:9311" 54 | 55 | ################################################################## 56 | # Reverse Proxy and SSL # 57 | ################################################################## 58 | 59 | traefik: 60 | container_name: traefik 61 | image: traefik:v2.10 62 | command: 63 | - "--providers.docker=true" 64 | - "--providers.docker.exposedbydefault=false" 65 | - "--metrics.prometheus=true" 66 | - "--entrypoints.web.address=:80" 67 | ports: 68 | - "${HTTP_PORT:-80}:80/tcp" 69 | volumes: 70 | - "/var/run/docker.sock:/var/run/docker.sock:ro" 71 | - "./data/letsencrypt:/letsencrypt" 72 | 73 | ################################################################## 74 | # Monitoring # 75 | ################################################################## 76 | 77 | prometheus: 78 | container_name: prometheus 79 | image: prom/prometheus:latest 80 | restart: unless-stopped 81 | user: "65532" 82 | volumes: 83 | - ./data/prometheus/:/prometheus 84 | - ./assets/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml 85 | - /etc/localtime:/etc/localtime:ro 86 | profiles: 87 | - monitoring 88 | 89 | cadvisor: 90 | container_name: cadvisor 91 | image: gcr.io/cadvisor/cadvisor:latest 92 | privileged: true 93 | command: 94 | - --housekeeping_interval=30s # kubernetes default args 95 | - --max_housekeeping_interval=35s 96 | - --event_storage_event_limit=default=0 97 | - --event_storage_age_limit=default=0 98 | - --store_container_labels=false 99 | - --global_housekeeping_interval=30s 100 | - --event_storage_event_limit=default=0 101 | - --event_storage_age_limit=default=0 102 | - --disable_metrics=advtcp,cpu_topology,disk,hugetlb,memory_numa,percpu,referenced_memory,resctrl,sched,tcp,udp 103 | - --enable_load_reader=true 104 | - --docker_only=true # only show stats for docker containers 105 | - --allow_dynamic_housekeeping=true 106 | - --storage_duration=1m0s 107 | volumes: 108 | - /:/rootfs:ro 109 | - /var/run:/var/run:rw 110 | - /sys:/sys:ro 111 | - /var/lib/docker/:/var/lib/docker:ro 112 | profiles: 113 | - monitoring 114 | 115 | grafana: 116 | container_name: grafana 117 | image: grafana/grafana:latest 118 | restart: unless-stopped 119 | user: "65532" 120 | labels: 121 | - "traefik.enable=true" 122 | - "traefik.http.routers.grafana.rule=Host(`${NODE_HOST:-localhost}`) && (Path(`/grafana`) || PathPrefix(`/grafana/`))" 123 | - "traefik.http.routers.grafana.entrypoints=web" 124 | - "traefik.http.services.grafana.loadbalancer.server.port=3000" 125 | environment: 126 | - GF_SERVER_ROOT_URL=/grafana 127 | - GF_SERVER_SERVE_FROM_SUB_PATH=true 128 | - GF_SERVER_DOMAIN=${NODE_HOST:-localhost} 129 | - GF_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH=/etc/grafana/provisioning/dashboards/node_dashboard.json 130 | volumes: 131 | - ./data/grafana:/var/lib/grafana 132 | - ./assets/grafana/:/etc/grafana/provisioning/ 133 | profiles: 134 | - monitoring 135 | 136 | ################################################################## 137 | # INX Extensions # 138 | # disable them out by commenting out the services # 139 | ################################################################## 140 | 141 | inx-indexer: 142 | container_name: inx-indexer 143 | image: iotaledger/inx-indexer:1.0 144 | stop_grace_period: 5m 145 | restart: unless-stopped 146 | depends_on: 147 | hornet: 148 | condition: service_healthy 149 | volumes: 150 | - ./data:/app/database 151 | command: 152 | - "--inx.address=hornet:9029" 153 | - "--indexer.db.sqlite.path=database/indexer" 154 | - "--restAPI.bindAddress=inx-indexer:9091" 155 | - "--prometheus.enabled=true" 156 | - "--prometheus.bindAddress=inx-indexer:9312" 157 | 158 | inx-mqtt: 159 | container_name: inx-mqtt 160 | image: iotaledger/inx-mqtt:1.0 161 | stop_grace_period: 5m 162 | restart: unless-stopped 163 | depends_on: 164 | hornet: 165 | condition: service_healthy 166 | command: 167 | - "--inx.address=hornet:9029" 168 | - "--mqtt.websocket.bindAddress=inx-mqtt:1888" 169 | - "--prometheus.enabled=true" 170 | - "--prometheus.bindAddress=inx-mqtt:9312" 171 | 172 | inx-participation: 173 | container_name: inx-participation 174 | image: iotaledger/inx-participation:1.0 175 | stop_grace_period: 5m 176 | restart: unless-stopped 177 | depends_on: 178 | hornet: 179 | condition: service_healthy 180 | ulimits: 181 | nofile: 182 | soft: 16384 183 | hard: 16384 184 | volumes: 185 | - ./data:/app/database 186 | command: 187 | - "--inx.address=hornet:9029" 188 | - "--participation.db.path=database/participation" 189 | - "--restAPI.bindAddress=inx-participation:9892" 190 | 191 | inx-spammer: 192 | container_name: inx-spammer 193 | image: iotaledger/inx-spammer:1.0 194 | stop_grace_period: 5m 195 | restart: unless-stopped 196 | depends_on: 197 | hornet: 198 | condition: service_healthy 199 | inx-indexer: 200 | condition: service_started 201 | command: 202 | - "--inx.address=hornet:9029" 203 | - "--restAPI.bindAddress=inx-spammer:9092" 204 | - "--prometheus.enabled=true" 205 | - "--prometheus.bindAddress=inx-spammer:9312" 206 | 207 | inx-poi: 208 | container_name: inx-poi 209 | image: iotaledger/inx-poi:1.0 210 | stop_grace_period: 5m 211 | restart: unless-stopped 212 | depends_on: 213 | hornet: 214 | condition: service_healthy 215 | command: 216 | - "--inx.address=hornet:9029" 217 | - "--restAPI.bindAddress=inx-poi:9687" 218 | 219 | inx-dashboard: 220 | container_name: inx-dashboard 221 | image: iotaledger/inx-dashboard:1.0 222 | stop_grace_period: 5m 223 | restart: unless-stopped 224 | depends_on: 225 | traefik: 226 | condition: service_started 227 | labels: 228 | - "traefik.enable=true" 229 | - "traefik.http.routers.hornet-dashboard.service=hornet-dashboard" 230 | - "traefik.http.routers.hornet-dashboard.rule=Host(`${NODE_HOST:-localhost}`) && (Path(`/dashboard`) || PathPrefix(`/dashboard/`))" 231 | - "traefik.http.routers.hornet-dashboard.entrypoints=web" 232 | - "traefik.http.services.hornet-dashboard.loadbalancer.server.port=8081" 233 | volumes: 234 | - ./data:/app/database 235 | command: 236 | - "--inx.address=hornet:9029" 237 | - "--dashboard.bindAddress=inx-dashboard:8081" 238 | - "--dashboard.auth.identityFilePath=/app/database/dashboard/identity.key" 239 | - "--dashboard.auth.username=${DASHBOARD_USERNAME:-admin}" 240 | - "--dashboard.auth.passwordHash=${DASHBOARD_PASSWORD:-0000000000000000000000000000000000000000000000000000000000000000}" 241 | - "--dashboard.auth.passwordSalt=${DASHBOARD_SALT:-0000000000000000000000000000000000000000000000000000000000000000}" 242 | - "--prometheus.enabled=true" 243 | - "--prometheus.bindAddress=inx-dashboard:9312" 244 | 245 | ################################################################## 246 | # Historic Data # 247 | ################################################################## 248 | 249 | inx-api-core-v0: 250 | container_name: inx-api-core-v0 251 | image: iotaledger/inx-api-core-v0:1.0 252 | stop_grace_period: 5m 253 | restart: unless-stopped 254 | depends_on: 255 | hornet: 256 | condition: service_healthy 257 | ulimits: 258 | nofile: 259 | soft: 16384 260 | hard: 16384 261 | volumes: 262 | - ./data/database_legacy:/app/data/database 263 | command: 264 | - "--db.tangle.path=data/database/tangle" 265 | - "--db.snapshot.path=data/database/snapshot" 266 | - "--db.spent.path=data/database/spent" 267 | - "--inx.enabled=true" 268 | - "--inx.address=hornet:9029" 269 | - "--restAPI.bindAddress=inx-api-core-v0:9093" 270 | - "--prometheus.enabled=true" 271 | - "--prometheus.bindAddress=inx-api-core-v0:9312" 272 | profiles: 273 | - history-legacy 274 | 275 | inx-api-core-v1: 276 | container_name: inx-api-core-v1 277 | image: iotaledger/inx-api-core-v1:1.0 278 | stop_grace_period: 5m 279 | restart: unless-stopped 280 | depends_on: 281 | hornet: 282 | condition: service_healthy 283 | ulimits: 284 | nofile: 285 | soft: 16384 286 | hard: 16384 287 | volumes: 288 | - ./data/database_chrysalis:/app/data/database 289 | command: 290 | - "--db.tangle.path=data/database/tangle" 291 | - "--db.utxo.path=data/database/utxo" 292 | - "--inx.enabled=true" 293 | - "--inx.address=hornet:9029" 294 | - "--restAPI.bindAddress=inx-api-core-v1:9094" 295 | - "--prometheus.enabled=true" 296 | - "--prometheus.bindAddress=inx-api-core-v1:9312" 297 | profiles: 298 | - history-chrysalis 299 | 300 | ################################################################## 301 | # WASP # 302 | ################################################################## 303 | 304 | wasp: 305 | container_name: wasp 306 | image: iotaledger/wasp:1.2-alpha 307 | stop_grace_period: 5m 308 | restart: unless-stopped 309 | depends_on: 310 | hornet: 311 | condition: service_healthy 312 | inx-indexer: 313 | condition: service_started 314 | labels: 315 | - "traefik.enable=true" 316 | - "traefik.http.routers.wasp-api.service=wasp-api" 317 | - "traefik.http.routers.wasp-api.rule=Host(`${NODE_HOST:-localhost}`) && (Path(`/wasp/api`) || PathPrefix(`/wasp/api/`))" 318 | - "traefik.http.routers.wasp-api.entrypoints=web" 319 | - "traefik.http.services.wasp-api.loadbalancer.server.port=9090" 320 | - "traefik.http.routers.wasp-api.middlewares=rewrite-wasp-api" 321 | - "traefik.http.middlewares.rewrite-wasp-api.stripprefix.prefixes=/wasp/api" 322 | ports: 323 | - "4000:4000/tcp" # Peering 324 | volumes: 325 | - ./data/wasp:/app/waspdb 326 | command: 327 | - "--logger.level=debug" 328 | - "--inx.address=hornet:9029" 329 | - "--db.chainState.path=/app/waspdb/chains/data" 330 | - "--p2p.identity.filePath=/app/waspdb/identity/identity.key" 331 | - "--p2p.db.path=/app/waspdb/p2pstore" 332 | - "--registries.chains.filePath=/app/waspdb/chains/chain_registry.json" 333 | - "--registries.dkShares.path=/app/waspdb/dkshares" 334 | - "--registries.trustedPeers.filePath=/app/waspdb/trusted_peers.json" 335 | - "--registries.consensusState.path=/app/waspdb/chains/consensus" 336 | - "--wal.path=/app/waspdb/wal" 337 | - "--prometheus.enabled=true" 338 | - "--prometheus.bindAddress=wasp:9312" 339 | - "--users=/app/waspdb/users.json" 340 | - "--stateManager.pruningMinStatesToKeep=${WASP_PRUNING_MIN_STATES_TO_KEEP:-10000}" 341 | - "--snapshots.networkPaths=${WASP_SNAPSHOT_NETWORK_PATHS:-[]}" 342 | profiles: 343 | - wasp 344 | 345 | wasp-dashboard: 346 | container_name: wasp-dashboard 347 | image: iotaledger/wasp-dashboard:latest 348 | stop_grace_period: 5m 349 | restart: unless-stopped 350 | depends_on: 351 | traefik: 352 | condition: service_started 353 | labels: 354 | - "traefik.enable=true" 355 | - "traefik.http.routers.wasp-dashboard.service=wasp-dashboard" 356 | - "traefik.http.routers.wasp-dashboard.rule=Host(`${NODE_HOST:-localhost}`) && (Path(`/wasp/dashboard`) || PathPrefix(`/wasp/dashboard/`))" 357 | - "traefik.http.routers.wasp-dashboard.entrypoints=web" 358 | - "traefik.http.services.wasp-dashboard.loadbalancer.server.port=80" 359 | - "traefik.http.routers.wasp-dashboard.middlewares=rewrite-wasp-dashboard" 360 | - "traefik.http.middlewares.rewrite-wasp-dashboard.stripprefix.prefixes=/wasp/dashboard" 361 | environment: 362 | - WASP_API_URL=http://${NODE_HOST:-localhost}/wasp/api 363 | - L1_API_URL=http://${NODE_HOST:-localhost} 364 | profiles: 365 | - wasp 366 | -------------------------------------------------------------------------------- /iota2-testnet/assets/grafana/dashboards/commitments-overview.json: -------------------------------------------------------------------------------- 1 | { 2 | "annotations": { 3 | "list": [ 4 | { 5 | "builtIn": 1, 6 | "datasource": { 7 | "type": "datasource", 8 | "uid": "grafana" 9 | }, 10 | "enable": true, 11 | "hide": true, 12 | "iconColor": "rgba(0, 211, 255, 1)", 13 | "name": "Annotations & Alerts", 14 | "target": { 15 | "limit": 100, 16 | "matchAny": false, 17 | "tags": [], 18 | "type": "dashboard" 19 | }, 20 | "type": "dashboard" 21 | } 22 | ] 23 | }, 24 | "editable": true, 25 | "fiscalYearStartMonth": 0, 26 | "graphTooltip": 0, 27 | "id": 2, 28 | "links": [], 29 | "liveNow": false, 30 | "panels": [ 31 | { 32 | "gridPos": { 33 | "h": 1, 34 | "w": 24, 35 | "x": 0, 36 | "y": 0 37 | }, 38 | "id": 120, 39 | "title": "General", 40 | "type": "row" 41 | }, 42 | { 43 | "datasource": { 44 | "type": "prometheus", 45 | "uid": "PBFA97CFB590B2093" 46 | }, 47 | "fieldConfig": { 48 | "defaults": { 49 | "color": { 50 | "fixedColor": "semi-dark-blue", 51 | "mode": "fixed" 52 | }, 53 | "mappings": [], 54 | "thresholds": { 55 | "mode": "absolute", 56 | "steps": [ 57 | { 58 | "color": "semi-dark-blue", 59 | "value": null 60 | } 61 | ] 62 | } 63 | }, 64 | "overrides": [] 65 | }, 66 | "gridPos": { 67 | "h": 6, 68 | "w": 4, 69 | "x": 0, 70 | "y": 1 71 | }, 72 | "id": 107, 73 | "maxPerRow": 6, 74 | "options": { 75 | "colorMode": "value", 76 | "graphMode": "area", 77 | "justifyMode": "auto", 78 | "orientation": "horizontal", 79 | "reduceOptions": { 80 | "calcs": [ 81 | "lastNotNull" 82 | ], 83 | "fields": "", 84 | "values": false 85 | }, 86 | "textMode": "auto" 87 | }, 88 | "pluginVersion": "9.5.6", 89 | "repeat": "instance", 90 | "repeatDirection": "h", 91 | "targets": [ 92 | { 93 | "datasource": { 94 | "type": "prometheus", 95 | "uid": "PBFA97CFB590B2093" 96 | }, 97 | "editorMode": "code", 98 | "exemplar": true, 99 | "expr": "max(commitments_latest{instance=~\"$instance\"})", 100 | "format": "table", 101 | "instant": false, 102 | "legendFormat": "__auto", 103 | "range": true, 104 | "refId": "Committed" 105 | }, 106 | { 107 | "datasource": { 108 | "type": "prometheus", 109 | "uid": "PBFA97CFB590B2093" 110 | }, 111 | "editorMode": "code", 112 | "exemplar": true, 113 | "expr": "max(commitments_finalized{instance=~\"$instance\"})", 114 | "format": "table", 115 | "hide": false, 116 | "instant": false, 117 | "legendFormat": "__auto", 118 | "range": true, 119 | "refId": "Finalized" 120 | } 121 | ], 122 | "title": "Last commitmed slot $instance", 123 | "transformations": [], 124 | "type": "stat" 125 | }, 126 | { 127 | "datasource": { 128 | "type": "prometheus", 129 | "uid": "PBFA97CFB590B2093" 130 | }, 131 | "fieldConfig": { 132 | "defaults": { 133 | "color": { 134 | "mode": "palette-classic" 135 | }, 136 | "custom": { 137 | "axisCenteredZero": false, 138 | "axisColorMode": "text", 139 | "axisLabel": "", 140 | "axisPlacement": "auto", 141 | "barAlignment": 0, 142 | "drawStyle": "line", 143 | "fillOpacity": 0, 144 | "gradientMode": "none", 145 | "hideFrom": { 146 | "legend": false, 147 | "tooltip": false, 148 | "viz": false 149 | }, 150 | "lineInterpolation": "linear", 151 | "lineWidth": 1, 152 | "pointSize": 5, 153 | "scaleDistribution": { 154 | "type": "linear" 155 | }, 156 | "showPoints": "auto", 157 | "spanNulls": false, 158 | "stacking": { 159 | "group": "A", 160 | "mode": "none" 161 | }, 162 | "thresholdsStyle": { 163 | "mode": "off" 164 | } 165 | }, 166 | "decimals": 0, 167 | "mappings": [], 168 | "thresholds": { 169 | "mode": "absolute", 170 | "steps": [ 171 | { 172 | "color": "green", 173 | "value": null 174 | }, 175 | { 176 | "color": "red", 177 | "value": 80 178 | } 179 | ] 180 | } 181 | }, 182 | "overrides": [] 183 | }, 184 | "gridPos": { 185 | "h": 7, 186 | "w": 10, 187 | "x": 0, 188 | "y": 7 189 | }, 190 | "id": 129, 191 | "options": { 192 | "legend": { 193 | "calcs": [], 194 | "displayMode": "list", 195 | "placement": "bottom", 196 | "showLegend": false 197 | }, 198 | "tooltip": { 199 | "mode": "single", 200 | "sort": "none" 201 | } 202 | }, 203 | "targets": [ 204 | { 205 | "datasource": { 206 | "type": "prometheus", 207 | "uid": "PBFA97CFB590B2093" 208 | }, 209 | "editorMode": "code", 210 | "expr": "account_active_seats", 211 | "legendFormat": "__auto", 212 | "range": true, 213 | "refId": "A" 214 | } 215 | ], 216 | "title": "Online Commitee Seats", 217 | "type": "timeseries" 218 | }, 219 | { 220 | "collapsed": false, 221 | "gridPos": { 222 | "h": 1, 223 | "w": 24, 224 | "x": 0, 225 | "y": 14 226 | }, 227 | "id": 33, 228 | "panels": [], 229 | "title": "Slot Commitments", 230 | "type": "row" 231 | }, 232 | { 233 | "datasource": { 234 | "type": "prometheus", 235 | "uid": "PBFA97CFB590B2093" 236 | }, 237 | "fieldConfig": { 238 | "defaults": { 239 | "color": { 240 | "mode": "fixed" 241 | }, 242 | "custom": { 243 | "align": "left", 244 | "cellOptions": { 245 | "type": "auto" 246 | }, 247 | "filterable": false, 248 | "inspect": false 249 | }, 250 | "mappings": [], 251 | "thresholds": { 252 | "mode": "absolute", 253 | "steps": [ 254 | { 255 | "color": "semi-dark-green", 256 | "value": null 257 | } 258 | ] 259 | }, 260 | "unit": "none" 261 | }, 262 | "overrides": [ 263 | { 264 | "matcher": { 265 | "id": "byName", 266 | "options": "Slot" 267 | }, 268 | "properties": [ 269 | { 270 | "id": "custom.width", 271 | "value": 40 272 | } 273 | ] 274 | }, 275 | { 276 | "matcher": { 277 | "id": "byName", 278 | "options": "Slot" 279 | }, 280 | "properties": [ 281 | { 282 | "id": "custom.cellOptions", 283 | "value": { 284 | "mode": "basic", 285 | "type": "color-background" 286 | } 287 | }, 288 | { 289 | "id": "color", 290 | "value": { 291 | "fixedColor": "#143003", 292 | "mode": "fixed" 293 | } 294 | } 295 | ] 296 | } 297 | ] 298 | }, 299 | "gridPos": { 300 | "h": 8, 301 | "w": 4, 302 | "x": 0, 303 | "y": 15 304 | }, 305 | "id": 39, 306 | "maxPerRow": 6, 307 | "options": { 308 | "cellHeight": "sm", 309 | "footer": { 310 | "countRows": false, 311 | "enablePagination": false, 312 | "fields": "", 313 | "reducer": [ 314 | "last" 315 | ], 316 | "show": false 317 | }, 318 | "showHeader": true, 319 | "sortBy": [ 320 | { 321 | "desc": true, 322 | "displayName": "Slot Index" 323 | } 324 | ] 325 | }, 326 | "pluginVersion": "9.5.6", 327 | "repeat": "instance", 328 | "repeatDirection": "h", 329 | "targets": [ 330 | { 331 | "datasource": { 332 | "type": "prometheus", 333 | "uid": "PBFA97CFB590B2093" 334 | }, 335 | "editorMode": "code", 336 | "exemplar": false, 337 | "expr": "commitments_latest{instance=~\"$instance\"}", 338 | "format": "table", 339 | "hide": false, 340 | "instant": true, 341 | "legendFormat": "__auto", 342 | "range": false, 343 | "refId": "A" 344 | } 345 | ], 346 | "title": "Commitments $instance", 347 | "transformations": [ 348 | { 349 | "id": "sortBy", 350 | "options": { 351 | "fields": {}, 352 | "sort": [ 353 | { 354 | "desc": true, 355 | "field": "Value" 356 | } 357 | ] 358 | } 359 | }, 360 | { 361 | "id": "limit", 362 | "options": { 363 | "limitField": 100 364 | } 365 | }, 366 | { 367 | "id": "organize", 368 | "options": { 369 | "excludeByName": { 370 | "Time": true, 371 | "Value": false, 372 | "__name__": true, 373 | "instance": true, 374 | "job": true 375 | }, 376 | "indexByName": { 377 | "Time": 0, 378 | "Value": 2, 379 | "__name__": 1, 380 | "commitment": 3, 381 | "instance": 4, 382 | "job": 5 383 | }, 384 | "renameByName": { 385 | "Value": "Slot", 386 | "commitment": "Commitment", 387 | "slot": "Slot Index" 388 | } 389 | } 390 | } 391 | ], 392 | "transparent": true, 393 | "type": "table" 394 | }, 395 | { 396 | "collapsed": false, 397 | "gridPos": { 398 | "h": 1, 399 | "w": 24, 400 | "x": 0, 401 | "y": 23 402 | }, 403 | "id": 140, 404 | "panels": [], 405 | "title": "Slot Commitment - Details", 406 | "type": "row" 407 | }, 408 | { 409 | "datasource": { 410 | "type": "prometheus", 411 | "uid": "PBFA97CFB590B2093" 412 | }, 413 | "fieldConfig": { 414 | "defaults": { 415 | "color": { 416 | "mode": "fixed" 417 | }, 418 | "custom": { 419 | "align": "left", 420 | "cellOptions": { 421 | "type": "auto" 422 | }, 423 | "filterable": false, 424 | "inspect": false 425 | }, 426 | "mappings": [], 427 | "thresholds": { 428 | "mode": "absolute", 429 | "steps": [ 430 | { 431 | "color": "semi-dark-green", 432 | "value": null 433 | } 434 | ] 435 | }, 436 | "unit": "none" 437 | }, 438 | "overrides": [ 439 | { 440 | "matcher": { 441 | "id": "byName", 442 | "options": "Slot" 443 | }, 444 | "properties": [ 445 | { 446 | "id": "custom.cellOptions", 447 | "value": { 448 | "mode": "basic", 449 | "type": "color-background" 450 | } 451 | }, 452 | { 453 | "id": "color", 454 | "value": { 455 | "fixedColor": "#143003", 456 | "mode": "fixed" 457 | } 458 | }, 459 | { 460 | "id": "custom.width", 461 | "value": 52 462 | } 463 | ] 464 | }, 465 | { 466 | "matcher": { 467 | "id": "byName", 468 | "options": "# Blocks" 469 | }, 470 | "properties": [ 471 | { 472 | "id": "custom.width", 473 | "value": 50 474 | } 475 | ] 476 | }, 477 | { 478 | "matcher": { 479 | "id": "byName", 480 | "options": "# TX" 481 | }, 482 | "properties": [ 483 | { 484 | "id": "custom.width", 485 | "value": 40 486 | } 487 | ] 488 | } 489 | ] 490 | }, 491 | "gridPos": { 492 | "h": 8, 493 | "w": 4, 494 | "x": 0, 495 | "y": 24 496 | }, 497 | "id": 151, 498 | "maxPerRow": 6, 499 | "options": { 500 | "cellHeight": "sm", 501 | "footer": { 502 | "countRows": false, 503 | "enablePagination": false, 504 | "fields": "", 505 | "reducer": [ 506 | "last" 507 | ], 508 | "show": false 509 | }, 510 | "showHeader": true, 511 | "sortBy": [] 512 | }, 513 | "pluginVersion": "9.5.6", 514 | "repeat": "instance", 515 | "repeatDirection": "h", 516 | "targets": [ 517 | { 518 | "datasource": { 519 | "type": "prometheus", 520 | "uid": "PBFA97CFB590B2093" 521 | }, 522 | "editorMode": "code", 523 | "exemplar": false, 524 | "expr": "commitments_accepted_blocks{instance=~\"$instance\"}", 525 | "format": "table", 526 | "hide": false, 527 | "instant": true, 528 | "legendFormat": "__auto", 529 | "range": false, 530 | "refId": "A" 531 | }, 532 | { 533 | "datasource": { 534 | "type": "prometheus", 535 | "uid": "PBFA97CFB590B2093" 536 | }, 537 | "editorMode": "code", 538 | "exemplar": false, 539 | "expr": "commitments_accepted_transactions{instance=~\"$instance\"}", 540 | "format": "table", 541 | "hide": false, 542 | "instant": true, 543 | "legendFormat": "__auto", 544 | "range": false, 545 | "refId": "B" 546 | } 547 | ], 548 | "title": "Details $instance", 549 | "transformations": [ 550 | { 551 | "id": "joinByField", 552 | "options": { 553 | "byField": "slot", 554 | "mode": "outer" 555 | } 556 | }, 557 | { 558 | "id": "convertFieldType", 559 | "options": { 560 | "conversions": [ 561 | { 562 | "destinationType": "number", 563 | "targetField": "slot" 564 | } 565 | ], 566 | "fields": {} 567 | } 568 | }, 569 | { 570 | "id": "limit", 571 | "options": { 572 | "limitField": 100 573 | } 574 | }, 575 | { 576 | "id": "organize", 577 | "options": { 578 | "excludeByName": { 579 | "Time": true, 580 | "Value": false, 581 | "__name__": true, 582 | "instance": true, 583 | "job": true 584 | }, 585 | "indexByName": { 586 | "Time": 0, 587 | "Value": 3, 588 | "__name__": 1, 589 | "instance": 4, 590 | "job": 5, 591 | "slot": 2 592 | }, 593 | "renameByName": { 594 | "Value": "Blocks", 595 | "Value #A": "# Blocks", 596 | "Value #B": "# TX", 597 | "commitment": "Commitment", 598 | "slot": "Slot" 599 | } 600 | } 601 | }, 602 | { 603 | "id": "sortBy", 604 | "options": { 605 | "fields": {}, 606 | "sort": [ 607 | { 608 | "desc": true, 609 | "field": "Slot" 610 | } 611 | ] 612 | } 613 | } 614 | ], 615 | "transparent": true, 616 | "type": "table" 617 | } 618 | ], 619 | "refresh": "5s", 620 | "schemaVersion": 38, 621 | "style": "dark", 622 | "tags": [], 623 | "templating": { 624 | "list": [ 625 | { 626 | "current": { 627 | "selected": true, 628 | "text": [ 629 | "All" 630 | ], 631 | "value": [ 632 | "$__all" 633 | ] 634 | }, 635 | "datasource": { 636 | "type": "prometheus", 637 | "uid": "PBFA97CFB590B2093" 638 | }, 639 | "definition": "label_values(instance)", 640 | "hide": 0, 641 | "includeAll": true, 642 | "label": "Instance", 643 | "multi": true, 644 | "name": "instance", 645 | "options": [], 646 | "query": { 647 | "query": "label_values(instance)", 648 | "refId": "PrometheusVariableQueryEditor-VariableQuery" 649 | }, 650 | "refresh": 1, 651 | "regex": ".+:9311", 652 | "skipUrlSync": false, 653 | "sort": 0, 654 | "type": "query" 655 | }, 656 | { 657 | "datasource": { 658 | "type": "prometheus", 659 | "uid": "PBFA97CFB590B2093" 660 | }, 661 | "filters": [ 662 | { 663 | "condition": "", 664 | "key": "job", 665 | "operator": "=", 666 | "value": "metrics" 667 | } 668 | ], 669 | "hide": 0, 670 | "name": "Filters", 671 | "skipUrlSync": false, 672 | "type": "adhoc" 673 | } 674 | ] 675 | }, 676 | "time": { 677 | "from": "now-15m", 678 | "to": "now" 679 | }, 680 | "timepicker": { 681 | "refresh_intervals": [ 682 | "5s", 683 | "10s", 684 | "30s", 685 | "1m", 686 | "5m", 687 | "15m", 688 | "30m", 689 | "1h", 690 | "2h", 691 | "1d" 692 | ] 693 | }, 694 | "timezone": "", 695 | "title": "Commitments Overview", 696 | "uid": "JKcc02v4d", 697 | "version": 1, 698 | "weekStart": "" 699 | } 700 | --------------------------------------------------------------------------------