Um sistema descentralizado para gestão de dívidas e créditos com resolução automática de ciclos on-chain.
Este projeto é uma implementação de uma dApp (Aplicação Descentralizada) na rede Ethereum que permite aos utilizadores rastrear quem deve dinheiro a quem, funcionando como uma versão blockchain do Splitwise.
O projeto foi desenvolvido utilizando o toolkit Scaffold-ETH 2, cumprindo os requisitos de utilização de Ethereum, Solidity e um framework moderno de desenvolvimento.
Esta aplicação implementa a lógica exigida para o controlo de IOUs (I Owe You) com uma arquitetura robusta:
-
Adicionar Dívida (IOU)
Permite registar que o utilizador atual deve um valor a outro.
O contrato verifica automaticamente se existe uma dívida inversa e faz o abatimento imediato. -
Resolução de Ciclos On-Chain
Implementação de lógica de grafos (DFS – Depth First Search) diretamente no Smart Contract.
O sistema deteta ciclos de dívida (ex.:A → B → C → A) e resolve-os atomicamente na mesma transação, garantindo eficiência e consistência do ledger. -
Consultar Dívidas (
lookup)
Verifica quanto um devedor deve a um credor específico diretamente na blockchain. -
Lista de Utilizadores (
getAllUsers)
Recupera todos os endereços que já interagiram com o sistema, permitindo iterar sobre o grafo de dívidas.
- Blockchain: Ethereum (Hardhat Network local)
- Smart Contracts: Solidity
v0.8.17+- Otimização de tipos (
uint32) - Algoritmos de grafos on-chain
- Otimização de tipos (
- Frontend: Next.js, React, TypeScript, TailwindCSS
- Framework: Scaffold-ETH 2
- Interação com a Blockchain: Wagmi & Viem
Siga os passos abaixo para iniciar o ambiente de desenvolvimento local.
Certifique-se de que tem:
- Node.js
>= v18 - Yarn
yarn install
Inicia uma rede Ethereum local usando Hardhat.
yarn chain
Compila o contrato Splitwise.sol e faz deploy para a rede local.
- Use --reset se reiniciar a blockchain.
yarn deploy --reset
Inicia a aplicação web em React / Next.js.
yarn start
Aceda a:
Os ficheiros principais modificados para este exercício são:
packages/hardhat/contracts/mycontract.sol
-
Contém a lógica de negócio
-
Estruturas de dados DebtNode
-
Algoritmo de resolução de ciclos (_depthFirstSearch)
packages/nextjs/components/splitwise/AddIOUForm.tsx
-
Formulário interativo para envio de transações
-
Verificação matemática do valor efetivamente abatido pelo contrato
-
Notificações de sucesso e deteção de ciclos
-
Selecione o Utilizador A e adicione uma dívida de 10 ao Utilizador B
-
Selecione o Utilizador B e adicione uma dívida de 10 ao Utilizador C
-
Selecione o Utilizador C e adicione uma dívida de 10 ao Utilizador A
-
O Smart Contract deteta o ciclo fechado
-
O frontend exibe um pop-up:
🪄 CICLO DETETADO
- As tabelas de dívidas ficam vazias (ou com valores a 0), provando a resolução automática on-chain
Projeto desenvolvido no âmbito da disciplina de Blockchains e Criptomoedas Universidade da Beira Interior (UBI)