network

package
v0.0.0-...-83493aa Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 5, 2026 License: MIT Imports: 22 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var BootstrapNodes = []string{}

BootstrapNodes son los nodos semilla de Nucleus (requieren VPS público)

View Source
var IPFSBootstrapNodes = []string{
	"/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN",
	"/dnsaddr/bootstrap.libp2p.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa",
	"/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb",
	"/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt",
}

IPFSBootstrapNodes son nodos públicos de IPFS que permiten que la DHT funcione

Functions

func MinConsensusPeers

func MinConsensusPeers() int

MinConsensusPeers devuelve el número mínimo de peers para consenso

Types

type BinaryEntry

type BinaryEntry struct {
	Hash        string    `json:"hash"`
	Name        string    `json:"name"`
	Version     string    `json:"version"`
	FilePath    string    `json:"file_path"`
	Size        int64     `json:"size"`
	PeerID      string    `json:"peer_id"`
	AnnouncedAt time.Time `json:"announced_at"`
}

type BinaryQueryRequest

type BinaryQueryRequest struct {
	Hash string `json:"hash"`
	Name string `json:"name"`
}

type BinaryQueryResponse

type BinaryQueryResponse struct {
	Found  bool         `json:"found"`
	Entry  *BinaryEntry `json:"entry,omitempty"`
	PeerID string       `json:"peer_id,omitempty"`
}

type BinaryRegistry

type BinaryRegistry struct {
	// contains filtered or unexported fields
}

func NewBinaryRegistry

func NewBinaryRegistry(node *Node, storageDir string) *BinaryRegistry

func (*BinaryRegistry) CacheEntry

func (br *BinaryRegistry) CacheEntry(entry *BinaryEntry)

func (*BinaryRegistry) GetBinary

func (br *BinaryRegistry) GetBinary(hash string) (*BinaryEntry, error)

func (*BinaryRegistry) RegisterBinary

func (br *BinaryRegistry) RegisterBinary(hash, name, version, filePath string) error

func (*BinaryRegistry) ScanAndAnnounce

func (br *BinaryRegistry) ScanAndAnnounce()

func (*BinaryRegistry) ScanBinDirectory

func (br *BinaryRegistry) ScanBinDirectory(binDir string)

func (*BinaryRegistry) StartAutoAnnounce

func (br *BinaryRegistry) StartAutoAnnounce()

type Config

type Config struct {
	ListenPort    int
	BootstrapAddr []string
	DataDir       string
}

Config contiene la configuración del nodo P2P

func DefaultConfig

func DefaultConfig() *Config

DefaultConfig devuelve la configuración por defecto

type ConsensusValidator

type ConsensusValidator struct {
	// contains filtered or unexported fields
}

ConsensusValidator maneja la verificación de consenso de binarios

func NewConsensusValidator

func NewConsensusValidator(node *Node) *ConsensusValidator

NewConsensusValidator crea un nuevo validador de consenso

func (*ConsensusValidator) PublishChecksum

func (cv *ConsensusValidator) PublishChecksum(hash string, checksum string) error

PublishChecksum publica el checksum de un paquete en la DHT

func (*ConsensusValidator) VerifyBeforeDownload

func (cv *ConsensusValidator) VerifyBeforeDownload(hash string) (*PackageVerification, error)

VerifyBeforeDownload verifica el consenso antes de descargar un paquete

func (*ConsensusValidator) VerifyPackage

func (cv *ConsensusValidator) VerifyPackage(hash string, localFilePath string) (*PackageVerification, error)

VerifyPackage consulta a múltiples peers y verifica que el binario sea idéntico

func (*ConsensusValidator) WaitForConsensus

func (cv *ConsensusValidator) WaitForConsensus(hash string, maxWait time.Duration) (*PackageVerification, error)

WaitForConsensus espera hasta que se alcance consenso para un paquete

type HealthChecker

type HealthChecker struct {
	// contains filtered or unexported fields
}

HealthChecker monitorea la salud del nodo P2P

func NewHealthChecker

func NewHealthChecker(node *Node) *HealthChecker

NewHealthChecker crea un nuevo health checker

func (*HealthChecker) GetStatus

func (hc *HealthChecker) GetStatus() HealthStatus

GetStatus devuelve el estado actual del nodo

func (*HealthChecker) MonitorPeriodic

func (hc *HealthChecker) MonitorPeriodic(interval time.Duration, handler func(HealthStatus))

MonitorPeriodic ejecuta chequeos periódicos de salud

func (*HealthChecker) WaitForHealthy

func (hc *HealthChecker) WaitForHealthy(timeout time.Duration) error

WaitForHealthy espera hasta que el nodo esté saludable

type HealthStatus

type HealthStatus struct {
	NodeID      string    `json:"node_id"`
	ListenAddr  string    `json:"listen_addr"`
	PeerCount   int       `json:"peer_count"`
	DHTReady    bool      `json:"dht_ready"`
	PubSubReady bool      `json:"pubsub_ready"`
	Uptime      string    `json:"uptime"`
	Timestamp   time.Time `json:"timestamp"`
}

HealthStatus contiene el estado del nodo

type MessageHandler

type MessageHandler func(msg NetworkMessage)

MessageHandler es una función para manejar mensajes entrantes

type MessageType

type MessageType string

MessageType define el tipo de mensaje en la red

const (
	MessagePackageAvailable MessageType = "package_available"
	MessagePackageUpdate    MessageType = "package_update"
	MessageSeedAnnounce     MessageType = "seed_announce"
	MessagePeerDiscovery    MessageType = "peer_discovery"
)

type NetworkMessage

type NetworkMessage struct {
	Type      MessageType `json:"type"`
	Payload   interface{} `json:"payload"`
	SenderID  string      `json:"sender_id"`
	Timestamp time.Time   `json:"timestamp"`
}

NetworkMessage es el formato estándar de mensajes en la red Nucleus

type Node

type Node struct {
	Host      host.Host
	DHT       *dht.IpfsDHT
	PubSub    *pubsub.PubSub
	Topic     *pubsub.Topic
	Sub       *pubsub.Subscription
	Datastore datastore.Batching
	MDNS      mdns.Service
}

Node representa un nodo en la red P2P de Nucleus

func NewNode

func NewNode(cfg *Config) (*Node, error)

NewNode crea un nuevo nodo P2P de Nucleus

func (*Node) AnnounceSeed

func (n *Node) AnnounceSeed(hash string, name string, version string, size int64) error

AnnounceSeed notifica a la red que este nodo tiene un binario

func (*Node) BroadcastPackageAvailable

func (n *Node) BroadcastPackageAvailable(hash, name, version string, size int64) error

BroadcastPackageAvailable anuncia que un paquete está disponible

func (*Node) BroadcastSeedAnnounce

func (n *Node) BroadcastSeedAnnounce(hash, name, version string) error

BroadcastSeedAnnounce anuncia que este nodo está seedeando un paquete

func (*Node) Close

func (n *Node) Close() error

Close cierra el nodo y libera recursos

func (*Node) DownloadPackage

func (n *Node) DownloadPackage(peerID string, hash string, name string, destPath string) error

DownloadPackage descarga un binario desde un peer remoto

func (*Node) FindPackage

func (n *Node) FindPackage(hash string) (*PackageInfo, error)

FindPackage busca un paquete en la DHT por su hash

func (*Node) GetPeers

func (n *Node) GetPeers() []peer.ID

GetPeers devuelve la lista de peers conectados

func (*Node) PeerCount

func (n *Node) PeerCount() int

PeerCount devuelve el número de peers conectados

func (*Node) Publish

func (n *Node) Publish(message []byte) error

Publish publica un mensaje en la red P2P

func (*Node) PublishPackage

func (n *Node) PublishPackage(pkg PackageInfo) error

PublishPackage anuncia un paquete en la DHT

func (*Node) SearchPackageWithPeers

func (n *Node) SearchPackageWithPeers(hash string) (*PackageInfo, []PeerInfo, error)

SearchPackageWithPeers busca un paquete y devuelve información de peers que lo tienen

func (*Node) SeedPackage

func (n *Node) SeedPackage(hash string, filePath string) error

SeedPackage hace que un archivo esté disponible para descarga por otros peers

func (*Node) SetupTransferProtocol

func (n *Node) SetupTransferProtocol(storageDir string)

SetupTransferProtocol configura el protocolo de transferencia en el host

func (*Node) StartMessageListener

func (n *Node) StartMessageListener(handler MessageHandler)

StartMessageListener comienza a escuchar mensajes de la red

func (*Node) WaitForPeers

func (n *Node) WaitForPeers(minPeers int, timeout time.Duration) bool

WaitForPeers espera hasta que haya al menos N peers conectados

type PackageAvailablePayload

type PackageAvailablePayload struct {
	Hash    string `json:"hash"`
	Name    string `json:"name"`
	Version string `json:"version"`
	Size    int64  `json:"size"`
}

PackageAvailablePayload se envía cuando un paquete está disponible en la red

type PackageInfo

type PackageInfo struct {
	Hash      string    `json:"hash"`
	Name      string    `json:"name"`
	Version   string    `json:"version"`
	Size      int64     `json:"size"`
	SeedCount int       `json:"seed_count"`
	Timestamp time.Time `json:"timestamp"`
}

PackageInfo contiene información sobre un paquete disponible en la red

type PackageVerification

type PackageVerification struct {
	Hash          string         `json:"hash"`
	Checksum      string         `json:"checksum"`
	PeerCount     int            `json:"peer_count"`
	Consensus     bool           `json:"consensus"`
	PeerChecksums []PeerChecksum `json:"peer_checksums"`
	Timestamp     time.Time      `json:"timestamp"`
}

PackageVerification contiene el resultado de la verificación

type PeerChecksum

type PeerChecksum struct {
	PeerID   string `json:"peer_id"`
	Checksum string `json:"checksum"`
}

PeerChecksum contiene el checksum reportado por un peer

type PeerInfo

type PeerInfo struct {
	PeerID  string `json:"peer_id"`
	Address string `json:"address"`
}

PeerInfo contiene información sobre un peer que tiene un paquete

type SeedAnnouncePayload

type SeedAnnouncePayload struct {
	Hash    string `json:"hash"`
	Name    string `json:"name"`
	Version string `json:"version"`
	PeerID  string `json:"peer_id"`
}

SeedAnnouncePayload se envía cuando un nodo comienza a seedear un paquete

type TransferMetadata

type TransferMetadata struct {
	Hash     string `json:"hash"`
	Name     string `json:"name"`
	Size     int64  `json:"size"`
	Chunks   int    `json:"chunks"`
	Checksum string `json:"checksum"`
}

TransferMetadata contiene metadata sobre el archivo que se transfiere

type TransferProgress

type TransferProgress struct {
	CurrentChunk     int
	TotalChunks      int
	BytesTransferred int64
	TotalBytes       int64
}

TransferProgress representa el progreso de una transferencia

type TransferRequest

type TransferRequest struct {
	Hash string `json:"hash"`
	Name string `json:"name"`
}

TransferRequest es la solicitud inicial para descargar un binario

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL