Skip to main content

Every request for randomness on Base arrives carrying a declaration. Buried in the extraArgs field of a Chainlink VRF 2.5 request is a single boolean that says whether the bill will be settled in ETH or in LINK. The coordinator reads it, does the work, and charges the currency it was told to charge. The field is per request. You can flip it on a Tuesday and flip it back on a Wednesday, and nothing in the contract, the proof or the payout cares.

Over the seven days to 20 October 2026, that field was set 13,226 times by 60 different contracts. Not one of them ever set it two different ways. The currency is nominally a per draw decision and it is behaving, on every single address on the chain, as a deploy time constant. Here is what the census found, and what the cheaper lane is actually worth to anyone who takes it.

TL;DR

  • Over 302,000 Base blocks to 20 October 2026 the VRF coordinator fulfilled 13,221 draws: 13,058 billed in ETH (98.77%) and 163 billed in LINK (1.23%).
  • 58 consumer contracts drew; 32 paid only in ETH, 26 paid only in LINK, and zero paid in both. Same story at the subscription level: 20 native only, 12 LINK only, zero mixed.
  • All 13,226 requests carried an explicit 36 byte ExtraArgsV1 payload with tag 0x92fd1338. None fell through to the default. The choice was deliberate every time.
  • The LINK lane is cheaper, and it is taken almost exclusively by contracts with nothing to save: 19 of the 26 LINK payers drew exactly once, while the busiest ETH payer drew 8,897 times.
  • The whole chain’s forgone discount for the week was 0.00289 ETH, about $7.05. Meanwhile 1,479.17 LINK ($17,965) sits in Base VRF subscriptions against a weekly LINK bill of 11 cents, a runway of roughly 301 years.

What was already known, and what was not

The pricing side of this is settled and we published it on 9 October. The Base coordinator 0xd5d517abe5cf79b7e95ec98db0f0277788aff634 runs two premiums, 60% on native and 50% on LINK, and both flat fees are zero, so the two lanes differ by a clean ratio and nothing else. The Backup Price in Base’s VRF Is 826 Days Old proved that from receipts: twelve ETH fulfilments priced against their true all in cost landed at 1.6019 to 1.6044, eight LINK fulfilments converted at the feed’s reading for their block landed at 1.5010 to 1.5027. Same post corrected an earlier claim of ours that native cost 49.5% more, which had compared two populations doing different amounts of work. Held constant, the real gap is 6.67% from the config.

Re-confirmed here at block 52,865,599, because a config value is only true until somebody calls setConfig: s_config() still decodes to minimum confirmations 0, max gas limit 2,500,000, staleness 172,800 seconds, gas after payment 42,500, flat fee native 0 PPM, flat fee LINK discount 0 PPM, native premium 60, LINK premium 50. With both flat fees at zero the arithmetic has no second term. A draw billed in LINK costs exactly 150/160 of the same draw billed in ETH, a 6.25% discount that does not move with the gas price, the callback size or the L1 data fee.

What nobody had looked at is who takes it. That is a population question, not a pricing question, and the answer is stranger than the price.

Thirteen thousand two hundred and twenty-six declarations

The window is Base blocks 52,563,600 to 52,865,599, 13 October 18:35:47 UTC to 20 October 18:22:25 UTC. Coordinator logs were pulled in 1,000 block spans from Tenderly’s public gateway: 39,737 logs, every one of which decodes to one of nine known event types with nothing left over. Of those, 13,226 are RandomWordsRequested and 13,221 are RandomWordsFulfilled.

The request event’s final data field is extraArgs, a byte string. Chainlink’s client library encodes it as a four byte tag followed by the ABI encoded struct, and the tag for ExtraArgsV1 is 0x92fd1338. An empty extraArgs is legal and means LINK, because false is the zero value of the boolean.

So the first thing worth measuring is how many requests simply let the default happen. The answer is none. The byte length histogram across all 13,226 requests has exactly one entry: 36 bytes, 13,226 times, and the tag is 0x92fd1338 on every one. Every contract on Base that asked for randomness last week wrote out its currency in full, even when it was asking for the default.

The second check is whether the coordinator honours it. Decoding the declared flag from each request and the billed flag from the matching fulfilment gives 13,220 agreements and zero disagreements, with the one unmatched fulfilment belonging to a request made before the window opened. The coordinator bills the currency you named, every time. That is not a surprise, but it is the kind of thing worth checking rather than assuming, and it costs one loop.

Nobody mixes

Group the 13,221 fulfilments by the contract that asked, and 58 addresses appear. Group them by subscription and 32 appear. Then ask the obvious question: how many used both lanes?

Unit ETH only LINK only Both Total
Consumer contracts 32 26 0 58
Subscriptions 20 12 0 32
Requests, by declared currency 13,063 163 0 senders 13,226

Zero in every column that matters. Sixty senders made at least one request and every one of them used a single request style throughout. The subscription object holds two balances side by side, and it is perfectly legal to run a contract that pays in LINK while the balance lasts and falls back to ETH, or to split by game, or by prize size. Across a full week of the busiest VRF deployment on any L2, not one address did.

One address deserves a caveat, because it is the one place where “no mixing” is not a property of anyone’s code. 0xb0407dbe851f8318bd31404a49e658143c982f23 is Chainlink’s own VRFV2PlusWrapper, the pay as you go front end that lets a contract request randomness without running a subscription. Its currency is chosen by whichever method the end user calls, so its 186 requests represent 186 independent decisions rather than one hard coded flag. All 186 were native. We flagged this contract as an exclusion when we counted consumers with overlapping requests, and it needs the same treatment here: it is the only consumer on Base that could have mixed without a redeploy, and it still did not.

The discount lands where it is worth nothing

Here is the part that makes the census worth running. The cheaper lane is not unpopular. Twenty-six of 58 contracts, 44.8%, pay in LINK. It is the volume that is lopsided, and it is lopsided in exactly the wrong direction.

Lane Contracts Draws Draws per contract, median Busiest
LINK, 50% premium 26 163 1 82
ETH, 60% premium 32 13,058 12 8,897

Nineteen of the 26 LINK payers drew exactly once all week. Fifteen of those single draws came from one subscription, 0x3ee2…42fc, which added and removed a consumer 15 times each in the same window, cycling 17 distinct addresses through one funded account, one draw apiece. That is a deployment harness, not a business. The real LINK traffic is two contracts: Lotto39 with 82 draws and MoonpotManager with 29, together 68% of the lane.

The ETH lane is the opposite shape. GridMining alone made 8,897 draws, 68.1% of all native traffic, followed by a GameManager proxy at 1,819 and a CasinoCoreV2 proxy at 455. These are the three addresses on Base for which a 6.25% standing discount would compound into something, and all three are on the dearer lane.

Seven dollars and five cents

So price it. The whole chain’s native VRF bill for the week was 0.046297010 ETH, $112.76 at $2,435.57. Billed through the LINK lane the same work would have cost 150/160 of that, so the forgone discount is 0.0028935631 ETH, $7.05. GridMining’s share of that, for two thirds of the chain’s randomness, is $5.65.

The realised side is smaller still. The LINK lane spent 0.094150960 LINK, $1.14, so the discount those 26 contracts actually collected relative to the native lane is 0.0062767 LINK, 7.6 cents.

Seven dollars. For the entire chain. For a week. Which means the correct reading of this census is not that 32 contracts are leaving money on the table through carelessness. It is that the protocol has built a 6.25% price signal into a field it parses 13,226 times a week, and the signal is too small to move anybody. Acquiring LINK means a swap, an allowance, a second asset on the balance sheet and an exchange rate that the coordinator resolves through a price feed with a 48 hour staleness tolerance. Against $5.65 a week, that is not a close call. Every one of those 32 contracts is behaving rationally.

A price signal nobody responds to is not a market mechanism. It is a dormant config field, and dormant config fields are the ones that get changed without anybody noticing. The premium ceiling on this coordinator is 155, and four of nine keys can move it. The gap between 60 and 50 is not a law of nature; it is a number two signatures could make 60 and 5, or 155 and 50, in one transaction with no notice period.

The other half: 1,479 LINK against an 11 cent bill

The funding side is where the lane choice leaves a visible residue. getActiveSubscriptionIds(0, 0) returns every live subscription in one call, and probing at startIndex == count reverts InvalidCalldata (0x1390f2a1), which is how you know the list is complete rather than truncated. At block 52,865,599 there are 1,175 active subscriptions across 728 owners, carrying 2,182,123 lifetime fulfilments.

Read every balance at that same pinned block and the two currencies look nothing alike.

Held Value Spent in the week Runway at that rate
LINK 1,479.166761 $17,965 0.094151 LINK 15,711 weeks, 301 years
ETH 10.310588 $25,112 0.046297 ETH 223 weeks, 4.3 years

The ETH balances are already generous: four years of prepayment for a service billed per use. The LINK balances are over provisioned relative to their own burn rate by a further 70.5 times. And the concentration is severe. 235 subscriptions holding 1,129.73 LINK, 76.4% of all the LINK on the chain, made no draw at all in the window. Eighty-nine of them, holding 179.08 LINK, have never made a single request in their entire existence, which is abandonment rather than drainage, the distinction that matters when reading a zero.

The largest LINK balance on Base belongs to the one subscription attached to Chainlink’s own wrapper: 227.911074 LINK, 15.41% of the chain’s total, alongside the largest native balance on the chain at 1.523986 ETH. It has 162,619 lifetime fulfilments. Last week every one of its 186 draws was billed in ETH. The contract best placed to use the cheaper lane is sitting on a pile of the cheaper currency and paying the dearer premium, because its users chose.

Before anyone reads “parked” as “trapped”, the week supplied its own control probe. Subscription 0xaf5c…bda1 was created at block 52,568,493, funded with exactly 2.000000 LINK 13,185 blocks later, never made a single request, and was cancelled at block 52,795,611 with all 2.000000 LINK returned, which is how you know none of it was spent. The money came back out in one transaction. That is not true of every subscription, as 131 Base subscriptions with a request stuck in flight can attest, but for a subscription with nothing pending, the exit works.

New money arrives in ETH

The flow confirms the stock. Nine subscriptions were created in the window and there were eleven top-ups: nine in native ETH and two in LINK.

The native top-ups look like metered spending: 0.0001, 0.0002, 0.0002, 0.0002, 0.0008, 0.005, 0.006, 0.03 and 0.04 ETH. Five of the nine new subscriptions were created by a single owner, 0x380f…b019, each funded with between 24 cents and two dollars’ worth of ETH, which is what kicking the tyres looks like.

The two LINK top-ups are round numbers: 2.000000 LINK and 4.000000 LINK. The 2 LINK went to the subscription described above that never drew and was refunded. The 4 LINK went to a brand new subscription created 94 blocks earlier, which has since made five draws costing a combined 0.002217 LINK. It funded itself for roughly 1,804 times its entire lifetime consumption, on its first day.

This is the same prepayment pattern we found when 13 top-ups bought 12,946 draws, but sharpened by currency. ETH payers top up in amounts that resemble the bill. LINK payers top up in amounts that resemble a round number of LINK. One group is managing a cost; the other is parking an asset and getting a discount as a side effect.

What Satoshie commits to

None of this touches the integrity of a draw. The currency a bill settles in cannot reach the VRF output, the proof, or the payout: a fulfilment that pays in LINK and one that pays in ETH run the identical verification and derive the identical words. Anyone telling you otherwise is selling something.

What it does touch is whether your game can still afford to answer you. So the commitments, narrow and checkable:

  • We publish the lane and the premium we accept. Satoshie pays native and therefore accepts the 60% premium, and we will say so rather than leave you to decode extraArgs from a log.
  • We publish reserve headroom, not just balance. A balance is not a runway until you divide it by a burn rate, and the burn rate is the thing that moves.
  • If we ever switch lanes we announce it before the draw that uses it, not after. The field is per request, which means a platform can change the economics of its own games mid-session without redeploying anything. Nobody on Base does this today. That is a habit, not a guarantee, and it is exactly the kind of habit a player should be told about rather than left to infer from a week of logs.

And the honest symmetry: we have our own mutable surface, published. Subscription ownership is one key for most of this chain, and the callback gas limits almost every consumer sends are fixed forever and carry no information. A platform that has never named a thing it could change is not safer than one that has. It is just quieter.

Honest limits

  • Seven days is a sample. A contract that has only ever been observed on one lane for one week is not a contract that cannot switch. The right claim is that none did, not that none can.
  • Fifty-eight consumers is a small population and one address carries 68% of it. A single new deployment next week could move the shape of every table here.
  • The 6.25% is from the config, not from a matched pair. No two draws on this chain are identical enough to price both ways directly; the ratio follows from both flat fees being zero, which was read at one pinned block and can be changed.
  • Runway is not a prediction. Dividing a balance by last week’s burn assumes next week looks like last week, and for 235 subscriptions that drew nothing, the figure is arithmetic rather than forecast.
  • A low LINK balance is not a problem and a high one is not a mistake. Nothing here says any of these games are unsafe, badly run or wasteful. The finding is about a field the protocol checks 13,226 times a week and nobody uses, not about anyone’s judgement.

Three questions worth asking your platform

  1. Which currency do your draws settle in, and what premium does that cost? It is one boolean in a log you can read yourself, and the answer should not require reading a log.
  2. What is your subscription’s burn rate, and how many draws does the current balance buy? Not the balance. The quotient.
  3. If the premium on your lane changed tomorrow, who would tell you? On Base, the answer today is nobody, because no event is emitted when it changes and no contract on the chain watches.

The most interesting thing in 39,737 log entries was not a number. It was a field that exists to be varied, offered to every contract on the chain, priced at 6.25%, parsed 13,226 times in a week, and never once used for what it is for. Provable fairness gets audited line by line. The economics underneath it get a default nobody revisits, and a pile of LINK with three centuries of runway sitting next to a bill of eleven cents.

All figures measured first hand from Base mainnet at blocks 52,563,600 to 52,865,599 via public RPC, with balances read at a single pinned block. Prices: ETH $2,435.57, LINK $12.1455.

📷 Photo by Chris Briggs (@cgbriggs19) on Unsplash

Valentina Ní Críonna

Author Valentina Ní Críonna

More posts by Valentina Ní Críonna