From f4481a390bb449a37b700fdde7f569c5d1c28e32 Mon Sep 17 00:00:00 2001 From: martbost Date: Sun, 16 Aug 2026 18:51:04 -0500 Subject: [PATCH] Fix off-by-one level name on upgrade payouts (feed + tweets) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The contract books income atLevel = the level the payer upgraded OUT OF, so levelName(p.level) showed the FROM level ("upgraded to Scintilla" when the member actually went to Ascensus). For upline (upgrade) payouts, show the destination level (p.level+1) — consistent with describeIncome and upgrade.newLevel. Amounts/generations/recipients were always correct; this is the label only. Co-Authored-By: Claude Opus 4.8 --- chain.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chain.js b/chain.js index 145ce80..cec8924 100644 --- a/chain.js +++ b/chain.js @@ -270,7 +270,7 @@ async function processRange(fromBlock, toBlock) { state.payouts.push(p); state.totals.count++; state.totals.pol = +(state.totals.pol + p.pol).toFixed(6); const rcpt = state.members[p.toId]; if (rcpt) rcpt.earnedPol = +((rcpt.earnedPol || 0) + p.pol).toFixed(6); - emit({ type: 'payout', kind: p.kind, toId: p.toId, fromId: p.fromId, pol: p.pol, levelName: levelName(p.level), upgrade: p.upgrade, gen: p.kind === 'upline' ? genBetween(p.fromId, p.toId) : undefined, tx, ts }); + emit({ type: 'payout', kind: p.kind, toId: p.toId, fromId: p.fromId, pol: p.pol, levelName: levelName(p.kind === 'upline' ? p.level + 1 : p.level), upgrade: p.upgrade, gen: p.kind === 'upline' ? genBetween(p.fromId, p.toId) : undefined, tx, ts }); } } } @@ -357,7 +357,7 @@ function getPayoutsPublic(offset = 0, limit = 40) { hasMore: off + lim < reversed.length, payouts: page.map(p => ({ key: p.key, kind: p.kind, toId: p.toId, fromId: p.fromId, gen: p.kind === 'upline' ? genBetween(p.fromId, p.toId) : undefined, - level: p.level, levelName: levelName(p.level), pol: p.pol, tx: p.tx, ts: p.ts, desc: p.desc, + level: p.level, levelName: levelName(p.kind === 'upline' ? p.level + 1 : p.level), pol: p.pol, tx: p.tx, ts: p.ts, desc: p.desc, toAccount: state.members[p.toId] ? state.members[p.toId].account : undefined, upgrade: p.upgrade ? { id: p.upgrade.id, newLevel: p.upgrade.newLevel, levelName: levelName(p.upgrade.newLevel), tier: tierName(p.upgrade.tier) } : undefined, passed: p.passed && p.passed.length ? p.passed : undefined