Add on-chain payment proof: live payout feed, ID verification, admin lineage tools
New chain.js reads the RM Circle contract (0x33Bd…2DAF, Polygon) via free public RPCs — no API keys. Daily snapshot rebuilds complete payout history from getIncomeHistory (log providers prune old history), and a 60s eth_getLogs tail catches new payouts with tx hashes, upgrade context, and passed-over upline IDs. - Bridge page: "Live payment proof" feed + timed toast pop-ups for payouts seen in the last 15 min, every row linking to Polygonscan. - /start: same toasts; ID submissions are now verified against the contract (result shown to the member, in Telegram notify, and in admin). - Admin: on-chain member lookup (lineage to root, directs, matrix children, full income history) and a collapsible full matrix tree view. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -49,3 +49,36 @@ a{color:inherit}.wrap{width:min(1160px,calc(100% - 32px));margin:auto}.nav{heigh
|
||||
|
||||
.instruction{grid-template-columns:56px 1fr}
|
||||
.num{width:56px;height:56px;font-size:28px;border-radius:14px}
|
||||
|
||||
/* On-chain payout proof feed + toasts */
|
||||
.pp-totals{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:0 0 16px}
|
||||
.pp-feed{display:grid;gap:10px}
|
||||
.pp-row{display:flex;align-items:center;gap:14px;background:#0d2236;border:1px solid #233f56;border-radius:14px;padding:14px 16px}
|
||||
.pp-icon{font-size:22px;flex:0 0 auto}
|
||||
.pp-body{flex:1 1 auto;min-width:0}
|
||||
.pp-body strong{font-size:15px}
|
||||
.pp-meta{color:var(--muted);font-size:12.5px;margin-top:3px}
|
||||
.pp-passed{color:#f2c768;font-size:12px;margin-top:3px}
|
||||
.pp-verify{flex:0 0 auto;font-size:13px;color:var(--teal);text-decoration:none;border:1px solid rgba(78,214,203,.35);border-radius:9px;padding:7px 10px;white-space:nowrap}
|
||||
.pp-verify:hover{background:rgba(78,214,203,.1)}
|
||||
.pp-note{color:#8498aa;font-size:12.5px;margin-top:14px;line-height:1.5}
|
||||
.pp-stack{position:fixed;left:16px;bottom:16px;z-index:60;display:flex;flex-direction:column;gap:10px;pointer-events:none}
|
||||
.pp-toast{pointer-events:auto;display:block;width:min(330px,calc(100vw - 32px));background:linear-gradient(145deg,#132d45,#0a1b2b);border:1px solid #38556b;border-left:3px solid var(--ok);border-radius:14px;padding:13px 15px;box-shadow:var(--shadow);text-decoration:none;color:var(--text);opacity:0;transform:translateY(14px);transition:.4s ease}
|
||||
.pp-toast.show{opacity:1;transform:none}
|
||||
.pp-toast-head{display:block;font-weight:800;font-size:14px}
|
||||
.pp-toast-sub{display:block;color:var(--muted);font-size:12.5px;margin-top:3px}
|
||||
.pp-toast-verify{display:block;color:var(--teal);font-size:11.5px;margin-top:6px}
|
||||
@media(max-width:560px){.pp-totals{grid-template-columns:1fr 1fr}.pp-row{flex-wrap:wrap}.pp-stack{left:10px;bottom:10px}}
|
||||
|
||||
/* Admin matrix tree */
|
||||
.mt-tree,.mt-kids{list-style:none;margin:0;padding-left:0}
|
||||
.mt-kids{padding-left:22px;border-left:1px solid #27445e;margin-left:8px}
|
||||
.mt-node{padding:3px 0;font-size:13.5px}
|
||||
.mt-node summary{cursor:pointer;list-style:none}
|
||||
.mt-node summary::before{content:'▸ ';color:var(--teal)}
|
||||
.mt-node details[open]>summary::before{content:'▾ '}
|
||||
.mt-leaf{padding-left:14px}
|
||||
.mt-id{font-weight:800;color:var(--gold)}
|
||||
.mt-meta{color:var(--muted);font-size:12px}
|
||||
.mt-badge{display:inline-block;width:16px;height:16px;line-height:16px;text-align:center;border-radius:5px;background:#183952;color:var(--teal);font-size:10px;font-weight:900}
|
||||
.mt-badge.mt-prem{background:rgba(243,190,67,.15);color:var(--gold)}
|
||||
|
||||
Reference in New Issue
Block a user