A decentralized application (dApp) for signing messages with Cardano wallets, featuring WalletConnect v2 support for cold wallet integration.
- 🔐 Secure Message Signing: Sign any text message with your Cardano wallet
- 🌐 WalletConnect v2 Support: Connect cold wallets remotely via WalletConnect protocol
- 💎 Multi-Wallet Compatible: Supports Nami, Eternl, Flint, Typhon, GeroWallet, and NuFi
- 📱 Responsive Design: Works on desktop and mobile devices
- 🔍 Signature Verification: Built-in signature verification capabilities
- 📋 Easy Copy/Export: One-click copy for signatures and JSON export
- Nami - Popular Cardano browser wallet
- Eternl - Feature-rich Cardano wallet
- Flint - Lightweight Cardano wallet
- Typhon - Advanced Cardano wallet
- GeroWallet - Multi-chain wallet with Cardano support
- NuFi - Non-custodial Cardano wallet
- Frontend: React 18 + TypeScript
- Build Tool: Webpack 5
- Cardano Integration:
@emurgo/cardano-serialization-lib-browserlucid-cardano@cardano-foundation/cardano-connect-with-wallet
- WalletConnect:
@walletconnect/web3walletv2 - Styling: CSS-in-JS with responsive design
Open demo.html in your browser to see a working demonstration of the dApp interface. This version includes:
- Interactive wallet connection simulation
- Message signing interface
- Signature result display
- Responsive design
-
Install Node.js (version 16 or higher):
- Download from nodejs.org
- Verify installation:
node --versionandnpm --version
-
Clone the repository:
git clone <repository-url> cd ada-sign-dapp
-
Install dependencies:
npm install
-
Configure WalletConnect (Optional):
- Get a project ID from WalletConnect Cloud
- Update
WALLETCONNECT_PROJECT_IDinsrc/utils/constants.ts
-
Start the development server:
npm run dev
-
Open your browser and navigate to
http://localhost:3000
-
Connect Your Wallet:
- Click on your preferred wallet from the list
- Approve the connection in your wallet extension
-
Sign a Message:
- Enter your message in the text area
- Click "Sign Message" or press Ctrl+Enter
- Approve the signing request in your wallet
-
View Results:
- Copy the signature, public key, or full JSON
- Use the signature for verification purposes
For cold wallet support via WalletConnect v2:
- Ensure you have a valid WalletConnect project ID configured
- The dApp will automatically handle WalletConnect sessions
- Cold wallets can connect by scanning QR codes or deep links
ada-sign-dapp/
├── public/
│ └── index.html # HTML template
├── src/
│ ├── components/ # React components
│ │ ├── WalletConnect.tsx
│ │ ├── MessageSigner.tsx
│ │ └── SignatureResult.tsx
│ ├── hooks/ # Custom React hooks
│ │ └── useCardano.ts
│ ├── utils/ # Utility functions
│ │ ├── cardano.ts
│ │ ├── walletconnect.ts
│ │ └── constants.ts
│ ├── types/ # TypeScript definitions
│ │ └── index.ts
│ ├── App.tsx # Main application component
│ ├── index.tsx # Application entry point
│ └── index.css # Global styles
├── package.json # Dependencies and scripts
├── tsconfig.json # TypeScript configuration
├── webpack.config.js # Webpack configuration
└── README.md # This file
npm run dev- Start development server with hot reloadnpm run build- Build for productionnpm start- Start development server
To add support for additional Cardano wallets:
- Add the wallet identifier to
SUPPORTED_WALLETSinconstants.ts - Add the wallet icon URL to
WALLET_ICONS - The wallet detection will automatically pick up wallets that implement the CIP-30 standard
- Styling: Modify
src/index.cssor component styles - Wallet Icons: Update
WALLET_ICONSinconstants.ts - Network Configuration: Adjust
CARDANO_NETWORKSfor testnet/mainnet - WalletConnect Metadata: Update
WALLETCONNECT_METADATA
- Message Signing: All signing operations are performed by the connected wallet
- No Private Keys: This dApp never handles or stores private keys
- Local Storage: Only wallet connection preferences are stored locally
- HTTPS Required: Use HTTPS in production for security
- Chrome/Chromium: Full support
- Firefox: Full support
- Safari: Full support
- Edge: Full support
- Mobile Browsers: Responsive design with touch support
-
Wallet Not Detected:
- Ensure the wallet extension is installed and enabled
- Refresh the page after installing a wallet
- Check if the wallet supports CIP-30 standard
-
Connection Failed:
- Disable other wallet extensions temporarily
- Clear browser cache and cookies
- Try connecting in an incognito/private window
-
Signing Failed:
- Ensure the wallet is unlocked
- Check if the wallet has sufficient permissions
- Verify the message format is supported
-
TypeScript Errors:
- Run
npm installto ensure all dependencies are installed - Check that all required type definitions are available
- Run
-
Build Errors:
- Clear
node_modulesand reinstall:rm -rf node_modules && npm install - Ensure Node.js version compatibility (Node 16+ recommended)
- Clear
- Fork the repository
- Create a feature branch:
git checkout -b feature-name - Make your changes and test thoroughly
- Commit your changes:
git commit -m 'Add feature' - Push to the branch:
git push origin feature-name - Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
- Cardano Foundation for the excellent developer tools
- Emurgo for the Cardano serialization library
- WalletConnect for the v2 protocol implementation
- Cardano Community for wallet standards and best practices
For support and questions:
- Create an issue in the GitHub repository
- Check the troubleshooting section above
- Review Cardano developer documentation
Note: This dApp is for educational and development purposes. Always verify signatures independently in production applications.