
Utilizzando @charmbracelet per creare un browser Ethereum con stile
Un wallet Ethereum bello, basato su terminale e browser di smart contract costruito per sovranità, sicurezza e stile.
━━━━━━━━━━━━━━━━━━━━
domestic system
━━━━━━━━━━━━━━━━━━━━

Il Sistema Domestico è un'interfaccia utente a terminale (TUI) progettata per navigare account e smart contract di Ethereum (EVM). Riunisce tre principi fondamentali che rendono l'interazione con la blockchain da terminale non solo pratica, ma preferibile.
Solo lato client. Nessun server centralizzato. Solo tu e la blockchain.
Il Sistema Domestico si connette direttamente agli endpoint RPC di Ethereum che scegli. Nessun intermediario. Nessuna analisi. Nessun tracciamento. La tua interazione con la blockchain è diretta e senza mediazioni. È così che Web3 doveva funzionare.
Nessuna gestione di chiavi private. Pronto per hardware wallet.
Le tue chiavi private non toccano mai questa applicazione. Tutte le transazioni sono generate come codici QR seguendo EIP-4527, progettato specificamente per la firma con dispositivi hardware wallet. Visualizza i tuoi account, prepara le transazioni e firmale in sicurezza sul tuo hardware wallet.
Costruito con Charm.sh. Interfacce da terminale, splendidamente realizzate.
Utilizzando il magnifico ecosistema Charm.land (Bubble Tea, Lip Gloss, Huh), Il Sistema Domestico dimostra che le CLI non devono essere austere. Colori ricchi, interazioni fluide e un design UI ponderato portano un'estetica retrò-futuristica all'interazione con la blockchain.
Questi tre principi—sovranità, sicurezza ed estetica—convergono perfettamente nel terminale. Le applicazioni da terminale sono:
Il Sistema Domestico occupa un'intersezione unica di casi d'uso di nicchia, servendo coloro che apprezzano controllo, sicurezza e artigianalità.
git clone https://github.com/yourusername/domestic-system.git
cd domestic-system
go build
go run .
Il Sistema Domestico memorizza la sua configurazione in ~/.charm-wallet-config.json.
Aggiungi endpoint RPC Ethereum nella pagina delle impostazioni "s" oppure impostando la variabile d'ambiente ETH_RPC_URL:
export ETH_RPC_URL="https://eth.llamarpc.com"
go run .
Personalizza quali token ERC-20 visualizzare modificando la watchlist token in main.go (la configurazione UI sarà presto disponibile).
x dalla pagina Account): Gestisci le chiavi di firma, scansiona i codici QR EIP-4527 tramite webcam e firma le transazionia per aggiungere un nuovo walletL'account attivo (contrassegnato con ★) determina quale wallet viene utilizzato per le transazioni. Per cambiare account:
In alternativa, naviga alla pagina Wallets e premi Invio su qualsiasi wallet per visualizzarne i dettagli e attivarlo.
Il Sistema Domestico include un flusso di lavoro completo per la firma di transazioni EIP-4527 utilizzabile sia all'interno della TUI che indipendentemente dal terminale.
TUI (qualsiasi pagina) → impacchetta tx non firmata → mostra codice QR EIP-4527
↓
Pagina Firmatario scansiona QR tramite webcam
↓
Decodifica UR → firma con chiave memorizzata
↓
Mostra hex della transazione firmata non elaborata
Le chiavi sono memorizzate in ~/.charm-wallet-private-keys.json (modalità 600, al di fuori del repository). Al primo avvio, una chiave demo NotForProduction viene avviata automaticamente e il suo indirizzo viene registrato in ~/.charm-wallet-config.json.
{
"private_keys": [
{
"address": "0x29c73B201bEE86C4d1Fe4f598C4355Bb210251e3",
"name": "NotForProduction",
"private_key": "0xc0054..."
}
]
}
Premi x dalla pagina Account per aprire il Firmatario. Da lì:
La transazione firmata (hex non elaborato, hash tx, r/s/v) viene mostrata immediatamente dopo la scansione.
signer/eth_signer.py)Il firmatario Python funziona in modo indipendente senza la TUI. Installa le dipendenze una volta:
pip install -r requirements.txt
Tutto l'output è JSON. La modalità --scan apre una finestra OpenCV che mostra il feed live della telecamera ed emette le transazioni firmate su stdout man mano che vengono rilevate.
cmd/txtest)Esegue il round-trip completo di impacchettamento → decodifica → firma utilizzando direttamente i moduli Go:
# Offline (parametri di test hardcoded — nessun RPC necessario)
go run ./cmd/txtest
# Con nonce/gasPrice/chainId live da un endpoint RPC
go run ./cmd/txtest --rpc https://eth.llamarpc.com
# Destinatario e importo personalizzati
go run ./cmd/txtest --to 0xYourAddr --value 0.5 --chainid 11155111
L'output mostra chiaramente entrambi i passaggi:
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 #per http
ssh -N -L 8546:localhost:8546 user@node_machine_ip_address #per ws websocket
La tua applicazione, in esecuzione sulla macchina applicativa, può ora accedere all'RPC del nodo Ethereum tramite 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 \ #o ws://mainnet.infura.io/ws/v3/YOUR_KEY
-poolmanager 0x000000000004444c5dc75cB358380D2e3dE08A90
-from 21688000
domestic-system/
├── main.go # Punto di ingresso — programma Bubble Tea
├── model.go # Struttura stato app + Init()
├── update.go # Tutti i gestori messaggi Update()
├── view.go # Dispatch View() di alto livello
├── cmd/
│ ├── txtest/ # Test CLI end-to-end di impacchettamento → firma
│ └── v4listener/ # Listener eventi Uniswap V4 standalone
├── config/ # Caricamento/salvataggio configurazione JSON, definizioni tipi
├── helpers/ # Risoluzione ENS, formattazione indirizzi, Uniswap V2/V4
├── rpc/ # Client RPC Ethereum, impacchettamento transazioni EIP-4527
├── signer/
│ ├── signer.go # Pacchetto Go: gestione chiavi, decodifica EIP-4527, firma ECDSA
│ └── eth_signer.py # CLI Python standalone (stessa funzionalità)
├── styles/ # Colori Lip Gloss e stili condivisi
├── views/ # Renderer per pagina
│ ├── wallets/
│ ├── details/
│ ├── settings/
│ ├── dapps/
│ ├── uniswap/
│ ├── terra/
│ └── signer/ # Renderer pagina Firmatario
└── webcam/ # Acquisizione fotocamera e rendering video a mezzo blocco
# Test pacchetto RPC (richiede endpoint RPC)
ETH_RPC_URL="https://eth.llamarpc.com" go test ./rpc -v
# Tutti i test
go test ./... -v
I contributi sono benvenuti! Questo progetto valorizza:
Apri un issue prima di iniziare lavori importanti.
Licenza MIT - Vedi file LICENSE per i dettagli
Costruito con:
Ispirato dall'etica dell'autosovranità e dall'estetica del retrocomputing.
Il Sistema Domestico: Il tuo terminale, le tue chiavi, la tua blockchain.
| Tasto | Azione |
|---|
↑/↓ | Seleziona chiave di firma |
s | Apri webcam — firma automaticamente il primo QR EIP-4527 rilevato |
a | Ricarica le chiavi dal disco |
c | Cancella il risultato corrente |
Esc | Torna agli Account |
| Comando | Descrizione |
|---|
python signer/eth_signer.py --generate-keys | Genera una nuova coppia di chiavi ECDSA |
python signer/eth_signer.py --derive-address 0x... | Deriva l'indirizzo dalla chiave privata |
python signer/eth_signer.py --private-key 0x... --to 0x... --value 1000000000000000000 | Firma una transazione |
python signer/eth_signer.py --scan | Scansione webcam: rileva e firma codici QR EIP-4527 |
python signer/eth_signer.py --add-key --private-key 0x... --name "Wallet" | Aggiungi una chiave al deposito |
python signer/eth_signer.py --list-keys | Elenca gli indirizzi memorizzati |