Esta API, desenvolvida em Go, atua como uma ponte para os Chainlink Data Feeds, permitindo que aplicações acessem dados de preços da blockchain Ethereum de forma simples e eficiente.
A aplicação se conecta a um nó da rede Ethereum e busca dinamicamente o catálogo completo de feeds de preço da Chainlink, interagindo com os contratos inteligentes para expor os preços de todos os ativos Crypto/USD disponíveis. Os preços em BRL são obtidos via conversão de câmbio em tempo real. Além disso, a aplicação inclui uma interface web (feita com HTMX) com suporte a filtro e alternância de moeda (USD/BRL).
- Go: Linguagem principal.
- Gin: Framework web de alta performance.
- Go-Ethereum: Cliente para interação com a blockchain.
- Docker: Containerização da aplicação.
- HTMX: Interatividade no frontend sem complexidade de SPAs.
- CoinGecko API: Imagens dos ativos com cache e fallback automático.
- Catálogo dinâmico de ativos: todos os feeds Crypto/USD disponíveis no Chainlink são carregados automaticamente na inicialização e atualizados a cada 6 horas — sem lista fixa de ativos.
- Preços em USD e BRL: conversão para real via taxa de câmbio em tempo real.
- Imagens automáticas: logos dos ativos buscados dinamicamente via CoinGecko com fallback visual.
- Filtro na interface: pesquise por nome de ativo diretamente na interface web.
- Alternância de moeda: troque entre BRL e USD na interface sem recarregar a página.
Siga as instruções abaixo para ter uma cópia do projeto rodando em sua máquina.
- Clone o repositório:
git clone https://github.com/dev-araujo/chainlink-price-feed.git
cd chainlink-price-feed
- Configure as variáveis de ambiente:
cp .env.example .env
- Edite o arquivo
.envinserindo sua URL RPC (Infura/Alchemy):
RPC_URL="https://mainnet.infura.io/v3/SEU_ID_DO_INFURA"
SERVER_PORT="8080"
GIN_MODE="release"
WEB_PORT="8081"
API_URL="http://localhost:8080"
💡 Dica: Para testes, você pode obter um RPC gratuito em Public Node.
Para iniciar todo o ambiente (API + Web) com um único comando:
docker-compose up --build
- A API estará disponível em
http://localhost:8080 - A Aplicação Web estará disponível em
http://localhost:8081
chainlink-price-feed/) para que a aplicação consiga encontrar as pastas de arquivos estáticos (web/ e assets/).
Você tem duas formas de executar a aplicação localmente:
Esta é a maneira mais simples, executando tanto a API quanto a Interface Web num único processo.
go run cmd/app/main.go
A aplicação completa estará disponível na porta definida em WEB_PORT (padrão: 8081).
Se preferir rodar a API e a aplicação web de forma independente:
1. Iniciando a API (Backend)
go run cmd/api/main.go
A API iniciará na porta definida em SERVER_PORT (padrão: 8080).
2. Iniciando a Aplicação Web (Frontend) Em um novo terminal, ainda na raiz do projeto, execute:
go run cmd/web/main.go
A interface web iniciará na porta definida em WEB_PORT (padrão: 8081).
A API fornece os seguintes endpoints para consulta:
| Método | Endpoint | Descrição |
|---|---|---|
GET |
/health |
Verifica o status da API. |
GET |
/api/price/:asset/usd |
Retorna o preço do ativo em USD. |
GET |
/api/price/:asset/brl |
Retorna o preço do ativo em BRL. |
GET |
/api/price/all/usd |
Retorna todos os ativos disponíveis em USD. |
GET |
/api/price/all/brl |
Retorna todos os ativos disponíveis em BRL. |
Ativos Suportados (:asset):
Qualquer símbolo presente no catálogo de feeds Crypto/USD da Chainlink (ex: btc, eth, link, uni, 1inch, paxg, stx, entre muitos outros). O catálogo é carregado dinamicamente na inicialização.
GET /api/price/eth/usd
{
"pair": "ETH/USD",
"price": "3000.00",
"timestamp": 1678886400,
"imageUrl": "https://assets.coingecko.com/coins/images/279/small/ethereum.png"
}
GET /health
{
"status": "ATIVO"
}


