{"id":37605732,"url":"https://github.com/robertolima-dev/rust_blockchain","last_synced_at":"2026-01-16T10:08:57.482Z","repository":{"id":308881835,"uuid":"1034436667","full_name":"robertolima-dev/rust_blockchain","owner":"robertolima-dev","description":null,"archived":false,"fork":false,"pushed_at":"2025-08-08T11:47:52.000Z","size":19,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-08T13:32:35.582Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/robertolima-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-08T11:42:44.000Z","updated_at":"2025-08-08T11:47:55.000Z","dependencies_parsed_at":"2025-08-08T13:32:37.826Z","dependency_job_id":"bd701828-32c5-473d-be7a-476b07654818","html_url":"https://github.com/robertolima-dev/rust_blockchain","commit_stats":null,"previous_names":["robertolima-dev/rust_blockchain"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/robertolima-dev/rust_blockchain","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertolima-dev%2Frust_blockchain","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertolima-dev%2Frust_blockchain/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertolima-dev%2Frust_blockchain/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertolima-dev%2Frust_blockchain/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robertolima-dev","download_url":"https://codeload.github.com/robertolima-dev/rust_blockchain/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertolima-dev%2Frust_blockchain/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28478049,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T06:30:42.265Z","status":"ssl_error","status_checked_at":"2026-01-16T06:30:16.248Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-16T10:08:57.385Z","updated_at":"2026-01-16T10:08:57.451Z","avatar_url":"https://github.com/robertolima-dev.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Rust Blockchain API 🚀\n\nUma blockchain simplificada escrita em **Rust**, servida por uma **API REST com Actix Web**.\nAtualmente com suporte a:\n\n* Faucet para criar UTXOs de teste\n* Transações assinadas com **ECDSA secp256k1** (modelo UTXO)\n* Validação real de entradas com verificação de assinatura\n* Geração de carteiras (chave privada, chave pública e endereço)\n* Mempool para transações pendentes\n* Mineração com coinbase + mempool\n* Ajuste automático de dificuldade para alvo de \\~60s/bloco\n* Endpoint de estatísticas da rede (`/stats/`)\n* Logging detalhado para debug\n* Estrutura de pastas organizada (`mod.rs` em cada módulo)\n* Endpoints padronizados em `/api/v1/.../` (com barra final)\n\n---\n\n## 📂 Estrutura de Pastas\n\n```\nsrc/\n├── api/\n│   ├── chain.rs        # Endpoints relacionados à blockchain (get, validate, mine, difficulty)\n│   ├── health.rs       # Health check\n│   ├── mod.rs          # Registro das rotas\n│   ├── models.rs       # Modelos de request/response + AppState\n│   ├── stats.rs        # Estatísticas da blockchain\n│   ├── tx.rs           # Faucet, transações e mempool\n│   └── wallet.rs       # Endpoints de geração de carteiras\n├── blockchain/\n│   ├── block.rs        # Estrutura de bloco + PoW\n│   ├── mod.rs          # Módulo principal da blockchain\n│   └── ...\n├── transaction/\n│   ├── model.rs        # Transaction, TxInput, TxOutput\n│   ├── utxo.rs         # UTXO set + OutPoint\n│   └── mod.rs          # Reexporta submódulos\n├── wallet/\n│   └── mod.rs          # Lógica de geração/validação de chaves e assinaturas\n└── main.rs             # Inicializa servidor e AppState\n```\n\n---\n\n## ⚙️ Requisitos\n\n* Rust \u003e= 1.70\n* `cargo` instalado\n\n---\n\n## ▶️ Rodando o Servidor\n\n```bash\n# Clone e entre no diretório do projeto\ngit clone \u003crepo-url\u003e\ncd \u003crepo\u003e\n\n# Instale dependências e rode\ncargo run\n```\n\nOu com script de hot reload:\n\n```bash\n./start_server.sh\n```\n\nCom logs de debug:\n\n```bash\nRUST_LOG=debug,actix_web=info cargo run\n```\n\nServidor sobe por padrão em:\n\n```\nhttp://127.0.0.1:8080\n```\n\n---\n\n## 🌐 Endpoints Disponíveis\n\n### **1. Health Check**\n\n`GET /api/v1/health/`\nVerifica se a API está online.\n\n```bash\ncurl http://127.0.0.1:8080/api/v1/health/\n```\n\n---\n\n### **2. Criar Wallet**\n\n`POST /api/v1/wallet/new/`\nGera chave privada, chave pública e endereço.\n\n**Response:**\n\n```json\n{\n  \"private_key\": \"hex...\",\n  \"public_key\": \"hex...\",\n  \"address\": \"hex...\"\n}\n```\n\n---\n\n### **3. Faucet (DEV)**\n\n`POST /api/v1/faucet/`\nCria um UTXO diretamente para testes.\n\n**Request:**\n\n```json\n{ \"address\": \"hex_pubkey\", \"amount\": 100 }\n```\n\n**Response:**\n\n```json\n{ \"txid\": \"hash...\" }\n```\n\n---\n\n### **4. Nova Transação Assinada**\n\n`POST /api/v1/tx/`\n\n**Request:**\n\n```json\n{\n  \"inputs\": [\n    {\n      \"outpoint\": { \"txid\": \"hash...\", \"vout\": 0 },\n      \"pubkey\": \"hex_pubkey\",\n      \"signature\": \"hex_der_signature\"\n    }\n  ],\n  \"outputs\": [\n    { \"address\": \"hex_pubkey_dest\", \"amount\": 60 },\n    { \"address\": \"hex_pubkey_troco\", \"amount\": 39 }\n  ]\n}\n```\n\n---\n\n### **5. Mempool**\n\n`GET /api/v1/mempool/`\nLista transações pendentes.\n\n---\n\n### **6. Mine**\n\n`POST /api/v1/mine/`\nMina um novo bloco, pagando coinbase + taxas ao minerador.\n\n**Request:**\n\n```json\n{ \"miner_address\": \"hex_pubkey\" }\n```\n\n---\n\n### **7. Balance**\n\n`GET /api/v1/balance/{address}/`\nConsulta saldo e número de UTXOs.\n\n---\n\n### **8. Stats**\n\n`GET /api/v1/stats/`\nMostra altura, dificuldade, tempos de bloco, mempool e tamanho do UTXO.\n\n---\n\n## 🔍 Fluxo Completo de Teste\n\n1. Criar wallet (`/wallet/new/`)\n2. Faucet para endereço gerado\n3. Criar outra wallet (destinatário)\n4. Montar payload assinado e enviar no `/tx/`\n5. Minerar com `/mine/`\n6. Conferir saldos e stats\n\n---\n\n## 📌 Próximos Passos\n\n* Múltiplos mineradores externos\n* Propagação de blocos e transações entre nós\n* Persistência de dados em disco\n* Melhorias no formato de endereço\n\n---\n\n## 📜 Licença\n\nMIT License\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobertolima-dev%2Frust_blockchain","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobertolima-dev%2Frust_blockchain","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobertolima-dev%2Frust_blockchain/lists"}