4 min read
Broadside: Public Notice, Privately Served

“Wait, didn’t you already build an ad thing?” you ask, scrolling past your fourth ad for the same mattress.

I did. DATUM is a working peer-to-peer ad exchange: 62 contracts (44 of them deployed to Paseo), a browser extension that builds and signs claims, a publisher SDK, a WordPress plugin, and a handful of supporting services. It works. It’s also built on assumptions that no longer hold.

The big one is size. DATUM compiles to classic EVM bytecode, which means every contract has to squeeze under a 24,576-byte ceiling. The settlement contract is already split into three pieces purely to fit, and it still weighs in at 24,363 bytes. That’s 213 bytes of headroom, or roughly one strongly worded code comment. The next feature does not fit.

Broadside is DATUM rebuilt for native PolkaVM and for life inside the Polkadot app. Same idea (advertisers, publishers, and viewers settling directly, no middleman skimming off the top), with a new name and a tagline I’m unreasonably pleased with: public notice, privately served.

The Seam Probe

Before rebuilding sixty-odd contracts, I wanted to know whether the floor would hold. Everything later leans on one assumption: an app running inside the Polkadot app can derive its own key, sign something with it, and have a contract on chain accept that signature. If that doesn’t work, nothing else matters.

So broadside.dot’s first release isn’t the ad network. It’s the probe that tests that assumption, run on a Pixel 10 Pro XL on release day. Six gates. All six passed:

  • The app gets the same key from the host every time, even after a full close and reopen.
  • Its privacy-preserving alias (a Ring VRF alias, which I will happily explain at a party until you leave) stays stable across calls and restarts.
  • Different account indices really do produce different keys.
  • The app can read the deployed contract from inside the Polkadot app…
  • …through the host’s own connection, with no external RPC endpoint.
  • And a signature from that derived key survives the contract’s own on-chain check.

That last one is the headline. A key born inside the Polkadot app produced a signature that a native PolkaVM contract verified, routed entirely through the host, with no user tap and no funds on the signing key. Every later phase rests on that assumption, and it holds.

“So you shipped a test to find out whether your real app is possible,” you say, eyeing the mattress ad, which has somehow followed you here.

Yes. It’s the demo-test philosophy in its purest form: check the floor before you move the furniture in.

What’s Next

The rest of the plan: the contract spine on PolkaVM, the ad widget and its settlement services, a viewer app for seeing what you’ve earned and getting it paid out, and eventually shielded payouts, so the thing that pays you can’t be trivially linked to the wallet you spend from. Coordination between strangers, minus the stranger in the middle taking a cut.

Poke the probe at broadside.dev-dot.li, or open broadside.dot in the Polkadot app. It won’t show you any ads. Yet.

— Kasey