Serviços de infraestrutura DCP¶
Tradução informativa da versão em inglês, atualizada em 25/10/2026. Em caso de diferença, prevalece o original em inglês. Identificadores e blocos de código, incluindo comentários, são mantidos sem tradução.
Microsserviços HTTP opcionais que complementam o Gateway de referência DCP. Cada serviço funciona de forma independente e pode ser implantado sozinho ou em conjunto via Docker Compose.
Arquitetura¶
┌─────────────────────┐
│ DCP Reference │
│ Gateway (:3000) │
│ Verification + │
│ Key Registry + │
│ Policy Engine │
└──────────┬──────────┘
│
┌────────────────────┼────────────────────┐
│ │ │
┌─────────▼──────────┐ ┌─────▼──────────┐ ┌──────▼──────────┐
│ Anchor Service │ │ Transparency │ │ Revocation │
│ (:3001) │ │ Log (:3002) │ │ Service (:3003)│
│ │ │ │ │ │
│ Bundle hash → │ │ Append-only │ │ V1: agent-level│
│ Local records │ │ Merkle tree + │ │ V2: kid-level │
│ (L2 planned) │ │ inclusion │ │ + emergency │
│ │ │ proofs │ │ + short-lived │
└────────────────────┘ └────────────────┘ └─────────────────┘
Serviços¶
| Serviço | Porta | Status | Descrição |
|---|---|---|---|
| Ancoragem | 3001 | Parcial | Registros locais de hashes de bundles, com ancoragem em blockchains L2 planejada. Os lotes Merkle funcionam em memória; o envio on-chain não está implementado, então os registros contêm tx_hash: null. |
| Log de transparência | 3002 | Funcional | Log somente de acréscimo no estilo CT: árvore Merkle RFC 6962, provas de inclusão e cabeçalhos de árvore assinados com Ed25519. Armazenamento em memória. |
| Revogação | 3003 | Funcional | Agentes registram chaves com seu passaporte assinado; revogações V1 no nível do agente e V2 no nível de kid devem ser assinadas por essas chaves; botão de emergência. Armazenamento em memória por padrão, com persistência opcional em arquivo. |
Início rápido¶
# Run all services with Docker Compose
(cd docker && docker compose up)
# Or run individually from the root of a checkout, after building the workspace SDK
# and installing the root package (the revocation service imports @dcp-ai/sdk):
# (cd sdks/typescript && npm install && npm run build) && npm install
node services/anchor/index.js
node services/transparency-log/index.js
node services/revocation/index.js
Fluxo de dados¶
- O agente se registra pelo Gateway (
POST /v2/passport/register), e o operador o registra no serviço de revogação (POST /v2/register, token do operador), ambos com seu passaporte autoassinado - A intenção é declarada e a política é avaliada (
POST /v2/intent/declare) - O bundle é assinado e verificado (
POST /v2/bundle/verify) - O hash é enviado ao serviço de ancoragem (
POST /anchor) para registro local ou agrupamento em lote; o envio on-chain não está implementado - O hash é registrado no log de transparência (
POST /add) - A revogação é consultada antes de aceitar bundles:
GET /v2/check/kid/:kidcobre revogações no nível de kid, de emergência e por expiração de cada kid registrado comPOST /v2/register, e responde 404 (registered: false, status desconhecido) para qualquer outro kid;GET /check/:agent_idcobre as revogações no nível do agente.
Autenticação¶
- Escritas de revogação são assinadas: o registro, pelas próprias chaves do passaporte; as revogações, pelas chaves registradas para o agente. Leituras não são: as listas servidas (
/list,/v2/list,/.well-known/dcp-revocations.json) não têm assinatura, então o verificador confia na URL e no transporte do serviço. Registrar um novoagent_idtambém exige o token do operador, para ninguém reivindicar primeiro o de outra pessoa. A revogação de emergência exige a pré-imagem do token registrado. - Novos
agent_ids são registrados pelo operador, no Gateway (POST /v2/passport/register) e no serviço de revogação (POST /v2/register); o recadastramento é de autosserviço, assinado pelas chaves do agente. - Ancoragem
POST /flushe log de transparênciaPOST /gossip/peersexigemAuthorization: Bearer <OPERATOR_TOKEN>; semOPERATOR_TOKEN, continuam bloqueados. O log consulta seus pares por conta própria, então uma lista aberta permitiria que qualquer pessoa o direcionasse a URLs internas. - Corpos de requisições são limitados a 1 MB. Limites de taxa (registros e revogações de emergência, POSTs do Gateway) usam o endereço do socket; defina
TRUST_PROXY=trueapenas atrás de um proxy que acrescente o IP do cliente aX-Forwarded-For. - Ao ficarem cheios, os registros recusam novas entradas (507) em vez de expulsar as existentes: o serviço de revogação limita agentes (
MAX_AGENTS); o Gateway limita chaves (MAX_REGISTERED_KEYS,MAX_KEYS_PER_AGENTao longo da vida do agente) e mantém quatro chaves aposentadas por agente. Chaves e assinaturas devem ser base64 canônico com o tamanho exato de seu algoritmo. O log de transparência só confia em cabeçalhos de árvore assinados por pares com chaves fixadas (GOSSIP_PEERS=<url>#<key>).
Persistência¶
Por padrão, os serviços mantêm seu estado em memória. Sem persistência configurada, esse estado não sobrevive a uma reinicialização, implantação, falha ou máquina parada:
- Revogação: esquecer revogações faz os agentes deixarem de ser revogados. Defina
REVOCATION_STATE_PATHpara manter registros e revogações em um arquivo entre reinicializações (o stack Compose faz isso em um volume); sem isso,deploy/fly/revocation.tomlapenas mantém uma máquina ligada para que a inatividade não apague o estado, mas as implantações ainda o apagam. - Log de transparência: reiniciar cria uma árvore nova e vazia, então STHs e provas anteriores deixam de corresponder a ela. Sua configuração Fly já mantém uma máquina em execução.
- Ancoragem: hashes pendentes e registros são perdidos; sua configuração Fly ainda escala para zero, o que não afeta ancoragens on-chain enquanto nenhuma for realizada.
Para produção, adicione armazenamento persistente (SQLite, PostgreSQL), além de um volume Fly quando necessário. Outras limitações:
- Ancoragem: integre ethers.js e um endpoint RPC L2 real. O contrato
DCPAnchor.solestá emcontracts/ethereum/. - Revogação: considere distribuição no estilo CRL (lista de revogação de certificados) ou OCSP para implantações de alta disponibilidade.
Variáveis de ambiente¶
Veja os READMEs de cada serviço para detalhes de configuração: - Ancoragem - Log de transparência - Revogação