New on Portaldot V3
Storage, built into the chain.
PotDrive puts your files straight into Portaldot's own TransactionStorage. One signature to store. Every byte checked by the browser that reads it.
The journey of a file
It starts as one file.
A PDF, a photo, a whole website. Nothing has left your device yet.
File · 3.4 MiBPer upload, whatever the size. The rest is signed by a temporary key in your tab.
Kept and proven by validators per payment, then renewable by anyone.
Readers fetch from the chain and verify every block against its hash.
The unused pallet
It shipped in V3. Nobody had stored a thing.
Portaldot V3 runs TransactionStorage, the same pallet behind Polkadot's Bulletin chain. When we looked on 17 October 2026 it held zero entries. No SDK, no gateway, no app. Teams on Portaldot were sending their files to outside pinning services instead.
Four steps. One question.
From your disk to a validator, and back to anyone with the link.
Prepared on your device.
FastCDC cuts your file where its content says to, not every N bytes, then hashes each piece with blake2b-256, the hash Portaldot indexes. Blocks the chain already holds are skipped.
FastCDC · blake2b-256 · dag-pb · dedupOne signature.
A single batch funds a temporary upload key and records the file in the PotDrive registry on Revive. Your wallet asks once.
utility.batchAll · revive.callStored by the chain.
The upload key writes each block with transactionStorage.store, then sends whatever it didn't spend back to you.
transactionStorage.store × nChecked, not trusted.
Your browser pulls every block back over bitswap and re-hashes it. A block only counts once its hash matches.
bitswap_v1_get → re-hashEngineered for a chain that charges by the byte.
Storage on Portaldot costs about 105 tPOT per MiB. So PotDrive never stores the same byte twice.
Versions pay for changes only.
Content-defined chunking keeps chunk boundaries stable across edits. Insert 1 KiB into a 16 MiB file and FastCDC stores 609 KiB again; fixed chunks would store all 16 MiB.
Websites, served from the chain.
potdrive deploy ./dist stores a UnixFS directory. The gateway resolves paths block by block and runs the site in a sandboxed origin.
Streaming with Range.
The gateway maps a byte range to just the chunks that cover it, so video seeks without downloading what came before.
Gasless with MetaTx.
No tPOT yet? Sign one authorization and a relay pays the fees through Portaldot's MetaTx pallet.
NFTs, fully on Portaldot.
Mint on the native Nfts pallet in one signature. The media is stored by Portaldot itself, not a pinning service.
Share with a wallet.
Seal a private file's key to another address with X25519 inbox keys. No link to leak.
Private by choice.
AES-256-GCM in your browser before upload. The chain only sees ciphertext. The key lives in the link, after the #.
Keep-alive.
Prepay renewals and a daily keeper renews your file before Portaldot drops it, reimbursed exactly, capped per file.
Verified everywhere.
The Drive, the gateway, the SDK and the CLI all re-hash every block before they use it.
Why native.
Portaldot already pays validators to keep and prove data.
| PotDrive | Pinning service | Cloud bucket | |
|---|---|---|---|
| Held by the network you already use | |||
| Storage proofs inside the runtime | |||
| Standard IPFS content IDs | |||
| Readers verify every byte themselves | |||
| No extra account or API key | |||
| Who holds the bytes | Portaldot validators | A pinning company | One cloud provider |
Made of Portaldot.
No new chain, no new token. Native pallets hold the bytes. Solidity on Revive keeps the index.
Holds each block for 100,800 blocks. Validators must keep proving they have it.
Returns any stored block by CID. The read path for every client.
Ownership and keep-alive. EVM bytecode, called from a Polkadot wallet.
Turns many transactions into one signature, and returns the change.
Solidity hashes with Portaldot's blake2b and checks wallet signatures, so the registry proves files.
Gasless uploads: one readable wallet signature, and a relay pays every fee.
For developers
For every other Portaldot app.
An SDK, React components, a CLI and an IPFS-style gateway. Point an image tag at a CID and it loads from Portaldot.
import { connect, prepareFile, uploadFile } from "@potdrive/sdk";
const api = await connect();
const file = await prepareFile(bytes, { name: "deck.pdf", mime: "application/pdf" });
const { root } = await uploadFile({
api,
file,
owner: { address, signer }, // any Polkadot wallet
registry: REGISTRY,
onEvent: (e) => console.log(e.type),
});
console.log(`https://potdrive.anshverma.tech/ipfs/${root}`);Questions, answered.
The things people ask before they store their first file.
In Portaldot itself. Each block goes into the runtime's TransactionStorage pallet, and validators keep it. There is no PotDrive server holding a copy, and no outside pinning service.
Live on the Portaldot V3 testnet
Put something on Portaldot that isn't a transfer.
Drop a file, sign once, and share a link anyone can verify.