https://github.com/dev-araujo/chainlink-price-feed-api
Esta API (e interface simples como exemplo), 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.
https://github.com/dev-araujo/chainlink-price-feed-api
api blockchain chainlink chainlink-price-feeds ethereum go-ethereum golang project rest-api web3
Last synced: 1 day ago
JSON representation
Esta API (e interface simples como exemplo), 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.
- Host: GitHub
- URL: https://github.com/dev-araujo/chainlink-price-feed-api
- Owner: dev-araujo
- License: mit
- Created: 2025-08-25T23:17:39.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2026-06-08T18:44:22.000Z (about 2 months ago)
- Last Synced: 2026-06-08T20:23:10.155Z (about 2 months ago)
- Topics: api, blockchain, chainlink, chainlink-price-feeds, ethereum, go-ethereum, golang, project, rest-api, web3
- Language: Go
- Homepage:
- Size: 17.3 MB
- Stars: 3
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Chainlink Price Feed com GO
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).
## 🎨 Demo

---
## 🛠️ Stack
* **[Go](https://golang.org/)**: Linguagem principal.
* **[Gin](https://github.com/gin-gonic/gin)**: Framework web de alta performance.
* **[Go-Ethereum](https://github.com/ethereum/go-ethereum)**: Cliente para interação com a blockchain.
* **[Docker](https://www.docker.com/)**: Containerização da aplicação.
* **[HTMX](https://htmx.org/)**: Interatividade no frontend sem complexidade de SPAs.
* **[CoinGecko API](https://www.coingecko.com/en/api)**: Imagens dos ativos com cache e fallback automático.
## ✨ Funcionalidades
- **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.
## 🚀 Executando a aplicação
Siga as instruções abaixo para ter uma cópia do projeto rodando em sua máquina.
### Pré-requisitos
* [Go](https://golang.org/doc/install) (1.24.4+)
* [Docker](https://docs.docker.com/get-docker/) (Opcional, mas recomendado)
### Instalação
1. Clone o repositório:
```sh
git clone https://github.com/dev-araujo/chainlink-price-feed.git
cd chainlink-price-feed
```
2. Configure as variáveis de ambiente:
```sh
cp .env.example .env
```
3. Edite o arquivo `.env` inserindo sua URL RPC (Infura/Alchemy):
```env
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](https://ethereum.publicnode.com/).
---
### Opção 1: Docker (Recomendado)
Para iniciar todo o ambiente (API + Web) com um único comando:
```sh
docker-compose up --build
```
* A **API** estará disponível em `http://localhost:8080`
* A **Aplicação Web** estará disponível em `http://localhost:8081`
---
### Opção 2: Rodando Localmente (Sem Docker)
⚠️ **Atenção:** Certifique-se de executar os comandos sempre a partir da **raiz do projeto** (`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:
#### Forma A: Aplicativo Unificado (Tudo em um)
Esta é a maneira mais simples, executando tanto a API quanto a Interface Web num único processo.
```sh
go run cmd/app/main.go
```
*A aplicação completa estará disponível na porta definida em `WEB_PORT` (padrão: 8081).*
#### Forma B: Executando os serviços separadamente
Se preferir rodar a API e a aplicação web de forma independente:
**1. Iniciando a API (Backend)**
```sh
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:
```sh
go run cmd/web/main.go
```
*A interface web iniciará na porta definida em `WEB_PORT` (padrão: 8081).*
---
## 📡 Endpoints da API
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.
### Exemplos de Resposta
**GET** `/api/price/eth/usd`
```json
{
"pair": "ETH/USD",
"price": "3000.00",
"timestamp": 1678886400,
"imageUrl": "https://assets.coingecko.com/coins/images/279/small/ethereum.png"
}
```
**GET** `/health`
```json
{
"status": "ATIVO"
}
```
---
## Author 👷

**Adriano P Araujo**
[](https://www.linkedin.com/in/araujocode/)
[](https://github.com/dev-araujo)