WEB3DEV

Cover image for Como adicionar o widget Swap do uniswap ao seu React dApp
AIengineer13
AIengineer13

Posted on

Como adicionar o widget Swap do uniswap ao seu React dApp

Algumas semanas atrás, participei do evento Polygon Guild Lagos onde Teju deu uma palestra sobre People Over Protocols e como podemos melhorar a experiência do usuário na Web3 antecipando as necessidades dos usuários.

Ela falou sobre sua experiência tentando fazer stake em um dApp, mas não conseguiu porque não tinha o token necessário. Além de expressar sua insatisfação, ela falou sobre como podemos melhorar essa experiência, facilitando o acesso dos usuários ao token necessário no aplicativo.

Isso ficou comigo e, desde então, considerei a acessibilidade de token ao criar qualquer produto web3. Portanto, decidi experimentar o Uniswap Labs Swap Widget para que os usuários possam trocar tokens no Protocolo Uniswap sem sair do meu dApp.

Enquanto trabalhava nisso, me deparei com alguns pequenos obstáculos e também aprendi sobre os problemas comuns que outros desenvolvedores enfrentaram ao vasculhar o servidor do discord da Uniswap. Então decidi escrever um guia amigável para iniciantes para que você não tenha que enfrentar os mesmos problemas que enfrentamos.

O widget de troca

Nos casos em que você precisa que seus usuários realizem transações em um token nativo (por exemplo, ENS), você precisa facilitar a obtenção do token sem sair do seu dApp. Isso ajudará a melhorar a experiência do usuário e também reduzirá a desistência devido à inacessibilidade de um token nativo.

Adicionar o widget Swap ao seu dApp é bastante simples e pode ser feito em apenas algumas linhas de código. Mas antes de entrarmos na implementação, aqui estão algumas coisas que você precisa para começar.

Endpoint do JSON-RPC

O endpoint JSON-RPC é necessário para buscar dados na cadeia e enviar transações. Se você já tiver um em seu DApp, pule esta etapa. Mas se você não fizer isso, você pode facilmente criar um em serviços como Infura ou Alchemy.

Aqui está um guia simples sobre como criar um no Infura:

Etapa 1: acesse o site da Infura e inscreva-se ou faça login na sua conta, se já tiver uma.

Image description

Step 2: Navegue até o seu painel e clique em CREATE NEW PROJECT

Step 3: Selecione um produto aplicável, dê um nome ao seu projeto e clique em CREATE.

Step 4: Role para baixo até Keys e copie o URL do endpoint ou o ID do projeto.

Bom trabalho! Você gerou com sucesso um endpoint JSON-RPC.

Provedor Web3

O widget Swap também precisa de um provedor web3 para buscar saldos e enviar transações por meio da carteira conectada do usuário. Se você estiver criando um DApp, precisará de um provedor web3.

Existem vários provedores que você pode escolher. Mas neste artigo, usaremos o ethers.

//instale a ethers librarynpm
install --save ethers

Fluxo de conexão da wallet

Você também precisa de um fluxo de conexão de carteira em seu aplicativo para que os usuários possam conectar suas carteiras para realizar transações. Existem várias bibliotecas que você pode usar (por exemplo, web3-react, wagmi, etc.). Para simplificar, estaremos nos conectando a uma carteira de navegador instalada pelo usuário, como metamask.

No entanto, só podemos fazer isso se o usuário tiver uma carteira instalada. Então, estaremos verificando a instalação da carteira usando metamask's,detect-provider library.

//instala a *metamask* detect-providernpm
install --save @metamask/detect-provider

Agora que preparamos nossos requisitos, vamos começar.

Adicionando a livraria de widgets

Para começar, instale a biblioteca de widgets e react-redux se você ainda não o tiver instalado.

//instalar o swap widgetnpm install --save
@uniswap/widgets react-redux oryarn add @uniswap/widgets react-redux

Importar dependências da App

// Guarda algumas variáveis states. 

import { useState } from 'react';//conecta ao nosso infura endpoint    
import { providers, ethers } from 'ethers';//verifica se a metamask está instalada no nosso browser.    
import detectEthereumProvider from '@metamask/detect-provider';//livraria de *widgets* da uniswap   
import { SwapWidget } from '@uniswap/widgets';

Enter fullscreen mode Exit fullscreen mode

Definir as Constantes

const infuraId = process.env.REACT_APP_INFURA_ID;  
const jsonRpcEndpoint = `https://mainnet.infura.io/v3/${infuraId}`;  
const jsonRpcProvider = new providers.JsonRpcProvider(jsonRpcEndpoint);  
const provider = new ethers.providers.Web3Provider(jsonRpcProvider);

Enter fullscreen mode Exit fullscreen mode

Definir estados das Variáveis


function App() {  const [account, setAccount] = useState({  
      address: '',  
      provider: provider,  
  })

Enter fullscreen mode Exit fullscreen mode

Criar a função connectWallet


async function connectWallet() {//verifica se a metamask esta  instalado no navegador   

const ethereumProvider = await detectEthereumProvider();  if (ethereumProvider) {  //aviso para o  usuário conectar o seu metamask 

  const accounts = await window.ethereum.request({  
        method: 'eth_requestAccounts',  
      })     const address = accounts[0];     setAccount({  
        address: address,  
        provider: ethereumProvider  
     })  
  }  
}

Enter fullscreen mode Exit fullscreen mode

Você pode estar se perguntando por que adicionamos um provedor quando ele seria atualizado de qualquer maneira. Aqui está o porquê 👇

Se não definirmos um provedor desde o início, nosso widget aparecerá dessa maneira quando carregarmos nosso aplicativo.

Adicionar Elementos Return

Por fim, adicionamos nossos elementos de retorno. Você pode ver aqui que o botão “Connect wallet” chama a função connectWallet onClick. O SwapWidget também recebe 2 parâmetros; o provedor e JsonRpcEndpoint.

return (  
  <div className="App">  
    <div>  
      <button onClick={connectWallet}>Connect Wallet</button>  
    </div>    <div className="Uniswap">  
      <SwapWidget  
        provider={account.provider}  
        JsonRpcEndpoint={jsonRpcEndpoint} />  
    </div>  
  </div>  
  );  
}


Enter fullscreen mode Exit fullscreen mode

Bom trabalho! Você adicionou com sucesso o Swap Widget ao seu dApp. Agora, você pode executar npm start para visualizar seu dApp.

vocé pode ver o código inteiro no GitHub.


import './App.css';

import { useState } from 'react';

import { providers, ethers } from 'ethers';

import detectEthereumProvider from '@metamask/detect-provider';

import { SwapWidget } from '@uniswap/widgets';

const infuraId = process.env.REACT_APP_INFURA_ID;

const jsonRpcEndpoint = `https://mainnet.infura.io/v3/${infuraId}`;

const jsonRpcProvider = new providers.JsonRpcProvider(jsonRpcEndpoint);

const provider = new ethers.providers.Web3Provider(jsonRpcProvider);

function App() {

const [account, setAccount] = useState({

address: '',

provider: provider,

})

async function connectWallet() {

const ethereumProvider = await detectEthereumProvider();

if (ethereumProvider) {

const accounts = await window.ethereum.request({

method: 'eth_requestAccounts',

})

const address = accounts[0];

setAccount({

address: address,

provider: ethereumProvider

})

}

}

return (

<div className="App">

<div>

<button onClick={connectWallet}>Connect Wallet</button>

</div>

<div className="Uniswap">

<SwapWidget

provider={account.provider}

JsonRpcEndpoint={jsonRpcEndpoint} />

</div>

</div>

);

}

export default App;

Enter fullscreen mode Exit fullscreen mode

Este artigo foi criado por Jelilat Anofiu e traduzido por aiengineer13 siga este link para ler o artigo original.

Top comments (0)