Back-end do AccountantBot, responsável por coordenar splits descentralizados na Scroll. A aplicação recebe requisições HTTP, gera intents EIP-712, valida assinaturas e, quando todas as partes aprovam, executa settleSplit no contrato SplitCoordinator usando transferFrom e allowances ERC-20. Também expõe integrações auxiliares (vincular carteiras a usuários de Telegram, bot/IA, Redis cache).
- Framework: NestJS (Node 20+).
- Banco: PostgreSQL via Prisma.
- Blockchain: Scroll (EVM). Interação com ethers v6 usando ABIs em
abi/. - Outros: Redis para cache do bot, OpenAI para parser de mensagens, Telegram Bot API.
Fluxo principal:
POST /splitscria registro off-chain (opcionalmente chamacreateSplitno contrato).POST /splits/:id/approve-intentgera typed-data EIP-712 por participante, salvando salt/status.POST /splits/:id/signaturesarmazena assinatura após verificarecrecover.POST /splits/:id/settleenvia transação on-chain quando todos assinam.
Documentação completa das rotas: docs/api.md.
| Ferramenta | Versão sugerida |
|---|---|
| Node.js | >= 20 |
| npm | >= 10 |
| PostgreSQL | 14+ |
| Redis | 6+ (opcional, mas necessário para bot) |
-
Copie
.env.example(crie se ainda não existir) para.enve preencha:DATABASE_URL="postgresql://user:pass@localhost:5432/accountant" REDIS_HOST=localhost REDIS_PORT=6379 CHAIN_ID=534351 # Scroll Sepolia por padrão RPC_URL_SCROLL=https://sepolia-rpc.scroll.io SPLIT_COORDINATOR_ADDRESS=0x... # contrato deployado EXECUTOR_PRIVATE_KEY=0x... # obrigatório para settle e createOnchain EIP712_NAME=Accountant EIP712_VERSION=1 BOT_TOKEN=... # Telegram bot (opcional) OPENAI_API_KEY=... # IA (opcional)
-
Instale as dependências:
npm install
-
Gere o cliente Prisma e rode as migrações (ajuste conforme seu workflow):
npx prisma generate npx prisma migrate dev
-
(Opcional) Suba serviços auxiliares com Docker:
docker compose up -d
# Desenvolvimento (watch + HMR)
npm run start:dev
# Produção (build + start)
npm run build
npm run start:prodO servidor escuta em http://localhost:3000 por padrão (configurável via PORT).
npm test # Jest unit tests
npm test -- --runInBand # útil em ambientes limitados
npm run test:e2e # (se adicionar testes e2e)Os testes atuais cobrem:
SplitsService: criação off-chain, geração de typed-data e validação de assinatura.AppController: endpoint raiz com mock do bot.
| Caminho | Descrição |
|---|---|
src/splits |
Módulo responsável pelos fluxos de split: controllers, service e DTOs. |
src/prisma |
Provedor global do Prisma (PrismaService). |
src/account |
Vinculação carteira ↔ Telegram e histórico. |
src/bot |
Integração com Telegram (polling, comandos). |
src/agents |
Integração com OpenAI para interpretar mensagens. |
abi/ |
ABIs JSON (SplitCoordinator, IERC20). |
docs/api.md |
Referência detalhada da API. |
- Criar split:
POST /splits. - Gerar intent para cada participante:
POST /splits/:id/approve-intent. - Assinar via carteira (
walletClient.signTypedData) usando domínio/types/message retornados. - Enviar assinatura:
POST /splits/:id/signatures. - Verificar status:
GET /splits/:id; exibirapprovedOffchainAt,status. - Settle:
POST /splits/:id/settle(automático ou via payload custom). Requer allowances concedidos pelos participantes. - Consultar tokens/allowances:
GET /tokens,GET /splits/allowances/check.
Checklist com exemplos de cURL e FAQs: veja docs/api.md.
npm run lint
npm run format| Script | Descrição |
|---|---|
npm run start |
Inicia em modo padrão (não watch). |
npm run build |
Compila para dist/. |
npm run start:dev |
Desenvolvimento com watch. |
npm run test |
Testes unitários. |
npm run test:e2e |
(placeholder) testes e2e. |
Este projeto segue a licença especificada no repositório original (verifique package.json / LICENSE, se aplicável).