<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Yinghui Crypto Notes]]></title><description><![CDATA[Yinghui Crypto Notes]]></description><link>https://yinghuicrypto.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Sat, 07 Nov 2026 10:52:52 GMT</lastBuildDate><atom:link href="https://yinghuicrypto.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Why Referral Attribution Fails Silently: A Lesson in Write-Once Design]]></title><description><![CDATA[Referral attribution is written once at signup, and nothing errors when it drops. Here is the failure mode and the 30-second check that catches it.]]></description><link>https://yinghuicrypto.hashnode.dev/why-referral-attribution-fails-silently-a-lesson-in-write-once-design</link><guid isPermaLink="true">https://yinghuicrypto.hashnode.dev/why-referral-attribution-fails-silently-a-lesson-in-write-once-design</guid><category><![CDATA[crypto]]></category><category><![CDATA[binance]]></category><category><![CDATA[Security]]></category><dc:creator><![CDATA[Yinghui]]></dc:creator><pubDate>Sat, 31 Oct 2026 17:54:11 GMT</pubDate><content:encoded><![CDATA[<p>Every referral system I have audited has the same shape: one write, at account creation, and no way to correct it afterwards.</p>
<p>That shape is not an accident. It is what you get when you design for fraud resistance first and user experience second, and it produces a failure mode that engineers rarely think about, because it never throws an exception.</p>
<h2>The write</h2>
<p>When a new account is created, the backend stores a referrer field. That single write is the entire attribution. Everything downstream - fee discount, commission calculation, reporting - reads from it.</p>
<p>The write happens inside the signup transaction, which means it competes with everything else in that transaction: email verification state, KYC status, initial balance. If the referral code arrives from a query parameter, it also competes with session state, redirects, and whatever the frontend did to the form before submitting.</p>
<p>Any of those can drop it. None of them surface an error. The account is created successfully, the user is unverified, the referrer gets nothing, and nobody finds out.</p>
<h2>Why the bug is invisible</h2>
<p>From the system's point of view, nothing failed. There is no exception, no retry, no alert. The referral field is nullable, so "no referrer" is a perfectly valid state - the same state as a user who deliberately signed up without a code.</p>
<p>That is the core design tension: you cannot distinguish "user declined the discount" from "our pipeline dropped the discount" after the fact.</p>
<h2>The UI makes it worse</h2>
<p>Most exchanges show your own outbound referral code prominently, and record your referrer quietly. Users check the first one, see a code, and conclude their relationship is active. It is not. Your outbound code says nothing about who referred you.</p>
<p>If a system is going to write something once and never again, it owes the user a verification surface for that value. A read-only "referred by" line on the profile is not a nice-to-have; it is the difference between a recoverable mistake and an invisible one.</p>
<h2>What a better design looks like</h2>
<p>Three changes would remove most of this failure class:</p>
<ol>
<li><p><strong>Echo the value back immediately.</strong> After signup, show "You were referred by X" with a confirmation. If the value is empty and the user arrived via a referral link, warn them.</p>
</li>
<li><p><strong>Preserve the evidence.</strong> Keep the original signup request payload - including any referral query parameter - for long enough that support can adjudicate a rebind request weeks later, not hours.</p>
</li>
<li><p><strong>Rate-limit writes, not reads.</strong> The fraud concern is people self-referring. That is a write-side problem. Making the field read-only after signup does not solve fraud; it just moves the pain to honest users.</p>
</li>
</ol>
<h2>What to do as a user</h2>
<p>You cannot fix the design. You can check it:</p>
<ul>
<li>Open the referral or profile section after signup.</li>
<li>Read the field that records your referrer, not the one showing your own code.</li>
<li>If it is empty and you meant to enter a code, file a support ticket immediately. Early requests are approved far more often, because the raw signup session is still in the logs.</li>
</ul>
<h2>The economics, briefly</h2>
<p>A referral code on Binance typically gives around 20% off spot trading fees. The money comes out of the exchange's customer acquisition budget - it is not a discount the exchange feels. Which is precisely why nobody has an incentive to fix the silent failure: the exchange pays either way, the user does not notice, and the referrer is the only party who loses.</p>
<p>That is the tell. When a failure costs nothing to the platform and a few percent to the user, it survives for years.</p>
<p>If you want a code to try, mine is BBBKK (<a href="https://www.binance.com/register?ref=BBBKK">https://www.binance.com/register?ref=BBBKK</a>) - but the habit that matters is the verification step, not the code.</p>
<hr />
<p><em>Disclosure: I receive a commission if you sign up with the code above. This is not financial advice. Verify current terms with the exchange for your jurisdiction.</em></p>
<p>Hope it helps.</p>
<p>(End of article)</p>
]]></content:encoded></item></channel></rss>