Hoomanify
Human-readable transaction signing with ERC-7730 descriptors and Ledger hardware wallet integration
Problem Statement
Hoomanify is a Web3 security application that solves a critical problem in blockchain interactions: blind transaction signing. When users interact with smart contracts today, they typically see incomprehensible hexadecimal calldata (like 0x1760feec000000...) and must trust they're signing the right transaction. This leads to phishing attacks, approval exploits, and lost funds. The project implements the ERC-7730 standard, which provides a structured way to translate raw transaction calldata into human-readable format. Think of it as a "translation layer" between machine code and human language for blockchain transactions. The Workflow: Developer deploys contract → Hardhat generates deployment artifacts Script auto-generates ERC-7730 descriptor → Maps ABI to human-readable format User initiates transaction → Creates raw calldata Decoder parses calldata → ethers.js extracts function and parameters Formatter applies ERC-7730 rules → Converts addresses to token names, wei to decimals, timestamps to dates Ledger displays formatted data → User reviews on hardware device or simulator User approves → Transaction signed with private key on hardware Signature exported → Ready for broadcast to blockchain Why This Matters? Security: Users can verify exactly what they're signing before it happens Sovereignty: Private keys stay on hardware devices, never exposed to browsers Usability: Complex DeFi operations become understandable to non-technical users Standards Compliance: Full ERC-7730 implementation ensures interoperability. This project essentially builds the missing infrastructure for safe, transparent Web3 interactions—making blockchain transactions as clear as traditional banking while maintaining complete user sovereignty over their assets.
Solution
Technology Stack Breakdown: Smart Contract Layer (Hardhat 3) Hardhat 3.0.0 - Cutting-edge version with ESM support ("type": "module" in package.json) Solidity 0.8.24 - Latest compiler with optimized bytecode OpenZeppelin Contracts 5.0.1 - Battle-tested ERC20 interfaces and Ownable pattern ethers.js v6.10.0 - Used for deployment scripts and descriptor generation ERC-7730 Descriptor Generation (Node.js Automation)Hacky detail #1 : The Magic Script: generate-descriptor.ts Reads compiled contract artifacts from artifacts/contracts/DemoRouter.sol/DemoRouter.json Extracts the ABI automatically Pulls deployed address from deployments/DemoRouter.json (if exists) Generates complete ERC-7730 JSON descriptor with: Context (ABI + deployment addresses) Metadata (owner, timestamps, URLs) Display formats (field mappings with human-readable labels) Dual output: Saves to descriptors AND copies to descriptors for runtime accessHacky Detail #2: Dynamic Field Path Resolution The formatter uses dot-notation paths (params.tokenIn) to navigate nested struct parameters. This handles Solidity's SwapParams calldata params being decoded as args[0] by ethers.js.Key Dependencies: Next.js 14.1.0 - App Router with server components ethers.js v6.10.0 - ABI decoding via Interface class @ledgerhq/hw-transport-webusb 6.28.5 - Low-level WebUSB transport layer @ledgerhq/hw-app-eth 6.35.4 - High-level Ethereum app API axios 1.13.2 - MultiBaAS REST API client Tailwind CSS 3.4.0 - Utility-first stylingHacky Detail #3: Smart Amount Formatting Auto-detects token decimals based on value sizeHacky Detail #4: WebUSB Compatibility Only works in Chrome/Edge (Firefox doesn't support WebUSB). Falls back gracefully to simulator mode. The TransportWebUSB.create() triggers browser's native USB device picker.Ledger (@ledgerhq packages): Direct hardware integration without intermediaries Private keys never leave device WebUSB enables browser-native connections Standardized BIP44 derivation pathsMultiBaAS (Curvegrid): Unified API for portfolio, governance, and events Eliminates need for multiple RPC providers Pre-indexed blockchain data (faster queries) RESTful interface (simpler than GraphQL subgraphs)Hardhat 3: Mainnet forking for realistic testing Built-in TypeScript support Deployment artifact management Network abstraction (localhost → testnet → mainnet)
Hackathon
ETHGlobal Buenos Aires
2025
Prizes
- 🏆
Best use of MultiBaas
Curvegrid
- 🏆
CLEAR SIGNING (ERC - 7730)2nd place
Ledger
Contributors
- robdgs
17 contributions