verify_txid (distribute) ⊖ lagi single-host single-shot — blip Hyperion sesaat dulu menahan payout (V59 hold) / gagal ukur reward klaim / kosongkan SALDO LIQUID dashboard. config.py: HYPERION_NODES (CSV VEX_HYPERION_NODES, default HYPERION_API + API_NODES dedup, utama di depan — kedua host mainnet terverifikasi layani /v2, probe 2026-08-13) ; distribute._get_json GET mirror _post_json V58 (3 putaran, 2s, coba semua host per putaran, semua gagal → None) dipakai verify_txid — None kini berarti SEMUA host Hyperion gagal, hold V59 jarang palsu ; claim.reward_from_tx via dist._get_json (tiap attempt settle V55 pool-robust) ; dashboard._get_liquid_vex loop HYPERION_NODES lokal (web ⊖ impor distribute, V31), SALDO LIQUID tetap live saat host mati oracle: test_distribute V60 failover verify_txid + semua-mati None ; test_claim V60 reward_from_tx failover ; test_dashboard V60 saldo cadangan + config default HYPERION_NODES ; docs SPEC §V/V60 + §I + T53 + AGENTS + .env.example image web + dist + claim rebuild + push ; live smoke pool /v2/health
131 lines
5.3 KiB
Bash
131 lines
5.3 KiB
Bash
# Salin ke `.env` lalu sesuaikan. Semua opsional — default di `config.py`.
|
||
# Nilai dari env shell (export) juga didahulukan lewat os.getenv.
|
||
|
||
# Akun Block Producer yang dicari
|
||
VEX_TARGET_BP=databisnisid
|
||
|
||
# Node RPC publik Vexanium (ganti bila node utama lambat/timeout)
|
||
VEX_API_NODE=https://v2.vexascan.com:2096
|
||
|
||
# Node pool RPC utk failover distribusi (V58): CSV, urutan prioritas. Default =
|
||
# `VEX_API_NODE` + https://api.databisnis.id (node mainnet terverifikasi).
|
||
# Distribusi coba node berikutnya bila node sebelumnya gagal.
|
||
# VEX_API_NODES=https://v2.vexascan.com:2096,https://api.databisnis.id
|
||
|
||
# Lokasi file SQLite (disarankan absolut bila dijadwalkan via cron)
|
||
VEX_DB_PATH=voters.db
|
||
|
||
# Backend basis data: sqlite (default) atau mysql (MariaDB/MySQL via PyMySQL)
|
||
VEX_DB_BACKEND=sqlite
|
||
|
||
# Koneksi MariaDB/MySQL — dipakai saat VEX_DB_BACKEND=mysql
|
||
# Cocokkan dengan docker-compose.yml (MARIADB_DATABASE/USER/PASSWORD)
|
||
VEX_DB_HOST=127.0.0.1
|
||
VEX_DB_PORT=3306
|
||
VEX_DB_USER=databisnis
|
||
VEX_DB_PASS=databisnis
|
||
VEX_DB_NAME=databisnisid
|
||
|
||
# Syarat minimum stake (VEX) agar pemilih disimpan
|
||
VEX_MIN_STAKED_VEX=1000
|
||
|
||
# Dashboard: jumlah baris per halaman
|
||
DASH_PAGE_SIZE=50
|
||
|
||
# Dashboard: host & port server
|
||
DASH_HOST=127.0.0.1
|
||
DASH_PORT=5000
|
||
|
||
# Dashboard: jumlah worker gunicorn (produksi)
|
||
DASH_WORKERS=2
|
||
|
||
# Ambang batas vote "basi" (hari sejak revote terakhir). Pemilih lewat batas
|
||
# ini disimpan scan tapi keluar band VALID (bagian KADALUARSA 28..31 hari,
|
||
# >31 hari disembunyikan dari dashboard).
|
||
VEX_STALE_DAYS=28
|
||
|
||
# Masa matang (hari): pemilih baru (revote < VEX_MATURITY_DAYS lalu) BELUM
|
||
# berhak reward — dibayar mulai siklus berikutnya setelah votenya berumur ≥
|
||
# ambang ini (band VALID).
|
||
VEX_MATURITY_DAYS=3
|
||
|
||
# Jendela "kadaluarsa" (hari SETELAH VEX_STALE_DAYS) yang masih tampil di
|
||
# dashboard dengan sorot VOTE ULANG; lewat 28+3=31 hari → disembunyikan.
|
||
VEX_EXPIRED_DAYS=3
|
||
|
||
# Tag REVOTE (mint) bertahan (hari) sejak revote terakhir: hanya pemilih lama
|
||
# yang revote dalam VEX_REVOTE_TAG_DAYS terakhir diberi tag; setelah itu tampil
|
||
# sbg VALID biasa (tetap dibayar langsung — V42, ⊥ tunggu matang).
|
||
VEX_REVOTE_TAG_DAYS=1
|
||
|
||
# Jendela peringatan (hari SEBELUM VEX_STALE_DAYS): pemilih VALID yang
|
||
# `now − STALE < last_vote ≤ now − (STALE − WARN)` diberi badge `VOTE ULANG
|
||
# SEGERA` (segera kadaluarsa, masih dibayar).
|
||
VEX_WARN_DAYS=3
|
||
|
||
# Hyperion API untuk saldo liquid akun + verifikasi txid (balance BP,
|
||
# disajikan dashboard; verifikasi distribusi/klaim). Nama lama `DATABISNIS_API`
|
||
# masih dibaca utk backward-compat deploy lama.
|
||
HYPERION_API=https://api.databisnis.id
|
||
|
||
# Pool Hyperion (V60, failover): CSV host yang melayani /v2/* — verifikasi
|
||
# txid distribusi/klaim + saldo liquid dashboard. Default = HYPERION_API +
|
||
# API_NODES (keduanya mainnet terverifikasi layani /v2). Kosongkan → default.
|
||
# VEX_HYPERION_NODES=https://api.databisnis.id,https://v2.vexascan.com:2096
|
||
|
||
# Dashboard: TTL cache (detik) untuk saldo liquid — gagal fetch juga di-cooldown
|
||
DASH_LIQUID_TTL=60
|
||
|
||
# — Stack swarm (docker-compose.yml) —
|
||
# Interpolasi compose; override default di bawah lewat .env bila perlu.
|
||
# TZ dipakai juga sebagai zona waktu jadwal skan (`datetime.now()` lokal).
|
||
TZ=Asia/Jakarta
|
||
SCAN_HOURS=0,8,16
|
||
# Skan sekali saat container start (tabel voters langsung ada; dashboard ⊥ 500)
|
||
SCAN_RUN_ON_START=1
|
||
|
||
# — Distribusi profit-share (service distribute) —
|
||
# Jam (lokal, TZ) run. Jadwal MINGGUAN (V37): tiap DISTRIBUTE_WEEKDAY (nama
|
||
# `sat`/`mon`.. atau 0-6; Senin=0, CSV utk beberapa hari: `wed,sat` = Rabu &
|
||
# Sabtu) jam DISTRIBUTE_HOUR, plus satu one-off DISTRIBUTE_FIRST_RUN
|
||
# (YYYY-MM-DD; default baked `2026-08-17`). Contoh produksi:
|
||
# DISTRIBUTE_FIRST_RUN=2026-08-17 # putaran pertama Senin 17 Agt
|
||
# DISTRIBUTE_WEEKDAY=wed,sat # lalu tiap Rabu & Sabtu
|
||
# `VEX_BP_PRIVATE_KEY` TIDAK lagi lewat interpolasi .env: di stack ia dibaca
|
||
# dari file `.env` yang di-bind dari NFS
|
||
# (`/mnt/nfs/server5.saltis.id/data/databisnisid/app/config.env` → `/app/.env`,
|
||
# dibaca `config.py` via load_dotenv). Di luar stack, set key di `.env` lokal.
|
||
DISTRIBUTE_HOUR=10
|
||
DISTRIBUTE_WEEKDAY=wed,sat
|
||
DISTRIBUTE_FIRST_RUN=2026-08-17
|
||
DISTRIBUTE_MAX_ATTEMPTS=3
|
||
# Kill-switch: FALSE (default) = payout off; set TRUE untuk mengaktifkan
|
||
# pembayaran. --dry-run tetap jalan walau off.
|
||
DISTRIBUTE_ENABLED=false
|
||
|
||
# — Notifikasi Telegram (dua kanal) —
|
||
# Satu bot token; dua daftar chat id (CSV; id user atau grup):
|
||
# TELEGRAM_COMMUNITY_CHAT_IDS — publik: hanya brief MULAI/SELESAI distribusi
|
||
# TELEGRAM_INTERNAL_CHAT_IDS — internal: detail distribusi, semua kegagalan,
|
||
# dan klaim reward (⊥ pernah ke komunitas)
|
||
# Kosong = kanal senyap. Di stack, isi di config.env NFS (dibaca config.py
|
||
# load_dotenv dari /app/.env).
|
||
TELEGRAM_BOT_TOKEN=
|
||
TELEGRAM_COMMUNITY_CHAT_IDS=
|
||
TELEGRAM_INTERNAL_CHAT_IDS=
|
||
|
||
# — Klaim reward BP harian (service claim) —
|
||
# Poll `vexcore::claimrewards` tiap CLAIM_RETRY_SECONDS (detik) saat mendekati
|
||
# jendela klaim (last_claim_time + 24 jam). Setelah klaim sukses, 10% reward
|
||
# (VEX_BP_FEE_PERCENT) dikirim ke VEX_BP_FEE_WALLET. Key `VEX_BP_PRIVATE_KEY`
|
||
# di stack dari bind NFS config.env (sama dgn distribute).
|
||
CLAIM_RETRY_SECONDS=60
|
||
VEX_BP_FEE_WALLET=bpdbsjasprod
|
||
VEX_BP_FEE_PERCENT=0.10
|
||
|
||
# Kredensial mariadb stack — wajib konsisten antar-service (mariadb/web/scan)
|
||
MARIADB_ROOT_PASSWORD=root
|
||
MARIADB_DATABASE=databisnisid
|
||
MARIADB_USER=databisnis
|
||
MARIADB_PASSWORD=databisnis
|