WEB3DEV

Cover image for Criando uma Comunidade com Acesso por Token para Shows ao Vivo com o QuickNode: Um tutorial passo a passo
Panegali
Panegali

Posted on

Criando uma Comunidade com Acesso por Token para Shows ao Vivo com o QuickNode: Um tutorial passo a passo

Desbloqueando Experiências Exclusivas de Shows ao Vivo com Tecnologia Blockchain e o QuickNode


SUMÁRIO

Pré-requisitos

Passo 1: Configurando o projeto

1.1 Instalando dependências

1.2 Criando um novo projeto Truffle

1.3 Instalando a biblioteca OpenZeppelin Contracts

1.4 Criando o contrato FanToken

1.5 Configurando o projeto Truffle

Passo 2: Desenvolvendo um contrato inteligente para a comunidade com acesso tokenizado

2.1 Criando o contrato da comunidade

2.2 Configurando a implantação para o contrato da comunidade

2.3 Implantando o contrato da comunidade

Passo 3: Criando uma interface frontend

3.1 Configurando um projeto React

3.2 Instalando dependências

3.3 Criando um componente Web3Modal

3.4 Criando um componente para a comunidade com acesso tokenizado

3.5 Atualizando o componente App

Passo 4: Executando o frontend

Passo 5: Adicionando acesso para o show ao vivo no componente TokengatedCommunityComponent

Passo 6: Adicionando o status do show ao contrato da comunidade

Repositório no Github

Conclusão


Neste tutorial detalhado, vamos analisar o processo de construção de uma comunidade com acesso tokenizado para shows ao vivo usando o QuickNode. Vamos criar um token personalizado na rede Ethereum, desenvolver um contrato inteligente para a comunidade e projetar uma interface frontend utilizando a API do QuickNode. Esta plataforma permitirá que os organizadores de shows ofereçam acesso exclusivo a shows ao vivo para detentores de tokens.

Pré-requisitos

Compreensão básica de Ethereum, Solidity e contratos inteligentes.

Familiaridade com JavaScript e desenvolvimento Web.

Node.js e npm instalados em sua máquina local.

MetaMask ou outra carteira compatível com Ethereum.

Passo 1: Configurando o projeto

Como nosso primeiro passo, vamos criar um contrato inteligente em Solidity para o token que usaremos posteriormente para o acesso controlado.

1.1 Instalando dependências

Primeiro, certifique-se de ter o Node.js instalado. Recomendo usar a versão mais recente LTS (Suporte de Longo Prazo). Você pode instalá-la com os seguintes comandos:

nvm install --lts
nvm use --lts
Enter fullscreen mode Exit fullscreen mode

Em seguida, instale o Truffle, um popular framework de desenvolvimento para Ethereum, globalmente:

npm install -g truffle
Enter fullscreen mode Exit fullscreen mode

1.2 Criando um novo projeto Truffle

Crie um novo diretório para o seu projeto e inicialize um novo projeto Truffle:

mkdir tokengated-community
cd tokengated-community
truffle init
Enter fullscreen mode Exit fullscreen mode

1.3 Instalando a biblioteca OpenZeppelin Contracts

Para criar o FanToken (FTK) personalizado, usaremos a biblioteca OpenZeppelin Contracts, que fornece uma implementação segura e auditada do padrão de token ERC20. Instale a biblioteca como uma dependência:

npm install @openzeppelin/contracts
Enter fullscreen mode Exit fullscreen mode

1.4 Criando o contrato FanToken

Crie um novo arquivo chamado FanToken.sol no diretório contracts e adicione o seguinte código:

pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract FanToken is ERC20 {
    constructor(uint256 initialSupply) ERC20("FanToken", "FTK") {
        _mint(msg.sender, initialSupply);
    }
}
Enter fullscreen mode Exit fullscreen mode

1.5 Configurando o projeto Truffle

Abra o arquivo truffle-config.js no diretório raiz do seu projeto e atualize a seção compilers para usar a versão correta do Solidity, que deve coincidir com a versão especificada no seu arquivo FanToken.sol. Neste caso, defina-a como 0.8.0 ou superior:

compilers: {
  solc: {
    version: "^0.8.0", // Atualize esta linha para a versão correta
    settings: {
      optimizer: {
        enabled: true,
        runs: 200
      }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Salve o arquivo truffle-config.js.

Passo 2: Desenvolvendo um contrato inteligente para a comunidade com acesso tokenizado

Agora que criamos o contrato FanToken e configuramos corretamente o projeto Truffle, podemos prosseguir com os passos subsequentes para criar o contrato da comunidade com acesso tokenizado e desenvolver a interface frontend para acesso aos shows ao vivo.

2.1 Criando o contrato da comunidade

No diretório contracts, crie um novo arquivo chamado TokengatedCommunity.sol e adicione o seguinte código Solidity para criar um contrato inteligente que governa as regras da comunidade com acesso tokenizado:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract TokengatedCommunity is Ownable {
    IERC20 public fanToken;
    uint256 public entryTokenAmount;

    mapping(address => bool) public members;

    event MemberJoined(address indexed member);

    constructor(address _fanToken, uint256 _entryTokenAmount) {
        fanToken = IERC20(_fanToken);
        entryTokenAmount = _entryTokenAmount;
    }

    function joinCommunity() external {
        require(!members[msg.sender], "Already a member");
        require(fanToken.balanceOf(msg.sender) >= entryTokenAmount, "Insufficient token balance");

        members[msg.sender] = true;
        emit MemberJoined(msg.sender);
    }

    function setEntryTokenAmount(uint256 _newEntryTokenAmount) external onlyOwner {
        entryTokenAmount = _newEntryTokenAmount;
    }

    function isMember(address _user) external view returns (bool) {
        return members[_user];
    }
}
Enter fullscreen mode Exit fullscreen mode

2.2 Configurando a implantação para o contrato da comunidade

No diretório migrations, crie um novo arquivo chamado 3_deploy_community.js e adicione o seguinte código para implantar o contrato da comunidade:

const TokengatedCommunity = artifacts.require("TokengatedCommunity");
const FanToken = artifacts.require("FanToken");

module.exports = async function (deployer, _network, accounts) {
  const tokenInstance = await FanToken.deployed();
  await deployer.deploy(TokengatedCommunity, tokenInstance.address, "1000000000000000000"); // Define o valor inicial do token de entrada para 1 FTK
};
Enter fullscreen mode Exit fullscreen mode

2.3 Implantando o contrato da comunidade

Execute o seguinte comando para implantar o contrato da comunidade na rede principal da Ethereum:

truffle migrate --network mainnet
Enter fullscreen mode Exit fullscreen mode

Anote o endereço do contrato da comunidade implantado para uso futuro.

Passo 3: Criando uma interface frontend

O contrato está pronto para uso; agora precisamos de uma interface de usuário (UI).

3.1 Configurando um projeto React

Crie um novo projeto React usando o create-react-app:

npx create-react-app tokengated-community-frontend
cd tokengated-community-frontend
Enter fullscreen mode Exit fullscreen mode

3.2 Instalando dependências

Instale as dependências necessárias para o frontend:

npm install ethers web3modal @openzeppelin/contracts
Enter fullscreen mode Exit fullscreen mode

3.3 Criando um componente Web3Modal

No diretório src, crie um novo arquivo chamado Web3Modal.js e adicione o seguinte código para criar um componente Web3Modal que se conecta às carteiras Ethereum:

import React, { useState, useEffect } from "react";
import Web3Modal from "web3modal";
import { ethers } from "ethers";

const Web3ModalComponent = () => {
  const [provider, setProvider] = useState(null);

  useEffect(() => {
    async function initWeb3Modal() {
      const web3Modal = new Web3Modal();
      const _provider = await web3Modal.connect();
      setProvider(new ethers.providers.Web3Provider(_provider));
    }

    if (!provider) {
      initWeb3Modal();
    }
  }, [provider]);

  return (
    <div>
      {provider ? (
        <div>Connected to Ethereum</div>
      ) : (
        <div>Connect to your Ethereum wallet</div>
      )}
    </div>
  );
};

export default Web3ModalComponent;

Enter fullscreen mode Exit fullscreen mode

3.4 Criando um componente para a comunidade com acesso tokenizado

No diretório src, crie um novo arquivo chamado TokengatedCommunity.js e adicione o seguinte código para criar um componente que permite aos usuários ingressar na comunidade e visualizar conteúdo exclusivo:

import React, { useState, useEffect } from "react";
import { ethers } from "ethers";
import FanToken from "./contracts/FanToken.json";
import TokengatedCommunity from "./contracts/TokengatedCommunity.json";

const ComponenteComunidadeTokenizada = ({ provider }) => {
  const [userAddress, setUserAddress] = useState("");
  const [isMember, setIsMember] = useState(false);
  const [fanTokenContract, setFanTokenContract] = useState(null);
  const [communityContract, setCommunityContract] = useState(null);

  useEffect(() => {
    async function initContracts() {
      if (provider) {
        const signer = provider.getSigner();
        const user = await signer.getAddress();
        setUserAddress(user);

        const fanToken = new ethers.Contract(FanToken.networks[1].address, FanToken.abi, signer);
        setFanTokenContract(fanToken);

        const community = new ethers.Contract(TokengatedCommunity.networks[1].address, TokengatedCommunity.abi, signer);
        setCommunityContract(community);

        const _isMember = await community.isMember(user);
        setIsMember(_isMember);

      }

    }

    initContracts();
  }, [provider]);

  async function joinCommunity() {
    if (communityContract) {
      await communityContract.joinCommunity();
      setIsMember(true);

    }

  }

  return (
    &lt;div>
      {isMember ? (
        &lt;div>
          &lt;h2>Bem-vindo à área de conteúdo exclusivo!&lt;/h2>
          &lt;p>Aqui, você pode acessar conteúdo exclusivo e interagir com o artista.&lt;/p>
        &lt;/div>
      ) : (
        &lt;div>
          &lt;h2>Junte-se à Comunidade Tokenizada&lt;/h2>
          &lt;p>
            Para acessar conteúdo exclusivo, você deve possuir pelo menos 1 FTK em sua carteira.
          &lt;/p>
            &lt;button onClick={joinCommunity}>Juntar-se à Comunidade&lt;/button>
        &lt;/div>
    )}
    &lt;/div>
     );
  };    

export default ComponenteComunidadeTokenizada;
Enter fullscreen mode Exit fullscreen mode

3.5 Atualizando o componente App

Atualize o arquivo src/App.js para incluir os componentes Web3Modal e TokengatedCommunity:

import React, { useState } from "react";
import Web3ModalComponent from "./Web3Modal";
import TokengatedCommunityComponent from "./TokengatedCommunity";

function App() {
  const [provider, setProvider] = useState(null);

  const handleProvider = (newProvider) => {
    setProvider(newProvider);
  };

  return (
    &lt;div>
      &lt;Web3ModalComponent onProvider={handleProvider} />
      &lt;TokengatedCommunityComponent provider={provider} />
    &lt;/div>
  );
}

export default App;
Enter fullscreen mode Exit fullscreen mode

Passo 4: Executando o frontend

Inicie o servidor de desenvolvimento do React para executar o frontend:

npm start
Enter fullscreen mode Exit fullscreen mode

A plataforma da comunidade tokenizada está agora acessível em http://localhost:3000. Os usuários podem conectar suas carteiras Ethereum, entrar na comunidade e acessar conteúdo exclusivo.

Passo 5: Adicionando acesso para o show ao vivo no componente TokengatedCommunityComponent

No diretório src, modifique o arquivo TokengatedCommunity.js para criar um componente que permite aos usuários entrar na comunidade e acessar o stream exclusivo do show ao vivo.

Primeiro, dentro da função TokengatedCommunityComponent, adicione uma nova variável de estado isConcertLive para gerenciar o status do show ao vivo:

const [isConcertLive, setIsConcertLive] = useState(false);
Enter fullscreen mode Exit fullscreen mode

Em seguida, adicione o seguinte gancho useEffect dentro da função TokengatedCommunityComponent, após o gancho useEffect existente, para verificar periodicamente se o show está ao vivo:

useEffect(() => {
  async function checkConcertStatus() {
    if (communityContract) {
      const liveStatus = await communityContract.isConcertLive();
      setIsConcertLive(liveStatus);
    }
  }

  const intervalId = setInterval(() => {
    checkConcertStatus();
  }, 5000);

  return () => clearInterval(intervalId);
}, [communityContract]);
Enter fullscreen mode Exit fullscreen mode

Atualize a declaração de retorno da função TokengatedCommunityComponent para exibir o stream do show ao vivo para os membros quando o show está ao vivo:

return (
  &lt;div>
    {isMember ? (
      &lt;div>
        {isConcertLive ? (
          &lt;div>
            &lt;h2>Bem-vindo ao show ao vivo exclusivo!&lt;/h2>
            &lt;p>
              Aproveite o stream ao vivo e o conteúdo exclusivo disponível
              apenas para os detentores de tokens.
            &lt;/p>
            {/* Incorporar o stream do show ao vivo aqui */}
          &lt;/div>
        ) : (
          &lt;div>
            &lt;h2>Show ao Vivo Exclusivo em Breve&lt;/h2>
            &lt;p>
              Como membro da comunidade tokenizada, você terá acesso ao show
              ao vivo quando ele começar.
            &lt;/p>
          &lt;/div>
        )}
      &lt;/div>
    ) : (
      &lt;div>
        &lt;h2>Junte-se à Comunidade Tokenizada&lt;/h2>
        &lt;p>
          Para acessar o show ao vivo exclusivo, você deve possuir pelo
          menos 1 FTK em sua carteira.
        &lt;/p>
        &lt;button onClick={joinCommunity}>Juntar-se à Comunidade&lt;/button>
      &lt;/div>
    )}
  &lt;/div>
);
Enter fullscreen mode Exit fullscreen mode

Com essas alterações, o TokengatedCommunityComponent agora permitirá que os usuários acessem a transmissão exclusiva do show ao vivo quando ele estiver disponível.

Passo 6: Adicionando o status do show ao contrato da comunidade

No contrato TokengatedCommunity, adicione a nova variável de estado e a função para gerenciar o status do show ao vivo:

Adicione uma nova variável de estado, isConcertLive, para gerenciar o status do show ao vivo:

bool public isConcertLive;
Enter fullscreen mode Exit fullscreen mode

Adicione uma nova função, setConcertStatus, para permitir que o proprietário do contrato defina o status ao vivo do show:

function setConcertStatus(bool _isConcertLive) external onlyOwner {
    isConcertLive = _isConcertLive;
}
Enter fullscreen mode Exit fullscreen mode

Seu contrato TokengatedCommunity atualizado deve incluir a variável de estado isConcertLive e a função setConcertStatus.

Implante o contrato atualizado na rede Ethereum usando o Truffle, conforme descrito nos passos anteriores.

GitHub Repo

Conclusão

Neste tutorial, demonstramos como criar uma plataforma de comunidade tokenizada com um recurso exclusivo de show ao vivo para os membros, utilizando o QuickNode como infraestrutura poderosa e confiável de nós Ethereum. Cobrimos os passos essenciais para configurar contratos inteligentes, implantá-los na rede Ethereum e criar uma aplicação frontend React para interagir com os contratos inteligentes.

Ao concluir este tutorial, você aprendeu a construir uma aplicação descentralizada que oferece conteúdo exclusivo para detentores de tokens, como shows ao vivo e como gerenciar o acesso a esse conteúdo com base na posse de tokens. Os nós Ethereum de alto desempenho do QuickNode facilitam o desenvolvimento e a escalabilidade de várias aplicações blockchain, garantindo interações rápidas e confiáveis com a rede Ethereum.

Você pode expandir a plataforma adicionando recursos como salas de chat, fóruns ou vendas de mercadorias exclusivas para envolver ainda mais sua comunidade e incentivar a posse de tokens. As possibilidades são vastas e você pode aplicar as habilidades que adquiriu neste tutorial para construir várias plataformas e comunidades alimentadas por tokens, aproveitando a infraestrutura do QuickNode para uma experiência de desenvolvimento perfeita.

Clique aqui para saber mais sobre o QuickNode.


Artigo escrito por Patrick Skinner. Traduzido por Marcelo Panegali.

Top comments (0)