Why We Built on Polkadot Hub — and What We're Activating

Part 1: The architecture behind plaza.fun — EVM contracts operating on native assets, and why that changes everything.

Cover Image for Why We Built on Polkadot Hub — and What We're Activating

Part 1 of "Building on Polkadot Hub: A Builder's Journal" — a series documenting what we learned building on Hub. New to the series? Start with Part 0: The Plaza Brief for a 5-minute overview.


TL;DR

We built plaza.fun on Polkadot Hub — not a parachain, not a fork, not "another EVM chain." Polkadot Hub gives us EVM smart contracts + native assets + cross-chain messaging in one place. The result: an activation layer for Polkadot's native assets — giving them price discovery, liquidity, and creator economics that they've never had before.


Why Not Just Fork pump.fun?

If all we wanted was a bonding curve launchpad, we could have forked pump.fun onto Moonbeam in a weekend.

But we didn't want "pump.fun on Polkadot." We wanted something that could only exist on Polkadot.

Polkadot Hub already has pallet_assets — a runtime-level asset system that's XCM-ready, near-zero gas, and more secure than any contract token. The problem? Nobody uses it. There's no way to launch an asset with price discovery, no automatic liquidity, no creator incentives. The raw capability is there, but it's dormant.

That's where we come in. Plaza activates it.

Polkadot Hub is the system chain at the center of the Polkadot network. It's not a parachain competing for a slot. It's core infrastructure — the chain where native assets live. And in January 2026, Hub got EVM compatibility via pallet-revive. That changed everything — we could finally write business logic in Solidity that operates on native assets.

The Architecture That Only Hub Makes Possible

Here's what Polkadot Hub gives us that no other chain does:

Layer 1: EVM Smart Contracts (pallet-revive) We write business logic in Solidity — bonding curves, fee distribution, graduation, DEX. The tooling is mature: Hardhat, Foundry, wagmi — it all works.

Layer 2: Native Assets (pallet_assets) Tokens created on plaza.fun aren't ERC20 contracts. They're native assets — first-class citizens managed by the runtime. Lower gas, better security, XCM-ready.

The Bridge: ERC20 Precompiles Precompiles expose pallet_assets as ERC20 interfaces. Your Solidity code calls transfer() on what looks like an ERC20, but under the hood it's moving native assets.

┌─────────────────────────────────────────────┐
│           Your Solidity Contract            │
│  (OmniBondingCurve, PlazaSwap, ...)         │
└──────────────────┬──────────────────────────┘
                   │ calls
         ┌─────────▼──────────┐
         │  ERC20 Precompile  │
         └─────────┬──────────┘
                   │ routes to
         ┌─────────▼──────────┐
         │   pallet_assets    │
         │  (native runtime)  │
         └────────────────────┘

Business logic in EVM, assets in Substrate, precompiles as the bridge.

The Full Product Architecture

plaza.fun isn't just a bonding curve. It's a complete token lifecycle platform:

┌─────────────┐    ┌──────────────┐    ┌────────────┐
│   Create    │───▶│   Trade on   │───▶│  Graduate  │
│  (2π DOT)   │    │ Bonding Curve│    │  (auto)    │
└─────────────┘    └──────────────┘    └─────┬──────┘
                                             │
                   ┌──────────────┐    ┌─────▼──────┐
                   │  Earn Forever│◀───│  Trade on  │
                   │ (FeeKeyNFT)  │    │ PlazaSwap  │
                   └──────────────┘    └────────────┘

Smart contracts working together (grouped by function):

  • OmniBondingCurve — token creation + bonding curve trading
  • FeeConfig — fee parameters and distribution rules
  • PlazaSwap V2 (Factory + Router + Pair) — full DEX for graduated tokens
  • GraduationManager + DirectAdapter — orchestrates the curve-to-DEX transition
  • CreatorFeeVault — locks 10% LP, distributes fee earnings
  • FeeKeyNFT — ERC721 representing permanent LP fee rights
  • ProtocolFeeCollector — on-chain fee collection for DEX-stage revenue
  • AdminConfig — protocol governance parameters
  • MetadataRegistry — token metadata storage
  • QuoteTokenRegistry — multi-quote-token support
  • ReferralStorage — on-chain referral tracking

All deployed and verified on Blockscout.

Two Wallets, One Platform

Polkadot Hub runs two VMs simultaneously. Users might show up with MetaMask (H160 addresses) or Polkadot wallets like Talisman (SS58 addresses). We support both — no forcing anyone to switch.

In practice: MetaMask users and Polkadot wallet users see the same UI, but different things happen under the hood. Our frontend runs wagmi (EVM) and polkadot-api (Substrate) in parallel, with a unified wallet store that routes transactions to the correct path. The key insight: every feature has two execution paths, and the frontend is the abstraction layer.

Why This Matters: Activating Native Assets

We could have taken the easy road: EVM-only, MetaMask-only, deploy on a parachain. But Hub is the center of Polkadot. Building here means our tokens are native citizens — not imports from a sidechain.

pallet_assets has been on Polkadot Hub since day one. What it lacked was an activation layer — something to give these assets a launch mechanism, price discovery, automatic liquidity, and creator economics. That's what plaza.fun is:

What pallet_assets hasWhat Plaza adds
Runtime-level assetsBonding curve launch
XCM-readyAutomatic price discovery
Near-zero gasAuto-graduation to DEX
More secure than ERC20Creator fees + FeeKeyNFT
No liquidity layer90% LP burned = no rug possible

pump.fun creates SPL contract tokens. plaza.fun activates Polkadot native assets. That's not the same category.

In this series, we'll show you exactly how we built each piece:

Try It Yourself

The testnet is live. Connect your wallet and create your first token:

plaza.fun

Contracts on Passet Hub Testnet — all verified on Blockscout:


Follow @plaza_fun for updates. Questions? Join the discussion on our Forum post. · Discord