Nota sobre traduções: Estas traduções podem estar desatualizadas em relação à versão em inglês. Consulte o arquivo
README.mdem inglês para obter as informações mais recentes.
StellarStream é um MVP (produto mínimo viável) de streaming de pagamentos básico para o ecossistema Stellar. Inclui:
- Um painel em React para criar e monitorar streams
- Uma API em Node.js/Express para operações do ciclo de vida de streams
- Um scaffold de contrato inteligente Soroban para lógica de streams on-chain
- Uma pasta de backlog com rascunhos de tarefas de implementação
Este repositório é intencionalmente leve e fácil de estender.
Para perguntas comuns e solução de problemas, consulte FAQ.md.
Para configuração de produção e operações, consulte DEPLOYMENT.md e RUNBOOK.md.
Para política de segurança e relato de vulnerabilidades, consulte SECURITY.md.
Estamos comprometidos com um ambiente acolhedor; consulte CODE_OF_CONDUCT.md.
O StellarStream modela um stream de pagamento onde um remetente aloca um valor total durante uma duração fixa. Conforme o tempo passa, o destinatário "adquire" (vest) valor continuamente.
Comportamento atual do MVP:
- Criar stream
- Listar streams com progresso ao vivo
- Cancelar stream
- Mostrar métricas calculadas (ativos/completos/adquiridos)
- Rastrear e exibir histórico de eventos para ações do ciclo de vida do stream
- Aplicação React + Vite
- Usa o proxy
/apipara chamar o backend - Consulta a lista de streams a cada 5 segundos
- API REST Express
- Banco de dados SQLite para armazenamento persistente
- Worker indexador de eventos para rastrear o ciclo de vida do stream
- Calcula o progresso em tempo real a partir de timestamps
- Assina criptograficamente webhooks de saída usando HMAC-SHA256 para notificações seguras do ciclo de vida
- Scaffold de contrato Soroban em Rust
- Suporta
create_stream,claimable,claimecancel - Ainda não integrado com o backend neste MVP
Para cada stream definido por um valor total (
Em qualquer momento atual
Regras de Estado
-
scheduled: quando$t < t_{start}$ -
active: quando$t_{start} \le t < t_{end}$ -
completed: quando$t \ge t_{end}$ -
canceled: quando o stream foi encerrado antecipadamente de forma explícita
A documentação interativa da API está disponível via Swagger UI em:
- Swagger UI:
/api/docs - Especificação OpenAPI bruta:
/api/docs/openapi.json
URL Base:
- Local:
http://localhost:3001 - Proxy do frontend:
/api
Propósito: Verificação de integridade do serviço
Resposta: service, status, timestamp
Propósito: Listar streams ordenados do mais recente ao mais antigo, com filtragem e paginação opcionais
Parâmetros de consulta (opcionais):
status:scheduled|active|completed|canceledsender: string (correspondência exata de remetente)recipient: string (correspondência exata de destinatário)asset: string (correspondência exata de código de ativo)q: string (termo de busca geral — busca em ID do stream, remetente, destinatário e código de ativo, sem distinção de maiúsculas)page: number (inteiro >= 1)limit: number (inteiro 1..100)
Resposta:
{
"data": "Stream[]",
"total": "number",
"page": "number",
"limit": "number"
}Propósito: Obter um stream individual por ID
Resposta: { "data": Stream } | Erro: 404 se o stream não existir
Propósito: Obter todos os streams para um destinatário específico
Resposta: { "data": Stream[] } (inclui progresso calculado para cada stream)
Propósito: Obter a lista de permissões de ativos permitidos
Resposta: { "data": string[] } (códigos de ativos normalizados)
Propósito: Criar um novo stream
Corpo da solicitação:
{
"sender": "string",
"recipient": "string",
"assetCode": "string",
"totalAmount": "number",
"durationSeconds": "number",
"startAt": "number (opcional, segundos Unix)"
}Resposta: 201 Created com { "data": Stream }
Propósito: Cancelar um stream existente
Resposta: { "data": Stream } com estado canceled | Erro: 404 se o stream não existir
Propósito: Retorna os itens do backlog de implementação mostrados na UI
Resposta: { "data": OpenIssue[] }
Propósito: Obter a linha do tempo do histórico de eventos de um stream específico
Resposta: { "data": StreamEvent[] } (ordenados por timestamp ascendente)
Tipos de eventos: created, claimed, canceled, start_time_updated
- Node.js 18+
- npm 9+
- Opcional para trabalho com contratos: Rust + toolchain Soroban
A partir da raiz do repositório:
npm run install:all
npm run dev:backend
npm run dev:frontendAlternativa manual:
cd backend && npm install && npm run dev
cd frontend && npm install && npm run dev- Frontend: http://localhost:3000
- Backend: http://localhost:3001
Para desenvolvimento local com Docker, use o arquivo docker-compose.override.yml que monta automaticamente os diretórios de origem e habilita a recarga automática:
docker-compose up- Recarga automática do backend: Alterações em
backend/src/acionam reinicialização automática viats-node-dev. - Recarga automática do frontend: Alterações em
frontend/src/acionam Vite HMR. - Volume do banco de dados: Persiste entre reinicializações.
npm run buildMIT