WEB3DEV

Cover image for Buscando Pelos Pares Mais Recentes Adicionados na UniswapV3 Usando o TheGraph
Paulo Gio
Paulo Gio

Posted on

Buscando Pelos Pares Mais Recentes Adicionados na UniswapV3 Usando o TheGraph

Buscando pelos pares mais recentes adicionados na UniswapV3 usando o TheGraph no Google Sheets.

Introdução

Este tutorial foi criado para ajudar pessoas sem conhecimento técnico a entender como interagir com o TheGraph e conectar dados da cadeia no Google Sheets. Tenho trabalhado na coleta de dados relacionados a criptomoedas no Google Sheets há alguns anos e descobri que é uma interface útil para filtrar novos pares listados em exchanges descentralizadas. Neste tutorial, você aprenderá como encontrar um subgrafo da UniswapV3 no The Graph, fazer uma solicitação GraphQL, traduzir a consulta em Javascript (a linguagem de programação do Google Sheets) usando o Postman e, finalmente, recuperar os pares na planilha com uma fórmula definida pelo usuário.

https://github.com/figment-networks/learn-tutorials/raw/master/assets/UNISWAP.gif

Pré-requisitos

Para iniciantes com habilidades básicas de codificação. Este tutorial pressupõe que você tenha uma conta do Gmail/Google, pois estaremos construindo em cima do Google Sheets. Também seria útil se você tivesse acesso ao Postman para obter uma visualização mais fácil de como testar uma solicitação GraphQL do TheGraph e transformá-la em código Javascript, que é a linguagem de programação oficial do Google Sheet.

  • Conhecimentos em GraphQL e Javascript são uma vantagem. O código pode ser escrito diretamente com a ajuda do Postman e do site do The Graph.
  • O software do Postman torna o desenvolvimento de API mais fácil.
  • Código:
    • uniswap.gs - para recuperar o par mais recente da Uniswap por meio da API do The Graph (explicado posteriormente no tutorial).
    • importJson.gs - para trabalhar com objetos JSON no Google Sheets (explicado posteriormente no tutorial).

Primeiro, o que é a Uniswap?

A Uniswap é um protocolo de exchange descentralizada construído na rede Ethereum. Para ser mais preciso, é um protocolo de liquidez automatizado. Não há livro de ordens nem qualquer parte centralizada necessária para fazer negociações. A Uniswap permite que os usuários negociem sem intermediários, com um alto grau de descentralização e resistência à censura.

Assim é como a exchange descentralizada da Uniswap parece:

https://github.com/figment-networks/learn-tutorials/raw/master/assets/Uniswap_exchange.gif

Familiarizando-se com o TheGraph e o GraphQL

O The Graph é um protocolo descentralizado para indexação e consulta de dados de blockchains. Ele é capaz de consultar redes como a Ethereum e, como a Uniswap é construída na Ethereum, permitirá que obtenhamos seus dados na cadeia.

Encontrando o subgrafo da Uniswap V3 no The Graph

Neste tutorial, vamos nos concentrar em obter dados da blockchain na Versão 3 da Uniswap. Tudo o que você precisa fazer é pesquisar na barra de exploração do TheGraph por “Uniswap V3”. A seguinte imagem mostra como é o TheGraph e qual subgrafo usaremos:

https://github.com/figment-networks/learn-tutorials/raw/master/assets/uniswapv3-subgraph.gif

Construindo a consulta do GraphQL

GraphQL é uma linguagem de consulta e manipulação de dados de código aberto para APIs, e um tempo de execução para atender consultas com dados existentes. O GraphQL foi desenvolvido internamente pelo Facebook em 2012 antes de ser lançado publicamente em 2015.

Na interface do The Graph, em modo playground, há um exemplo de consulta do GraphQL. Esta consulta obtém as primeiras 5 fábricas (factories) com id, poolCount, txCount e totalVolumeUSD, bem como os primeiros 5 pacotes (bundles) com id e ethPriceUSD.

https://github.com/figment-networks/learn-tutorials/raw/master/assets/playground.gif

Para o nosso propósito, vamos apenas precisar ajustar um pouco a consulta para solicitar pares de pools. Estaremos interessados em filtrar por restrições no Número de Dias em que a moeda está ativa, o Volume ($), a Liquidez ($) e o número de Transações. Quando você olhar para os parâmetros do pool, encontrará a correspondência necessária para construir nossas restrições:

  • Número de Dias -> createdAtTimestamp
  • Volume ($) -> volumeUSD
  • Liquidez ($) -> totalValueLockedUSD
  • Número de Transações -> txCount

Agora, em vez de usar a cláusula-padrão (first:5), precisaremos construir nossa restrição GraphQL com as variáveis acima. Para fazer isso, precisamos construir uma cláusula "where" (onde), onde informamos ao mecanismo de correspondência que estamos procurando pares de pools criados após uma determinada data (timestamp, ou marca temporal) com liquidez, volumes e número de transações, todos maiores que as quantidades definidas pelo usuário.

No GraphQL, para sinalizar que você precisa de uma quantia maior que, é necessário adicionar _gte ao final da sua variável.

Este é um exemplo de como a cláusula de restrição ficará com valores teóricos:

where: {
      volumeUSD_gte:20000
      totalValueLockedUSD_gte:30000
      txCount_gte:100
      createdAtTimestamp_gte: 1625575864
    }
Enter fullscreen mode Exit fullscreen mode

A seguir, para criar o restante da consulta, é necessário exibir os símbolos dos tokens do par, preços, ID (endereço do contrato), volume, liquidez, número de transações e marca temporal.

Aqui está como fica a consulta final do GraphQL:

query{
  pools( where: {
      volumeUSD_gte:20000
      totalValueLockedUSD_gte: 30000
      txCount_gte:100
      createdAtTimestamp_gte: 1625575864
    } 
  ) {
    token0 {
      symbol
    }
    token0Price
    token1 {
      symbol
    }
    token1Price
    id
    volumeUSD
    createdAtTimestamp
    totalValueLockedUSD
    txCount
  }}
Enter fullscreen mode Exit fullscreen mode

Você pode substituir a consulta de exemplo por esta nova consulta e clicar em "play" no playground. Você deve então ver os resultados.

https://github.com/figment-networks/learn-tutorials/raw/master/assets/PLAYGROUNDCONSTRAINTS.png

Testando o modelo e traduzindo a consulta em Javascript usando o Postman

Depois de baixar o Postman, você pode abrir uma nova janela, como mostrado abaixo:

https://github.com/figment-networks/learn-tutorials/raw/master/assets/postmanempty.png

Para obter os dados no Postman, você precisará:

  1. Inserir na caixa “URL” o url de consulta HTTP do subgrafo Uniswap V3 (https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3);
  2. Alterar o GET para uma solicitação POST;
  3. Copiar/colar a consulta GraphQL acima em Body e selecionar GraphQL;
  4. Clicar em “Send” (enviar).

Você deve obter a mesma tabela JSON do TheGraph.

https://github.com/figment-networks/learn-tutorials/raw/master/assets/postmanconstraints.png

Conectando o modelo através do Google Sheets

Depois de confirmar que a consulta está funcionando no Postman, você pode transformar o código em uma solicitação Fetch do Javascript (para Google Sheets) usando o botão “Code” (código) abaixo do botão “Save” (salvar).

https://github.com/figment-networks/learn-tutorials/raw/master/assets/postmanjavascript.png

A parte importante a ser salva para o script do aplicativo no Google é:

var graphql = JSON.stringify({
  query: "query{\n  \n  pools( where: {\n      volumeUSD_gte:20000\n      totalValueLockedUSD_gte: 30000\n      txCount_gte:100\n      createdAtTimestamp_gte: 1625575864\n    } \n     ) {\n  \n    token0 {\n      symbol\n    }\n    token0Price\n    token1 {\n      symbol\n    }\n    token1Price\n    id\n    volumeUSD\n    createdAtTimestamp\n    totalValueLockedUSD\n    txCount\n  }}",
  variables: {}
})
var requestOptions = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: graphql,
  redirect: 'follow'
};
Enter fullscreen mode Exit fullscreen mode

Como criar a função Javascript no Google Sheets

Queremos ter parâmetros variáveis na função para filtrar novos pares com base em nossos diferentes parâmetros:

  • Número de dias desde que o par foi criado: [createdAtTimestamp_gte];
  • Volume mínimo no limite de USD: [volumeUSD_gte];
  • Liquidez mínima no limite de USD: [totalValueLockedUSD_gte];
  • Número mínimo de transações desde a data de criação: [txCount_gte].

Vamos definir uma função assíncrona com esses 4 parâmetros como entradas:

async function UNISWAP(days,volume,liquidity,tx_count){
}
Enter fullscreen mode Exit fullscreen mode
  1. Para fazer a solicitação POST do TheGraph, precisamos de uma data-limite (createdAtTimestamp_gte) no formato de marca temporal UNIX. Podemos calcular isso como mostrado no código abaixo.
  2. Em seguida, precisamos apenas substituir os parâmetros fixos do modelo pelos parâmetros variáveis (garantindo que estejam em formato de string) na variável graphql.
  3. Depois disso, podemos copiar/colar a variável requestOptions do Postman.
  4. Finalmente, chamamos o URLfetch usando a função ImportJSONAdvanced que foi criada para o Google Sheets (por Brad Jasper e Trevor Lohrbeer, versão 1.5), usando o ponto de extremidade (endpoint) da API do subgrafo da Uniswap V3, os requestOptions e os parâmetros-padrão da função ImportJSONAdvanced.
// Apenas para acessar arquivos nos quais o complemento ou script é usado, em vez de todas as planilhas do usuário.

/**
* @OnlyCurrentDoc
*/

// Adicionando descrição para a função
/**UNISWAP
 * Retorna novos pares negociáveis na Uniswap
 *
 * =UNISWAP(5,10000,10000,100)
 *
 * @param {days}                    o número de dias desde que o par está ativo
 * @param {volume}                  o Volume mínimo($)
 * @param {liquidity}               a Liquidez mínima ($)
 * @param {tx_count}                o número de transações existentes desde a criação
 * @customfunction
 *
 * @retorna uma tabela com todos os novos pares negociáveis na Uniswap e seu número de Dias desde Ativo, o Volume ($), a Liquidez ($), o número de Transações 
 **/


async function UNISWAP(days,volume,liquidity,tx_count){

    // [1] Calculando a data limite (createdAtTimestamp_gte) no formato de marca temporal do UNIX
    unix_day=Math.floor(Date.now() / 1000-parseFloat(days)*86400);

    // [2] Alterando os parâmetros fixos do modelo com os parâmetros variáveis (certificando-se de que estejam no formato string)
    var graphql = JSON.stringify({
      query: "query{\n  \n  pools( where: {\n      volumeUSD_gte:"+String(volume)+"\n      totalValueLockedUSD_gte: "+String(liquidity)+"\n      txCount_gte:"+String(tx_count)+"\n      createdAtTimestamp_gte: "+String(unix_day)+"\n    } \n     ) {\n  \n    token0 {\n      symbol\n    }\n    token0Price\n    token1 {\n      symbol\n    }\n    token1Price\n    id\n    volumeUSD\n    createdAtTimestamp\n    totalValueLockedUSD\n    txCount\n  }}",
        variables: {}
      })

      // [3] Copiar/colar a variável requestOptions do código Javascript do Postman
      var requestOptions = {
        method: 'POST',
        headers: {'Content-Type': 'application/json'},
        payload: graphql,
        redirect: 'follow'
      };

      // [4] Chamando o URLfetch usando a função ImportJSONAdvanced (por Brad Jasper e Trevor Lohrbeer, versão 1.5) que foi criada para o Google Sheets
      return ImportJSONAdvanced('https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3',requestOptions,'','noInherit',includeXPath_,defaultTransform_);
}
Enter fullscreen mode Exit fullscreen mode

Copiar/colar o código no Google Sheets

Abra uma planilha do Google onde deseja usar a função Uniswap -> Vá para Ferramentas › Editor de script.

https://github.com/figment-networks/learn-tutorials/raw/master/assets/googlesheetmacro.gif

Substitua a função vazia pelo código que acabamos de criar.

https://github.com/figment-networks/learn-tutorials/raw/master/assets/uniswapgs.png

https://github.com/figment-networks/learn-tutorials/raw/master/assets/uniswapgs.png

Adicione o script ImportJSON de Brad Jasper e Trevor Lohrbeer, versão 1.5.

https://github.com/figment-networks/learn-tutorials/raw/master/assets/importjsongs.png

Depois de salvar o código, você precisa ativar os escopos de autorização manual para o Google Sheets.

Fórmula Uniswap

Depois de todas essas etapas, você poderá solicitar os últimos pares negociáveis ​​da Uniswap, com restrições quanto ao número de dias em que o par está ativo, volume ($), liquidez ($) e número de negociações.

https://github.com/figment-networks/learn-tutorials/raw/master/assets/UNISWAP.gif

Por exemplo, se eu quiser obter os novos pares Uniswap em que o pool foi lançado nos últimos 2 dias, o volume diário é superior a $1.000, a liquidez é superior a $10.000 e houve mais de 10 transações desde o lançamento, a fórmula é:

=UNISWAP(2,1000,10000,10),

que retorna uma tabela (veja o GIF acima) com todos os novos pares negociáveis na Uniswap e seu número de dias desde a ativação, volume ($), liquidez ($), o número de transações, preços e símbolos de moedas. Existem muitas outras funcionalidades que podem ser adicionadas por meio da API do TheGraph.

Conclusão

Uma interface amigável ao usuário que interage com os protocolos do The Graph usando o Google Sheets. Neste tutorial, você aprendeu a:

  1. Encontrar um subgrafo da UniswapV3 no The Graph;
  2. Fazer uma solicitação GraphQL;
  3. Traduzir a consulta em Javascript (a linguagem de programação do Google Sheets) usando o Postman;
  4. Recuperar os últimos pares na planilha com uma fórmula definida pelo usuário sob suas restrições específicas.

Artigo publicado por Eloise, no Figment. Traduzido por Paulinho Giovannini.

Top comments (0)