Fix: buy links wallet first; achievement milestones use live buyerCount
- Buying now ensures the wallet is LINKED to the account before the purchase (one signature if not linked). Without it, a wallet only connected for the faucet bought successfully but credits resolved against member id 0 and never showed until a manual link. Matches the "buying links your wallet" promise. - Dashboard computed achievement milestones from buyerCount BEFORE reading it from chain (always 0), so Surge/Circuit/Nexus never unlocked even when qualification advanced. Moved the milestone block after the chain read. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -480,17 +480,6 @@ const server = http.createServer(async (req, res) => {
|
||||
online: (Date.now() - (spon.lastSeen || 0)) < 60000,
|
||||
available: spon.chatAvailable !== false };
|
||||
}
|
||||
// achievement milestones (same ladder as the Overview stepper) + one-time credit bonuses
|
||||
{
|
||||
const bc = out.buyerCount || 0;
|
||||
const reached = [];
|
||||
if (out.memberId) reached.push('payouts');
|
||||
if (bc >= 1) reached.push('firstBuyer');
|
||||
if (bc >= 2) reached.push('level2');
|
||||
if (bc >= 5) reached.push('level3');
|
||||
out.milestonesReached = reached;
|
||||
if (out.email && reached.length) out.milestonesGranted = await ads.grantMilestones(out.email, reached);
|
||||
}
|
||||
if (out.email) { // unmissable login modal when the upline sent a message
|
||||
const un = await messages.newestUnread(out.email);
|
||||
if (un) {
|
||||
@@ -514,6 +503,18 @@ const server = http.createServer(async (req, res) => {
|
||||
out.earnedWei = earned.toString();
|
||||
out.earnCount = n;
|
||||
}
|
||||
// achievement milestones (same ladder as the Overview stepper) + one-time credit
|
||||
// bonuses — computed AFTER buyerCount is read from chain above (else always 0)
|
||||
{
|
||||
const bc = out.buyerCount || 0;
|
||||
const reached = [];
|
||||
if (out.memberId) reached.push('payouts');
|
||||
if (bc >= 1) reached.push('firstBuyer');
|
||||
if (bc >= 2) reached.push('level2');
|
||||
if (bc >= 5) reached.push('level3');
|
||||
out.milestonesReached = reached;
|
||||
if (out.email && reached.length) out.milestonesGranted = await ads.grantMilestones(out.email, reached);
|
||||
}
|
||||
// who joined through this member: their invite link uses username when set,
|
||||
// else code, and the numeric id once on-chain — match all three
|
||||
const refs = [];
|
||||
|
||||
Reference in New Issue
Block a user