MMO RPG - Decentralized IPFS

🌐 Building a Decentralized MMO with IPFS and WebRTC
How PeakeCoin’s Peake RPG uses IPFS to revolutionize browser-based gaming
⚙️ Intro
The PeakeIPFSClient class powers a decentralized real-time multiplayer RPG built entirely in the browser. Using js-IPFS and WebRTC, it allows players to explore a persistent, trustless world — no central servers required.
🧠 Features of PeakeIPFSClient
✅ Decentralized Identity and Player Verification
Each player generates:
- ECDSA keys for cryptographic identity
- RSA keys for encrypted whispers
- Signed character data to verify their identity
This means no one can impersonate your character — even across restarts.
await this.initializeCryptoKeys();
await this.initializeIdentityVerification();
📡 Real-Time Communication via PubSub
The client subscribes to:
peake-rpg-global
for global eventspeake-rpg-room-5,5
,peake-rpg-room-6,5
, etc., for local player movement and chat
await this.ipfs.pubsub.subscribe('peake-rpg-global', ...)
await this.subscribeToRoom('5,5');
🗃️ Persistent Saves with IPFS
Game state is:
- Saved with a CID (Content Identifier)
- Optionally pinned to services like Pinata or Web3.storage
- Stored in
localStorage
for resume
const { cid } = await this.ipfs.add(JSON.stringify(gameData, null, 2));
localStorage.setItem('peake-rpg-ipfs-hash', cid.toString());
🔐 Whisper Chat and Encrypted Messages
Messages are encrypted with player public keys. Unverified players get warnings and limited trust-based interaction.
await this.sendWhisper(targetPlayer, message, location, true);
🧠 Conflict Resolution
Multiple devices? No problem.
If save states conflict, a conflictResolutionStrategy
like 'timestamp'
or 'manual'
determines which to keep.
this.conflictResolutionStrategy = 'timestamp';
🌍 World State Sync
The startPeriodicSync()
method:
- Saves game state every 30 seconds
- Triggers random events
- Cleans up disconnected peers
- Broadcasts player stats
this.saveGameState();
this.triggerWorldEvent();
🔑 IPFS Commands (In-Game Console)
Command | Description |
---|---|
connect Name | Connects to the IPFS swarm |
whisper John Hello | Sends private message |
trade Alice sword | Sends a trade request |
save | Saves state to IPFS |
load Qm123... | Loads a saved game |
snapshot-create | Shares public character profile |
verify-player John | Requests identity challenge |
trust-level low | Blocks unverified interaction |
These commands interact with the window.ipfsClient
instance from anywhere in the game.
📸 Snapshots & Reputation
Players can publish public character snapshots, like a profile:
await window.ipfsClient.createPublicSnapshot();
Others can view with:
snapshot-view Alice
🔗 Trust, Not Servers
This approach offloads:
- Storage to IPFS
- Authentication to crypto signatures
- Sync to PubSub topics
Every player becomes a node in the network.
💬 Try It Live
This is part of the PeakeCoin project — a Hive blockchain-based ecosystem.
Check out our open-source RPG and explore decentralized gaming:
👉 https://geocities.ws/peakecoin/
Built with 💾 JavaScript, IPFS, and Maryland pride.
Upvoted! Thank you for supporting witness @jswit.