Problem
Portal currently owns both relay semantics and the transport used to discover relays. The existing overlay path uses WireGuard peers plus Portal-specific synchronization, while HTTPS bootstrap/announce remains the fallback.
As discovery grows, Portal risks reimplementing more P2P routing and peer-discovery machinery that IVNP/I2P already provides.
Proposal
Add an optional IVNP-backed discovery transport behind the existing OverlayRuntime boundary.
type OverlayRuntime interface {
DiscoverRelay(context.Context, types.RelayDescriptor) (types.DiscoveryResponse, error)
Sync([]types.RelayDescriptor) error
}
The IVNP implementation should use I2P only to reach another Portal relay and exchange the existing Portal DiscoveryResponse. Portal must continue to own relay admission, descriptor signatures, expiry/rollback checks, health state, and MOLS ranking.
Conceptually:
RelayDescriptor
↓
IVNP / I2P StreamNetwork
↓
Portal discovery exchange
↓
DiscoveryResponse
↓
RelaySet admission
↓
MOLS ranking
Scope
- Add an I2P destination/address field to relay discovery metadata if needed.
- Implement an IVNP-backed
OverlayRuntime using IVNP StreamNetwork / DialI2P.
- Keep
RelayDescriptor and DiscoveryResponse as Portal-owned contracts.
- Keep HTTPS discovery as bootstrap/recovery while the IVNP path is optional.
- Do not move Portal descriptors into I2P
RouterInfo/LeaseSet fields or use NetDB as an arbitrary Portal KV store.
- Do not replace the tenant data plane or multi-hop transport in this issue.
- Do not treat I2P identity as Portal relay admission or Sybil resistance.
Important semantics
Discovery latency over I2P is not equivalent to clearnet relay ingress latency. The IVNP path should therefore not feed I2P round-trip time into the existing relay-performance score used by MOLS. Discovery transport latency and relay ingress/health measurements should stay separate.
The current 30-second polling model should also not be copied mechanically onto I2P. Prefer cached descriptors with refresh driven by expiry/topology changes or a substantially slower IVNP discovery cadence.
Why
This keeps the responsibility split clean:
IVNP / I2P:
peer discovery
routing
overlay reachability
NAT-independent connectivity
Portal:
relay identity and descriptor semantics
admission and rollback protection
health checks
selection and MOLS ranking
public ingress/data plane
This should let Portal reuse a mature anonymous overlay substrate without turning the Portal discovery layer itself into a second general-purpose P2P routing system.
Related project: https://github.com/gosuda/IVNP
Problem
Portal currently owns both relay semantics and the transport used to discover relays. The existing overlay path uses WireGuard peers plus Portal-specific synchronization, while HTTPS bootstrap/announce remains the fallback.
As discovery grows, Portal risks reimplementing more P2P routing and peer-discovery machinery that IVNP/I2P already provides.
Proposal
Add an optional IVNP-backed discovery transport behind the existing
OverlayRuntimeboundary.The IVNP implementation should use I2P only to reach another Portal relay and exchange the existing Portal
DiscoveryResponse. Portal must continue to own relay admission, descriptor signatures, expiry/rollback checks, health state, and MOLS ranking.Conceptually:
Scope
OverlayRuntimeusing IVNPStreamNetwork/DialI2P.RelayDescriptorandDiscoveryResponseas Portal-owned contracts.RouterInfo/LeaseSetfields or use NetDB as an arbitrary Portal KV store.Important semantics
Discovery latency over I2P is not equivalent to clearnet relay ingress latency. The IVNP path should therefore not feed I2P round-trip time into the existing relay-performance score used by MOLS. Discovery transport latency and relay ingress/health measurements should stay separate.
The current 30-second polling model should also not be copied mechanically onto I2P. Prefer cached descriptors with refresh driven by expiry/topology changes or a substantially slower IVNP discovery cadence.
Why
This keeps the responsibility split clean:
This should let Portal reuse a mature anonymous overlay substrate without turning the Portal discovery layer itself into a second general-purpose P2P routing system.
Related project: https://github.com/gosuda/IVNP