Ir para o conteúdo

Integrar RainbowKit a uma rede Tanssi

Introdução

RainbowKit é uma biblioteca React que adiciona conexão de carteiras a um dApp. Ela suporta várias carteiras e oferece recursos como alternar cadeias, resolver endereços ENS e exibir saldo. O RainbowKit traz opções de customização para cadeias compatíveis com EVM, facilitando conectar carteiras a redes personalizadas.

O RainbowKit agrupa várias ferramentas para simplificar a conexão de carteiras em um dApp:

  • Wagmi — hooks React para contas, carteiras, contratos, transações, assinatura, ENS e mais
  • viem — interface TypeScript com primitivas de baixo nível para interagir com Ethereum
  • WalletConnect — adiciona conexões criptografadas e UX aprimorada (ex.: conectar carteira móvel via QR)
  • TanStack Query — ajuda a gerenciar e atualizar estado de servidor no app

Usando essas peças juntas, você evita reimplementar fluxo de conexão, persistência de sessão, atualização de saldo e troca de redes, acelerando a entrega do dApp.

Este guia explica como adicionar o RainbowKit a um dApp em uma rede com tecnologia Tanssi usando a CLI, além de opções para personalizar a integração.

Início rápido

Para começar um projeto novo, o RainbowKit pode gerar um esqueleto via CLI com RainbowKit e Wagmi em uma aplicação Next.js. Use o gerenciador de pacotes de sua preferência:

npm init @rainbow-me/rainbowkit@latest
pnpm create @rainbow-me/rainbowkit@latest
yarn create @rainbow-me/rainbowkit

O script pedirá o nome do projeto, criará o diretório com o boilerplate e instalará as dependências.

npm init @rainbow-me/rainbowkit@latest 🌈 Welcome to RainbowKit! rainbow-demo 🚀 Creating a new RainbowKit app in /Users/papermoon/Documents/papermoon_builds/RainbowKit/add-rainbow-kit/rainbow-demo 📦 Installing dependencies with npm. This could take a while. 📚 Initializing git repository 🌈 Done! Thanks for using RainbowKit 🙏 👉 To get started, run cd rainbow-demo and then npm run dev

Em seguida, inicie o servidor de desenvolvimento e abra http://localhost:3000:

cd INSERT_PROJECT_NAME
npm run dev
cd INSERT_PROJECT_NAME
pnpm run dev
cd INSERT_PROJECT_NAME
yarn dev

Você verá a tela inicial:

Página inicial do projeto RainbowKit gerado

Abra o projeto no editor e veja o arquivo wagmi.ts. É nele que você configura as cadeias disponíveis para conexão.

Como a rede EVM demo é uma rede personalizada do Tanssi, ela não pode ser importada direto de wagmi/chains. Defina a cadeia manualmente em wagmi.ts.

Configuração para a rede EVM demo do Tanssi:

src/wagmi.ts
import '@rainbow-me/rainbowkit/styles.css';
import { getDefaultConfig, RainbowKitProvider } from '@rainbow-me/rainbowkit';
import { WagmiProvider } from 'wagmi';
import { QueryClientProvider, QueryClient } from '@tanstack/react-query';

import { type Chain } from 'viem'

export const demoEVMChain = {
  id: 5678,
  name: "Tanssi demo EVM Network",
  nativeCurrency: { name: "TANGO", symbol: "TANGO", decimals: 18 },
  rpcUrls: {
    default: { http: ['https://services.tanssi-testnet.network/dancelight-2001'] }
  },
  blockExplorers: {
    default: { name: 'Demo EVM Explorer', url: 'https://dancelight-2001-blockscout.tanssi-chains.network/' }
  },
} as const satisfies Chain


export const config = getDefaultConfig({
  appName: 'My Tanssi-powered Network',
  projectId: 'TODO: get project id from...',
  chains: [demoEVMChain], 
  ssr: true,
});

Atualize wagmi.ts conforme acima para suportar a rede demo. A próxima seção mostra como obter o projectId do WalletConnect.

Configuração manual

As seções seguintes mostram como integrar o RainbowKit em um app React existente: instalar dependências, configurar cadeias, disponibilizar o RainbowKit no dApp, definir a cadeia padrão do Connect Wallet e personalizar o tema. O exemplo usa a rede EVM demo do Tanssi, mas pode ser adaptado mudando o RPC.

Verificando pré-requisitos

  • Uma rede compatível com EVM no Tanssi
  • Um dApp existente em React
  • Exemplos do repositório RainbowKit (há templates para vários frameworks)
  • Para seguir este guia, crie um projeto Next.js (Typescript + App Router) seguindo a instalação automática em Next.js
  • A carteira deve suportar redes personalizadas (a rede demo será adicionada manualmente)
  • Um projectId do WalletConnect (gratuito):
    1. Vá em WalletConnect Cloud
    2. Em Projects, clique Create
    3. Preencha as informações (pode deixar Homepage URL em branco se não estiver deployado)
    4. Escolha o SDK AppKit
    5. Escolha o ambiente (React neste guia)
    6. Copie o projectId no menu lateral ou no snippet do Quickstart

Começando

Instale RainbowKit e dependências:

npm install @rainbow-me/rainbowkit wagmi viem@2.x @tanstack/react-query
pnpm install @rainbow-me/rainbowkit wagmi viem@2.x @tanstack/react-query
yarn add @rainbow-me/rainbowkit wagmi viem@2.x @tanstack/react-query

Suba o servidor de desenvolvimento:

npm run dev
pnpm run dev
yarn dev

Abra http://localhost:3000.

Para testar, conecte a carteira MetaMask na rede EVM demo do Tanssi. Adicione a rede no MetaMask:

  1. Configurações > Redes > Adicionar Rede
  2. Preencha:
  3. Nome: Demo EVM Chain
  4. RPC URL: https://services.tanssi-testnet.network/dancelight-2001/
  5. Chain ID: 5678
  6. Símbolo: TANGO
  7. Block Explorer: https://dancelight-2001-blockscout.tanssi-chains.network/

Para instruções detalhadas, veja Conecte o MetaMask à sua Rede EVM Tanssi.

Depois, adicione o projectId ao app:

  1. Crie .env.local na raiz:

    touch .env.local
    
  2. Adicione o ID:

    .env.local
    NEXT_PUBLIC_PROJECT_ID='INSERT_PROJECT_ID'
    
  3. Confirme que .env*.local está no .gitignore para evitar commit.

Se você usa vários ambientes (dev/homologação/prod), crie um projectId separado para cada um e valide se o domínio cadastrado no WalletConnect Cloud corresponde ao ambiente correto.

Conectar o dApp ao MetaMask

Passos principais:

  1. Importar RainbowKit, Wagmi e TanStack Query
  2. Configurar o Wagmi
  3. Envolver o app com providers
  4. Adicionar o botão de conexão

Seguir essa ordem garante que o estado de conexão e os modais do RainbowKit funcionem em toda a aplicação.

Importar RainbowKit, Wagmi e TanStack Query

Crie wagmi.ts na raiz com imports e a cadeia demo EVM:

touch wagmi.ts
wagmi.ts
import '@rainbow-me/rainbowkit/styles.css';
import { getDefaultConfig, RainbowKitProvider } from '@rainbow-me/rainbowkit';
import { WagmiProvider } from 'wagmi';
import { QueryClientProvider, QueryClient } from '@tanstack/react-query';

import { type Chain } from 'viem'

export const demoEVMChain = {
  id: 5678,
  name: "Tanssi demo EVM Network",
  nativeCurrency: { name: "TANGO", symbol: "TANGO", decimals: 18 },
  rpcUrls: {
    default: { http: ['https://services.tanssi-testnet.network/dancelight-2001'] }
  },
  blockExplorers: {
    default: { name: 'Demo EVM Explorer', url: 'https://dancelight-2001-blockscout.tanssi-chains.network/' }
  },
} as const satisfies Chain


export const config = getDefaultConfig({
  appName: 'My Tanssi-powered Network',
  projectId: 'process.env.NEXT_PUBLIC_PROJECT_ID',
  chains: [demoEVMChain ], 
  ssr: true,
});

Envolver o aplicativo com providers

Crie providers.tsx para incluir WagmiProvider e QueryClientProvider:

cd app && touch providers.tsx
providers.tsx
'use client';

import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { WagmiProvider } from 'wagmi';
import { RainbowKitProvider } from '@rainbow-me/rainbowkit';
import { config } from '../wagmi';

const queryClient = new QueryClient();

export function Providers({ children }: { children: React.ReactNode }) {
  return (
    <WagmiProvider config={config}>
      <QueryClientProvider client={queryClient}>
        <RainbowKitProvider>{children}</RainbowKitProvider>
      </QueryClientProvider>
    </WagmiProvider>
  );
}

Depois, edite app/layout.tsx para usar Providers:

layout.tsx
import type { Metadata } from 'next';
import { Inter } from 'next/font/google';
import './globals.css';
import '@rainbow-me/rainbowkit/styles.css';
import { Providers } from './providers';

const inter = Inter({ subsets: ['latin'] });

export const metadata: Metadata = {
  title: 'My Tanssi dApp',
  description: 'Generated by create next app',
};

export default function RootLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    <html lang='en'>
      <body>
        <Providers>{children}</Providers>
      </body>
    </html>
  );
}

Adicionar o botão Connect

Use o componente ConnectButton (pode ficar em page.tsx ou em um header/nav):

page.tsx
import { ConnectButton } from '@rainbow-me/rainbowkit';

export default function Home() {
  return (
    <div className="flex h-screen items-center justify-center">
      <ConnectButton />
    </div>
  );
}

Com o servidor rodando, aparecerá Connect Wallet; clicar abre o modal RainbowKit. Selecione MetaMask e conecte. A configuração padrão usa a Demo EVM Chain e mostra rede, saldo do token nativo e endereço.

Se você tiver vários botões ou páginas, considere criar um componente compartilhado para evitar duplicar lógica de conexão e estilização.

Personalizar o RainbowKit

O RainbowKit facilita a conexão e permite customizar UI/UX. Veja todas as opções na docs do RainbowKit. Aqui vamos definir a cadeia inicial e aplicar tema customizado.

Definir cadeia inicial

O RainbowKit conecta na primeira cadeia da lista do Wagmi. Melhor é usar initialChain no RainbowKitProvider. Em providers.tsx, defina:

providers.tsx
'use client';

import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { WagmiProvider } from 'wagmi';
import { RainbowKitProvider, darkTheme } from '@rainbow-me/rainbowkit';
import { config, demoEVMChain } from '../wagmi';

const queryClient = new QueryClient();

export function Providers({ children }: { children: React.ReactNode }) {
  return (
    <WagmiProvider config={config}>
      <QueryClientProvider client={queryClient}>
        <RainbowKitProvider initialChain={demoEVMChain}>
          {children}
        </RainbowKitProvider>
      </QueryClientProvider>
    </WagmiProvider>
  );

}

Isso força conectar primeiro na Demo EVM Chain.

Definir cores de tema

Use lightTheme, darkTheme ou midnightTheme. Exemplo com tema escuro customizado (adicione darkTheme ao import):

providers.tsx
'use client';

import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { WagmiProvider } from 'wagmi';
import { RainbowKitProvider, darkTheme } from '@rainbow-me/rainbowkit';
import { config, demoEVMChain } from '../wagmi';

const queryClient = new QueryClient();

export function Providers({ children }: { children: React.ReactNode }) {
  return (
    <WagmiProvider config={config}>
      <QueryClientProvider client={queryClient}>
        <RainbowKitProvider
          initialChain={demoEVMChain}
          theme={darkTheme({
            accentColor: '#189B9B', // Tanssi accent color
            accentColorForeground: 'white',
            borderRadius: 'medium',
            fontStack: 'system',
            overlayBlur: 'small'
          })}
        >
          {children}
        </RainbowKitProvider>
      </QueryClientProvider>
    </WagmiProvider>
  );
}

Campos: - accentColor — cor primária (ex.: #189B9B do Tanssi) - accentColorForeground — cor do texto sobre a primária - borderRadius — arredondamento - fontStack — fontes (ex.: system) - overlayBlur — desfoque de fundo em modais

Você pode ainda ajustar ícones, textos do modal e posição do botão criando um tema customizado ou sobrescrevendo componentes via props do ConnectButton.

Conselho

Teste temas e cores para combinar com o estilo do seu dApp.

Lidar com desconexões

Desconectar no dApp

O modal RainbowKit inclui Disconnect; clique na seta ao lado da conta e depois Disconnect.

Botão Desconectar integrado

Desconectar no MetaMask

  1. Abra a extensão MetaMask
  2. Clique nos três pontos (canto superior direito)
  3. Selecione Connected sites
  4. Revise e clique Disconnect nos sites desejados

Resultado final

O botão Connect Wallet deve usar a cor definida em accentColor; o modal também. Escolha MetaMask, assine e veja a rede EVM demo conectada com o saldo de TANGO sem precisar trocar manualmente.

Se desejar suportar redes adicionais, basta adicioná-las em wagmi.ts e fornecer RPCs confiáveis; o modal exibirá as opções no Switch Networks respeitando a ordem definida. Verifique também se os explorers configurados respondem corretamente para evitar erros de UX.

Customização de tema no modal

Mais opções estão na docs do RainbowKit. Código completo no repositório rainbowkit-manual-build-demo.

As informações apresentadas aqui foram fornecidas por terceiros e estão disponíveis apenas para fins informativos gerais. A Tanssi não endossa nenhum projeto listado e descrito no Site de Documentação da Tanssi (https://docs.tanssi.network/). A Tanssi Foundation não garante a precisão, integridade ou utilidade dessas informações. Qualquer confiança depositada nelas é de sua exclusiva responsabilidade. A Tanssi Foundation se exime de toda responsabilidade decorrente de qualquer confiança que você ou qualquer outra pessoa possa ter em qualquer parte deste conteúdo. Todas as declarações e/ou opiniões expressas nesses materiais são de responsabilidade exclusiva da pessoa ou entidade que as fornece e não representam necessariamente a opinião da Tanssi Foundation. As informações aqui não devem ser interpretadas como aconselhamento profissional ou financeiro de qualquer tipo. Sempre busque orientação de um profissional devidamente qualificado em relação a qualquer assunto ou circunstância em particular. As informações aqui podem conter links ou integração com outros sites operados ou conteúdo fornecido por terceiros, e tais sites podem apontar para este site. A Tanssi Foundation não tem controle sobre esses sites ou seu conteúdo e não terá responsabilidade decorrente ou relacionada a eles. A existência de qualquer link não constitui endosso desses sites, de seu conteúdo ou de seus operadores. Esses links são fornecidos apenas para sua conveniência, e você isenta e exonera a Tanssi Foundation de qualquer responsabilidade decorrente do uso dessas informações ou das informações fornecidas por qualquer site ou serviço de terceiros.
Última atualização: 9 de dezembro de 2025
| Criada: 9 de dezembro de 2025