diff --git a/lib/referrals.js b/lib/referrals.js index 0693187..eddcdc9 100644 --- a/lib/referrals.js +++ b/lib/referrals.js @@ -23,8 +23,14 @@ const DEFAULTS = { refBountyPol: 3, // flat, not a draw: a referral is work someone did, not a lottery refMatchPct: 20, // paid ON TOP of the newcomer's find, never taken out of it refMatchDays: 30, // how long the match runs, from the newcomer's InstantAdPay join date - refNewDays: 30, // the bounty only pays for a genuinely new member, not an old one who - // happens to start hunting years after their sponsor signed them up + // THE gate, and it has to be an absolute date, not a rolling window. It was refNewDays: 30 on a + // site whose oldest account is 19 days old, so it excluded nobody and 8.67 POL went to sponsors + // for existing members hunting — zero acquisitions (Marty, 2026-09-23: "I need people that never + // existed before. That's why we're doing it."). Anyone whose account predates this moment was + // already a member, by definition, and can never earn their sponsor a bounty or a match. + refNewAfter: '2026-09-23T10:00:00Z', + refNewDays: 30, // secondary: a newcomer only earns their sponsor a bounty in their first + // month, so a dormant signup cannot trigger one a year later refCapPol: 20, // referral pool per Central day, separate from the find pool refMatchMinPol: 0.005,// do not write a transaction for dust // Marty's launch bonus (2026-09-23): an extra drip to the FIRST hunter whose referral gets all @@ -115,6 +121,10 @@ function onFind(member, find) { const out = []; let room = Number(c.refCapPol) - paidRefToday(); const ageDays = me.joinedAt ? (Date.now() - Number(me.joinedAt)) / 86400000 : 0; + // the floor: did this person exist before the mission did? + const floor = Date.parse(String(c.refNewAfter || '')) || 0; + const isNew = !floor || (me.joinedAt && Number(me.joinedAt) >= floor); + if (!isNew) return []; // an existing member hunting earns their sponsor nothing, ever const who = { forMemberId: id, forName: me.username || ('#' + id) }; // the bounty, once, on their first find, and only while they are genuinely a new member