AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
5분 안에 EVM 체인용 블록 탐색기 배포, 오픈소스·자체 호스팅·무료 티어·MIT 라이선스
Deploy a block explorer for any EVM chain in 5 minutes. Open source, self-hostable, works with any RPC. Free tier, transparent pricing, MIT-licensed.
개발 도구JavaScript · VueGitHub @tryethernal온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
Ethernal is a block explorer for EVM-based chains. In a few seconds, spin up a fully-featured explorer for your L1/L2 rollup/testnet. Compatible with Optimism, ZK, Anvil, Hardhat, Geth...
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Ethernal is a powerful, open-source block explorer for EVM-based chains. Effortlessly explore, search, and analyze blockchain data—whether you use our hosted service or run your own private instance.
• Try Ethernal instantly: app.tryethernal.com
• Create a demo explorer: app.tryethernal.com/demo
The self-hosted version of Ethernal is currently in beta. Some features may not work as expected or may be incomplete. If you encounter any issues, please consider opening an issue to help us improve the project. Your feedback is greatly appreciated!README 전문 보기 ↗Ethernal is a powerful, open-source block explorer for EVM-based chains. Effortlessly explore, search, and analyze blockchain data—whether you use our hosted service or run your own private instance.
⚠️ Beta Notice:
The self-hosted version of Ethernal is currently in beta. Some features may not work as expected or may be incomplete. If you encounter any issues, please consider opening an issue to help us improve the project. Your feedback is greatly appreciated!
Run your own Ethernal instance on your infrastructure, with full control over your data and configuration.
Database: Ethernal uses PostgreSQL (TimescaleDB) as its database backend. This is automatically provided through Docker containers—no manual installation required.
git clone https://github.com/tryethernal/ethernal.git
cd ethernal
git checkout $(git describe --tags --abbrev=0) # Makes sure that you are using the latest stable version
Just run:
make start
generate-env-files.sh.bash ./generate-env-files.sh manually.Tip: All generated secrets and config files are automatically added to
.gitignorefor your safety.
After setup, you'll see a summary like:
==================== Ethernal Installation Complete! ====================
🌐 DNS Setup Reminder:
Make sure to add an A record in your DNS provider:
your-domain.com -> <your-server-ip-address>
🔗 Start here to setup your instance:
http://your-domain-or-ip/setup
🐘 PostgreSQL Connection String:
postgresql://<user>:<password>@<host>:<port>/<db>
📊 Bullboard Access (background jobs):
http://your-domain-or-ip/bull
Username: ethernal
Password: <auto-generated>
=======================================================================
👉 Next step:
🌐 DNS Setup Reminder:
If you are using a custom domain (not an IP address), make sure to add an A record in your DNS provider:
your-domain.com -> <your-server-ip-address>Replace
<your-server-ip-address>with the actual public IP of your server. This is required for your domain to resolve correctly to your Ethernal instance.
Full documentation is available at doc.tryethernal.com.
Ethernal exposes a powerful API for programmatic access to your blockchain data and explorer features.
api.tryethernal.com in the documentation with your own server's domain or IP address.You can use this API to:
If you need additional endpoints or have suggestions for improvements, pull requests and issues are welcome!
make start – Start or restart Ethernal (with env/config generation)make stop – Stop and clean up all containers and networksmake update – Pull latest images and apply migrations/seedsmake nuke – Remove all containers, volumes, and generated config files (all data will be lost)make info – Display connection details and setup URLsAll configuration files and environment variables are generated automatically during setup. For a default installation, you should not need to change any of these values. If you want to customize advanced settings, you can edit the relevant files after the initial setup.
Below are the main configuration files and the variables they contain:
run/.env.prod)| Variable | Description | Default |
|---|---|---|
| ENCRYPTION_KEY | Key used for data encryption | - |
| ENCRYPTION_JWT_SECRET | Secret for JWT token encryption | - |
| SECRET | Application secret key | - |
| CORS_DOMAIN | CORS allowed domains | * |
| NODE_ENV | Node environment | production |
| REDIS_URL | Redis connection string | redis://redis:6379 |
| DB_USER | PostgreSQL username | postgres |
| DB_PASSWORD | PostgreSQL password | (random) |
| DB_NAME | PostgreSQL database name | ethernal |
| DB_HOST | PostgreSQL host (via pgbouncer) | pgbouncer |
| DB_PORT | PostgreSQL port (via pgbouncer) | 5433 |
| SOKETI_DEFAULT_APP_ID | Soketi app id | default-app |
| SOKETI_DEFAULT_APP_KEY | Soketi app key | app-key |
| SOKETI_DEFAULT_APP_SECRET | Soketi app secret | (random) |
| SOKETI_HOST | Soketi host | soketi |
| SOKETI_PORT | Soketi port | 6001 |
| PM2_HOST | PM2 dashboard host | pm2:9090 |
| PM2_SECRET | PM2 dashboard secret | (random) |
| BULLBOARD_USERNAME | Username for Bull dashboard | ethernal |
| BULLBOARD_PASSWORD | Password for Bull dashboard | (random) |
| APP_DOMAIN | Your domain or IP | (set at setup) |
| FIREBASE_SIGNER_KEY | Firebase signer key | (random) |
| FIREBASE_SALT_SEPARATOR | Firebase salt separator | (random) |
| FIREBASE_ROUNDS | Firebase rounds | 8 |
| FIREBASE_MEM_COST | Firebase memory cost | 14 |
| APP_URL | Application URL |
pm2-server/.env.prod)| Variable | Description | Default |
|---|---|---|
| SECRET | PM2 dashboard secret | (random) |
| ETHERNAL_SECRET | Backend secret | (random) |
| PORT | PM2 dashboard port | 9090 |
| ETHERNAL_REDIS_URL | Redis connection string | redis://redis:6379/0 |
| ETHERNAL_HOST | Backend host URL | http://backend:8888 |
.env.postgres.prod)| Variable | Description | Default |
|---|---|---|
| POSTGRES_HOST | PostgreSQL host | postgres |
| POSTGRES_USER | PostgreSQL username | postgres |
| POSTGRES_PASSWORD | PostgreSQL password | (random) |
| POSTGRES_DB | PostgreSQL database name | ethernal |
| POSTGRES_PORT | PostgreSQL port | 5432 |
.env.soketi.prod)| Variable | Description | Default |
|---|---|---|
| SOKETI_DEFAULT_APP_ID | Soketi app id | default-app |
| SOKETI_DEFAULT_APP_KEY | Soketi app key | app-key |
| SOKETI_DEFAULT_APP_SECRET | Soketi app secret | (random) |
| SOKETI_HOST | Soketi host | 0.0.0.0 |
| SOKETI_PORT | Soketi port | 6001 |
.env.docker-compose.prod)| Variable | Description | Default |
|---|---|---|
| EXPOSED_PORT | Public HTTP port | 80 (or as set at setup) |
| EXPOSED_SSL_PORT | Public HTTPS port | 443 (or as set at setup) |
Note:
All secrets and passwords are generated randomly for each installation.
For most users, there is no need to change these values after setup.
The production Docker Compose file is docker-compose.prod.yml. You should run it with the environment file like this:
docker compose -f docker-compose.prod.yml --env-file .env.docker-compose.prod up -d
Ethernal's blog (tryethernal.com/blog) is powered by an automated trend-scanning pipeline that discovers what's happening in the Ethereum ecosystem and produces draft articles.
Sources (EIPs, ERCs, ethresear.ch, Magicians, arxiv)
↓ weekly scan
Classify into 12 topic clusters
↓
Score by weighted signals (ERC count, research posts, arxiv papers, Google Trends)
↓
Create draft cards on GitHub Project board
↓ every 2 days
Round-robin picker selects highest-scoring topic (skips clusters with active work)
↓
Claude CLI researches sources and drafts the article
↓
Article committed to develop with status: draft (invisible on site, deployed for preview)
↓ card link added to project board
Move card to "Published" in GitHub Project
↓ triggers workflow
Frontmatter updated to status: published → article goes live on next deploy
Board columns: Detected → Researched → Drafting → Published
cd blog/pipeline
npm ci
# Scan sources and create/update project cards
node index.js
# Preview without creating cards
node index.js --dry-run
# Pick next topic for drafting
node index.js --pick --dry-run
| Trigger | What | Where |
|---|---|---|
| Weekly (Mon 6am UTC) | Scan sources, update scores | .github/workflows/blog-trend-scan.yml |
| Every 2 days (8am UTC) | Pick topic, research, draft to develop | .github/workflows/blog-draft.yml |
| Card → Published | Update frontmatter status: published | .github/workflows/blog-publish.yml |
| Systemd timer (Hetzner) | Same as draft workflow via Claude CLI | blog/pipeline/draft.sh |
Found a bug? Please open an issue in this repo.
Support Ethernal's development by subscribing to a paid plan.
Note: The self-hosted version will display ads by default. Running these ads helps support ongoing development of Ethernal. Thank you for contributing to the project by keeping them enabled!
We'd love to hear from you!
Happy exploring! 🚀
| (set at setup) |
| SELF_HOSTED | Self-hosted flag | true |
| PORT | Application port | 8888 |
| DEFAULT_PLAN_SLUG | Default plan slug | self-hosted |