Pindex indexes the Portaldot V3 testnet into a searchable app and a REST API: balances, token holders, NFT owners, address mapping and event history. Got a contract? Paste its ABI and get a URL that serves its decoded events.
No scraper and no server to run. Send Pindex your contract address and its ABI, and it decodes every event that contract emits. Your app reads them from one URL.
Try it here
Your contract URL
Copy the manage token now. It is shown once and cannot be recovered.
Decoding progress
Already registered? Check or manage a contract
Good to know.Large numbers arrive as strings. Indexed strings, bytes and arrays appear as a hash, as they do on any EVM chain. Event data is public, so the URL is a convenience link, not a secret.
The problem
Builders on Portaldot who want to know who holds a token, who owns an NFT, or what a contract emitted have to write their own block scraper first. That is the first thing a dapp needs and the last thing a team wants to build.
Registering a contract takes one request. Pindex decodes its events from data it already stores, so there is nothing new to host.
What Pindex does
It reads the chain’s own metadata and builds the database and API from it. A new pallet or event needs no new code. On the Portaldot testnet that produced 167 tables on its own.
It stores what it sees, records every range it could not capture, and layers a snapshot of chain storage underneath, so balances stay correct even for things that existed before it started.
How it works
Reads the chain’s metadataEvery pallet and event the runtime defines, with field names and types.
Creates one typed table per eventFor example balances_transfer or nfts_issued, with real column types. No handlers to write.
Follows finalized blocksEach block and its cursor are saved in one transaction. If a range cannot be read, the gap is recorded, not hidden, and retried later.
Decodes contract logs with your ABIRegistered contracts get their raw logs decoded in the background, so past and new events share one path.
Serves it backA public read-only REST API and this app. GraphQL is available if you self-host.
Verify the index
Every 1,000 blocks, Pindex anchors one 32-byte hash of everything it has stored, and of every range it could not read, to a contract on the testnet. Anyone can recompute it from the public API and compare, so the index cannot be quietly changed after the fact.
StatusLoading…
Recomputes the hash from the stored data and compares it with the latest checkpoint.
It proves the stored data has not changed since it was anchored and that the stated gaps are the real ones. How it works
What you can do today
Look up any address that has appeared on chain, by native (5...) or EVM (0x...) form: balances, NFTs and recent events.
See token holders ranked by balance, and who owns each NFT.
Browse the latest events from every indexed pallet, including staking and sessions.
Search any EVM transaction by its hash, and list the transactions sent to a contract.
Query the same data over REST with filters and pagination.
Chain data is read-only, with open CORS and no key. Base URL:
Token amounts are 128-bit integers and arrive as plain JSON numbers, so parse them as big integers. Filter chain tables with PostgREST operators, for example ?pallet=eq.staking&limit=5. Registration is limited to 20 per IP per day, and the registry holds 200 contracts.