Rehearsal faucet: self-serve test-POL so members can actually buy

Fresh wallets hold 0 POL on the rehearsal chain, so nobody could complete a buy.
- Oracle: the mock POL/USD feed had gone ~49h stale (quoteWei reverted "Stale
  oracle" -> catalog costWei null -> packages showed "paused"). Refreshed it and
  installed a 15-min heartbeat cron so it stays fresh; quotes now return.
- New /api/my/faucet (rehearsal-only, rate-limited) tops a connected wallet up to
  10 test-POL via anvil_setBalance (no key). "Get test POL" card in the Wallet
  pane wires it. Members can now fund, buy, and see payouts move on the ledger.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
martbost
2026-09-07 07:02:48 -05:00
parent 85a6ac5bb0
commit 204aa6a723
3 changed files with 43 additions and 4 deletions
+12 -4
View File
@@ -4,7 +4,7 @@
<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>Member area | InstantAdPay</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Sora:wght@600;700;800&display=swap">
<link rel="stylesheet" href="/assets/site.css?v=20260907e">
<link rel="stylesheet" href="/assets/site.css?v=20260907g">
</head>
<body class="bo-body">
@@ -589,6 +589,14 @@
</div>
<div class="pane" id="pane-wallet" hidden>
<div class="card" id="faucetCard" hidden>
<h3>Get test POL</h3>
<p class="muted small">This is the rehearsal chain, so purchases use valueless <b>test POL</b>, not real money.
Tap below to top your connected wallet up to 10 test-POL, then buy a package and watch the payouts
move on the live ledger exactly like the real chain will.</p>
<p><button class="btn" id="faucetBtn" type="button">Get test POL</button>
<span class="small muted" id="faucetInfo"></span></p>
</div>
<div class="grid c2">
<div class="card"><h3>Your account</h3>
<p id="posLine" class="muted small">…</p></div>
@@ -633,9 +641,9 @@
</div>
</div>
</div>
<script src="/assets/common.js?v=20260907e"></script>
<script src="/assets/common.js?v=20260907g"></script>
<script src="/assets/wallet.js?v=20260907f"></script>
<script src="/assets/my.js?v=20260907e"></script>
<script src="/assets/chat.js?v=20260907e"></script>
<script src="/assets/my.js?v=20260907g"></script>
<script src="/assets/chat.js?v=20260907g"></script>
</body>
</html>