fiz: correções da pool

This commit is contained in:
Júnior
2025-06-17 18:26:14 -03:00
parent 682027d517
commit 9259f36e9c
31 changed files with 373 additions and 269 deletions

View File

@ -4,13 +4,11 @@ import (
"context"
"dejo_node/internal/api"
"dejo_node/internal/consensus"
"dejo_node/internal/mempool"
"dejo_node/internal/monitor"
"dejo_node/internal/staking"
"dejo_node/internal/state"
"dejo_node/internal/storage"
"dejo_node/internal/transactions"
"fmt"
"log"
"net/http"
"os"
"strings"
@ -22,33 +20,52 @@ func main() {
nodeID := os.Getenv("NODE_ID")
port := os.Getenv("DEJO_PORT")
validators := strings.Split(os.Getenv("DEJO_VALIDATORS"), ",")
peers := strings.Split(os.Getenv("DEJO_PEERS"), ",")
blockStore := storage.NewBlockStore()
blockStore := storage.NewBlockStore("./data/blocks")
stakingStore := staking.NewStakingStore()
mp := mempool.NewMempool()
globalState := state.NewState()
// Heartbeat function
pingPeer := func(peer string) bool {
client := http.Client{Timeout: 2 * time.Second}
resp, err := client.Get(peer + "/health")
if err != nil {
return false
}
defer resp.Body.Close()
return resp.StatusCode == http.StatusOK
// Carregar staking existente se disponível
if err := stakingStore.LoadFromDisk("./data/staking.db"); err != nil {
fmt.Println(" Criando novo staking store")
}
monitor := monitor.NewMonitor(pingPeer)
// Registrar todos os validadores com stake mínimo
minStake := uint64(1000)
validators := strings.Split(os.Getenv("DEJO_VALIDATORS"), ",")
for _, validator := range validators {
if err := stakingStore.Stake(validator, minStake, 1000); err != nil {
panic(err)
}
}
handler := api.NewHandler(blockStore, stakingStore, mp, globalState)
mp := transactions.NewMempool()
handler := api.NewHandler()
handler.SetStores(blockStore, stakingStore, mp)
server := api.NewServer(handler)
go func() {
fmt.Printf("🌐 Servidor HTTP iniciado na porta :%s\n", port)
http.ListenAndServe(":"+port, server)
addr := ":" + port
fmt.Printf("🌐 Iniciando servidor HTTP em %s\n", addr)
// Adicionar pequeno delay para garantir que tudo está inicializado
time.Sleep(100 * time.Millisecond)
// Verificar se o servidor está respondendo
go func() {
time.Sleep(2 * time.Second) // Aumentar tempo de espera
client := http.Client{Timeout: 2 * time.Second}
resp, err := client.Get("http://localhost" + addr + "/ping")
if err != nil || resp == nil || resp.StatusCode != http.StatusOK {
log.Printf("⚠️ Aviso: Servidor HTTP pode não estar respondendo - %v", err)
return // Não encerrar o programa, apenas registrar o aviso
}
resp.Body.Close()
}()
if err := http.ListenAndServe(addr, server); err != nil {
log.Fatalf("❌ Falha ao iniciar servidor HTTP: %v", err)
}
}()
round := consensus.NewRoundState(1)
@ -58,16 +75,16 @@ func main() {
ctx,
nodeID,
round,
transport.Receive,
transport.Broadcast,
700,
blockStore,
func() *transactions.Block {
return &transactions.Block{
Txns: mp.GetTransactions(),
Txns: mp.All(),
}
},
stakingStore,
globalState,
monitor,
1000, // minStake
&consensus.LivenessMonitor{},
)
}