Um dos problemas no desenvolvimento de contratos inteligentes é gerar valores aleatórios. Imagine um cenário em que você tem um jogo de loteria e deseja escolher um vencedor aleatório de um grupo de 1000 participantes.
Neste ponto, você tem uma função que gera um vencedor aleatório. Digamos que você tenha uma implementação de função como o trecho de código abaixo;
function getRandomWinner() external returns (uint randomNo) {
uint256 _ran = uint(keccak256(abi.encodePacked("joe", block.timestamp))) % particpants.length;
ran = uint8(_ran);
return ran;
}
Qualquer pessoa com conhecimento básico de Solidity pode prever o valor aleatório que será gerado em um momento específico, apenas obtendo o contrato do seu jogo de loteria implantado e chamando sua função getRandomNumber para prever o número aleatório e reivindicar as recompensas que o vencedor deveria receber.
Essa falha torna seu contrato inteligente vulnerável a violações de segurança, pois block.timestamp é uma variável global e está disponível para todos.
Esta é a primeira parte de uma série na qual pretendo explicar como resolveremos o problema da aleatoriedade usando a Chainlink VRF. Eu vou guiá-lo através do uso de dois contratos inteligentes diferentes (um jogo NFT e uma loteria).
Nesta primeira parte, vou mostrar como configurar uma conta de assinatura na Chainlink e como adicionar o endereço do seu contrato inteligente como consumidor.
Ao usar a Chainlink VRF, pretendemos resolver o problema da aleatoriedade em contratos inteligentes.
O que é a ChainLink?
A Chainlink é a plataforma padrão da indústria de serviços Web3 que possibilitou trilhões de dólares em volume de transações em DeFi, seguros, jogos, NFTs e outras grandes indústrias. Como a principal rede de oráculos descentralizados, a Chainlink permite que os desenvolvedores criem aplicativos Web3 ricos em recursos com acesso fácil a dados do mundo real e computação fora da cadeia em qualquer blockchain, além de fornecer a empresas globais um gateway universal para todas as blockchains.
A Chainlink pode ser usada por contratos inteligentes para buscar dados de:
- Mercado
- Clima
- Esportes
- Automação
- Aleatoriedade
- Qualquer API Externa
O que é a ChainLink VRF?
A Chainlink VRF (Verifiable Random Function ou Função Aleatória Verificável) é um gerador de números aleatórios (RNG) provavelmente justo e verificável que permite que contratos inteligentes acessem valores aleatórios sem comprometer segurança ou usabilidade. Para cada solicitação, a Chainlink VRF gera um ou mais valores aleatórios e prova criptográfica de como esses valores foram determinados.
Existem dois métodos para acessar a Chainlink VRF - Método de Assinatura e Financiamento Direto. Mas neste artigo, vou me concentrar no método de assinatura.
Vamos configurar o nosso na rede Goerli.
Então, siga para este link -> https://vrf.chain.link/goerli
Em seguida, você pode conectar sua carteira - isso está no botão no canto superior direito da página.
Depois, clique no botão "Create Subscription" (Criar Assinatura). Isso o levará a uma página como a abaixo:
Seu endereço da carteira é automaticamente preenchido no campo de entrada de endereço. Você tem a opção de adicionar seu e-mail, bem como um nome de projeto.
Clique no botão "Create Subscription", um modal aparece.
Sua carteira é exibida, exigindo que você assine uma mensagem, confirmando que você pretende criar uma assinatura.
Sua solicitação foi recebida e aguarda confirmação. Após a confirmação, você verá a tela abaixo:
Isso significa que você configurou com sucesso sua assinatura. Nossa assinatura não tem LINK. Precisamos adicionar fundos que serão usados para interagir com a Chainlink.
Tudo o que você precisa fazer é clicar no botão "Add Funds" (Adicionar Fundos), que o redirecionará para a tela abaixo.
Se você já possui tokens LINK, pode simplesmente adicioná-los de sua carteira. Caso contrário, você pode obter alguns Chainlink Ethereum Goerli Faucet (Goerli, no sentido de que criamos nossa assinatura na rede Goerli).
Ao clicar no texto destacado (Visite a Chainlink Ethereum Goerli Faucet), você será redirecionado para o link (https://faucets.chain.link/goerli), onde obterá 20 LINK de teste na rede de testes.
Você provavelmente obteve alguns tokens LINK agora. Ótimo trabalho.
Agora, na sua página de assinatura, você terá uma seção que tem um botão para adicionar o consumidor. O que isso significa?
Consumidores são basicamente contratos inteligentes aos quais você deu permissão para usar seus tokens LINK para interagir com a Chainlink. Em vez desses contratos inteligentes terem que pagar por solicitações de dados da Chainlink (Financiamento Direto), eles obtêm dados por meio do seu gateway de assinatura.
O método de assinatura é muito melhor em um cenário em que você terá um contrato fazendo inúmeras solicitações à Chainlink. Também no caso em que você tem vários contratos e seus contratos não possuem tokens LINK. Através do seu gateway de assinatura, isso é tratado.
Observe que, para cada assinatura, você pode adicionar um número máximo de 100 consumidores. Se você tiver mais de 100 consumidores, precisará criar outra assinatura.
Ótimo trabalho, você conseguiu configurar um canal de assinatura na Chainlink. Usaremos a ID e outras variáveis para configurar dois contratos inteligentes que obtêm valores aleatórios da Chainlink.
Parte II - A Lottery Game using Solidity and ChainLink VRF
Parte III - An NFT Minting Contract with unique attributes
Artigo escrito por Joe. Traduzido por Marcelo Panegali.
Latest comments (0)