Saltar al contenido principal

Arquitectura

Todo lo que GenKaKu ejecuta en producción es o un sitio estático o un proceso entre pares. Nada en el camino de la petición es un servidor de GenKaKu.

Paquetes​

PaqueteFunción
@genkaku/protocolBindings de la cadena, facturación del escrow, sidecar libp2p, puente de Ollama
@genkaku/dsh-runtimeEl adaptador que comparten ambos plugins
@genkaku/dsh-worker-pluginSirve modelos locales
@genkaku/dsh-user-pluginConsume modelos de la red
@genkaku/seedRelay libp2p y servicio de descubrimiento de pares
@genkaku/adminConsola de operador para el host de la semilla

El núcleo del protocolo no depende de DeepSeek Harness. Es algo deliberado: otro adaptador no debería necesitar tocarlo.

En la cadena​

Base Sepolia, chain ID 84532:

ContratoDirección
WorkerRegistry0xFbE9FF497dC24bD69d13E4201418938Df7435Ff6
JobEscrow0x8175df796A659681009BeDa4609a3cFe9d281D82
MockUSDC (solo pruebas)0xEb33DFC0424810039337a38510ef522e9E7F9727

WorkerRegistry guarda, por billetera: un digest del peer ID, un hash de política bytes32, un localizador opcional y una marca de activo. JobEscrow custodia el USDC por sesión, verifica la firma del recibo del worker, reparte 99/1 y acredita el saldo reclamable del worker. La comisión del 1% es una constante del contrato.

Las escrituras son solo para testnet. Las rutas de mainnet lanzan una excepción: el USDC canónico y una tesorería con multifirma son un lanzamiento aparte, no un interruptor de configuración.

Plano de datos​

Los workers sirven estos protocolos libp2p:

/genkaku/open/0 session open
/genkaku/token/0 auth token
/genkaku/receipt/0 signed ledger increments
/genkaku/settle/0 co-sign a settlement
/genkaku/offers/0 offer board
/genkaku/policy/0 policy document
/genkaku/hello/0 identity, wallet proof, quote

Cada manejador acepta una conexión retransmitida (runOnLimitedConnection). Por tanto, una sesión es o directa o transportada por el relay, y ambas son de primera clase. libp2p cifra el flujo, así que el relay reenvía texto cifrado y solo ve metadatos.

En esta versión no hay DCUtR ni atravesamiento de NAT. Un par detrás de un NAT simétrico usa el relay o no es alcanzable.

Descubrimiento​

Dos caminos independientes:

  1. Directorio en la cadena: los eventos de WorkerRegistry dan la billetera, el digest del peer ID y el localizador opcional. Los plugins leen los logs a través de un RPC público con una lista fallback (base-sepolia.gateway.tenderly.co primero, sepolia.base.org al final porque limita eth_getLogs a 200 bloques).
  2. Relay semilla: https://staging.genkaku.app/seed responde a GET /peers con las multiaddrs que son válidas en este momento, y ofrece un circuit relay para los pares que no pueden conectarse directamente.

La dirección de la semilla está fijada en el paquete del protocolo, pero se puede sobrescribir con GENKAKU_BOOTSTRAP_SEEDS (multiaddrs separadas por comas).

Modelo de facturación​

pricePerHour : 6-decimal USDC, set by the worker
unit : 1 minute (60 units per hour)
billed : ceil(elapsed / 1min) × ceil(pricePerHour / 60)

El redondeo ocurre una vez por hora, nunca por tick, así que el usuario nunca paga más que la tarifa por hora cotizada y la exposición no facturada del worker es como mucho de un minuto.

Una sesión de pago son dos transacciones:

  1. openEscrow(worker, pricePerHour) — usuario → JobEscrow,
  2. settle(...) — JobEscrow → worker (99%) + tesorería (1%), con el resto reembolsado.

Una tarifa de 0 se sirve sin ningún escrow, y por eso un worker gratuito puede funcionar en una máquina sin nada de ETH.

Superficies de operación​

  • Panel: la interfaz propia del plugin en DeepSeek Harness: modelos, precio, billetera, reclamación, pagos, workers manuales.
  • Servidor de estado: una superficie HTTP local en 127.0.0.1, primer puerto libre en 47821–47826, usada por el panel y por el adaptador del cliente.
  • Administración de la semilla: una consola aparte en la VM de la semilla, detrás de Caddy en /admin, que lee estadísticas de la semilla y logs de la cadena. No guarda claves de billetera ni mueve dinero.

Lo que falta a propósito​

  • Sin token, sin staking, sin token de puntuación de crédito.
  • Sin servidor de orquestación, sin base de datos de prompts.
  • Sin filtro de contenido automático: el protocolo no tiene ningún hook que inspeccione un prompt antes de que lo vea un worker.
  • Sin ruta de escritura en mainnet.