Skip to content

dev-araujo/chainlink-price-feed-api

Repository files navigation

License
Go Gin Go-Ethereum Docker Chainlink

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

Interface web


🛠️ Stack

  • 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.

✨ 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 (1.24.4+)
  • Docker (Opcional, mas recomendado)

Instalação

  1. Clone o repositório:
git clone https://github.com/dev-araujo/chainlink-price-feed.git
cd chainlink-price-feed

  1. Configure as variáveis de ambiente:
cp .env.example .env

  1. Edite o arquivo .env inserindo 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.


Opção 1: Docker (Recomendado)

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

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.

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)

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).


📡 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

{
    "pair": "ETH/USD",
    "price": "3000.00",
    "timestamp": 1678886400,
    "imageUrl": "https://assets.coingecko.com/coins/images/279/small/ethereum.png"
}

GET /health

{
    "status": "ATIVO"
}


Author 👷

caricatura do autor desse repositório

Adriano P Araujo
LinkedIn
GitHub

About

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.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors