This section describes the off-chain metadata storage system used in Agora for storing space descriptions, logos, and other non-blockchain data.
Overview
Agora uses a hybrid storage approach:
On-chain: Core governance data (spaces, proposals, votes) stored in smart contracts
Off-chain: Metadata (descriptions, logos, images) stored in MongoDB
This separation reduces gas costs and allows for flexible data management without blockchain constraints.
Architecture
Storage Layer (src/lib/spaceDescriptions.js)
The storage layer provides a simple abstraction for persisting metadata:
// Save space metadataawaitsaveSpaceDescription(spaceId,{ensName:'myspace.agora',description:'Space description...',logo:'data:image/png;base64,...',createdBy:'0x123...',txHash:'0xabc...'});// Retrieve metadataconstmetadata=awaitgetSpaceDescription(spaceId);// Update metadataawaitupdateSpaceDescription(spaceId,{description:'Updated description',logo:'data:image/svg+xml;base64,...'});
Implementation: MongoDB with Mongoose ODM
Database: MongoDB Atlas (cloud) or local MongoDB instance
Collection: spacemetadatas
Schema: Defined in src/lib/models/SpaceMetadata.js
Connection: Managed via src/lib/mongodb.js with connection pooling
Automatic timestamps (createdAt, updatedAt) handled by Mongoose
Configuration: Set MONGODB_URI in .env.local:
API Layer (src/app/api/space-description/route.js)