에이전트 키
세 가지 작업으로 이루어진 에이전트 키 등록 및 관리.
에이전트는 메인 지갑을 노출하지 않고 사용자를 대신해 거래 요청에 서명할 수 있는 Ethereum 기반 키 쌍입니다. 에이전트의 주소는 소유 지갑의 서명으로 승인받아 한 번 등록합니다. 그 이후에는 에이전트 키가 거래 권한을 가지며, 지갑 키는 오프라인에 둡니다.
이 섹션의 어떤 작업에도 세션 토큰이 필요하지 않습니다. 요청 본문에 담긴 EIP-712 서명이 등록을 요청 안에서(in-band) 승인하므로, 등록에는 자격 증명이 전혀 필요하지 않습니다. 두 가지 관리 작업(GET /agents, DELETE /agents/{address})은 HMAC API 키로 인증합니다.
POST /agents/register
요청 본문의 EIP-712 서명. 세션 토큰도, API 키도 필요하지 않습니다.
GET /agents
hmacAuth
DELETE /agents/{address}
hmacAuth
아래 모든 예시의 기본 URL은 퍼블릭 테스트넷 기본 경로인 https://api.testnet.nexus.xyz/v1입니다.
EIP-712 페이로드
에이전트를 소유할 지갑의 타입 데이터(typed-data) 서명이 등록을 승인합니다.
도메인
{
"name": "Nexus Exchange",
"version": "1",
"chainId": "<testnet chain id>",
"salt": "<network salt, see below>"
}타입
RegisterAgent {
address agent
uint64 expiresAt
uint64 nonce
}중요한 세부 사항:
서명은
agent,expiresAt,nonce의 세 개 필드를 대상으로 합니다. 소유wallet은 타입 데이터에 포함되지 않습니다. 지갑 주소는 요청 본문에 함께 보내며, 서버는 복원된 서명자가 이 주소와 일치하는지 확인합니다.타입 데이터 필드 이름은 camelCase(
expiresAt)이고, JSON 요청 본문은 snake_case(expires_at)를 사용합니다. camelCase 이름으로 서명하고, snake_case 이름으로 보내십시오.expires_at을 서버 측 기본값에 맡기면 서명할 값이 없습니다. 만료 시각을 직접 계산해 서명하고, 명시적으로 보내십시오.계약은 도메인의
chainId를 자리표시자<testnet chain id>로 적을 뿐 값을 고정하지 않습니다. 체인 ID의 기준은 배포 환경입니다. 해당 게이트웨이의GET /metadata에서 읽으십시오(네트워크 참조). 도메인이 일치하지 않으면 설명적인 오류가 아니라signer_mismatch가 발생하므로, 서명하기 전에 대상 게이트웨이가 기대하는 값을 확인하십시오.도메인에는
salt도 포함됩니다. 값은keccak256(<network>)이며, 여기서<network>는 서명 대상 게이트웨이의 소문자 배포 이름("mainnet","testnet"또는"local")입니다. 이 값은RegisterAgent서명을 하나의 배포 환경으로 한정합니다.chainId가 우연히 일치하더라도 같은 서명은 다른 네트워크에서 유효하지 않습니다. 잘못된salt는 다른 신호 없이signer_mismatch만 발생시키므로, 직접 다시 계산하지 말고 대상 배포 환경의 salt 값을 조회하십시오.
POST /agents/register
에이전트 키를 등록합니다.
지갑에 새 에이전트 키를 등록합니다. 에이전트는 메인 지갑을 노출하지 않고 사용자를 대신해 거래 요청에 서명할 수 있는 Ethereum 기반 키 쌍입니다. 에이전트를 소유할 지갑의 EIP-712 서명이 등록을 승인합니다. 세션 토큰은 필요하지 않습니다.
EIP-712 도메인: { name: 'Nexus Exchange', version: '1', chainId: <testnet chain id>, salt: <network salt> }. 타입 데이터 타입: RegisterAgent { address agent, uint64 expiresAt, uint64 nonce }.
인증: 없음. 요청에 담긴 EIP-712 서명으로 요청 자체를 승인합니다.
요청 본문
AgentRegistrationRequest, application/json, 필수.
wallet
string
예
소유자 지갑 주소(0x 접두사, 20바이트)
agent
string
예
에이전트 키 쌍에서 도출한 에이전트 Ethereum 주소(0x 접두사, 20바이트)
expires_at
integer (int64)
아니요
Unix ms 단위의 만료 시각. 선택 사항이며 기본값은 now+30 d입니다. [now+1d, now+90d] 범위여야 합니다.
nonce
integer (int64)
예
단조 증가 논스. 안전한 시작값으로 현재 Unix 타임스탬프(ms)를 사용하십시오.
signature
string
예
지갑 개인 키로 RegisterAgent{agent, expiresAt, nonce}에 서명한 EIP-712 서명(0x 접두사)
label
string
아니요
사람이 읽을 수 있는 에이전트 레이블(선택 사항, 예: my-bot)
응답
200
에이전트가 등록되었습니다. 계약은 이 응답에 예시를 제공하지만 이름 있는 스키마는 제공하지 않습니다.
agent_address
string
등록된 에이전트 주소(0x 접두사)
expires_at
integer (int64)
적용된 만료 시각, Unix ms. 보낸 값, 또는 생략했다면 서버 기본값
400
잘못된 요청: bad_wallet, bad_agent, expiry_out_of_range(현재부터 [1 d, 90 d]), 또는 invalid_json.
401
signature_invalid 또는 signer_mismatch. EIP-712 서명이 주장된 지갑으로 복원되지 않았습니다.
409
duplicate_agent. 해당 에이전트 주소는 이미 이 지갑에 등록되어 있습니다.
예시
응답:
GET /agents
에이전트 목록을 조회합니다.
인증된 지갑에 등록된 만료되지 않은 모든 에이전트 키를 반환합니다. 서버는 만료된 에이전트를 걸러 내므로, 이 목록에서 사라진 에이전트는 수명 주기가 끝난 것입니다. 오류가 아닙니다.
인증: hmacAuth(HMAC API 키).
응답
200
에이전트 레코드 배열. 각 항목은 AgentInfo입니다.
address
string
에이전트 주소(0x 접두사)
expiresAt
integer (int64)
만료 시각, Unix ms
registeredAt
integer (int64)
등록 시각, Unix ms
label
string | null
선택적 레이블
snake_case인 등록 요청 본문과 달리, 여기의 응답 필드 이름은 camelCase입니다.
401
HMAC 인증이 필요합니다.
예시
응답:
X-Timestamp와 X-Signature를 만드는 방법은 인증을 참조하십시오.
DELETE /agents/{address}
에이전트 권한을 해제합니다.
에이전트 키의 권한을 즉시 해제합니다. 이 호출이 반환된 후, 서버는 권한이 해제된 에이전트가 서명한 처리 중인 요청을 모두 거부합니다.
인증: hmacAuth(HMAC API 키).
파라미터
address
path
string
예
권한을 해제할 에이전트 주소(0x 접두사)
응답
200
에이전트 권한이 해제되었습니다.
401
HMAC 인증이 필요합니다.
404
에이전트를 찾을 수 없거나 사용자 소유가 아닙니다. 소유권 확인 실패는 403이 아니라 404를 반환하므로, 다른 지갑의 에이전트를 탐색할 수 없습니다.
예시
운영 참고 사항
만료 기한에는 범위 제한이 있습니다. 에이전트는 등록 후 1일에서 90일 사이에 만료되어야 하며,
expires_at을 생략하면 30일이 적용됩니다. 사양 0.9.90 기준으로 갱신 작업이 없으므로, 기존 에이전트가 만료되기 전에 새 에이전트를 다시 등록하십시오.논스는 지갑별로 단조 증가합니다. 현재 Unix 밀리초 타임스탬프를 논스로 사용하면 상태를 추적하지 않고도 이 순서 조건을 충족합니다.
권한 해제는 즉시 적용되며, 처리 중인 요청에도 적용됩니다.
DELETE가 반환되면 서버는 권한이 해제된 에이전트가 서명한 요청을 거부합니다.등록은 전송 계층에서 인증되지 않습니다. 누구나 등록을 제출할 수 있지만, 서버는 주장된 지갑의 유효한 EIP-712 서명만 받아들입니다.
RegisterAgent에 대한 서명은 최대 90일 동안 거래 권한을 부여하므로 지갑 키를 잘 보호하십시오.
상태: 테스트넷 프리뷰. 에이전트 등록은 아직 게이트웨이 재시작 후 유지되지 않으므로, API 키처럼 다시 만들 수 있는 것으로 취급하십시오.
마지막 업데이트

