
Mit @charmbracelet einen stilvollen Ethereum-Browser erstellen
Ein schönes, terminalbasiertes Ethereum-Wallet und Smart-Contract-Browser, entwickelt für Souveränität, Sicherheit und Stil.
━━━━━━━━━━━━━━━━━━━━
domestic system
━━━━━━━━━━━━━━━━━━━━

The Domestic System ist eine Terminal-Benutzeroberfläche (TUI) zum Durchsuchen von Ethereum (EVM)-Konten und Smart Contracts. Es vereint drei Kernprinzipien, die die terminalbasierte Interaktion mit der Blockchain nicht nur praktisch, sondern auch bevorzugenswert machen.
Nur clientseitig. Keine zentralen Server. Nur du und die Blockchain.
The Domestic System verbindet sich direkt mit den von dir gewählten Ethereum-RPC-Endpunkten. Keine Zwischenhändler. Keine Analytik. Kein Tracking. Deine Interaktion mit der Blockchain ist direkt und unvermittelt. So sollte Web3 funktionieren.
Kein Private-Key-Management. Hardware-Wallet bereit.
Deine privaten Schlüssel berühren diese Anwendung nie. Alle Transaktionen werden als QR-Codes gemäß EIP-4527 generiert, die speziell für die Signierung mit Hardware-Wallet-Geräten ausgelegt sind. Zeige deine Konten an, bereite Transaktionen vor und signiere sie sicher auf deinem Hardware-Wallet.
Entwickelt mit Charm.sh. Terminal-Oberflächen, wunderschön umgesetzt.
Unter Verwendung des großartigen Charm.land-Ökosystems (Bubble Tea, Lip Gloss, Huh) beweist The Domestic System, dass CLIs nicht spartanisch sein müssen. Reichhaltige Farben, flüssige Interaktionen und durchdachtes UI-Design verleihen der Blockchain-Interaktion eine Retro-Future-Ästhetik.
Diese drei Prinzipien – Souveränität, Sicherheit und Ästhetik – treffen im Terminal perfekt aufeinander. Terminalanwendungen sind:
The Domestic System besetzt eine einzigartige Schnittstelle von Nischenanwendungen und richtet sich an diejenigen, die Kontrolle, Sicherheit und Handwerkskunst schätzen.
git clone https://github.com/yourusername/domestic-system.git
cd domestic-system
go build
go run .
The Domestic System speichert seine Konfiguration in ~/.charm-wallet-config.json.
Füge Ethereum-RPC-Endpunkte auf der Einstellungsseite „s“ hinzu oder setze die Umgebungsvariable ETH_RPC_URL:
export ETH_RPC_URL="https://eth.llamarpc.com"
go run .
Passe an, welche ERC-20-Token angezeigt werden sollen, indem du die Token-Watchlist in main.go bearbeitest (UI-Konfiguration in Kürze verfügbar).
x von Accounts): Signierschlüssel verwalten, EIP-4527-QR-Codes per Webcam scannen und Transaktionen signierena, um ein neues Wallet hinzuzufügenDas aktive Konto (markiert mit ★) bestimmt, welches Wallet für Transaktionen verwendet wird. So wechselst du Konten:
Alternativ kannst du zur Seite „Wallets“ navigieren und auf ein beliebiges Wallet drücken, um dessen Details anzuzeigen und es zu aktivieren.
The Domestic System enthält einen vollständigen EIP-4527-Transaktionssignatur-Workflow, der sowohl innerhalb der TUI als auch unabhängig vom Terminal genutzt werden kann.
TUI (beliebige Seite) → packt unsignierte Tx → zeigt EIP-4527-QR-Code an
↓
Signer-Seite scannt QR per Webcam
↓
Dekodiert UR → signiert mit gespeichertem Schlüssel
↓
Zeigt rohe signierte Transaktions-Hex an
Schlüssel werden in ~/.charm-wallet-private-keys.json gespeichert (Modus 600, außerhalb des Repos). Beim ersten Start wird automatisch ein NotForProduction-Demo-Schlüssel erstellt und seine Adresse in ~/.charm-wallet-config.json registriert.
{
"private_keys": [
{
"address": "0x29c73B201bEE86C4d1Fe4f598C4355Bb210251e3",
"name": "NotForProduction",
"private_key": "0xc0054..."
}
]
}
Drücke x auf der Seite „Accounts“, um den Signierer zu öffnen. Von dort:
Die signierte Transaktion (rohes Hex, Tx-Hash, r/s/v) wird sofort nach dem Scannen angezeigt.
signer/eth_signer.py)Der Python-Signierer läuft unabhängig von der TUI. Installiere die Abhängigkeiten einmalig:
pip install -r requirements.txt
Die gesamte Ausgabe erfolgt als JSON. Der --scan-Modus öffnet ein OpenCV-Fenster mit dem Live-Kamerabild und gibt signierte Transaktionen auf stdout aus, sobald sie erkannt werden.
cmd/txtest)Führt den vollständigen Pack → Dekodieren → Signieren Round-Trip mit den Go-Modulen direkt aus:
# Offline (hartcodierte Testparameter — kein RPC erforderlich)
go run ./cmd/txtest
# Mit Live-Nonce/gasPrice/chainId von einem RPC-Endpunkt
go run ./cmd/txtest --rpc https://eth.llamarpc.com
# Benutzerdefinierter Empfänger und Betrag
go run ./cmd/txtest --to 0xYourAddr --value 0.5 --chainid 11155111
Die Ausgabe zeigt beide Schritte deutlich:
STEP 1 — Pack unsigned transaction (EIP-4527)
─────────────────────────────────────────────
Transaction fields: { "from": "0x29c7...", "to": "0xd8dA...", ... }
UR: ur:eth-sign-request/onadtpdagd...
STEP 2 — Decode + sign with stored key
───────────────────────────────────────
Decoded transaction: { "from": "0x29c7...", "value": "0.001000 ETH", ... }
Signed transaction: { "txHash": "0x5989...", "raw_transaction": "0xf86b...", ... }
✓ Round-trip complete
ss -ntlp | grep 8545
ssh -N -L 8545:localhost:8545 user@node_machine_ip_address # für http
ssh -N -L 8546:localhost:8546 user@node_machine_ip_address # für ws websocket
Deine Anwendung, die auf dem Anwendungsrechner läuft, kann nun auf das RPC des Ethereum-Knotens über http://localhost:8545 zugreifen.
go run helpers/uniswap_v4_listener.go -ws <wss-url> -poolmanager <address> [-from <block>]
go run ./cmd/v4listener
-ws ws://localhost:8546
-poolmanager 0x000000000004444c5dc75cB358380D2e3dE08A90
go run ./cmd/v4listener
-ws ws://localhost:8546 \ # oder ws://mainnet.infura.io/ws/v3/YOUR_KEY
-poolmanager 0x000000000004444c5dc75cB358380D2e3dE08A90
-from 21688000
domestic-system/
├── main.go # Einstiegspunkt – verbindet Bubble Tea Programm
├── model.go # App-Status-Struct + Init()
├── update.go # Alle Update()-Nachrichtenhandler
├── view.go # Top-Level View()-Dispatcher
├── cmd/
│ ├── txtest/ # End-to-End Pack → Sign Test CLI
│ └── v4listener/ # Eigenständiger Uniswap V4 Event Listener
├── config/ # JSON-Konfiguration laden/speichern, Typdefinitionen
├── helpers/ # ENS-Auflösung, Adressformatierung, Uniswap V2/V4
├── rpc/ # Ethereum RPC-Client, EIP-4527 Transaktionspaketierung
├── signer/
│ ├── signer.go # Go-Paket: Schlüsselverwaltung, EIP-4527 Dekodierung, ECDSA-Signierung
│ └── eth_signer.py # Eigenständige Python-CLI (gleiche Funktionalität)
├── styles/ # Lip Gloss Farben und gemeinsame Styles
├── views/ # Seiten-Renderer
│ ├── wallets/
│ ├── details/
│ ├── settings/
│ ├── dapps/
│ ├── uniswap/
│ ├── terra/
│ └── signer/ # Signierer-Seiten-Renderer
└── webcam/ # Kameraerfassung und Half-Block-Videorendering
# RPC-Paket-Tests (erfordert RPC-Endpunkt)
ETH_RPC_URL="https://eth.llamarpc.com" go test ./rpc -v
# Alle Tests
go test ./... -v
Beiträge sind willkommen! Dieses Projekt schätzt:
Bitte eröffne ein Issue, bevor du mit größeren Arbeiten beginnst.
MIT-Lizenz – siehe LICENSE-Datei für Details
Erstellt mit:
Inspiriert vom Ethos der Selbstsouveränität und der Ästhetik der Retro-Computing.
The Domestic System: Dein Terminal, deine Schlüssel, deine Blockchain.
| Taste | Aktion |
|---|
↑/↓ | Signierschlüssel auswählen |
s | Webcam öffnen — signiert automatisch den ersten erkannten EIP-4527-QR |
a | Schlüssel von der Festplatte neu laden |
c | Aktuelles Ergebnis löschen |
Esc | Zurück zu „Accounts“ |
| Befehl | Beschreibung |
|---|
python signer/eth_signer.py --generate-keys | Neues ECDSA-Schlüsselpaar generieren |
python signer/eth_signer.py --derive-address 0x... | Adresse aus privatem Schlüssel ableiten |
python signer/eth_signer.py --private-key 0x... --to 0x... --value 1000000000000000000 | Transaktion signieren |
python signer/eth_signer.py --scan | Webcam-Scan: EIP-4527-QR-Codes erkennen und signieren |
python signer/eth_signer.py --add-key --private-key 0x... --name "Wallet" | Schlüssel zum Speicher hinzufügen |
python signer/eth_signer.py --list-keys | Gespeicherte Adressen auflisten |