A decentralized website monitoring system leveraging dPIN (Decentralized Public Infrastructure Network) to ensure trustless uptime verification, real-time alerts, and transparency without relying on centralized authorities.
With dPIN, experience a truly decentralized, transparent, and reliable website monitoring system.
πΉ No Single Point of Failure β Distributed monitoring across independent validators.
πΉ Trustless Transparency β Website owners can prove uptime without a central entity.
πΉ Crypto Incentives β Validators earn rewards for monitoring and reporting website health.
πΉ Decentralized Monitoring β Multiple nodes check website status instead of a single company.
πΉ Real-Time Alerts β Instant notifications for downtime or performance issues.
πΉ Security & Privacy β No third-party access to website data.
Traditional website monitoring systems are centralized, opaque, and vulnerable to downtime, censorship, and manipulation. They rely on single providers, limiting transparency and control.
Our dPIN-based monitoring system decentralizes website uptime tracking by leveraging independent validators across a global network. Unlike traditional systems, which rely on a single authority, our solution ensures real-time, trustless, and tamper-proof monitoring without any central points of failure. Website owners can prove uptime transparently, while users receive instant alerts for downtime or performance issues. Validators are incentivized with crypto rewards, fostering a self-sustaining, censorship-resistant ecosystem that enhances reliability, security, and trust in website monitoring.
β¨ Website owners can verify uptime transparently.
β‘ Users receive instant alerts for downtime or performance issues.
π° Validators are rewarded with crypto incentives, fostering a self-sustaining, censorship-resistant monitoring ecosystem.
π‘οΈ Blockchain β Solana
π dPIN (Decentralized Public Infrastructure Network) β Distributed monitoring
π Database β MongoDB
π₯οΈ Frontend β React.js, Radix UI, Tailwind CSS, ShadCN
π‘ Backend β Node.js, Express.js
π Authentication β Clerk
βοΈ Validator CLI β Commander.js, Chalk
# Clone the repository
git clone https://github.com/Lviffy/dPIN.git
cd dPIN
# Install backend dependencies
cd backend
npm install
# Set up environment variables
cp .env.example .env
# Edit .env with your specific configuration
# Run the backend server
node index.js
# Install frontend dependencies
cd ../frontend
npm install
# Set up frontend environment variables
cp .env.example .env
# Edit .env with your Clerk publishable key and other configs
# Run the frontend development server
npm run dev
# Open your browser at http://localhost:5173
Before you can run the application, you'll need to obtain several API keys and credentials:
- This is used for authentication in the backend
- Generate a secure random string:
Or simply create a strong password-like string
openssl rand -base64 32
- Generate a Solana keypair for the admin account:
# Install Solana CLI tools if you haven't already solana-keygen new
- The output will show your public key and save your private key
- Use these values for
ADMIN_PUBLIC_KEY
andADMIN_PRIVATE_KEY
- Sign up for a free account at Alchemy
- Create a new Solana app (can use Devnet for testing)
- Copy the HTTP URL from your dashboard
- Format:
https://solana-devnet.g.alchemy.com/v2/YOUR_API_KEY
- Create an account at Clerk
- Set up a new application
- From your Clerk dashboard:
- Get your
CLERK_PUBLISHABLE_KEY
(starts withpk_test_
) - Get your
CLERK_SECRET_KEY
(starts withsk_test_
) - Use the publishable key for both backend and frontend
- Get your
- If using Gmail:
- Go to your Google Account β Security
- Enable 2-Step Verification if not already enabled
- Go to App passwords
- Create a new app password
- Use this password for
PASS_NODEMAILER
After obtaining all keys, add them to your .env
files in both backend and frontend directories.
dPIN/
βββ backend/ # Express.js server
β βββ db/ # Database connection
β βββ model/ # MongoDB schemas
β βββ utils/ # Helper functions
β βββ index.js # Main server file
βββ frontend/ # React.js application
β βββ src/
β β βββ components/ # Reusable UI components
β β βββ pages/ # Page components
β β βββ utils/ # Utility functions
β β βββ App.jsx # Main application component
β βββ public/ # Static assets
βββ validator-cli/ # CLI tool for validators
βββ src/ # Source code
βββ utils/ # CLI utilities
πΉ Minimum Validator Balance β To become a validator, your crypto wallet must have at least 0.05 SOL.
πΉ Wallet Public Key β Needed for withdrawal of earned rewards.
πΉ Key Generation β Automatically generates a pair of public & private keys for enhanced security.
πΉ Decentralized Transactions β Ensures secure and anonymous payment processing.
If you face any issues, try these steps:
πΉ Solution: Ensure Node.js and npm are installed, and run npm install
before starting the application.
πΉ Solution: Make sure Phantom or any compatible Solana wallet is installed and connected to the correct network.
πΉ Solution: Check if notifications are enabled in browser settings.
πΉ Solution: Ensure your wallet has sufficient SOL for transactions.
πΉ Solution: Verify your Clerk API keys are correctly configured in your environment variables.
POST /user
- Create a new userGET /dashboard-details
- Get user dashboard information
POST /website
- Register a new website for monitoringGET /website/:id
- Get details for a specific websiteDELETE /website/:id
- Remove a website from monitoringPUT /website-track/:id
- Enable/disable monitoring for a websiteGET /website-details:id
- Get detailed metrics for a website
POST /validator-login
- Authenticate as a validatorGET /validator-details
- Get validator activity and rewards information
- Rohan Kumar Mohanta
- Jayesh Krishna
- Shivangi Sharma
We welcome contributions! Follow these steps:
1οΈβ£ Fork the repo
2οΈβ£ Create a new branch: git checkout -b feature-branch
3οΈβ£ Commit your changes: git commit -m "Added new feature"
4οΈβ£ Push to the branch: git push origin feature-branch
5οΈβ£ Submit a Pull Request (PR)
π‘ Tip: Always write clear commit messages and follow best coding practices before submitting a PR!