release 1.22.0: modular ladder withdraw + pay max-search

Split pay into ladder/lib_pay.sh; force-select extract in
ladder/extract_rpubs.py. check_goa_ladder.sh is only a compat shim.

max-ladder now hunts highest withdrawable and highest payable
(never above wallet available), using public free-amount template
goa-free on hacktivism. Classic remains default 23-rung wd+pay.

Pay phase always runs when LADDER_PAY=1 (visible SKIP_BALANCE when
no spendable coins). Report includes best_pay / alt names.
This commit is contained in:
Hernâni Marques 2026-07-19 14:25:24 +02:00
parent 6185f89fa6
commit 3550221b30
No known key found for this signature in database
9 changed files with 449 additions and 274 deletions

View file

@ -277,7 +277,7 @@ Other domains: never SSH. Optional **e2e** aborts cleanly on login/KYC.
# Amount ladder (any currency): classic 0 → … → max, then optional pay
./taler-monitoring.sh ladder # classic (current domain)
./taler-monitoring.sh -d stage.lefrancpaysan.ch ladder # TESTPAYSAN maxima
# Max-search: start high, narrow toward highest withdrawable
# Max-search: highest withdrawable + highest payable (≤ available; GOA free template goa-free)
./taler-monitoring.sh max-ladder
# Stage auto-reads bank max_wire_transfer_amount (e.g. 2000) and min denom (0.01).
# Explorer password: francpaysan-stage-user …/bank-explorer-password.txt (or EXP_PW=).
@ -396,10 +396,12 @@ LADDER_LOAD=0 ./taler-monitoring.sh ladder
| `METRICS_LOAD` | `1` | `0` = skip all host/container load probes |
| `LADDER_LOAD` | `1` | `0` = skip load in ladder only |
| `LADDER_PAY` | `1` | `0` = skip payment ladder after withdraws |
| `LADDER_MODE` | `classic` | default **classic** 23-rung; `max` = hunt highest withdrawable (`max-ladder`) |
| `LADDER_MODE` | `classic` | default **classic** 23-rung wd+pay; `max` = max-search wd+pay (`max-ladder`) |
| `LADDER_MAX_PROBES` | `32` | max-search probe budget; `0` = until converge / timeout |
| `LADDER_HIGH_RUNGS` | `6` | max-search: first N probes random-high, then bisect |
| `LADDER_MAX_TOL_REL` | `0.001` | max-search relative lo/hi gap to stop |
| `LADDER_FREE_TEMPLATE` | `goa-free` | public free-amount pay template (hacktivism) |
| `LADDER_USE_FREE_TEMPLATE` | `1` | create pays via template POST `{"amount":…}` |
| `LADDER_WITHDRAW_SCALE` | `1.5` | classic: withdraw mids / pay mids ratio (funding headroom) |
| `LADDER_STEPS` | `23` | classic: rungs for withdraw and pay (0 + mids + max1 + max) |
| `METRICS_LOAD_SSH_TIMEOUT` | `90` | seconds for remote load python |