Claves de agente
Registro y administración de claves de agente, en tres operaciones.
Un agente es un par de claves derivado de Ethereum que puede firmar solicitudes de trading en tu nombre sin exponer tu billetera principal. Registras la dirección del agente una vez, con la autorización de una firma de la billetera propietaria. A partir de ahí, la clave de agente tiene la autoridad para operar, y la clave de la billetera queda fuera de línea.
Ninguna operación de esta sección requiere token de sesión. Una firma EIP-712 en el cuerpo de la solicitud autoriza el registro dentro de la propia solicitud, así que no necesita ninguna credencial. Las dos operaciones de administración (GET /agents, DELETE /agents/{address}) se autentican con tu clave de API HMAC.
POST /agents/register
Firma EIP-712 en el cuerpo de la solicitud. Sin token de sesión ni clave de API.
GET /agents
hmacAuth
DELETE /agents/{address}
hmacAuth
URL base de todos los ejemplos de abajo: https://api.testnet.nexus.xyz/v1, la base pública de testnet.
El payload EIP-712
Una firma de datos tipados de la billetera que será propietaria del agente autoriza el registro.
Dominio
{
"name": "Nexus Exchange",
"version": "1",
"chainId": "<testnet chain id>",
"salt": "<network salt, see below>"
}Tipo
RegisterAgent {
address agent
uint64 expiresAt
uint64 nonce
}Detalles que importan:
La firma cubre tres campos:
agent,expiresAtynonce. Lawalletpropietaria no forma parte de los datos tipados. La envías aparte en el cuerpo de la solicitud, y el servidor verifica que el firmante recuperado coincida con ella.Los nombres de los campos de los datos tipados están en camelCase (
expiresAt), mientras que el cuerpo JSON de la solicitud usa snake_case (expires_at). Firma los nombres en camelCase; envía los de snake_case.Si dejas que el servidor asigne el valor predeterminado de
expires_at, no tienes nada que firmar. Calcula tú mismo el vencimiento, fírmalo y envíalo de forma explícita.El contrato escribe el
chainIddel dominio como el marcador<testnet chain id>y no fija un valor. El despliegue es la fuente de referencia de su chain id: léelo del propioGET /metadatade ese gateway (consulta Redes). Confirma el valor que espera tu gateway de destino antes de firmar, ya que un dominio que no coincide producesigner_mismatch, no un error descriptivo.El dominio también lleva un
salt:keccak256(<network>), donde<network>es el nombre del despliegue en minúsculas ("mainnet","testnet"o"local") del gateway para el que firmas. Esto limita una firmaRegisterAgenta un solo despliegue. La misma firma no es válida en otra red aunque elchainIdcoincidiera. Consulta el valor del salt para tu despliegue de destino en lugar de recalcularlo, ya que unsaltincorrecto producesigner_mismatchsin ninguna otra señal.
POST /agents/register
Registrar una clave de agente.
Registra una nueva clave de agente para tu billetera. Un agente es un par de claves derivado de Ethereum que puede firmar solicitudes de trading en tu nombre sin exponer tu billetera principal. Una firma EIP-712 de la billetera que será propietaria del agente autoriza el registro. No se requiere token de sesión.
Dominio EIP-712: { name: 'Nexus Exchange', version: '1', chainId: <testnet chain id>, salt: <network salt> }. Tipo de los datos tipados: RegisterAgent { address agent, uint64 expiresAt, uint64 nonce }.
Autenticación: ninguna. La solicitud se autoriza a sí misma con la firma EIP-712 que lleva.
Cuerpo de la solicitud
AgentRegistrationRequest, application/json, obligatorio.
wallet
string
Sí
Dirección de la billetera propietaria (con prefijo 0x, 20 bytes)
agent
string
Sí
Dirección de Ethereum del agente (con prefijo 0x, 20 bytes) derivada del par de claves del agente
expires_at
integer (int64)
No
Vencimiento en ms Unix. Opcional, el valor predeterminado es ahora+30 d. Debe estar en [now+1d, now+90d].
nonce
integer (int64)
Sí
Nonce monotónico. Usa la marca de tiempo Unix actual en ms como valor inicial seguro.
signature
string
Sí
Firma EIP-712 sobre RegisterAgent{agent, expiresAt, nonce} con la clave privada de la billetera (con prefijo 0x)
label
string
No
Etiqueta opcional legible por humanos para el agente (p. ej. my-bot)
Respuestas
200
Agente registrado. El contrato da un ejemplo para esta respuesta, pero ningún esquema con nombre.
agent_address
string
La dirección del agente registrado (con prefijo 0x)
expires_at
integer (int64)
Vencimiento efectivo, en ms Unix. El valor que enviaste, o el predeterminado del servidor si lo omitiste
400
Solicitud incorrecta: bad_wallet, bad_agent, expiry_out_of_range ([1 d, 90 d] desde ahora) o invalid_json.
401
signature_invalid o signer_mismatch. El firmante recuperado de la firma EIP-712 no corresponde a la billetera indicada.
409
duplicate_agent. La dirección del agente ya está registrada para esta billetera.
Ejemplo
Respuesta:
GET /agents
Listar tus agentes.
Devuelve todas las claves de agente no vencidas registradas para la billetera autenticada. El servidor filtra los agentes vencidos, así que un agente que desaparece de esta lista llegó al final de su ciclo de vida. No es un error.
Autenticación: hmacAuth (clave de API HMAC).
Respuestas
200
Arreglo de registros de agentes. Los elementos son AgentInfo.
address
string
Dirección del agente (con prefijo 0x)
expiresAt
integer (int64)
Vencimiento, en ms Unix
registeredAt
integer (int64)
Hora de registro, en ms Unix
label
string | null
Etiqueta opcional
Aquí los nombres de los campos de la respuesta están en camelCase, a diferencia del cuerpo de la solicitud de registro en snake_case.
401
Se requiere autenticación HMAC.
Ejemplo
Respuesta:
Consulta Autenticación para ver cómo construir X-Timestamp y X-Signature.
DELETE /agents/{address}
Revocar un agente.
Revoca de inmediato una clave de agente. Una vez que esta llamada responde, el servidor rechaza cualquier solicitud en curso firmada por el agente revocado.
Autenticación: hmacAuth (clave de API HMAC).
Parámetros
address
path
string
Sí
Dirección del agente que se revocará (con prefijo 0x)
Respuestas
200
Agente revocado.
401
Se requiere autenticación HMAC.
404
Agente no encontrado o que no te pertenece. Las fallas de propiedad devuelven 404, no 403, para que no puedas sondear los agentes de otras billeteras.
Ejemplo
Notas operativas
El vencimiento está acotado. Un agente debe vencer entre 1 y 90 días después del registro, y omitir
expires_atte da 30 días. No hay una operación de renovación a la fecha de la especificación 0.9.90, así que vuelve a registrar un agente nuevo antes de que venza el anterior.Los nonces son monotónicos por billetera. Usar como nonce la marca de tiempo Unix actual en milisegundos cumple ese orden sin tener que llevar un estado.
La revocación es inmediata, y se aplica a las solicitudes en curso. El servidor rechaza una solicitud firmada por un agente revocado una vez que el
DELETEresponde.El registro no está autenticado en la capa de transporte. Cualquiera puede enviar un registro, pero el servidor solo acepta una firma EIP-712 válida de la billetera indicada. Protege la clave de la billetera, porque una firma sobre
RegisterAgentotorga autoridad para operar durante hasta 90 días.
Estado: versión preliminar de testnet. Los registros de agentes todavía no sobreviven a los reinicios del gateway, así que trátalos como recreables, igual que las claves de API.
Última actualización

