NOVO: Helius adquire a Light Protocol
Controle de acesso por tokens na Solana — Um tutorial sobre Solana Mobile
Blog/Desenvolvimento

Controle de acesso por tokens na Solana — Um tutorial sobre Solana Mobile

Engenheiro de Integração0xSolanaGirl no X
8 min de leitura

Introdução

No início de 2023, a Solana Mobile lançou um smartphone com tecnologia blockchain. Agora, com mais de 15.000 ativações, o Solana Saga é um dispositivo Android personalizado que reforça a segurança on-chain com um cofre de seed no nível do chip, integrado à experiência da carteira. No entanto, a experiência de carteira móvel não é exclusiva do Saga. O mesmo adaptador de carteira móvel oferece um fluxo padronizado que reduz a complexidade para desenvolvedores que lançam aplicativos multiplataforma. Então, o que diferencia o Saga?

Como um rito de passagem para quem adquire um Saga, os usuários fazem o mint do Saga Genesis Token — um token NFT soulbound. A coleção de tokens fornece uma lista precisa dos endereços principais dos usuários do Solana Saga e permite ativações para a comunidade. O Saga Genesis Token tornou os airdrops para uma comunidade mais fáceis do que nunca. Ainda assim, com as carteiras dos usuários enchendo rapidamente como um brechó, talvez seja hora de explorar soluções personalizadas para engajar a comunidade de detentores do Saga. Uma possibilidade é desenvolver dApps com controle de acesso por tokens, oferecendo experiências personalizadas e exclusivas aos usuários. 

O controle de acesso por tokens é uma forma de exibir informações no lado do cliente com base nos tokens pertencentes à carteira conectada. Esse controle determina se uma pessoa pode acessar determinadas informações e pode ser usado para conceder acesso exclusivo a comunidades como a Saga DAO. Este tutorial aborda a criação de uma dApp na Solana com controle de acesso por tokens usando a DAS API da Helius e React Native, tendo o Saga Genesis Token como exemplo de coleção de acesso. O tutorial e a demonstração podem ser modificados para controlar o acesso com qualquer grupo de tokens, alterando os endereços e as condições dos tokens. O repositório no GitHub está disponível aqui: @helius_labs/saga-token-gating-tutorial.

Configuração do ambiente

Este tutorial usa uma configuração com um PC conectado ao Solana Saga por um cabo USBC. Se nenhum Saga estiver disponível, um emulador Android ou outros dispositivos Android também serão suficientes. Estas etapas podem ser ignoradas se você estiver testando em um Saga com o modo de desenvolvedor ativado e tiver as ferramentas do Android SDK e a versão mais recente do NodeJS instaladas no PC.

Para configurar um Saga para desenvolvimento móvel, acesse as configurações e pesquise por Número da versão. Toque na opção sete vezes até que a mensagem “Agora você é um desenvolvedor!” apareça. Pesquise e ative Opções do desenvolvedor e, no mesmo menu suspenso, ative Depuração USB.

No computador, verifique se o NodeJS está instalado e atualizado para a versão v20.9.0. Instale a ferramenta Android SDK e defina a variável ANDROID_HOME.

Usando o Git Bash, clone o repositório da demonstração do GitHub da Helius e abra-o em um editor de código. Use o prompt de comando do Git Bash para acessar a pasta app com cd e execute yarn para instalar o aplicativo. Para executar o aplicativo, insira o comando a seguir com um dispositivo conectado ou com o emulador Android em execução.

Código
yarn react-native run-android

Controle de acesso por tokens no Solana Saga

Uma visão geral do fluxo de controle de acesso por tokens:

  1. Um usuário autoriza uma sessão com sua carteira, fornecendo a chave pública à dApp.
  2. A dApp obtém dados do endpoint searchAssets da DAS API.
  3. O JSON da resposta é desestruturado para acessar os resultados.
  4. Os resultados são validados e a propriedade dos tokens é determinada.
  5. O estado de verificação é definido, e o cliente é renderizado de acordo.

Vamos analisar o código. Primeiro, começamos construindo a solicitação para a DAS API da Helius a fim de receber informações sobre o usuário e a propriedade do Solana Genesis Token.

Para receber informações sobre o Saga Genesis Token, a variável SagaGenesisToken é definida como o endereço do token da coleção. Substitua essa variável por outro endereço de token para controlar o acesso com outras coleções.

Uma chave da Helius API é necessária para a solicitação e foi deixada em branco intencionalmente no tutorial. A melhor prática para proteger a chave é usar um servidor proxy para encaminhar as solicitações. O repositório @helius_labs/helius_rpc_proxy contém um worker do Cloudflare que pode ser implantado com um clique e usado como uma URL RPC, ocultando a chave da API.

Código
import { PublicKey } from "@solana/web3.js";

export default async function findSagaGenesisToken(address: PublicKey) {
  // Replace this with the token address you want to gate for
  const SagaGenesisToken = '46pcSL5gmjBrPqGKFaLbbCmR6iVuLJbnQy13hAe7s6CC';

  // Populate your Helius API key
  const HELIUS_APIKEY = '';
  const url = `https://mainnet.helius-rpc.com/?api-key=${HELIUS_APIKEY}`

  const response = await fetch(url, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      jsonrpc: '2.0',
      id: 'my-id',
      method: 'searchAssets',
      params: {
        ownerAddress: address.toString(),
        grouping: ["collection", SagaGenesisToken],
        page: 1,
        limit: 10
      },
    }),
  });

  const { result } = await response.json();
  return (result.items)
};

A função findSagaGenesisToken recebe o endereço da carteira do usuário como argumento e o utiliza nos parâmetros da solicitação POST enviada à URL RPC da Helius.

Essa solicitação usa o método searchAssets para consultar os ativos pertencentes a ownerAddress e agrupados por um collection específico. Em seguida, a resposta da API é estruturada como JSON e desestruturada para acessar o resultado.

A resposta a seguir mostra a propriedade do Saga Genesis Token:

Código
{
   "items":[
      {
         "authorities":[Array],
         "burnt":false,
         "compression":[Object],
         "content":[Object],
         "creators":[Array],
         "grouping":[Array],
         "id":[Token_Address],
         "interface":"V1_NFT",
         "mutable":true,
         "ownership":[Object],
         "royalty":[Object],
         "supply":[Object]
      }
   ],
   "limit":10,
   "page":1,
   "total":1
}

Esta é a resposta para uma carteira sem o Saga Genesis Token:

Código
{
   "items":[],
   "limit":10,
   "page":1,
   "total":0
}

Para usar essa função, acesse a pasta screens e encontre MainScreen.tsx. O aplicativo renderiza esse componente funcional como a tela principal, onde componentes adicionais, como a função, podem ser importados e usados na interface do usuário.

Para chamar a função de controle de acesso por tokens, importe e insira a função findSagaGenesisToken em uma função de callback. Aqui, a função recebe o nome handleConnectPress(), pois a função de callback é invocada quando os usuários pressionam o botão de conexão.

Código
// Checks if the user's wallet has a Saga Genesis Token
const handleConnectPress = useCallback(async () => {
  return await transact(async (wallet: Web3MobileWallet) => {
    const authorizationResult = await authorizeSession(wallet);

    const message = "Confirm that you own this wallet.";
    const messageBuffer = new Uint8Array(
      message.split("").map((c) => c.charCodeAt(0))
    );

    const signedMessages = await wallet.signMessages({
      addresses: [authorizationResult.address],
      payloads: [messageBuffer],
    });

    const verified = sign.detached.verify(
      messageBuffer,
      signedMessages[0],
      authorizationResult.publicKey.toBytes()
    );

    if (verified) {
      const result = await findSagaGenesisToken(authorizationResult.publicKey);

      // Checks that user has exactly 1 Saga Genesis Token
      if (result.length === 1) {
        setVerified(true);
      } else {
        setVerified(false);
      }
    } else {
      setVerified(false);
    }
  });
}, [authorizeSession]);

Dentro da função de callback assíncrona, invoque a função transact de @solana-mobile/mobile-wallet-adapter para expor o objeto Web3MobileWallet, que pode ser usado para autorizar uma sessão.

O protocolo percorrerá as carteiras disponíveis, usando a Phantom como padrão, e iniciará uma sessão na qual o usuário deverá autorizar o aplicativo na interface da carteira antes de ser redirecionado de volta ao aplicativo. O usuário deve assinar uma mensagem para validar a propriedade da carteira.

Para este tutorial, a verificação ocorre no lado do servidor. No entanto, em aplicativos de produção, a mensagem deve ser verificada no backend por meio de uma API para garantir a legitimidade da propriedade da conta.

Quando a carteira do usuário é autorizada, sua chave pública pode ser recuperada desestruturando os resultados autorizados. A publicKey agora pode ser usada para pesquisar a propriedade do Saga Genesis Token.

Chamar findSagaGenesisToken com a chave pública do usuário envia uma solicitação à DAS API e retorna os resultados dos tokens encontrados em um array. Se o usuário tiver exatamente um Saga Genesis Token, defina o estado de verificação como verdadeiro. Caso contrário, o estado de verificação será definido como falso. 

Com o estado de verificação, renderize telas e componentes de forma condicional. Neste tutorial, os estados são: aguardando conexão, verificado e não verificado.

Encontre a lógica de renderização condicional em Mainscreen.tsx, uma representação simplificada de como exibir informações com base no estado de verificação. O repositório do GitHub pode ser modificado ou usado como referência para outras personalizações. Um exemplo de implementação seria conectar o controle de acesso por tokens ao React Native Navigation para navegar condicionalmente entre as telas.

Aplicações do controle de acesso por tokens

O controle de acesso por tokens é um conceito inovador introduzido pela Web3, no qual a propriedade de ativos concede direitos de acesso a conteúdo. Essa lógica se aplica a setores como segurança, bens de consumo, publicação e distribuição.

Ferramentas de segurança do Discord usam o controle de acesso por tokens para oferecer às comunidades acesso limitado com base na propriedade e na quantidade de tokens.

No setor de bens e serviços de consumo, o controle de acesso por tokens permite que comerciantes ofereçam cupons, descontos e oportunidades de compra às comunidades.

Isso aumenta a utilidade da propriedade de ativos e cria uma forma mais tangível de usar ativos digitais em aplicações no mundo real.

A propriedade de ativos impulsiona os setores de mídia e conteúdo ao monetizar a propriedade e oferecer experiências personalizadas.

Veja algumas opções que podem ser criadas com controle de acesso por tokens:

  • Códigos de indicação e cupons exclusivos
  • Blog no estilo Substack
  • Reivindicações de airdrops 
  • Dashboards privados 
  • dApps de narrativa gamificada
  • Chats secretos em grupo 
  • Pesquisa on-chain
  • Benefícios e eventos personalizados em jogos

A grande vantagem do controle de acesso por tokens com a DAS API é que qualquer token pode ser usado. Um aplicativo DeFi poderia exigir que os usuários tivessem uma quantidade mínima de Solana para obter acesso, assim como um chat em grupo de NFT exige que seus membros comprovem que possuem um número mínimo de tokens. A mesma lógica com a DAS API permite controlar o acesso a uma dApp usando tokens SPL, NFTs, SFTs, SBTs e cNFTs.

Conclusão

Este tutorial oferece uma visão geral simplificada do uso da DAS API para controlar o acesso por tokens em dApps criadas com React Native. A lógica pode ser aplicada a qualquer coleção ou token e adaptada a casos de uso específicos. As experiências com controle de acesso por tokens oferecem exclusividade e valor às comunidades, enquanto o Saga Genesis Token viabiliza airdrops para uma comunidade forte e cria muitas oportunidades para criadores e usuários. A Web3 introduz a propriedade autocustodiada de bens digitais. Isso resulta no surgimento de comunidades unidas pela propriedade de ativos. Como o Solana Saga combina tecnologias físicas e digitais para oferecer uma experiência nativa da Solana, é necessário criar aplicativos que aprimorem e recompensem essa experiência. Além dos ganhos, o controle de acesso por tokens promove o uso da propriedade de ativos digitais na nova era da internet.

Quer mais conteúdo sobre o desenvolvimento de dApps móveis para o Saga? Junte-se aos mais de 15.000 proprietários do Saga na Saga DAO e seja uma das primeiras pessoas a conhecer os lançamentos, benefícios e recompensas mais recentes de dApps. Se este tutorial sobre controle de acesso por tokens inspirou estratégias de implementação, converse com a comunidade de desenvolvedores no Discord da Helius e acompanhe as novidades no blog da Helius. Acelere a adoção da blockchain e desenvolva com a tecnologia de maior desempenho usando a Helius.

Recursos adicionais

Assine a Helius

Acompanhe as novidades mais recentes do desenvolvimento Solana e receba atualizações quando publicarmos

Imagem ampliada