A community Vibe Coded tool for validating Velora DAO proposals. Protect treasury funds by ensuring merkle roots match distribution data.
This tool helps verify that Velora DAO token distribution proposals are correct before voting:
- Input: Paste a Snapshot proposal URL (e.g.,
snapshot.org/#/veloradao.eth/proposal/0x...) - Data Sources:
- Fetches proposal details from Snapshot's GraphQL API
- Downloads distribution data from IPFS (the CSV/JSON file linked in the proposal)
- Verification Process:
- Rebuilds the merkle tree from the distribution data
- Compares the calculated merkle root with the one in the proposal
- Validates addresses, amounts, and checks for duplicates
- Output:
- ✅ Green = Distribution matches (safe to vote)
- ❌ Red = Mismatch detected (investigate before voting)
Why this matters: DAOs distribute millions in tokens. A wrong merkle root could mean recipients get incorrect amounts or tokens go to wrong addresses.
DAOs distribute millions of dollars in tokens through Snapshot proposals every month. These distributions rely on merkle trees - cryptographic proofs that ensure each recipient gets exactly what they're owed. The Velora Verification System makes it simple for anyone to verify these distributions are correct before voting.
- Instant Verification: Verify distributions in seconds, not minutes
- Multiple Formats: Supports OpenZeppelin, Uniswap, and custom merkle tree formats
- IPFS Integration: Automatic fallback across multiple IPFS gateways
- Comprehensive Validation: Address validation, duplicate detection, anomaly detection
- Statistical Analysis: Distribution metrics, concentration analysis, outlier detection
- User-Friendly: No technical knowledge required - just paste a Snapshot URL
- Node.js 18.x or higher
- npm or yarn package manager
- Clone or download the repository:
git clone <your-repository-url>
cd velora-prop-validator- Install dependencies:
npm install
# or
yarn install- Run the development server:
npm run dev # Uses Next.js with Turbopack
# or
yarn dev- Open http://localhost:3000 in your browser
npm run dev- Start development server with Turbopacknpm run build- Build for production with Turbopacknpm run start- Start production servernpm run lint- Run ESLint
- Navigate to the main page
- Paste a Snapshot proposal URL (e.g.,
https://snapshot.org/#/space.eth/proposal/0x...) - Click "Verify Distribution"
- Review the results showing whether the merkle root matches
Click "Show Advanced Options" to access:
- Manual IPFS verification with custom CID
- Local JSON file verification
- Custom merkle tree format selection
- Green Checkmark: Merkle root matches - distribution is correct
- Red X: Merkle root mismatch - distribution has errors
- Validation Checks: Additional checks for duplicates, invalid addresses, outliers
- Statistics: Distribution metrics including total amount, recipient count, concentration risk
- Merkle Engine: Supports multiple encoding formats (OpenZeppelin, Uniswap, custom)
- IPFS Gateway Manager: Automatic fallback across 7 public gateways
- Snapshot Integration: GraphQL API integration for proposal data
- Validators: Comprehensive validation for addresses, amounts, and distributions
- OpenZeppelin: Double-hashed encoding
keccak256(keccak256(abi.encode(address, amount))) - Uniswap: Indexed encoding
keccak256(abi.encode(index, address, amount)) - Custom: Simple packed encoding
keccak256(abi.encodePacked(address, amount))
POST /api/verify: Main verification endpoint- Body:
{ url: string, format?: string } - Returns: Complete verification result with merkle comparison and statistics
- Body:
velora-prop-validator/
├── app/ # Next.js app directory
│ ├── api/ # API routes
│ └── page.tsx # Main UI
├── components/ # React components
├── lib/ # Core logic
│ ├── merkle/ # Merkle tree implementation
│ ├── validators/ # Data validators
│ └── integrations/ # External integrations
└── types/ # TypeScript types
Create a .env.local file:
# Optional: Custom RPC endpoint for contract detection
NEXT_PUBLIC_RPC_URL=https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY
# Optional: Custom Snapshot GraphQL endpoint
NEXT_PUBLIC_SNAPSHOT_API=https://hub.snapshot.org/graphql- Push to your repository
- Import to Vercel
- Deploy with default Next.js settings
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Commit your changes
- Push to your fork
- Open a pull request
- All verification happens client-side - no sensitive data is stored
- IPFS data is fetched over HTTPS
- Address validation includes checksum verification
- No wallet connection required
MIT License - see LICENSE file for details
- A community Vibe Coded tool for the Velora DAO ecosystem
- Built with Next.js 15.5.3, TypeScript, and Tailwind CSS v4
- Uses Turbopack for fast builds and hot module replacement
- Merkle tree implementation using merkletreejs
- IPFS integration with multi-gateway fallback
- Snapshot GraphQL API for proposal data
For issues, questions, or suggestions:
- Open an issue on GitHub
A community Vibe Coded tool for validating Velora DAO proposals.