Portaldot Hacker House 2026 | Portside: a harbour stock exchange on Portaldot

Project Introduction

Portside is a browser trading game set in a harbour. You trade five stocks people talk about today: Nvidia (chips), Apple (phones), Tesla (cars), Amazon (parcels) and Meta (headsets). Each one is a real DUCAT pool on Portaldot’s native DEX. Every five minutes a ship sails in with news about one of them, such as an earnings beat, a launch that sells out, a supply storm or a rival fleet. You have 45 seconds to buy or sell before it docks and moves the price. The best net worth at the end of the season takes the podium.

To play, open https://portside.nerom.site. You don’t need a sign-up, a wallet extension or any tokens. You get 1,000 DUCAT and a wallet in your browser, and the harbour pays your gas.

Problem Solved

Portaldot V3 has strong building blocks: native assets, a native DEX (pallet-asset-conversion) and an EVM (pallet-revive). What it doesn’t have yet is a game or consumer app that someone with no crypto background can enjoy in under a minute. New users bounce at the first wallet prompt or “where do I get POT?”.

Portside is a front door to the V3 runtime. A new player is trading on the native DEX within a minute, with no setup at all. Every click is a real testnet transaction: price moves come from real pool swaps, and the news is drawn by a contract nobody can game.

Link

:clapper_board: Live Web: https://portside.nerom.site
:clapper_board: Demo Video (1:57): https://youtu.be/KOuHRhumiUc

:laptop: GitHub: https://github.com/neromtoobad/portside

:bar_chart: Pitch Deck: Portside · Pitch deck (PDF)

Technical Highlights

1. Every share price is a live pool on Portaldot’s native DEX
DUCAT and the five stocks are pallet-assets assets, and each stock trades in a DUCAT pool on pallet-asset-conversion. When news docks, one public house swap moves that pool’s spot price by exactly the posted amount. Halfway through each round every market drifts a quarter of the way back to its base price, which keeps the economy bounded. Every player trade moves the real price too.

2. Commit-reveal news drawn on-chain by Harbour.sol (pallet-revive)
The keeper commits to a seed one round ahead. Harbour.reveal mixes that seed with the previous block hash: keccak256(seed, blockhash, season, round). Nobody, the keeper included, can pick or predict the next ship. The contract is only 1.7 KB, because storage costs 0.06 tPOT per byte. It has 6 Hardhat tests.
Contract: 0x04570accAB9f6fa3637aE0bBbEDfB9D46440D297 (Portaldot V3 testnet)

3. Zero-friction onboarding with sponsored fees
Each player gets an sr25519 burner wallet in the browser, a 1,000 DUCAT starter purse and a small tPOT fee tank that the keeper refills. Captains sign their own swaps in the browser, so nobody goes looking for gas.

4. Rumour tickets: paid information, not a different outcome
A 25 DUCAT rumour ticket, paid on-chain to the harbourmaster with two allowed a day, lets a captain hear the next ship a minute before the board posts it. The draw still comes from the contract, so a ticket buys time, not a better result.

5. Daily standings anchored on-chain
At the end of each day the standings are hashed into a Merkle root and anchored with Harbour.anchorDay, so any podium or payout can be checked later. The site also has a full game layer:

  • Home, Guide, Season and Portfolio pages
  • three daily missions and 12 badges
  • a net-worth chart for each player
  • dock drama: a countdown, a splash and a “You called it!” pop with your gain

6. What we found on V3 (written up in the README for other builders)

  • Paying fees in a pool asset through ChargeAssetTxPayment panics the V3 runtime during transaction validation (wasm unreachable). Portside runs with native fees plus a sponsored tank for each player. Switching to DUCAT fees is a single env var once the runtime is fixed.
  • The public wss:// endpoint drops large frames such as metadata, so the keeper relays RPC over HTTPS.
  • Some blocks contain extrinsics with an asset-fee assetId that polkadot.js can’t decode, so the keeper’s indexer reads raw blocks.

Sample transactions:

Step Hash
Harbour.reveal: a round’s news drawn on-chain 0xb9b0a241874a5373d8fd8a09397dbf2c03b3eed72b5a68ab0d84091f1f40b1ff
House swap when that ship docked 0x57779da87fee8f91719bc97f2adfd049c11d58d248a29e3b2246b1bf0d40df8a
Captain registered: starter purse + fee tank 0xb37eb52c330c60a29318a9865f9e836257ac06d50ce285d6edbd99f3a6e747ac
A captain’s swap signed in the browser 0x4fe4cd7e4643380a4eeb95eef2dfa7428f008addf3742d1e9906c7981af3ca99

Team

nerom: solo build

  • GitHub: @neromtoobad
  • Roles: design, contract, keeper, web
  • Project nature: a single-person build. It’s a consumer game that onboards non-crypto players onto Portaldot’s native assets, native DEX and EVM.

Judges & Voting Fit

For Judges: Portside is live on the Portaldot V3 testnet and uses V3’s native features rather than a generic EVM clone:

  • pallet-assets for DUCAT and the stocks
  • pallet-asset-conversion pools for every price
  • a pallet-revive contract for a provably fair commit-reveal draw and on-chain daily anchors
  • sponsored native fees

The repo is public. It has the contract, its tests, the keeper, the web app and a Chopsticks fork for local development, plus a write-up of the V3 issues we hit.

For Community Voters: Open https://portside.nerom.site and you’re trading in 30 seconds. You don’t need a wallet, tokens or any setup. Read the board, guess where the ship is headed, buy before it docks, and climb the season podium.

Game prices are DUCAT pools on the Portaldot testnet, not market data. Portside isn’t affiliated with Nvidia, Apple, Tesla, Amazon or Meta. No real money is involved.