Arquitectura
El protocolo son tres contratos y un transporte entre pares. Todo lo demás es cliente.
Contratos (Base Sepolia, chain 84532)
| Contrato | Dirección |
|---|---|
| WorkerRegistry v0.2 | 0xFbE9FF497dC24bD69d13E4201418938Df7435Ff6 |
| JobEscrow v0.2 | 0x8175df796A659681009BeDa4609a3cFe9d281D82 |
| MockUSDC (solo pruebas) | 0xEb33DFC0424810039337a38510ef522e9E7F9727 |
WorkerRegistry
function register(bytes32 peerId, bytes32 policyHash) external;
function registerWithLocator(bytes32 peerId, bytes32 policyHash, string locator) external;
function advertise(string calldata locator) external;
function selfDeactivate() external;
function isActive(address wallet) external view returns (bool);
function count() external view returns (uint256);
- Una entrada por billetera. Volver a registrarse conserva la fecha original.
advertise()es barato en logs y tiene límite de longitud (MAX_LOCATOR_BYTES = 256).- La desactivación es autoservicio; los operadores también pueden desactivar con un motivo.
JobEscrow
function openSession(address worker, uint128 amount) external returns (uint256 id);
function settle(uint256 id, bytes32 receiptHash, uint128 spend, bytes calldata workerSig) external;
function refund(uint256 id) external;
function claim() external;
settle()verifica la firma del worker sobre el recibo de sesión.- El reparto es 99 / 1 worker / tesorería.
- El escrow no gastado vuelve al usuario con
refund().
Transporte
libp2p sobre TCP/QUIC con Noise y yamux. El peer ID del registro es la identidad que el cliente espera; una discrepancia aborta el handshake.
- DCUtR resuelve la mayor parte del NAT.
- El relay se usa solo cuando no se puede establecer un camino directo, y solo para el handshake. El presupuesto de relay (128 KiB / 2 min) descarta el streaming por esa vía.
- IPv6 está soportado pero es opcional.
Crédito y alcanzabilidad
Los workers tienen una puntuación de crédito derivada del comportamiento. No es un token y no se puede comprar. Dos puertas la usan:
- Puerta de alcanzabilidad: un worker que falla el handshake repetidamente baja de prioridad.
- Puerta de crédito: un worker con mal historial no se muestra por defecto.
Ambas son política del cliente, no estado del contrato, así que un cliente siempre puede ignorarlas.
Commit-challenge
Para evitar que un worker afirme servir un modelo que no ejecuta, el cliente puede pedir un compromiso sobre un desafío aleatorio antes del primer token. Un worker que no lo produce se descarta.
Lo que falta a propósito
- Sin orquestador, sin servidor de cola, sin base de datos de prompts.
- Sin token, sin staking, sin contrato de gobernanza.
- Sin despliegue en mainnet.
- Sin telemetría en la app de escritorio.