T56: jeda antar kirim distribusi (V63) — DISTRIBUTE_SEND_DELAY (default 30s) ANTAR pemilih di send-loop, N pemilih → N−1 tidur (⊥ setelah terakhir), real-run saja (dry-run ⊖ tidur); beri node/Hyperion waktu mengejar indeks + meratakan beban broadcast
This commit is contained in:
1 parent
efd0e9374b
commit
5c1c7572d3
5 files changed
+41
-2
No files matched your search
@@ -99,6 +99,9 @@ DISTRIBUTE_HOUR=10
|
||||
DISTRIBUTE_WEEKDAY=wed,sat
|
||||
DISTRIBUTE_FIRST_RUN=2026-08-17
|
||||
DISTRIBUTE_MAX_ATTEMPTS=3
|
||||
# Jeda (detik) ANTAR kirim transfer antar pemilih — beri node/Hyperion waktu
|
||||
# mengejar indeks + meratakan beban broadcast. N pemilih → N−1 jeda per run.
|
||||
DISTRIBUTE_SEND_DELAY=30
|
||||
# Kill-switch: FALSE (default) = payout off; set TRUE untuk mengaktifkan
|
||||
# pembayaran. --dry-run tetap jalan walau off.
|
||||
DISTRIBUTE_ENABLED=false
|
||||
|
||||
@@ -105,6 +105,10 @@ DASH_LIQUID_TTL = int(os.getenv('DASH_LIQUID_TTL', '60'))
|
||||
BP_PRIVATE_KEY = os.getenv('VEX_BP_PRIVATE_KEY', '')
|
||||
DISTRIBUTE_HOUR = int(os.getenv('DISTRIBUTE_HOUR', '10'))
|
||||
DISTRIBUTE_MAX_ATTEMPTS = int(os.getenv('DISTRIBUTE_MAX_ATTEMPTS', '3'))
|
||||
# Jeda (detik) ANTAR kirim transfer antar pemilih (V63): send-loop distribusi
|
||||
# tidur sebelum lanjut ke pemilih berikutnya — beri node/Hyperion waktu
|
||||
# mengejar indeks + meratakan beban broadcast run panjang. Default 30.
|
||||
DISTRIBUTE_SEND_DELAY = int(os.getenv('DISTRIBUTE_SEND_DELAY', '30'))
|
||||
# Kill-switch distribusi (V35): default OFF — payout hanya jalan saat diset
|
||||
# `true`. `--dry-run` tetap boleh jalan (read-only, ⊥ tanda tangan/tulis).
|
||||
DISTRIBUTE_ENABLED = os.getenv(
|
||||
|
||||
+11
-2
@@ -9,6 +9,8 @@ sebagai `pending` SEBELUM kirim (V21). Retry hanya baris `failed`; sebelum
|
||||
resend, txid diverifikasi di Hyperion agar transfer yang sempat mendarat tak
|
||||
terkirim ganda (V22). `--dry-run` menampilkan rencana tanpa tanda tangan
|
||||
(V26). Tidak ada freezing/carryover (V24): tiap run menghitung ulang segar.
|
||||
V63: send-loop tidur `DISTRIBUTE_SEND_DELAY` (default 30s) ANTAR pemilih —
|
||||
beri node/Hyperion waktu mengejar indeks + meratakan beban broadcast.
|
||||
"""
|
||||
|
||||
import sys
|
||||
@@ -21,7 +23,8 @@ import requests
|
||||
import db
|
||||
import telegram
|
||||
from config import (API_NODES, BP_PRIVATE_KEY, HYPERION_NODES,
|
||||
DISTRIBUTE_ENABLED, DISTRIBUTE_MAX_ATTEMPTS, TARGET_BP,
|
||||
DISTRIBUTE_ENABLED, DISTRIBUTE_MAX_ATTEMPTS,
|
||||
DISTRIBUTE_SEND_DELAY, TARGET_BP,
|
||||
TOKEN_CONTRACT, VEX_SYMBOL)
|
||||
|
||||
VEX_PREC = Decimal('0.0001')
|
||||
@@ -286,7 +289,7 @@ def run_distribution(dry_run=False):
|
||||
flush=True)
|
||||
failed = []
|
||||
sent_amount = 0.0
|
||||
for pid, owner, share in pending:
|
||||
for idx, (pid, owner, share) in enumerate(pending):
|
||||
txid = None
|
||||
for attempt in range(1, DISTRIBUTE_MAX_ATTEMPTS + 1):
|
||||
try:
|
||||
@@ -336,6 +339,12 @@ def run_distribution(dry_run=False):
|
||||
print(f'[GAGAL] {owner}: {share} VEX — {exc}', flush=True)
|
||||
break
|
||||
time.sleep(2)
|
||||
# V63: jeda ANTAR pemilih — beri node/Hyperion waktu mengejar indeks
|
||||
# + meratakan beban broadcast run panjang. N pemilih → N−1 tidur
|
||||
# (⊥ setelah pemilih terakhir); tetap jalan walau pemilih ini
|
||||
# ditahan/gagal (pacing seragam). Dry-run ⊖ pernah sampai sini.
|
||||
if idx < len(pending) - 1:
|
||||
time.sleep(DISTRIBUTE_SEND_DELAY)
|
||||
|
||||
status = 'ok' if not failed else 'partial'
|
||||
db.update_run_status(run_id, status, round(sent_amount, 4))
|
||||
|
||||
@@ -111,6 +111,7 @@ services:
|
||||
DISTRIBUTE_WEEKDAY: ${DISTRIBUTE_WEEKDAY:-wed,sat}
|
||||
DISTRIBUTE_FIRST_RUN: ${DISTRIBUTE_FIRST_RUN:-2026-08-17}
|
||||
DISTRIBUTE_MAX_ATTEMPTS: ${DISTRIBUTE_MAX_ATTEMPTS:-3}
|
||||
DISTRIBUTE_SEND_DELAY: ${DISTRIBUTE_SEND_DELAY:-30}
|
||||
DISTRIBUTE_ENABLED: ${DISTRIBUTE_ENABLED:-false}
|
||||
HYPERION_API: ${HYPERION_API:-https://api.databisnis.id}
|
||||
volumes:
|
||||
|
||||
@@ -485,6 +485,28 @@ def main():
|
||||
dist.verify_txid = _orig_verify
|
||||
dist.time.sleep = _orig_sleep
|
||||
|
||||
# ————— V63: jeda antar kirim — sleep `DISTRIBUTE_SEND_DELAY` ANTAR
|
||||
# pemilih; N pemilih → N−1 tidur (⊥ setelah pemilih terakhir) —————
|
||||
make_voters_db(db.DB_PATH, [('aaa1', '1.0', 200.0, '2026-08-05T00:00:00',
|
||||
fresh),
|
||||
('bbb2', '1.0', 300.0, '2026-08-05T00:00:00',
|
||||
fresh),
|
||||
('ccc3', '1.0', 500.0, '2026-08-05T00:00:00',
|
||||
fresh)])
|
||||
dist.fetch_balance = lambda: Decimal('100.0000')
|
||||
dist.BP_PRIVATE_KEY = '5Ktest'
|
||||
dist.DISTRIBUTE_MAX_ATTEMPTS = 3
|
||||
dist.build_signed_transfer = lambda to, amount, memo: FakeSigned('txD' + to)
|
||||
dist.verify_txid = lambda txid: True
|
||||
sleeps = []
|
||||
dist.time.sleep = lambda s: sleeps.append(s)
|
||||
with redirect_stdout(io.StringIO()):
|
||||
rc = dist.run_distribution(dry_run=False)
|
||||
check('V63 run nyata exit 0 (jeda antar kirim)', rc == 0)
|
||||
check('V63 3 pemilih → 2 jeda @ DISTRIBUTE_SEND_DELAY',
|
||||
sleeps == [dist.DISTRIBUTE_SEND_DELAY] * 2)
|
||||
dist.time.sleep = _orig_sleep
|
||||
|
||||
# ————— V35: kill-switch DISTRIBUTE_ENABLED=false → no-op —————
|
||||
make_voters_db(db.DB_PATH, [('aaa1', '1.0', 1200.0, '2026-08-05T00:00:00',
|
||||
fresh)])
|
||||
|
||||
Reference in new issue
Block a user