Files
databisnisid/.env.example
T
proitlab 69704fa23d failover pool Hyperion utk semua pembacaan /v2/* (V60)
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
2026-08-13 21:30:31 +07:00

131 lines
5.3 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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