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
| Paquete | Función |
|---|---|
@genkaku/protocol | Bindings de la cadena, facturación del escrow, sidecar libp2p, puente de Ollama |
@genkaku/dsh-runtime | El adaptador que comparten ambos plugins |
@genkaku/dsh-worker-plugin | Sirve modelos locales |
@genkaku/dsh-user-plugin | Consume modelos de la red |
@genkaku/seed | Relay libp2p y servicio de descubrimiento de pares |
@genkaku/admin | Consola 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:
| Contrato | Dirección |
|---|---|
| WorkerRegistry | 0xFbE9FF497dC24bD69d13E4201418938Df7435Ff6 |
| JobEscrow | 0x8175df796A659681009BeDa4609a3cFe9d281D82 |
| 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:
- Directorio en la cadena: los eventos de
WorkerRegistrydan 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 listafallback(base-sepolia.gateway.tenderly.coprimero,sepolia.base.orgal final porque limitaeth_getLogsa 200 bloques). - Relay semilla:
https://staging.genkaku.app/seedresponde aGET /peerscon 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:
openEscrow(worker, pricePerHour)— usuario → JobEscrow,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.