An open-source tool for building, visualizing, and managing ERC7730 transaction descriptors for hardware wallets. Create clear, user-friendly transaction displays that help users understand what they're signing before approving blockchain transactions.
ERC7730 is an Ethereum standard that defines structured metadata for describing smart contract interactions in human-readable format. It enables hardware wallets and dApps to show users clear transaction details instead of raw bytecode.
Example: Instead of seeing 0xa9059cbb000000000000000000..., users see:
- Action: Transfer USDC
- To: vitalik.eth
- Amount: 100.00 USDC
- 🎨 Visual ERC7730 Builder - Drag-and-drop interface for creating transaction descriptors
- 📱 Hardware Wallet Preview - See exactly how transactions appear on Ledger devices
- 🔍 Multi-Contract Support - Handle complex transactions (Safe + Token operations)
- 📊 Real Transaction Testing - Validate descriptors with actual blockchain data
- 🌐 Blob Storage - Decentralized metadata storage via Ethereum blobs
- 🔐 Digital Signatures - Cryptographic verification of metadata authenticity
├── frontend/ # Next.js application
│ ├── src/app/ # App router pages
│ ├── src/components/ # React components
│ └── src/lib/ # Utilities and services
├── backend/ # Python FastAPI server
├── contracts/ # Solidity contracts (Foundry)
├── graph/ # Subgraph for indexing events
└── llm/ # AI-assisted descriptor generation
- Frontend: Next.js, TypeScript, Tailwind CSS
- Backend: Python FastAPI
- Contracts: Solidity, Foundry
- Deployment: Vercel, Railway
- KaiSign Contract:
0x4dFEA0C2B472a14cD052a8f9DF9f19fa5CF03719
- Node.js (v18 or higher)
- Python 3.12
- npm or yarn
-
Clone the repository:
git clone https://github.com/yourusername/Kai-Sign.git cd Kai-Sign -
Install dependencies:
npm install
-
Set up Python environment:
npm run setup-venv
-
Set up environment variables:
- Copy the
.env.examplefile to.env - Update the values in
.envwith your own configuration
- Copy the
By default, the application uses the local FastAPI backend running on http://localhost:8000. No additional configuration is needed.
To use the deployed Railway backend instead of the local backend:
-
Create or update your
.envfile with:NEXT_PUBLIC_API_URL=https://your-railway-app-url.railway.app
-
Replace
your-railway-app-urlwith your actual Railway deployment URL. -
Restart your development server:
npm run dev
Note: When NEXT_PUBLIC_API_URL is set, the frontend will make API calls to the Railway backend instead of the local backend. This is useful for:
- Testing against production data
- Development without running the local Python backend
- Sharing a common backend across multiple developers
Backend Variables (for local development):
ALCHEMY_RPC_URL=your_alchemy_rpc_endpoint
KAISIGN_CONTRACT_ADDRESS=0x4dFEA0C2B472a14cD052a8f9DF9f19fa5CF03719
CURVEGRID_JWT=your_curvegrid_jwt_token
ETHERSCAN_API_KEY=your_etherscan_api_key
USE_MOCK=falseFrontend Variables:
NEXT_PUBLIC_API_URL=https://your-railway-app-url.railway.app
NEXT_PUBLIC_KAISIGN_CONTRACT_ADDRESS=0x4dFEA0C2B472a14cD052a8f9DF9f19fa5CF03719Start the development server:
npm run devVisit http://localhost:3000 in your browser.
- Push your code to a GitHub repository
- Connect your repository to Vercel
- Configure environment variables in the Vercel dashboard
- Deploy from the Vercel dashboard or use the Vercel CLI
- Connect your repository to Railway
- Configure environment variables in the Railway dashboard
- Deploy from the Railway dashboard or use the Railway CLI
For detailed deployment instructions, see DEPLOYMENT.md.
POST /api/py/generateERC7730: Generate ERC7730 descriptorPOST /api/py/getIPFSMetadata: Fetch IPFS metadata from contract specIDGET /api/py: Health check endpointGET /api/healthcheck: Health check endpoint
curl -X POST https://your-railway-app.railway.app/api/py/generateERC7730 \
-H "Content-Type: application/json" \
-d '{"address": "0x1234567890123456789012345678901234567890", "chain_id": 1}'curl -X POST https://your-railway-app.railway.app/api/py/getIPFSMetadata \
-H "Content-Type: application/json" \
-d '{"spec_id": "0xa0ffcaf51795d9c96dcdab2deadf864f458480f629eb683d591916369df49316"}'We welcome contributions from the community! This project follows standard open source practices.
- Fork the repository
- Clone your fork:
git clone https://github.com/your-username/Kai-Sign-Builder.git - Install dependencies:
cd Kai-Sign-Builder && npm install - Create a branch:
git checkout -b feature/your-feature-name - Make your changes
- Test your changes:
npm run dev - Commit with clear messages:
git commit -m "feat: add new feature" - Push to your fork:
git push origin feature/your-feature-name - Create a Pull Request
- Code Style: We use Prettier and ESLint - run
npm run lintbefore committing - TypeScript: Maintain type safety - no
anytypes without justification - Testing: Add tests for new features in the appropriate test files
- Documentation: Update README and add JSDoc comments for new functions
- 🐛 Bug fixes - Help us squash issues
- ✨ New features - Enhance ERC7730 tooling
- 📝 Documentation - Improve guides and examples
- 🎨 UI/UX - Better user experience
- 🧪 Testing - Increase test coverage
- 🔧 DevOps - Improve build and deployment
When reporting bugs, please include:
- Description - Clear description of the issue
- Steps to reproduce - How to trigger the bug
- Expected behavior - What should happen
- Actual behavior - What actually happens
- Environment - OS, browser, Node.js version
- Screenshots - If applicable
- One feature per PR - Keep changes focused
- Clear title - Use conventional commits (feat:, fix:, docs:, etc.)
- Description - Explain what and why
- Link issues - Reference related issue numbers
- Tests pass - Ensure CI checks pass
- Review ready - Mark as ready when complete
This project is licensed under the Apache License - see the LICENSE file for details.
- Documentation: Check our Gitbook for detailed guides
- Issues: Report bugs via GitHub Issues
- Community: Follow us for updates and announcements
- ERC7730 Standard - The foundation of this project
- Ledger - Hardware wallet integration insights
- ENS PG Builder Grants - Supporting ecosystem development
- Contributors - Thank you to everyone who has contributed code, ideas, and feedback
Built with ⟠ for the Ethereum ecosystem