THE ARCHITECTURE
OF TRUST
Understanding our three-layer architecture and trust model. Every donation is traceable, every expense is verifiable.
Three-Layer Architecture
Blockchain immutability, decentralized storage, and local metadata for the best balance of security, cost, and UX.
ON-CHAIN
Layer 1 Execution
Immutable source of truth for all financial transactions
- Campaign Creation Events
- Donation Transactions
- Expense Records with CID
- Timestamps & Block Numbers
- Transaction Hashes
IPFS
Decentralized Storage
Content-addressed storage for expense proof documents
- Expense Receipts (PDF/JPG)
- Content-Addressed (CID)
- Immutable File Integrity
OFF-CHAIN
Identity & Analytics
Local metadata cache for UX enrichment (NOT source of truth)
- Campaign Titles & Descriptions
- File Metadata & Labels
- UI State & Preferences
Trust Framework
Our system is designed so you don't have to trust us. Everything that matters is independently verifiable.
Full Transparency
Every donation and expense is publicly visible on the blockchain. Anyone can audit the entire financial history.
Immutable Records
Once recorded on-chain, transactions cannot be altered or deleted. This ensures permanent accountability.
Proof Documents
All expenses require proof documents stored on IPFS. The CID (content hash) is recorded on-chain.
Verifiable Links
Every transaction links to its proof. Users can independently verify that proofs match recorded CIDs.
Lifecycle of a Donation
CONTRIBUTION
Donor sends ETH to a campaign smart contract. Transaction is recorded immutably on-chain.
VALIDATION
Smart contract validates the campaign exists, is active, and emits a DonationReceived event.
DISBURSEMENT
Funds are forwarded to the campaign treasury. Admin records expenses with IPFS proof.
EVIDENCE
Expense proof CID is committed on-chain. Anyone can verify proof matches the record.
Contract Audit Log
CampaignLedger v1.0
0x5FbDB2315678afecb367f032d93F642f64180aa3Core Functions
CONTRIBUTE()Donate ETH to campaign
REQUESTEXPENSE()Record expense with proof
CREATECAMPAIGN()Deploy new campaign
SETCAMPAIGNACTIVE()Toggle campaign status
READY TO EXPLORE?
Browse active campaigns, check system health, or create your own transparent fundraising campaign.