
Utilisation de @charmbracelet pour créer un navigateur Ethereum avec style
Un portefeuille Ethereum en terminal magnifique et un navigateur de contrats intelligents conçu pour la souveraineté, la sécurité et le style.
━━━━━━━━━━━━━━━━━━━━
domestic system
━━━━━━━━━━━━━━━━━━━━

Le Système Domestique est une interface utilisateur en terminal (TUI) conçue pour naviguer dans les comptes Ethereum (EVM) et les contrats intelligents. Il rassemble trois principes fondamentaux qui rendent l’interaction avec la blockchain en terminal non seulement pratique, mais préférable.
Côté client uniquement. Pas de serveurs centralisés. Juste vous et la blockchain.
Le Système Domestique se connecte directement aux points de terminaison RPC Ethereum de votre choix. Pas d’intermédiaires. Pas d’analytique. Pas de suivi. Votre interaction avec la blockchain est directe et sans intermédiaire. C’est ainsi que la Web3 était censée fonctionner.
Aucune gestion de clé privée. Prêt pour portefeuille matériel.
Vos clés privées ne touchent jamais cette application. Toutes les transactions sont générées sous forme de codes QR suivant l’EIP-4527, conçu spécifiquement pour la signature avec des dispositifs de portefeuille matériel. Consultez vos comptes, préparez des transactions et signez-les en toute sécurité sur votre portefeuille matériel.
Construit avec Charm.sh. Interfaces terminal magnifiquement réalisées.
En utilisant le superbe écosystème Charm.land (Bubble Tea, Lip Gloss, Huh), Le Système Domestique prouve que les CLI n’ont pas à être austères. Des couleurs riches, des interactions fluides et une conception d’interface réfléchie apportent une esthétique rétro-future à l’interaction avec la blockchain.
Ces trois principes – souveraineté, sécurité et esthétique – convergent parfaitement dans le terminal. Les applications en terminal sont :
Le Système Domestique occupe une intersection unique de cas d’utilisation de niche, servant ceux qui valorisent le contrôle, la sécurité et le savoir-faire.
git clone https://github.com/yourusername/domestic-system.git
cd domestic-system
go build
go run .
Le Système Domestique stocke sa configuration dans ~/.charm-wallet-config.json.
Ajoutez des points de terminaison RPC Ethereum dans la page de paramètres s ou en définissant la variable d’environnement ETH_RPC_URL :
export ETH_RPC_URL="https://eth.llamarpc.com"
go run .
Personnalisez les jetons ERC-20 à afficher en éditant la liste de surveillance dans main.go (configuration de l’interface utilisateur à venir).
x depuis Comptes) : Gérez les clés de signature, scannez les codes QR EIP-4527 via la webcam et signez les transactionsa pour ajouter un nouveau portefeuilleLe compte actif (marqué ★) détermine le portefeuille utilisé pour les transactions. Pour basculer de compte :
Vous pouvez également naviguer vers la page Portefeuilles et appuyer sur Entrée sur n’importe quel portefeuille pour voir ses détails et l’activer.
Le Système Domestique inclut un workflow complet de signature de transactions EIP-4527 utilisable à la fois dans la TUI et indépendamment depuis le terminal.
TUI (n’importe quelle page) → empaquette la tx non signée → affiche le code QR EIP-4527
↓
La page Signataire scanne le QR via la webcam
↓
Décode l’UR → signe avec la clé stockée
↓
Affiche la transaction signée brute en hexadécimal
Les clés sont stockées dans ~/.charm-wallet-private-keys.json (mode 600, en dehors du dépôt). Lors du premier lancement, une clé de démonstration NotForProduction est amorcée automatiquement et son adresse est enregistrée dans ~/.charm-wallet-config.json.
{
"private_keys": [
{
"address": "0x29c73B201bEE86C4d1Fe4f598C4355Bb210251e3",
"name": "NotForProduction",
"private_key": "0xc0054..."
}
]
}
Appuyez sur x depuis la page Comptes pour ouvrir le Signataire. Depuis là :
La transaction signée (hex brut, hash de tx, r/s/v) est affichée immédiatement après le scan.
signer/eth_signer.py)Le signataire Python s’exécute indépendamment de la TUI. Installez les dépendances une fois :
pip install -r requirements.txt
Toute la sortie est en JSON. Le mode --scan ouvre une fenêtre OpenCV montrant le flux vidéo en direct et émet les transactions signées sur stdout au fur et à mesure de leur détection.
cmd/txtest)Exécute le cycle complet d’empaquetage → décodage → signature en utilisant directement les modules Go :
# Hors ligne (paramètres de test codés en dur – pas besoin de RPC)
go run ./cmd/txtest
# Avec nonce/gasPrice/chainId en direct depuis un point de terminaison RPC
go run ./cmd/txtest --rpc https://eth.llamarpc.com
# Destinataire et montant personnalisés
go run ./cmd/txtest --to 0xVotreAdresse --value 0.5 --chainid 11155111
La sortie montre clairement les deux étapes :
ÉTAPE 1 — Empaqueter la transaction non signée (EIP-4527)
─────────────────────────────────────────────────────────────
Champs de la transaction : { "from": "0x29c7...", "to": "0xd8dA...", ... }
UR : ur:eth-sign-request/onadtpdagd...
ÉTAPE 2 — Décoder + signer avec la clé stockée
─────────────────────────────────────────────────────────
Transaction décodée : { "from": "0x29c7...", "value": "0.001000 ETH", ... }
Transaction signée : { "txHash": "0x5989...", "raw_transaction": "0xf86b...", ... }
✓ Cycle complet terminé
ss -ntlp | grep 8545
ssh -N -L 8545:localhost:8545 user@node_machine_ip_address #pour http
ssh -N -L 8546:localhost:8546 user@node_machine_ip_address #pour ws websocket
Votre application, s’exécutant sur la machine d’application, peut désormais accéder au RPC du nœud Ethereum via http://localhost:8545
go run helpers/uniswap_v4_listener.go -ws -poolmanager
[-from ]go run ./cmd/v4listener
-ws ws://localhost:8546
-poolmanager 0x000000000004444c5dc75cB358380D2e3dE08A90
go run ./cmd/v4listener
-ws ws://localhost:8546 \ #ou ws://mainnet.infura.io/ws/v3/YOUR_KEY
-poolmanager 0x000000000004444c5dc75cB358380D2e3dE08A90
-from 21688000
domestic-system/
├── main.go # Point d’entrée — câble le programme Bubble Tea
├── model.go # Struct de l’état de l’application + Init()
├── update.go # Tous les gestionnaires de messages Update()
├── view.go # Distribution View() de haut niveau
├── cmd/
│ ├── txtest/ # CLI de test d’empaquetage → signature de bout en bout
│ └── v4listener/ # Écouteur d’événements Uniswap V4 autonome
├── config/ # Chargement/sauvegarde de configuration JSON, définitions de types
├── helpers/ # Résolution ENS, formatage d’adresse, Uniswap V2/V4
├── rpc/ # Client RPC Ethereum, empaquetage de transactions EIP-4527
├── signer/
│ ├── signer.go # Package Go : gestion des clés, décodage EIP-4527, signature ECDSA
│ └── eth_signer.py # CLI Python autonome (mêmes fonctionnalités)
├── styles/ # Couleurs Lip Gloss et styles partagés
├── views/ # Rendu par page
│ ├── wallets/
│ ├── details/
│ ├── settings/
│ ├── dapps/
│ ├── uniswap/
│ ├── terra/
│ └── signer/ # Rendu de la page Signataire
└── webcam/ # Capture caméra et rendu vidéo demi-bloc
# Tests du package RPC (nécessite un point de terminaison RPC)
ETH_RPC_URL="https://eth.llamarpc.com" go test ./rpc -v
# Tous les tests
go test ./... -v
Les contributions sont les bienvenues ! Ce projet valorise :
Veuillez ouvrir un ticket avant de commencer un travail important.
Licence MIT – Voir le fichier LICENSE pour plus de détails
Construit avec :
Inspiré par l’éthique de la souveraineté personnelle et l’esthétique de la rétro-informatique.
Le Système Domestique : votre terminal, vos clés, votre blockchain.
| Touche | Action |
|---|
↑/↓ | Sélectionner une clé de signature |
s | Ouvrir la webcam – signe automatiquement le premier QR EIP-4527 détecté |
a | Recharger les clés depuis le disque |
c | Effacer le résultat actuel |
Échap | Revenir aux Comptes |
| Commande | Description |
|---|
python signer/eth_signer.py --generate-keys | Générer une nouvelle paire de clés ECDSA |
python signer/eth_signer.py --derive-address 0x... | Dériver l’adresse depuis la clé privée |
python signer/eth_signer.py --private-key 0x... --to 0x... --value 1000000000000000000 | Signer une transaction |
python signer/eth_signer.py --scan | Scan par webcam : détecter et signer les codes QR EIP-4527 |
python signer/eth_signer.py --add-key --private-key 0x... --name "Portefeuille" | Ajouter une clé au stockage |
python signer/eth_signer.py --list-keys | Lister les adresses stockées |