
Usando @charmbracelet para criar um navegador Ethereum com estilo
Uma bela carteira Ethereum baseada em terminal e navegador de contratos inteligentes, construída para soberania, segurança e estilo.
━━━━━━━━━━━━━━━━━━━━
domestic system
━━━━━━━━━━━━━━━━━━━━

O Sistema Doméstico é uma interface de usuário de terminal (TUI) projetada para navegar por contas Ethereum (EVM) e contratos inteligentes. Ele reúne três princípios fundamentais que tornam a interação com blockchain baseada em terminal não apenas prática, mas preferível.
Apenas no lado do cliente. Sem servidores centralizados. Só você e o blockchain.
O Sistema Doméstico conecta-se diretamente a endpoints RPC Ethereum de sua escolha. Sem intermediários. Sem análises. Sem rastreamento. Sua interação com o blockchain é direta e sem mediação. É assim que o Web3 deveria funcionar.
Sem gerenciamento de chave privada. Pronto para carteira de hardware.
Suas chaves privadas nunca tocam este aplicativo. Todas as transações são geradas como QR codes seguindo EIP-4527, projetados especificamente para assinatura com dispositivos de carteira de hardware. Veja suas contas, prepare transações e assine-as com segurança em sua carteira de hardware.
Construído com Charm.sh. Interfaces de terminal, lindamente feitas.
Usando o lindo ecossistema Charm.land (Bubble Tea, Lip Gloss, Huh), o Sistema Doméstico prova que CLIs não precisam ser austeras. Cores ricas, interações suaves e design de IU cuidadoso trazem uma estética retro-futurista para a interação com blockchain.
Esses três princípios—soberania, segurança e estética—convergem perfeitamente no terminal. Aplicações de terminal são:
O Sistema Doméstico ocupa uma interseção única de casos de uso de nicho, atendendo aqueles que valorizam controle, segurança e arte.
git clone https://github.com/yourusername/domestic-system.git
cd domestic-system
go build
go run .
O Sistema Doméstico armazena sua configuração em ~/.charm-wallet-config.json.
Adicione endpoints RPC Ethereum na página de configurações 's' ou definindo a variável de ambiente ETH_RPC_URL:
export ETH_RPC_URL="https://eth.llamarpc.com"
go run .
Personalize quais tokens ERC-20 exibir editando a lista de observação de tokens em main.go (configuração de IU em breve).
x a partir de Contas): Gerencie chaves de assinatura, escaneie QR codes EIP-4527 via webcam e assine transaçõesa para adicionar uma nova carteiraA conta ativa (marcada com ★) determina qual carteira é usada para transações. Para alternar contas:
Alternativamente, navegue até a página de Carteiras e pressione Enter em qualquer carteira para ver seus detalhes e ativá-la.
O Sistema Doméstico inclui um fluxo de trabalho completo de assinatura de transações EIP-4527 utilizável tanto dentro da TUI quanto independentemente do terminal.
TUI (any page) → packages unsigned tx → displays EIP-4527 QR code
↓
Signer page scans QR via webcam
↓
Decodes UR → signs with stored key
↓
Displays raw signed transaction hex
As chaves são armazenadas em ~/.charm-wallet-private-keys.json (modo 600, fora do repositório). Na primeira execução, uma chave de demonstração NotForProduction é inicializada automaticamente e seu endereço é registrado em ~/.charm-wallet-config.json.
{
"private_keys": [
{
"address": "0x29c73B201bEE86C4d1Fe4f598C4355Bb210251e3",
"name": "NotForProduction",
"private_key": "0xc0054..."
}
]
}
Pressione x na página de Contas para abrir o Assinante. A partir daí:
A transação assinada (hex bruto, hash da tx, r/s/v) é mostrada imediatamente após a leitura.
signer/eth_signer.py)O assinante Python é executado independentemente sem a TUI. Instale as dependências uma vez:
pip install -r requirements.txt
Toda a saída é JSON. O modo --scan abre uma janela OpenCV mostrando o feed da câmera ao vivo e emite transações assinadas para stdout conforme são detectadas.
cmd/txtest)Exercita o ciclo completo de empacotar → decodificar → assinar usando os módulos Go diretamente:
# Offline (hardcoded test params — no RPC needed)
go run ./cmd/txtest
# With live nonce/gasPrice/chainId from an RPC endpoint
go run ./cmd/txtest --rpc https://eth.llamarpc.com
# Custom recipient and amount
go run ./cmd/txtest --to 0xYourAddr --value 0.5 --chainid 11155111
A saída mostra ambas as etapas claramente:
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 #for http
ssh -N -L 8546:localhost:8546 user@node_machine_ip_address #for ws websocket
Sua aplicação, executando na máquina de aplicação, agora pode acessar o RPC do nó 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 # Entry point — wires Bubble Tea program
├── model.go # App state struct + Init()
├── update.go # All Update() message handlers
├── view.go # Top-level View() dispatch
├── cmd/
│ ├── txtest/ # End-to-end pack → sign test CLI
│ └── v4listener/ # Standalone Uniswap V4 event listener
├── config/ # JSON config load/save, type definitions
├── helpers/ # ENS resolution, address formatting, Uniswap V2/V4
├── rpc/ # Ethereum RPC client, EIP-4527 transaction packaging
├── signer/
│ ├── signer.go # Go package: key management, EIP-4527 decode, ECDSA sign
│ └── eth_signer.py # Standalone Python CLI (same functionality)
├── styles/ # Lip Gloss colors and shared styles
├── views/ # Per-page renderers
│ ├── wallets/
│ ├── details/
│ ├── settings/
│ ├── dapps/
│ ├── uniswap/
│ ├── terra/
│ └── signer/ # Signer page renderer
└── webcam/ # Camera capture and half-block video rendering
# Testes do pacote RPC (requer endpoint RPC)
ETH_RPC_URL="https://eth.llamarpc.com" go test ./rpc -v
# Todos os testes
go test ./... -v
Contribuições são bem-vindas! Este projeto valoriza:
Por favor, abra uma issue antes de iniciar um trabalho importante.
Licença MIT - Consulte o arquivo LICENSE para detalhes
Construído com:
Inspirado pelo ethos da autossuficiência e pela estética da retrocomputação.
O Sistema Doméstico: Seu terminal, suas chaves, seu blockchain.
| Tecla | Ação |
|---|
↑/↓ | Selecionar chave de assinatura |
s | Abrir webcam — assina automaticamente o primeiro QR EIP-4527 detectado |
a | Recarregar chaves do disco |
c | Limpar resultado atual |
Esc | Voltar para Contas |
| Comando | Descrição |
|---|
python signer/eth_signer.py --generate-keys | Gerar um novo par de chaves ECDSA |
python signer/eth_signer.py --derive-address 0x... | Derivar endereço da chave privada |
python signer/eth_signer.py --private-key 0x... --to 0x... --value 1000000000000000000 | Assinar uma transação |
python signer/eth_signer.py --scan | Leitura por webcam: detectar e assinar QR codes EIP-4527 |
python signer/eth_signer.py --add-key --private-key 0x... --name "Wallet" | Adicionar uma chave ao armazenamento |
python signer/eth_signer.py --list-keys | Listar endereços armazenados |