Como criar um aplicativo para aluguel de bicicletas na Binance | Travis Rodgers | Skillshare

Velocidade de reprodução


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Como criar um aplicativo para aluguel de bicicletas na Binance

teacher avatar Travis Rodgers, Freelance Web Developer

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Aulas neste curso

    • 1.

      Visão geral de boas-vindas e projeto

      8:07

    • 2.

      Como criar nosso contrato inteligente

      48:10

    • 3.

      Como finalizar nosso contrato inteligente

      30:31

    • 4.

      Configuração de projetos e construção do FrontEnd

      24:26

    • 5.

      Como criar o painel

      35:25

    • 6.

      Como conectar MetaMask e falar com nosso contrato

      60:19

    • 7.

      Como criar o formulário Adicionar locatário

      33:29

    • 8.

      Populate final de painel

      37:23

    • 9.

      Como otimizar as verificações de interface e segurança

      38:50

    • 10.

      Recursos de bônus de proprietário

      2:37

  • --
  • Nível iniciante
  • Nível intermediário
  • Nível avançado
  • Todos os níveis

Gerado pela comunidade

O nível é determinado pela opinião da maioria dos estudantes que avaliaram este curso. Mostramos a recomendação do professor até que sejam coletadas as respostas de pelo menos 5 estudantes.

196

Estudantes

--

Projeto

Sobre este curso

Crie um aplicativo para aluguel de bicicletas na Binance Smart Chain usando Solidity para o contrato inteligente e React/Ethers.js no front-end. Um projeto sólido para seu portfólio Web3.

Você está procurando um projeto Web3 exclusivo para adicionar ao seu portfólio?

Talvez você esteja procurando mais prática com Solidity, Ethers.js, ou apenas desenvolvimento de blockchain em geral?

Ou talvez você esteja cansado de usar Ether em seus projetos e quer explorar a Binance Smart Chain (e suas baixas taxas de gás)?

Bem, este projeto verifica todos os três fora da lista.

Neste aplicativo de aluguel de bicicletas descentralizado você vai aprender:

  1. Como usar BNB no IDE Remix em vez de Ether.
  2. Como criar um contrato inteligente seguro em Solidity e implantá-lo na Binance Smart Chain.
  3. Como interagir com seu Contrato Inteligente e o Blockchain a partir de um front-end React.
  4. Como exibir mensagens de erro do seu contrato inteligente no front-end.
  5. Como um projeto descentralizado pode fornecer renda sustentável para o proprietário.

E... como mencionado acima, você terá um projeto Web3 sólido para adicionar ao seu portfólio

Pré-requisitos:

Este curso não é uma introdução às tecnologias Web3. Se você NÃO explorou o ecossistema Web3, então vá trabalhar primeiro em meu vídeo introdutório tecnologias Web3.

Além disso, se você não usou Solidity ou precisa de um revisor, aqui está um tutorial de Solidity opcional que criei.

Se você tem:

  1. Conhecimento básico de trabalho HTML/CSS
  2. Conhecimento básico de react e react hooks
  3. Entendimento básico das tecnologias Blockchain

Então você vai fazer bem neste curso. Vá e comece a trabalhar!

Conheça seu professor

Teacher Profile Image

Travis Rodgers

Freelance Web Developer

Professor

Hello, my name is Travis Rodgers and I am a Freelance Web Developer, Blogger, Content Creator, and Digital Strategist over at Travis.Media.

Web development is not only my profession, but my passion, and I have over 4 years of hands-on experience building websites and providing custom coding solutions for small businesses, start-ups, and web agencies.

Whether it's a CMS like WordPress or a framework like Django, it's always thrilling to be able to create unique projects from scratch and share with others what I've learned along the way.

So I hope to bring value to all of you and help you in your own programming journey.

Visualizar o perfil completo

Level: Intermediate

Nota do curso

As expectativas foram atingidas?
    Superou!
  • 0%
  • Sim
  • 0%
  • Um pouco
  • 0%
  • Não
  • 0%

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

Faça cursos em qualquer lugar com o aplicativo da Skillshare. Assista no avião, no metrô ou em qualquer lugar que funcione melhor para você, por streaming ou download.

Transcrições

1. Boas-vindas e visão geral do projeto: Olá a todos e bem-vindos ao meu curso. Neste curso, vamos construir um aplicativo descentralizado de aluguel de bicicletas na rede de testes de cadeia inteligente financeira, vamos começar codificando um contrato inteligente e colocando toda essa lógica juntos. Em seguida, vamos implantá-lo para a cadeia inteligente financeira testando-o. Em seguida, construiremos nossa interface do usuário. Então, vamos usar o React. Vamos construir uma página inicial em uma página de painel. E, finalmente, vamos conectar esse front-end com o contrato inteligente implantado para que possamos interagir com o blockchain fazer transações e extrair dados em todas essas coisas boas. E às vezes é melhor vê-lo em ação. Então, aqui está uma olhada no aplicativo final em uma explicação de como ele funciona. Ok, então aqui está o aplicativo. Então imagine que você tem muitas trilhas de bicicleta no centro da cidade, e você compra um pequeno espaço de escritório e coloca um monte de bicicletas nele e monta um negócio de aluguel de bicicletas. Mas em vez de aceitar dinheiro ou cartão de débito ou o que quer que seja, você vai aceitar B&B. Então, se eu quisesse entrar lá e alugar uma bicicleta, eu viria a este aplicativo. Se essa fosse minha primeira vez, eu primeiro conectaria minha carteira. Então clique em Conectar carteira e conecte sua carteira. E então eu clicaria em escolher minha bicicleta. E aqui temos um formulário. Diz: Bem-vindo, insira seu primeiro e sobrenome para se registrar. Você tem que se registrar como locatário no contrato inteligente para verificar as bicicletas. Então, vou colocar o teste Travis e clicar em Enviar. Em seguida, confirmarei a transação no MetaMask. E a propósito, eu olho para essas baixas taxas de gasolina, isso é como US $0,20. Então, confirme. Assim que isso for feito, ele exibirá meu painel porque serei locatário no contrato inteligente. Por isso, diz bem-vindo, Travis ou qualquer que seja o seu nome. Aqui estão suas estatísticas. Portanto, há crédito B & B. Então, posso adicionar crédito à minha conta. Meu valor devido, minha quantidade de minutos de viagem, se eu verificar uma bicicleta e o status da minha bicicleta estiver vermelha, o que significa que não tenho nenhuma bicicleta verificada. Agora temos dois formulários. Um para creditar sua conta, um para pagar suas dívidas e temos três bicicletas para escolher. E eu posso vir aqui e verificar uma bicicleta e verificar o antibiótico. Então, vamos em frente e creditar nossa conta. Vou adicionar 0,2 B & B para creditar minha conta. Então, meu total é de 0,2 com algumas taxas mínimas de gasolina. Então clique em Confirmar. E quando essa transação for concluída, terei crédito de 0 a B e B. Então agora estou pronto para conferir minha bicicleta. Tenho algum crédito aqui. E eu quero verificar, digamos que eu quero conferir esta bicicleta do meio. Então clique em checkout e confirme isso. E o que vai acontecer aqui é meu status de bicicleta ficará verde, o que significa que tenho uma bicicleta verificada atualmente. Na minha viagem, os minutos começarão a se totalizar e eu poderei levar minha bicicleta para um passeio. E ainda estamos pendentes. Lá vamos nós. Meu status de bicicleta é verde. A bicicleta é gratuita para levar para um passeio. Vou voltar em cerca de sete ou oito minutos e vamos verificar a bicicleta de volta e mostrarei o resto do aplicativo. Ok, então já se passaram cerca de oito minutos, então vamos verificar a bicicleta de volta. Então, vou vir aqui e clicar em check-in e confirmar a transação. Agora, o que vai acontecer é que meu status de bicicleta voltará para vermelho, o que significa que não foi verificado. Meu B & B do será totalizado em meus minutos de viagem também serão totais. Então meu status de bicicleta é vermelho. Meu B & B tenho 0,005 B&B nos meus minutos de viagem ou às oito. Então agora posso pagar meu B & B, fazer 0,005 BNB. E clique em enviar. Confirme isso. Agora, uma vez que eu pagar meu saldo, isso vai para 0. Meus minutos de viagem vão para 0 e meu status de bicicleta voltará. Na verdade, poderei verificar uma bicicleta novamente. Porque se você tiver um saldo, você não poderá verificar uma bicicleta porque você tem que pagar seu saldo nesse tipo de manter o dono livre de ter que perseguir as pessoas. Esta é uma maneira que o proprietário não precisa estar super envolvido com seus clientes. Ele só precisa fornecer a bicicleta. Porque se você não pagar seu saldo, você pode conferir outra bicicleta. Agora, em nosso contrato inteligente, também temos muitos cheques para garantir que os locatários não façam coisas que não gostariam de tentar pagar quando eu não tenho um valor devido. Então, se eu clicar em Enviar, ele deve gerar um erro. Eu deveria ter um slide de erro aqui em cima, dando-me algum tipo de mensagem de erro. Sim, a execução foi revertida. Você não tem nada devido neste momento? Se eu tentar fazer outra coisa como verificar antibiótico que nunca verifiquei, também devo receber uma mensagem. Por favor, confira uma bicicleta primeiro. E essa é basicamente a essência do aplicativo. Além disso, no final do curso, há uma lição bônus na qual criamos o painel de controle de um proprietário. Neste painel, ele mostrará o valor total do contrato, o valor que são os proprietários, o botão que dá a capacidade para o proprietário retirar seu valor. Agora você pode estar se perguntando, como um dono ganha dinheiro com isso? Então, se alguém entrar aqui e creditar sua conta com US$10, ele realmente credita o contrato inteligente com US$10, mas esses US $10 são atribuídos a eles. Então, quando eles pagam, ele realmente sai de seu crédito nesse valor que eles pagam, na verdade, se torna os proprietários. Então toda vez que alguém paga seu Mountain Dew, isso se transfere para o dono. Portanto, estaremos criando no final como um painel de bônus e proprietários , onde eles podem realmente visualizar esse valor e retirar esse valor. Então eu me diverti muito construindo isso e sei que você também vai. Então, quem deve fazer esse curso? Veremos se algum desses cenários atrai você. Número um, talvez você esteja procurando um projeto sólido da Web três para adicionar ao seu portfólio. Então, talvez você esteja aprendendo o desenvolvimento de blockchain e queira conseguir esse emprego e entrar nessa indústria, mas precisa de alguns projetos sólidos para adicionar ao seu portfólio. Então este curso é para você. Talvez você tenha feito o desenvolvimento de blockchain com um tório ou na Máquina Virtual Ethereum. E você está se perguntando como ele funciona com B&B ou como você pode usar o BNB e o remix, ou como você implanta na rede de testes BSC, então você achará este curso benéfico. Ou talvez você só queira o pacote inteiro. Você quer aprender a criar um contrato inteligente, como implantá-lo e como interagir com ele de uma biblioteca como o React. Ou talvez você esteja interessado em ver como podemos exibir erros de solidez no front-end para informar nosso usuário quando ele cometeu um erro. Ou talvez você esteja interessado em como um aplicativo como esse proporcionaria renda sustentável para o proprietário. Se algum desses apelar para você, então eu acho que você está no lugar certo. Agora, existem alguns pré-requisitos. Número um, você deve ter conhecimento básico de desenvolvimento web. Portanto, você provavelmente deveria ter aprendido HTML e CSS e ter construído algumas páginas da Web fáceis. Número dois, você deve ter um entendimento básico do JavaScript e reagir. Então, vamos usar um reagente neste curso e isso será esperado. Não vai ser loucura como se não usássemos Redux e temos todas essas coisas elaboradas. Vamos tentar mantê-lo simples, mas você ainda deve ter esse conhecimento básico. E então, finalmente, você deve ter uma compreensão da blockchain e como ela funciona, que eu suponho que você faça ou você não estaria aqui. E no que diz respeito à solidez, você não precisa saber solidez para fazer este curso porque eu tenho uma lição opcional com um primer de solidez para você se atualizar se você não souber disso. Acho que você vai se divertir tanto quanto eu construí este aplicativo. Então, vamos começar. 2. Como criar nosso contrato inteligente: Ok, então se você for para remix.ethereum.org, vamos usar o IDE de re-mix como deveríamos. Altere meu espaço de trabalho para o espaço de trabalho padrão. Clique em contratos e crie um novo. Basta clicar com o botão direito em novo arquivo E vamos chamá-lo de corrente de bicicleta porque eu não sou muito bom em inventar nomes, mas cadeia de bicicletas, blockchain, meio cativante. Então, como sempre com solidez, você vai colocá-lo em seu identificador de licença. Então isso é comentado identificador de licença SPD MIT, o que significa jantar de código aberto, declaração de pragma, solidez pragma. Então vamos fazer 0 ponto 0 ponto 0 porque esse é um bom número. E vamos dizer contrato e chamamos essa corrente de bicicleta. E aqui vamos nós. Não é emocionante ter uma nova tela para codon? De qualquer forma, tive algumas reclamações e um vídeo anterior que não era grande o suficiente. Posso tornar essa parte do código maior, mas não isso aqui. Então, tenha paciência comigo. Então, como costumamos fazer, vamos começar isso com algum pseudocódigo e isso vai ser algo assim. Adicione-se como locatário porque você tem que se adicionar como alguém que pode alugar uma bicicleta, checkout bike. Você irá e verificará a bicicleta. Verifique em uma bicicleta. Então você confira a bicicleta, você anda por aí e depois a verifica novamente. Obtenha a duração total do uso da bicicleta. Então, quanto tempo você ficou na bicicleta? E então queremos coisas como obter saldo do contrato só porque é bom ter essas informações e, especificamente, obter equilíbrio dos locatários. E então, com essa duração total, precisamos ser capazes de definir o valor devido, como quanto o aluguel ou O's. Então defina o valor devido. E acho que este é um bom começo. Vamos começar, isso irá a partir daqui. E estou tendo esse erro aqui. É porque eu não coloquei um ponto e vírgula por trás disso. Estive em JavaScript nos últimos dias, então tenha cuidado comigo se eu esquecer o ponto e vírgula. Tudo bem, adicione-se como locatário. E, na verdade, antes de fazermos isso, uma coisa que eu gosto de fazer é definir um dono. Então, se quem implanta o contrato inteligente, esse é o proprietário no caso de querer restringir as coisas a si mesmos. Então, para fazer isso, vamos colocar uma variável aqui em cima, uma variável de armazenamento do proprietário do tipo de endereço. Criaremos um construtor. E definiremos o proprietário para o remetente do ponto de mensagem. E o que isso faz é que esse construtor é executado quando é implantado pela primeira vez. Então, quando este contrato for implantado pela primeira vez, o remetente que será a pessoa que o implantará será definido como o proprietário. Agora, contratos inteligentes são imutáveis. Eles estão na cadeia de blocos, eles não podem ser alterados. Portanto, esse construtor é executado uma vez e o proprietário será definido. Então, vamos colocar isso antes do pseudocódigo. Então, aqui está o primeiro. Adicione-se como locatário. Então, criaremos uma estrutura chamada locatário e definiremos algumas propriedades. Então, primeiro, endereço, endereço da carteira a pagar. Como cada locatário tem um endereço de carteira, tudo na Web três é um endereço de carteira. Podemos identificar a pessoa que podemos pagar a pessoa, a pessoa pode pagar outras pessoas. E esse é um tipo de endereço e nós o definimos como pagável. A propósito, se você é como, eu não faço ideia do que é essa coisa, esse pragma neste pagável. Eu criei um vídeo do YouTube há pouco tempo. Tem cerca de uma hora de duração. Chama-se solidez Learn em uma hora. Se você quiser ir e verificar isso primeiro, vou explicar a você que todos os tipos de dados não abordariam é o que é um pagável. E vamos analisar coisas como funções e loops e criaremos um contrato inteligente bem fácil para que eu possa ensinar como o Solidity funciona. Então, se você não tem ideia do que estou fazendo, vá assistir isso, então volte a isso. Acho que será muito benéfico para você. Vou colocar um link abaixo para isso. E, novamente, é um vídeo gratuito do YouTube. Então eles têm um endereço de carteira. Em seguida, vamos fazer String FirstName. E, claro, String LastName. Porque mesmo sendo um endereço de carteira, queremos algum tipo de personalidade por trás disso. Então vamos definir um par de booleanos que bool possa alugar, eles podem alugar, eles podem alugar? Não estão autorizados a alugar. Você verá como isso funciona em um minuto. Bool ativo, eles estão ativos? Eles estão atualmente na bicicleta quando verificam? Haverá ativo quando eles o verificarem novamente, eles não estarão ativos. Equilíbrio. Eles podem enviar dinheiro para o saldo para cobrir as taxas. E depois mais algumas ONUs. Portanto, o valor devido é o valor que eles têm que pagar. Então eles tiram a bicicleta e isso custa tantos minutos em um total até esse valor. Isso é o que se deve. E então você começou um fim para que possamos acompanhar o horário de início e término para que possamos obter esse período de tempo. Você acabou. E é isso. Isso é tudo o que eu quero com meu locatário. E criamos isso em uma estrutura que é como um objeto. Se você assistiu ao meu Learn solidez em um vídeo de uma hora, o que fizemos lá foi que criamos uma série de locatários e, em seguida, fizemos um loop para encontrar o índice que queríamos. Sempre que quiséssemos um locatário específico, procurávamos o endereço da carteira, obtivemos esse índice. Saberíamos que o locatário é. Neste vídeo, faremos algo diferente. Não vamos usar uma matriz. Vamos usar um mapa, que eu acho que o torna muito mais fácil. E você não precisa lidar com loops, que às vezes, se houver muitos deles ou se houver uma quantidade desconhecida de loops, isso pode causar altas taxas de gás. Então, vamos fazer uma coisa chamada mapeamento. É como um dicionário, é um par de chave-valor. Faça o mapeamento e a chave será o endereço. O valor será o locatário. Vai torná-lo público, e vamos chamá-lo de locatários. Assim, podemos procurar um locatário pelo endereço da carteira. Não teremos que percorrer nada. Podemos apenas dizer, aqui está o endereço da carteira, me dê o locatário. E, finalmente, podemos fazer essa função de locatário de anúncios para parâmetros de ar. Serão os parâmetros do locatário. Então, vamos dizer endereço. Na verdade, provavelmente é mais fácil copiar isso, colá-lo, porque vamos colocar exatamente a mesma coisa que os parâmetros. Retire esses ponto-e-vírgulas e coloque vírgulas. E, a propósito, esse é o Comando D. Se você selecionar algo e fizer o Comando D em um Mac, basta selecionar a próxima instância e seguida, alterar todas elas de uma só vez. E eu não mudei este. E então eu posso pegar como o espaço em branco e acertar o backspace. E lá vamos nós, colocamos um espaço entre eles e eles estão todos em uma linha. Então, todos eles correspondem às propriedades e ao locatário. Isso é tudo o que é. Em seguida, tire essa vírgula à direita e coloque meus colchetes encaracolados. E, a partir daqui, queremos adicionar esse locatário ao nosso mapeamento. E para adicionar a um mapeamento, basta fazer locatários, certo? Porque eles estão mapeando é chamado de locatários. E entre parênteses, você coloca o endereço da carteira porque essa é a nossa chave. Os endereços são fundamentais. Neste, a propósito, é o tipo, o tipo é endereço. Em nossa carteira, o endereço será a chave. O valor será o locatário. Então, para adicionar algo a um mapa, basta usar como endereço de carteira de locatários igual a um ou algo nele adiciona uma chave de endereço de carteira em um valor de um. Mas em vez de um, queremos um locatário. Vamos adicionar um locatário com os mesmos valores acima. Endereço da carteira, nome próprio. Lastname pode alugar. Ativo, equilíbrio. E deixe-me ligar. Eles têm um envoltório do Word Wrap e o editor não parece ser. Oh, lá vamos nós. Eu tive que cortá-lo e cortar. Mas está aqui em baixo nessas opções. Equilíbrio, comece um fim. Esses são nossos parâmetros. Então, vamos usar este Add rent ou função. Vamos colocar todos os parâmetros que queremos e isso nos criará um novo locatário. Neste mapa. Só vai, é como um empurrão. Em JavaScript. Estamos apenas empurrando um locatário para esse mapeamento ou dicionário ou o que você quiser chamá-lo. Agora eu tenho um erro. O que está acontecendo aqui? Nenhuma visibilidade especificada. E sim, queremos tornar isso público. Temos outro erro e a localização dos dados deve ser a memória é chamada de dados. Portanto, as strings têm que ser a memória são chamadas de dados, que vamos usar memória. E isso deve limpar o erro. Incrível. Então esse é o nosso aluguel de anúncios ou função. Se eu abrir a guia de implantação aqui e apenas escolher a VM JavaScript. Clique em Implantar. Podemos testar isso. Então, adicione locatário. Então deixe-me colocar meus valores aqui. Então, vou escolher apenas um endereço aqui e o endereço da conta que você tem muitos para escolher. Você pode usar um como proprietário e os outros não são proprietários, mas agora não importa. Então, vou copiar o primeiro, colá-lo aqui. Agora FirstName, vou colocar Travis. Lastname. Vamos colocar o teste. E então pode alugar. Tão verdade, todos podem alugar antecipadamente ativo, falso. E então os próximos quatro serão 0, então 0000. Então, vamos tentar adicionar um locatário. Aqui embaixo. Parece que foi bem sucedido. E se eu escolher locatários e colocar o endereço da minha carteira, que é a nossa chave, podemos procurá-lo clicando em locatários. E lá estou eu. Aqui estão todos os valores do locatário que acabei de adicionar, então tudo está bem. Agora, feche isso e continue. Tudo bem, então o próximo pseudocódigo é conferir uma bicicleta. Então, vamos fazer uma função chamada checkout. E vamos passar um endereço. Como eu disse, você vai ver isso muito porque eu vou verificar uma bicicleta e quando eu passar o endereço da minha carteira para que ela possa identificar, sou eu verificando a moto. E eu quero torná-lo público. E dentro dela, quero virar algumas das minhas propriedades do locatário, dois valores diferentes. Então, quando eu verificar algo, quero definir ativo como verdadeiro, certo? Então. Endereço da carteira dos locatários, ponto ativo. Portanto, esta é a largura do locatário, esse endereço de carteira no mapeamento, ponto ativo é igual a true. Então isso é, ei, acabei de verificar uma bicicleta. Atualmente, estou ativo. A próxima coisa que vou fazer é gravar esse carimbo de data/hora. Assim, os locatários ponto do endereço da carteira inicial é igual ao bloco, carimbo de data/hora do ponto. Agora, isso costumava ser usado para digitar agora. Mas agora, em solidez, você usa carimbo de data/hora de ponto de bloco. Então isso vai nos dar um carimbo de data/hora e isso é em parte conversor. Então, é um carimbo de data/hora Unix não é como um mês, ano. É um carimbo de data/hora Unix único, que é um uint8, que todas as datas em Solidity RUN. Então, vamos definir a hora de início. E também queremos, se você pensar nisso, se eles verificarem uma bicicleta, precisamos definir o aluguel de latas como false. Começa, ei, eu posso alugar. Não há restrições para mim, mas uma vez que eu verifico uma bicicleta, preciso definir que pode alugar como falso porque já tenho uma bicicleta fora. Deixe-me selecionar isso, colá-lo e fazer pode alugar falso, essa pessoa não pode alugar uma bicicleta porque já tem uma. E acho que isso é bom. Então agora podemos conferir uma bicicleta. Agora, vamos verificar uma função de bicicleta, check-in, endereço, carteira, endereço, público. E vamos fazer algo semelhante aqui. Precisamos virar ativo de volta para false porque eles não estão mais na moto. Precisamos definir a hora de término. Agora, definimos a hora de início, precisamos definir a hora de término. Então, o carimbo de data/hora está bloqueado, isso nos dará o carimbo de data/hora para o check-in. Então, finalmente, queremos definir o valor devido. Então lembre-se, eles têm essa propriedade devida. Isso é o quanto eles devem com base em quanto tempo eles tiveram a bicicleta fora. Faremos isso em alguns minutos. Então, vou colocá-lo para fazer aqui, para definir o valor devido. E isso é verificar em uma bicicleta para que possamos adicionar um locatário, podemos verificar a bicicleta e podemos verificar o backend da bicicleta. Em seguida, obtenha a duração total do uso da bicicleta. E vamos criar uma função para isso. Chamaremos a função de obter duração total e endereço, endereço da carteira. Estamos passando o endereço da carteira para um identificador. Público nisso retorna um U e, portanto, ele retornará para nós um total, a duração total como um inteiro, um U e um inteiro não assinado. Então, a primeira coisa que podemos fazer é subtrair a hora de término do horário de início. Lembre-se que está em um carimbo de data/hora Unix, para que possamos subtrair os dois. Mas vou criar outra função para fazer isso. Portanto, não tenho que puxar muitos parâmetros aqui. Vou chamar esse tempo de tempo do locatário. Você começa a formiga, você acabou. E vou manter isso interno ao contrato. E não faz nada disso, não altera o contrato, são realmente tocam qualquer variável fora dessa função. Então eu posso rotulá-lo como puro. Se ele interagisse com outras variáveis, eu poderia fazer isso como visualização, mas puro significa que não estou tocando em nenhuma variável. Estou fazendo todo o meu trabalho aqui na função porque estou passando esses dois valores. E isso retorna um uint8. E é tão fácil quanto dizer retorno, fim menos início. Então, de volta à minha função aqui. Posso dizer que u e timespan são iguais ao locatário, tempo de tempo, endereço da carteira dos locatários, ponto inicial. E veremos outro parâmetro. Vou colocar minha hora de início na minha enzima. Então, vai ser a mesma coisa. Mas o timestamp final, o ND, que deve ter a diferença entre os dois. E então isso é em segundos. Então eu quero colocar isso em minutos. Então eu posso fazer o tempo de tempo uint8 e minutos é igual ao tempo de tempo dividido por 60. 60 segundos em um minuto. Isso deve fazer isso. E, em seguida, retorne tempo e minutos. E eu tenho um erro aqui que diz que mutabilidade do estado da função pode ser restrita à visualização. Então eu posso colocar aqui uma vista. Portanto, não é tão baixo quanto puro. Pure nem lê outras variáveis. Ele só lida com esta visualização de função lerá outras variáveis, mas não alterará o blockchain de forma alguma. Então, se eu precisasse mudar um valor ou algo assim, ele me diria que eu tenho que remover a visualização. Isso é tudo o que é. Novamente, se você quiser um mergulho profundo sobre essas coisas, confira essa solidez e 60 minutos onde eu passo por todas essas coisas em detalhes. Vamos bom. Então, temos a duração total do porquê das filas. Então, temos o tempo, a duração total em minutos, e podemos passar para o próximo pedaço de pseudocódigo. Portanto, esses são apenas métodos simples que podemos fazer uso. Então, como obter o saldo do contrato, podemos fazer saldo de função de retorno público de visão, um uint8. Em tudo o que fazemos é devolver, endereço. Esse saldo de pontos. Agora isso parece feio e você provavelmente é como, para que serve isso? Bem, isso se refere ao contrato devolvido, ao saldo dos contratos e isso é meio convenção. Você verá isso em solidez. Apenas aceite, memorize-o e, se você precisar, use-o. Então eu posso obter o saldo sempre que você devolver o saldo de pontos de endereço deste, é o contrato. E então, para obter o equilíbrio dos locatários, vamos fazer essa única função, equilíbrio do locatário. E queremos saber qual Renner. Então, vamos abordar carteira, endereço. Retornos de exibição pública. Você acaba. E só queremos devolver o saldo desse locatário em particular. Então, locatários, endereço de carteira, ponto e vírgula. Então, temos locatários equilibrados, temos o saldo do contrato, duração total do uso da bicicleta. A próxima coisa que queremos fazer é definir, é definir o valor devido. Agora, para isso, há várias maneiras de fazer isso. O que vou fazer é dizer a cada cinco minutos eles têm a bicicleta. Vou cobrar 0,005 B&B. Então, preço B & B USD. Tudo bem, então 0,05 é US $2. Então, a cada cinco minutos você vai pagar US$2. Então, vou usar esse 0,005 BNB. E uma coisa que você pode estar perguntando, se você ainda não pediu é, ei, isso é remix.ethereum.org. O que estamos fazendo com B e B? Bem, a cadeia inteligente binária usa a mesma quantidade de decimais que um teorema. O teorema tem esse sistema decimal 18 para que ele seja capaz de ter pequenas partes fracionárias de um éter. E é a mesma coisa na cadeia inteligente ByteDance. São 18 decimais. Na cadeia de baionetas, é, acho que oito, mas a cadeia inteligente de biomassa é 18. Então, tecnicamente, podemos fazer qualquer coisa aqui em éter. E ele será transferido para a cadeia financeira quando vamos implantar isso. Na verdade, estamos quando vamos testá-lo , você verá aqui em um minuto. Então isso significa que posso pegar esse 0,005 e mover aquela casa decimal 18 e assumir que é assim. Qual caminho é como dez a 1800 de um éter? É um número menor, o que significa que tem mais zeros. É uma maneira de dividir seu éter em quantidades fracionárias. Podemos supor que isso é o mesmo no BNB e eu vou mostrar. Tudo isso fará sentido para você aqui em um minuto. Então, vamos escrever um conjunto de funções. Faça isso, vamos definir o valor devido de um endereço específico. Isso vai ser interno. Estamos configurando isso internamente. Não queremos que ninguém mais mexa com isso. Vamos colocar tempo de tempo, minutos iguais a obter a duração total. Então estamos chamando essa função para obter o tempo e minutos totais. Vamos pegar isso. Em seguida, vamos dividir isso em incrementos de cinco minutos. Então, se houver 20 minutos na bicicleta, ela só conta como quatro minutos porque estamos contando apenas intervalos de cinco minutos. Então cinco minutos Você vai ser cobrado 0,005 B&B. O segundo cinco minutos, 0,005 B&B. Então eu vou dividir isso incrementos de 555 minutos é igual minutos de tempo dividido por cinco. Então isso significa que se você estiver lá fora novamente por dez minutos, será dez dividido por cinco, que é dois. Você será cobrado o ponto O um, O, B e B. Agora queremos definir essa propriedade do. Assim, o endereço da carteira dos locatários dot du equivale a incrementos de cinco minutos vezes. Agora, aqui está o que vamos mover o decimal, 0,05 B & B por incrementos de cinco minutos. Vou dizer que comece aqui com meu decimal e diga 12345678910111213141516171818 casas decimais. Então, são cinco. Vamos ver. Deixe-me colocar vírgulas só para deixar claro. Vírgula lá, vírgula lá, vírgula lá. Vírgula lá, vírgula lá. Então, temos 3691215 zeros, 515 zeros. Novamente, se mudarmos isso de volta, temos 123456789101112131415161718. E então colocamos r dot E temos 0,005. Isso é tudo o que é. Estamos apenas codificando isso em 0,05. Você pode querer puxar o preço mais recente e fazer algum tipo de matemática. A coisa sobre a solidez é que eles não fazem ponto fixo para fora da caixa. Você tem que fazer algum tipo de matemática louca para obter um decimal. Então, vou apenas manter os números decimais fora disso e não tentar ser como 0,005 dividido pelo dólar americano ou algo louco assim. Vamos apenas definir em 0,05 a cada cinco minutos. Alguns colocam ponto e vírgula. E temos um problema. É porque eu coloquei unidade em vez de você e o que faço o tempo todo. E contagem de argumentos errada para função chamada obter duração total. Temos que passar o endereço da carteira porque precisamos saber de quem a duração. E isso é definido o valor devido. Agora podemos visitar isso para que temos aqui em cima. Então, quando eles verificarem a bicicleta de volta, queremos definir esse valor. Então, podemos simplesmente ligar para o conjunto devido no endereço da carteira. E isso definirá essa variável assim que eles verificarem a bicicleta. E vamos salvar isso. Acho que estamos perto de poder testá-lo. Precisamos colocar algumas declarações obrigatórias aqui, mas vamos fazer um teste. Na verdade, antes de fazermos, há mais uma coisa que eu quero acrescentar, e isso é apenas para verificar algo que podemos usar, acho que no front-end. E é apenas uma função chamada pode alugar uma bicicleta. Esta é apenas uma maneira de dizer, Ei, eles podem alugar uma bicicleta sem ter que ir e olhar as propriedades do struct. Podemos simplesmente chamá-lo aqui e obter um verdadeiro ou falso de volta. Então, endereço, enquanto estiver no endereço. Exibição pública retorna bool, turn locatários, endereço da carteira, ponto pode alugar. Então, está apenas nos dizendo verdadeiro ou falso. O que esse conjunto S? Isso é tudo. Vamos testar isso. Isso vai ser muito divertido. Acho que enquanto estamos fazendo isso, você verá todas essas condições de coisas que queremos proteger. Eles não deveriam ser capazes de fazer isso. Eles não deveriam ser capazes de fazer isso. E isso nos fará criar declarações requeridas. Então, vamos testá-lo. Vamos testá-lo localmente primeiro antes de fazermos qualquer coisa na cadeia ByteDance. Então você vem aqui e vamos escolher JavaScript VM. Novamente, como antes, vou escolher o primeiro endereço e torná-lo o proprietário porque estamos implantando-o e clique em, Implantar e abrir isso. Então, primeiro, vamos adicionar um locatário. E vamos torná-lo não o dono. Vamos escolher a segunda pessoa e copiar. Então, vou colocar o endereço. Aqui estão todos os meus parâmetros aqui. E você também pode encontrá-los aqui com o locatário. Mas vou colocar o endereço da minha carteira. O baú Travis pode alugar. Verdade? Porque eu posso falar. Eu não tenho uma bicicleta fora. Falso ativo e, em seguida, sem equilíbrio, nada é devido, sem horário inicial e sem fim. Para adicionar locatário. E venha aqui, escolha o endereço da minha carteira. Venha aqui e veja que tenho um locatário aqui. Ótimo. Posso alugar uma bicicleta? Verdade? Posso alugar uma bicicleta. Obtenha a duração total 0. E para ser honesto, não devemos ser capazes de verificar se as motos saíram, então vamos colocar uma condição nisso em um minuto. Mas vamos em frente e confira a bicicleta. Vou verificar. E então, quando eu clico em locatários aqui, deve dizer, pode alugar falso porque não queremos ser capazes de alugar enquanto tivermos desverificado. Ele deve dizer ativo, verdadeiro. E deve haver uma hora de início. Então, vou executar isso de novo. Lá você tem ele pode alugar falso, ativo é verdade e aqui está minha hora de início. Agora configuramos isso em incrementos de cinco minutos e eu poderia mudar isso, mas vou esperar os cinco minutos e voltar. Vou pausar isso, voltar depois de cinco minutos e vamos verificar a bicicleta de volta, ver como isso funciona. Tudo bem, já se passaram cerca de cinco minutos. Então, vou verificar a bicicleta de volta. Então, vou escolher o check-in, clique em check-in. E agora, se eu verificar, verifique meu locatário aqui ele deve ter um n tempo. ativo deve ir para falso e o aluguel pode permanecer falso porque eles não pagaram e devemos ter um valor devido. Então, vamos clicar nos locatários, e lá vamos nós. Então, temos uma hora de início, temos um n tempo. Não estamos mais ativos e não podemos alugar. Ótimo. Também temos um Mountain Dew, e serão cinco com todos os zeros, que vai ser algo um éter. Mas, novamente, ele vai se traduzir para B&B quando chegarmos lá. Então, vamos verificar algumas dessas outras coisas. Posso alugar uma bicicleta falsa. Ou o saldo do locatário, quanto eu tenho equilibrado lá. Eu não coloquei nada nele. Então, deve dizer 0. saldo do contrato é 0 e minha duração total agora deve ser de seis minutos. Sim, é um seis. Então isso foi calculado corretamente. Tivemos a bicicleta por seis minutos. Agora, a próxima coisa que gostaríamos de fazer é poder pagar nosso saldo porque agora, posso verificar uma bicicleta ? Não, não posso. Porque eu tenho um devido equilíbrio e acabei perceber que não estabelecemos nenhuma maneira de fazer um pagamento. Então, precisamos ser capazes de enviar dinheiro para o nosso saldo para pagar isso. Então, vamos fechar o contrato e juntar isso. Então, esse é outro que eu esqueci totalmente. Então, vamos colocar outro comentário de pseudocódigo aqui e apenas dizer fazer um pagamento. E, na verdade, antes de fazermos essa função, percebi que também não definimos nenhuma maneira de depositar dinheiro. Então o fluxo é assim. O locatário vai depositar dinheiro em seu saldo. Então, uma das propriedades aqui é equilibrada. Eles vão depositar dinheiro no saldo para que já haja dinheiro lá dentro. É como pré-pagar. Mas o dinheiro, quando você depositar, vai para todo o contrato e, em seguida, o valor que você coloca vai para você. Então, se dez pessoas colocarem US $10, serão $100 no contrato, mas US$10 creditados a cada pessoa. E então, à medida que essas pessoas fizerem pagamentos, dinheiro será deduzido de seu saldo para que, esse dinheiro e o contrato total se tornem os proprietários. Espero que isso faça sentido. Acho que será assim que escrevermos isso. Então, vamos fazer isso. Deposite muito rápido. Função composta, depósito, endereço, carteira, endereço, pagável, público e locatários. E só para te mostrar isso, eu posso fechar isso e simplesmente deixá-lo dentro. Isso depositará dinheiro no contrato porque ele é pago. Posso chamar essa função de depósito e enviar dinheiro. E ele vai depositar no contrato. Vai fazer isso de qualquer maneira. Mas também queremos adicioná-lo ao saldo dos locatários. Então, queremos fazer saldo do endereço da carteira dos locatários mais o valor do ponto da mensagem. Agora, a mensagem é uma dessas variáveis globais, como tínhamos aqui, o que eu não mencionei. Eu provavelmente deveria ter remetente de pontos de mensagem, que está enviando este remetente de ponto de mensagem. Também temos um valor de ponto de mensagem. Qual é o valor que estou enviando? Então, quando eu chamar essa função de depósito, vou enviar um valor para ela e ele pode ser retirado em sua mensagem global, variável, valor de ponto de mensagem. Isso é tudo o que é. Então, estamos depositando dinheiro no contrato, mas também vai creditar especificamente a essa pessoa. Então, estamos depositando dinheiro no contrato, mas também vamos creditar esse endereço de carteira ou essa pessoa. Agora, para fazer o pagamento, vamos criar uma função chamada fazer pagamento. Endereço, endereço da carteira. Isso é público a pagar. E o que vamos fazer aqui é que vamos fazer locatários, endereço de carteira, saldo de pontos, e vamos tirar dinheiro do saldo. Portanto, menos é igual ao valor do ponto da mensagem. Então, digamos que você é o único locatário, você coloca US $10 para o seu saldo. Portanto, há US $10 no contrato, mas esses US $10 estão no seu saldo. Então, o que você está fazendo quando está fazendo um pagamento, você está apenas retirando esse valor do seu saldo. Então, há US $10 no contrato e tudo está atribuído a mim. E eu monto minha bicicleta por US $10. Quando tira esses US $10 do meu saldo, esses US $10 não são mais meus. Não tenho saldo sobrando. Esses US $10 pertencem ao proprietário. E é assim que a propriedade se desenrola, como o dono deles é pago. Portanto, não estamos enviando dinheiro para o contrato, estamos realmente removendo dinheiro do nosso saldo. E também há algumas outras coisas que queremos verificar, como Vamos me ver apenas copiar isso. E também há algumas outras coisas que queremos fazer. Como se quiséssemos sentar, podemos alugar de volta à verdade. Porque agora eles podem correr novamente. Ei, há saldos pagos, eles são livres para alugar novamente. E vou só copiar isso mais algumas vezes. O valor devido será 0 porque eles pagaram o valor devido. A hora de início será 0. No fim do tempo vai estar de volta às 0. Então, tudo está meio fresco novamente. Você tem coisas pagas, você é capaz de alugar. Você não tem tempo no relógio. Vá pegar uma mordida, e acho que é isso. Acho que é tudo o que precisamos. Vamos em frente agora antes de implantá-lo e colocá-lo em algumas declarações requeridas, algumas verificações para ter certeza de que não estamos permitindo coisas que não deveríamos. E do jeito que você deve fazer isso, eu já fiz isso, então vou adicioná-los e explicá-los. Mas a maneira como você normalmente faz isso é pegar isso aqui e implantá-lo. E então você vai clicar em botões e testar coisas e você vai, Ei, espere um minuto, eles têm um equilíbrio. Eles não devem ser capazes de fazer check-out ou ei, eles não devem ser capazes de fazer um pagamento porque não têm nada. Você tem que ter cheques como este? Então, à medida que você está testando e clicando nos botões, você criará as declarações require, mas vou seguir em frente e colocá-las e explicá-las. Então, vamos até a função de checkout primeiro, há duas coisas que queremos verificar. Primeiro, queremos ter certeza de que eles não têm um equilíbrio do. Se eles tiverem um saldo devido quando não devem ser capazes de fazer o check-out novamente, isso mantém as pessoas pagando suas contas. Caso contrário, eles continuam verificando a bicicleta e não fazem nenhum pagamento porque não vamos aplicá-la. Estamos tentando ser descentralizados aqui. Então, o que é que eles simplesmente não conseguirão verificar a menos que paguem o saldo. Então, precisamos verificar isso. E também precisamos verificar se eles podem alugar que eles podem alugar imóveis estão definidos como verdadeiros. Então, fazemos isso com declarações require. E o que é legal sobre as declarações exigem é que eles reverterão a transação antes que os gases se estendam, o que é bem arrumado. Você não explode o gás e depois faz com que ele falhe e depois perde seu dinheiro. Para fazer isso, você coloca require e , em seguida, você define sua condição de que você está exigindo os locatários ponto do endereço da carteira do ponto façam e queremos fazer para ser igual a 0. Não queremos nenhum valor, queremos que eles paguem a conta? Se isso não for verdade, podemos colocar uma vírgula e , em seguida, algum tipo de mensagem. Você tem um ponto-e-vírgula de saldo pendente e vamos colocar o outro. Vamos fazer uma cópia e em vez de fazer, vamos verificá-la. O aluguel pode alugar deve ser igual a verdade? Isso é o que exigimos. Exigimos que eles possam alugar. Se não, vamos colocar uma mensagem. Você não pode alugar neste momento. Isso é tudo para checkout. Agora, para o check-in, queremos verificar se eles estão ativos porque se você não estiver ativo, você não tem uma bicicleta, certo? Então, se você apenas clicar em check-in e não tiver uma bicicleta com check-out, ela deve lançar um erro. Então, vou copiar essa declaração require. Vou colocar isso aqui e fazer ativo. Então, ativo deve ser verdade, o que significa que eles têm a bicicleta ativamente verificada. Caso contrário, as mensagens, confira uma bicicleta primeiro. Agora vamos descer para obter a duração total e queremos colocar um cheque aqui. Queremos verificar se ativo é falso, o que significa que eles verificaram sua bicicleta. Eles não conseguem a duração a menos que tenham verificado a bicicleta. E se isso não for verdade, então vamos dizer que a bicicleta está atualmente verificada. Então, finalmente, nesta função de pagamento, agora provavelmente há mais que você poderia colocar aqui. Como alguém nos comentários do YouTube disse, Ei, você esqueceu esse cheque. Bem, há muitos cheques e coisas que você poderia colocar. Este vai para produção. Queremos ter certeza de que há muitos cheques em vigor. Mas a última coisa que quero fazer é fazer o pagamento. Quero ter certeza de que tenho um Mountain Dew que pode fazer é mais do que 0. Se eu estiver fazendo um pagamento, não tenho nada a pagar. Qual é o ponto? Também quero verificar se meu saldo é maior do que o valor estou pagando por tentar pagar dez dólares e só ter oito, isso não vai funcionar. Então eu preciso fazer essa verificação também. Para exigir declarações aqui. O primeiro verificará se du é maior que 0. Isso não é verdade. Vou colocar, você não tem nada devido neste momento. O próximo, queremos verificar se o saldo é maior que o valor do ponto da mensagem. Então lembre-se que isso é um pagamento, as pessoas estão enviando dinheiro. Queremos que nosso saldo seja maior do que a quantidade de dinheiro que está sendo enviada. Aqui, vamos colocar, você não tem fundos suficientes para cobrir o pagamento. Por favor, faça um depósito. Você não pode pagar diretamente, você tem que depositar dinheiro e depois transferir esse dinheiro é pagamentos e economizar isso. E acho que terminamos e estamos prontos para fazer alguns testes. Então, primeiro vamos testá-lo nesta VM JavaScript. Em seguida, vamos implantá-lo na cadeia inteligente financeira. Uma última coisa que devemos fazer para testar esta duração total aqui. Não definimos em incrementos de cinco minutos. Então lembre-se da última vez que testamos, tivemos que esperar cinco minutos para que pudéssemos obter um número para preencher. Bem, vamos mudar isso apenas para algo codificado, como retorna seis minutos, então não precisamos esperar novamente. Retorna seis e teremos que retirá-los porque não gosta de variáveis não utilizadas. Então, salve isso. Então, desta vez, vamos ter seis minutos. Não temos que esperar. Podemos fazer o check-out, fazer imediatamente e poder testar. Então, vamos implantar isso. Alguém para escolher o primeiro endereço é meu dono. Vá e copie o endereço e implante-o. No segundo endereço será um dos meus inquilinos. Então adicione o endereço. primeiro nome é Travis, sobrenome é teste, que não é meu sobrenome a propósito, eu posso dizer que é verdadeiro. E quais são os outros? O ativo é falso. 0 saldo 0, faça 00, horário início e término. Vou acrescentar que o locatário deve poder vir aqui, colocar o endereço e ver o locatário. Ótimo. Agora vamos conferir alguém para conferir uma bicicleta. Clique em checkout. E meus valores aqui em baixo devem mudar de acordo. Os locatários de cliques têm uma hora de início. Agora ativo e não posso alugar porque tenho uma bicicleta fora. Ótimo. Vamos fazer algumas outras verificações. Então pode alugar uma bicicleta é falso, obter duração total deve me dar um erro. Então, se eu clicar nisso, ele reverteu e diz que a bicicleta está atualmente com check-out. Então essa é essa declaração requerida aqui. A bicicleta está atualmente verificada porque ativa, o requisito é que ativo é falso, mas ativista verdadeiro, então ele lança um erro. Então isso funciona. Um outro cheques que temos, verificaremos esse. Então confira que você tem um saldo pendente. Você pode executá-lo desta vez. Vou verificar todos esses em um minuto. Então, vamos verificar novamente. Verifique novamente. E se obtivermos nossa duração, deve ser de seis minutos porque lembre-se que definimos isso manualmente. Então, aqui estão seis minutos. Agora que fizemos o check-in, devemos ser capazes de vir aqui para locatários e ver as mudanças. Então clique nisso. Pode alugar como falso, posso conferir outra bicicleta. Por quê? Porque eu tenho um valor devido, 3. Como finalizar nosso contrato inteligente: Ok, então antes de passarmos para a próxima seção, precisamos adicionar algumas outras funções aqui no contrato inteligente. E sei disso porque fui frente e construí o front-end e percebi que precisávamos de algumas outras coisas para nos ajudar. Então, vamos adicionar três funções aqui. O primeiro será chamado Get do em tudo o que faz é obter a montagem dupla para um endereço de locatário, endereço de carteira , uma função pública, é uma visão e ele retorna você e nós vamos apenas retornar o endereço da carteira dos locatários, ponto fazer. Então, o valor que o locatário tem que fazer. Em seguida, vamos conseguir o locatário real. Então, vamos pegar o locatário e ele vai devolver quatro informações para nós sobre esses inquilinos. Então, é basicamente como devolver o aluguel ou objeto, mas sem a parte Uinta, partes dele. Então, é assim. Função, obtenha locatário. Vamos passar novamente o endereço da carteira. É público para ver e retorna para as coisas. Então, memória de string, FirstName, memória de string, LastName. Bull pode alugar. Em touro ativo. Isso é tudo o que queremos saber neste caso. Então aqui vamos dizer FirstName é igual ao nome do ponto do endereço da carteira dos locatários. Opa. Então eu vou copiar isso mais três vezes em um Mac, que é a opção Shift. E, em seguida, para copiar a linha em que você está. E vou usar o Command D para selecionar ambas as instâncias do FirstName e do LastName. E então eu vou mudar este também, posso alugar neste muito ativo. E tudo o que estamos fazendo é apenas retornar essas propriedades daquele locatário. E, finalmente, vamos criar uma função chamada locatário existe. E ele vai devolver um bool, quer esse aluguel ou exista ou não. Então, precisamos saber se esse locatário precisa se adicionar ao contrato inteligente ou se ele já foi adicionado. Portanto, podemos dizer que o locatário de função existe endereço enquanto no endereço, exibição pública e retorna um bool. Aqui precisamos verificar se esse endereço da carteira existe ou não. Portanto, podemos dizer se os locatários enquanto estiverem no ponto do endereço enquanto estiver na propriedade endereçada, se esse endereço de carteira não for igual ao endereço 0. Agora você pode ser como o endereço 0? O que isso deveria ser? Bem, aqui está uma boa explicação. Portanto, com mapeamentos em Solidity, não há como verificar diretamente se algo existe. Tudo é definido como seu valor padrão até que seja alterado. Isso significa que cada inteiro começa com 0, cada string começa com uma citação. Cada array começa assim e a solidez não tem conceito de nulo como outras linguagens. Então o que eles estão dizendo é, se você se lembra do re-mix, vamos, vamos puxar isso para cima. Basta comentar isso já que não terminamos. Então, vamos vir aqui e implantar nosso contrato. Vou clicar em Implantar e abrir isso. Então, e se eu for aos locatários e apenas colocar um endereço e clicar no botão. Bem, você verá que tudo está em seu estado padrão. Não há nada, como o postal dizendo que não há nada nulo e solidez. Vai ter esses, será o valor do que seria basicamente, então o saldo é 0, fazer é 0. Todos esses serão 0. Os touros serão falsos. Quero dizer, é apenas o valor padrão, não é nulo. E você verá aqui o endereço da carteira são os zeros, zeros, zeros. Há, estes são todo o caminho. E isso equivale ao endereço 0. Acho que também poderíamos fazer o endereço 000 ou algo assim. Mas o endereço 0 diz, ei, se essa pessoa estiver nos locatários não tem isso, então eles devem existir. Isso é tudo o que é. Não quero me aprofundar muito nisso. Espero que isso faça sentido, mas é uma boa maneira de verificar se uma chave está em um mapeamento. Então deixe-me fechar isso e voltar a isso. Se o endereço da carteira do ponto do endereço da carteira dos locatários não for igual a um endereço em branco, o que significa que eles existem. Então vamos voltar a verdade. Else retorna false. Depois, há alguns ajustes que eu quero fazer. Então, se subirmos para obter a duração total, quero remover essa declaração require porque ela é simplesmente desnecessária. Então, removemos essa instrução require. Agora eu quero colocar uma condição. Portanto, se a hora de início dos locatários for 0 ou se a hora de início for 0, o que significa que eles verificaram a moto, mas não a verificaram novamente. Ou se, por algum motivo, eles apenas tiverem uma enzima que provavelmente nunca acontecerá, eu quero retornar 0 porque eles estão, eles são verificados, o tempo não está completo. Então, se eles quiserem obter a duração total antes verificarem a bicicleta e não conseguem fazer isso. Você tem que verificar a bicicleta e primeiro fazer esse cálculo. Então, vou vir aqui e fazer se o endereço da carteira dos locatários começar o ponto for igual a 0. Ou se eu vou copiar e colar isso só porque é mais rápido para mim. Se a hora de término for igual a 0, então eu simplesmente quero retornar 0. Você tem 0 tempo de tempo em minutos. Else. Você vai fazer tudo isso. Já tínhamos uma cópia e colamos. É isso. Seu contrato está pronto para ir. Temos nosso contrato e remixagem, e a partir daqui podemos compilá-lo, podemos implantá-lo, podemos obter a ABI e todas essas coisas importantes. Mas ninguém realmente quer fazer isso do re-mix porque isso é baseado em navegador. Acho que ele o salva no navegador, mas pode ser perdido. E você quer todo o seu código normalmente juntos e deseja controlá-lo de versão no GitHub e coisas assim. Então, vamos mover isso para um novo projeto. E vou mostrar a vocês como podemos usar algo chamado capacete para inicializar todo esse ecossistema para gerenciar esse contrato inteligente. Você vai adorar isso. Então vá em frente e abra seu terminal e vamos criar uma pasta para nosso aplicativo. Então, vou para a minha área de trabalho e vou fazer um diretório MKDIR. Vou chamá-lo de aplicativo de aluguel de bicicletas. Pressione Enter. E então eu vou fazer o cd nele. E ponto de código para abri-lo no código VS. Ou você pode arrastar a pasta para dentro, ou você pode clicar com o botão direito do mouse ou fazer o que quiser, basta abri-lo no VS Code. Agora, o que vou fazer é ir para o hard hat.org. Então vá para hardhead.org. E o que isso é novamente, está no ambiente de desenvolvimento do teorema. Ele permite que você execute solidez localmente, depure, teste. Isso lhe dá flexibilidade e todas essas outras coisas boas. Mas o que você verá em um minuto, todas as grandes coisas que ele faz. Então vá em frente na parte superior aqui e clique em Começar. E vamos seguir esses passos porque eles são escritos muito bem. Então, instalação, precisamos fazer um capacete de instalação do NPM. Portanto, certifique-se de que você não tem JS instalado. Se você não fizer isso, basta ir ao NodeJS e Google e clicar no NodeJS e basta baixar a versão LTS. Uma vez feito isso, você terá o NPM, você terá no Bx, você terá nó, tudo o que precisa. Então, vamos usar esse comando. E vamos começar criando um diretório chamado contrato. Vou entrar no diretório do contrato. Então eu vou fazer npm nele, y dash y. Então npm init dash y. O que isso faz é que isso cria um pacote JSON, para que possamos instalar pacotes npm no dash y apenas faz a instalação padrão. Então clique em Enter e ele deve configurar tudo para você e você deve ter em sua pasta de contrato um arquivo package.json. Então agora podemos executar nosso comando, que é npm install save-dev hardhat. Então clique em Enter para instalar o cabeçote rígido. Depois que isso for feito, faremos isso Guia de início rápido. Este início rápido vai fazer é inicializar um projeto de amostra que vamos usar. Para fazer isso. Você acabou de correr com capacete de px. Então copie isso. Tudo bem, então vou colar isso no capacete NP x, clique em Enter. E isso nos dará algumas opções. Então, vamos escolher criar um exemplo de projetos básicos. Então, o primeiro aqui, a raiz do projeto hardhat será a pasta do contrato, então estamos bem lá. Sim, eu quero ser ignorado. E diz, você deseja instalar esse exemplo de dependências de projetos com NPM que você precisará instalar. Então clique, certifique-se de que há um y e pressione Enter. Ele instalará alguns pacotes que nos ajudam a testar e conversar com o contrato e todas essas coisas enquanto ele está instalando. Vamos ver o que vem a seguir. Então, isso nos dará alguns exemplos aqui de como executar tarefas. Assim, você pode executar em px hardhat para executar tarefas. Então você pode verificar, você pode imprimir a lista de contas. Você pode compilar seu contrato. Você pode executar um nó, fazer testes, muitas coisas boas. Existe um hardhat config js que permite configurar suas implantações. Vamos entrar nisso em um minuto. Você pode executar em contas hardhat px para mostrar todas as contas com as quais você pode trabalhar. Isso, ele praticamente cria 20 contas para você usar. Você pode compilar seus contratos executando npm hardhead compile. Você pode testar executando o NPS Hall no teste. E muitas coisas ótimas. Vamos passar por isso. Tudo bem, isso está feito. Então, se você olhar em nossa pasta agora temos uma pasta Contratos, que eles nos dão uma demonstração chamada Greeter dot soul. É claro que temos nossos scripts de módulos de nó. Esse será nosso script de implantação. Vamos entrar nisso em um minuto. Você pode executar testes. Não vamos fazer muitos testes porque simplesmente não queremos fazer esse curso super longo, então provavelmente vamos pular o teste. E aqui está nossa configuração. E é claro que eles estão empacotados JSON. Vamos primeiro copiar ou contratar aqui. Então, vamos clicar com o botão direito do mouse na pasta do contrato. Crie um arquivo chamado Bike Rental dot soul. Na verdade, acho que chamamos essa alma de ponto de corrente de bicicleta. E vou tirar meu contrato da solidez, destacar tudo e colar aqui e salvá-lo. Você provavelmente deseja instalar o, embora eu não saiba se você precisa, mas você pode querer instalar a extensão de solidez. Acho que tenho isso instalado. Sim, eu tenho a extensão de solidez. Então está gritando comigo porque não gosta da versão. Nossos compiladores atuais 0 dot phi dot 0. Assim, posso abrir meu piloto de comando e escolher Alterar versão do compilador do workspace. Vou mudá-lo para 080, que posso selecionar aqui, e geralmente leva cinco segundos ou refrigerante para limpar. Sim, lá vamos nós. Esclarecido. Então meu contrato está aqui. E, na verdade, podemos dar uma olhada em como isso funciona. Então, se formos cumprimentar ou não a alma, você vê que temos um contrato chamado Greeter. Temos nosso construtor e temos duas funções. Temos uma função de saudação que retorna uma saudação e, em seguida, temos uma função de saudação definida que permite alterar a saudação. Então aqui está o contrato. E, em seguida, se você for para scripts e script de exemplo, ele será configurado para implantar esses contratos. Então você vê aqui todos os ótimos comentários que obtemos o contrato para implantar. Então, obtenha uma fábrica contratada chamada saudador, que é o contrato. E então ele implanta esses objetos. Portanto, esse é o objeto cumprimentador que representa o contrato. E então ele implanta esse objeto com hello hard hat como parâmetro. Então, se você voltar ao cumprimentador, verá no construtor que você passa em uma saudação, o que quiser que seja sua saudação padrão. O script de exemplo implantará isso e aguardará o cumprimentador implantado. Em seguida, ele imprime cumprimentador implantado qualquer endereço de contrato para o qual o implante. Então, há o contrato do avaliador, veja como o cumprimentador é implantado. Testes de amostra. Então, o teste que eles dão é que o cumprimentador deve retornar a nova saudação assim que for alterada. Nisso faz a mesma coisa, cria um objeto cumprimentador, objeto de contrato. Ele zombou de implantá-lo com o parâmetro HelloWorld e, em seguida, espera, não espera declaração, certificando-se de que esse contrato tenha HelloWorld como está sendo cumprimentado, então ele define o saudação a algo diferente, e então espera que seja algo diferente. Então esse é o teste e deve passar a saudação original e a saudação de alteração. Então, na configuração hardhat, você realmente não precisa configurar nada para implantação local e veremos isso em um minuto. Então é assim que funciona. E agora que sabemos como funciona, vamos excluir esse cumprimentador, não alma em reproduzir tudo isso para o nosso contrato. Então, exclua a alma dos pontos de saudação. Então vamos para o script de amostra e vamos mudar isso para a cadeia de bicicletas e obter corrente de bicicleta e cumprimentador de fábrica contratada. Vamos fazer corrente de bicicleta minúscula. E então queremos implantar esse objeto que agora é a corrente de bicicleta não cumprimentadora. Mude isso para a cadeia de bicicletas, implante e não enviamos nada com a implantação deles. Então, vamos tirar isso. Mude isso para corrente de bicicleta minúscula. No console, a corrente de bicicleta de log implantada no endereço do ponto da corrente da bicicleta. Espero que isso tenha feito sentido. Estamos apenas alterando essas variáveis para implantar nosso contrato e não o cumprimentador. Então, isso deve ser bom. Vá para testes de amostra. Na verdade, vamos comentar isso. E é isso. Então agora podemos fazer em px hardhat, compilar, para compilar nosso contrato. E quando fizermos isso, teremos uma nova pasta com seus artefatos compilados pelo ar. Então você verá agora que temos uma pasta de artefatos. Se você abrir isso, há algumas informações de compilação. Não precisamos nos preocupar com isso. E se você abrir a pasta Contratos, há outra pasta chamada bike chain dots soul com dois arquivos. No arquivo em que estamos interessados é o ponto de corrente de bicicleta json. E aqui temos algumas informações importantes teremos que usar para vincular nosso front-end. Uma delas é a ABI. Agora, a ABI descreve todas as funções. Isso está disponível em nosso contrato para nós ligarmos. Nosso contrato está lá fora na cadeia de blocos e a ABI diz ao nosso aplicativo quais funções ele pode chamar. Então você verá aqui o construtor e verá equilíbrio de função, adicionar, adicionar locatário, saldo de aluguel ou todas as funções que criamos. Isso é o que a ABI é. Teremos que colocar isso em nosso projeto em um minuto. Então, abaixo, temos esse lindo código de aparência, e este é o bytecode. Este é o executável que vive na Máquina Virtual Ethereum. Então, quando implantarmos, isso vai ser algumas informações importantes lá. Mas não temos que acompanhar isso. Em toda vez que você fizer uma alteração em seu contrato, você terá que executar essa compilação de capacete de segurança do NPM. E tudo o que ele vai fazer é recompilar, atualizar os artefatos. Falamos sobre compilar nossos contratos e testar os contratos. Agora vamos dar uma olhada na implantação. Então, o que vamos fazer neste curso é que vamos implantá-lo na cadeia inteligente financeira. Mas digamos que você não queria sair para uma rede de teste, mas você só quer que ela faça tudo localmente. Bem, aqui está como você faria isso. Assim, podemos usar esse script de exemplo para implantar. Então aqui você verá em px hardhat executado no script R. Ele dirá que implantar um cumprimentador com saudação, saudação implantada neste endereço de contrato. Mas você vê aqui que um capacete sempre gerará uma instância na memória por padrão. Então, esta será uma instância na memória. Mas também é possível executar hardhead de forma independente que clientes externos como o MetaMask possam se conectar a ele. Isso pode ser MetaMask, seu front-end dapp ou um script. Então você pode fazer isso no nó hardhat px. E o que isso faz é que isso cria um nó autônomo que é executado em seu computador. Então, se eu digitar o nó hardhat px, pressione Enter, ele vai fazer algumas coisas legais. Então, um, vai me dar esses 20 endereços, mas vai me dar as chaves privadas para esses endereços, o que é muito legal e vai me dar 10 mil. Em. O que posso fazer agora é abrir um MetaMask. E vamos levar essa primeira conta. Então, ele pegou a chave privada desta primeira conta e acessou o MetaMask. E, na verdade, antes de fazer isso, você precisará adicionar o endpoint do host local 8545 ao MetaMask. Então, se você for para a rede de anúncios e adicionar uma nova rede, eu já a tenho. Mas eu tenho aqui localhost 8545. Então, o nome da rede será localhost 8545. nova URL de RPC será a barra de dois pontos HTTP dois pontos do host local 854 ou cinco. ID da cadeia é 1337. E, a propósito, se você não tiver o nó em execução, isso lhe dará um erro. Mas de qualquer forma, é 1337. O símbolo da moeda será IV. E então você pode deixar este em branco. E, em seguida, clique em Salvar. E isso realmente salvará essa rede de host local para você brincar. Agora posso copiar essa chave privada e, em seguida, ir para Importar conta e definir a chave privada, clique em Importar. E agora tenho 10 mil para jogar com uma conta dois. E eu posso realmente detalhes da conta. Posso mudar isso para teste de capacete local ou algo parecido. Seja qual for. Então você deseja deixar esse nó em execução. Tenho que deixar isso funcionando. Se você parou, isso não vai funcionar mais. Então você quer ir para outro terminal. E vamos executar este próximo comando, o capacete NPS run. Então, vamos implantar esse script, mas vamos usar o host local da rede. Assim, você pode dizer ao Rink de rede de TI OB ou qualquer teste que você queira usar. Você só precisa configurá-lo em sua configuração. Mas vamos usar a rede host local. E eu não sei. Acho que isso só vem por padrão. Não vejo isso aqui. Mas de qualquer forma, vamos pegar isso e implantá-lo. Em outro termo que vamos lembrar, deixe isso funcionando em outro terminal, execute isso. Oh, isso não é bom. Certifique-se de que você está na pasta de contratos. Certifique-se de que você está na pasta do contrato porque quando você altera os terminais, ela o chuta de volta para a raiz. Então execute isso novamente. E lá está ele. Cadeia de bicicletas implantada neste endereço de contrato. Esse contrato inteligente foi implantado em seu nó que está sendo executado aqui. Então, ao criar seu aplicativo front-end, basta usar essa conta. Quero dizer, você terá que colocar seu contrato para se vestir e coisas assim, mas você usará essa conta e então você pode testar tudo localmente. Você tem muita Eva. É muito divertido. Mas, na verdade, queremos dar um passo adiante e usar a rede de testes de cadeia inteligente de finanças. Então, isso estará ao vivo na rede de teste. E então, se por algum motivo você quisesse levá-lo ao vivo e produção, ou quer saber como chegar à produção. É muito simples a partir daí. Então, vamos fazer isso agora. Então, vou fechar este navegador. Não preciso mais disso. Não preciso desse nó em execução. E vou fechar este terminal e limpar isso. Ok, então esse foi o cenário de desenvolvimento em seu ambiente host local. Então, ele gira um nó autônomo para você trabalhar. Você pode implantá-lo nesse nó e, em seguida, conversar com ele com clientes externos, como o MetaMask. Ótima opção. Mas, novamente, queremos sair para uma rede de teste. Queremos tornar essa coisa legítima e ter uma ideia real sobre isso, não um anfitrião local. As coisas realmente não estão acontecendo. Situação. Agora, há várias maneiras de se conectar à cadeia inteligente ByteDance. Mas muitos desenvolvedores usam um serviço de terceiros para isso porque permite acesso rápido e permite que você dimensione se você quisesse levar seu aplicativo para produção. Portanto, existem serviços como interferer, que é popular. alquimia é muito popular, mas ambos se concentram mais em um teorema, não em finanças. Vamos usar um serviço hoje chamado Morales. Morales nos permitirá falar diretamente com a rede de testes de cadeia inteligente Biodefense. Tem muitas, muitas outras coisas que você pode se aprofundar também, mas oferece acesso rápido. Ele permite que você dimensione. Ele só tem uma plataforma construída para esse tipo de coisa. Então, se você for para Morales.io e clicar em se inscrever gratuitamente, é totalmente gratuito. Você acabou de colocar seu endereço de e-mail, criar uma senha. Acho que vai lhe enviar um e-mail para confirmar e você estará pronto. Então, vou entrar e colocar minha senha. Depois de chegar aqui, você quer ir para nós rápidos e clicar na rede BSC em pontos. Aqui você tem um conjunto de endpoints. Você tem a rede principal, o arquivo de rede principal, o conjunto de testes e o arquivo de rede de teste. O que queremos é a rede de teste. Então copie isso. E vamos voltar ao nosso projeto e vamos adicionar a isso. Então coloque uma vírgula aqui. E então é aqui que podemos definir nossas diferentes redes. Assim, podemos fazer testes na rede principal, host local, como o que acabamos de fazer. Podemos colocar algumas informações lá, quaisquer redes que quisermos usar. Então, vamos chamar essa rede de teste. E há duas propriedades que precisamos, URL e contas. Para o URL, vamos colar exatamente o que copiamos de Morales. Então, para contas, vamos pegar nossa conta do MetaMask. Então, se você abrir o MetaMask e ir para a rede de testes BSC. Agora, se você não tiver isso, clique em novamente, redes e rede de anúncios. E você vai querer adicionar uma nova rede para a rede de testes BSC. E essa informação está bem aqui. Portanto, o nome da rede é BSC test net. O novo URL de RPC é https dois pontos de barra de dados de barra. Na verdade, basta digitar pela cadeia Nance Smart para o MetaMask ou algo assim. E isso dirá conectar o MetaMask para financiar a cadeia inteligente. Aqui, você receberá os valores aqui, rede de teste. Então, aqui está o URL do RPC. Aqui está o ID da cadeia, que é 97, símbolo é B&B no Block Explorer URL é este. Portanto, certifique-se de copiar esses N. Então, novamente, vá para Configurações redes em uma rede, copie esses valores e pressione Salvar. E então você deve ter uma opção chamada rede de teste BSC. E o que você quer fazer é provavelmente criar uma nova conta. Você não quer usar uma de suas contas normais. Tenho um chamado teste BSC. Para criar uma nova conta, basta clicar neste círculo e criar uma conta e , em seguida, dar um nome a ela e clicar em Criar e ele cria um para você. Mas o que você quer fazer agora é garantir que esta seja uma conta que você não usará para mais nada, é claro. Mas o que você quer fazer agora é acessar os detalhes da conta. E então você deseja exportar a chave privada. Então clique em Exportar chave privada. E eu consegui, você tem que colocar sua senha MetaMask. Então deixe-me pegar isso. Então digite sua senha MetaMask e clique em Confirmar, e ela mostrará sua chave privada. Então copie isso. Copie isso. Em seguida, volte para o código VS e essas serão suas contas. Mas veja que é plural. O fato de ser plural significa que você tem que colocá-lo em uma matriz. Então, vou colocar suas citações e depois colá-las assim. Agora, é claro que não queremos isso em nosso arquivo de configuração. Queremos colocá-lo em um arquivo ENV. Então, vamos para o contrato e criar um novo arquivo. Vai ser chamado de ponto ENV. E teremos um valor chamado URL. E pegaremos esse URL. E, na verdade, é igual e cole isso. E então você quer, então outra chamada para contagens é igual. E aqui é onde você deseja colar sua chave privada. Então vá em frente e cole sua chave privada aqui e salve-a. Agora vamos voltar ao arquivo de configuração e queremos usar um pacote chamado dot ENV. Então, npm instale o ponto ENV. E sempre esqueço como isso funciona. Dot ENV, ES6. Sim, então vamos importar ponto ENV. E depois que fizermos isso, podemos usá-lo, pois o NodeJS usa essas variáveis de ambiente que são processadas pelo nome do ambiente ENV ponto. Então, no topo, faremos a configuração ENV de ponto de importação e, em seguida, devemos ser capazes de dizer URL de ponto ENV dot de processo. Então, aqui na matriz, vamos dizer processar env ponto, contas de ponto e salvá-lo. E agora devemos ser capazes de implantar. Temos tudo o que precisamos. Vamos experimentá-lo. Em capacete bx dot. Na verdade, recebi a Sugestão Automática. Então, o capacete NPS executa scripts barra de amostra script.js, dash, dash, dash network. Agora não queremos host local, queremos o que temos aqui em cima, que é a rede de testes. Portanto, devemos ser capazes de apagar que na rede que queremos usar é a rede de teste. Se quiséssemos, se quiséssemos definir outra coisa, apenas colocamos toda a rede principal e o mesmo tipo de coisa. Em seguida, podemos implantar a rede principal, se quisermos, mas vamos implantar para testar a rede e clicar em Enter. E diz que não é possível usar instrução de importação fora de um módulo. Tudo bem. Vamos voltar e pegar o outro, que é a declaração require. Para colocar exigir lá e tentar novamente. Lá vamos nós. Cadeia de bicicletas implantada neste endereço de contrato. E se formos a testes de varredura do BSC, net in, confirme isso, vamos perfurar nosso endereço ou endereço de contrato. Lá está, idade de trinta e cinco segundos ou contrato. Aqui está nosso bytecode. Vá para eventos. Acho que não temos nenhum evento. Transações, sem transações. Incrível. Implantamos nosso contrato na rede de testes de cadeia inteligente financeira. Então acabamos com a parte do contrato. Se tivermos que fazer alguma alteração novamente, vamos recompilá-la e reimplantá-la. Ele nos dará um novo endereço de contrato e nós apenas atualizaremos isso no front-end. Então, parabéns, você acabou com seu contrato. Agora é hora de começar no front-end. 4. Configuração do projeto e criação do FrontEnd: Tudo bem, agora vamos nos concentrar no front-end. E o que normalmente faríamos com o aplicativo React é que usaríamos o aplicativo Create React para inicializar um projeto, mas vamos usar algo diferente chamado vite. Agora, o vite é exatamente como o aplicativo Create React, mas é mais rápido e tem outras personalizações, mas não vamos nos preocupar com isso. Então, deve ser como um por um o mesmo. Devemos ser capazes de usar isso e fazer todas as coisas que faríamos no aplicativo Create React. Então, se você for para vite, é um byte, js dot dev. E clique em Começar. E então desça para, vamos fazer fio criar vite. Sinta-se à vontade para fazer npm, se quiser. Eu só prefiro fios. E na sua pasta raiz, basta colar isso e pressionar Enter yarn, criar mordida. E vai inicializar um projeto React. Então, nome do projeto, vamos chamá-lo de cliente. Porque este será o front-end do nosso aplicativo. E, em seguida, selecione uma estrutura. Claro que vamos escolher o react. Então eu não quero usar o TypeScript. Então, basta escolher react. E lá vamos nós. Feito. Então, se você fechar seu contrato, verá que agora você tem uma pasta de cliente. E se você olhar para ele, é quase exatamente o mesmo que o aplicativo Create React. Então, vamos pegar o CSS do aplicativo e excluí-lo. E o favicon e o logotipo, exclua-os. Então, no aplicativo JSX, vamos excluir toda essa div de entrada. Olá só para ver que funciona. E para executar isso, se olharmos para o pacote JSON, é, o script é surdo. Assim, podemos fazer um yarn run dev ou npm run dev. Qualquer um deles. Claro que tenho que estar na pasta certa. Portanto, certifique-se de ver o final da pasta do cliente. Execute isso novamente. E, claro, temos que instalar o Yarn ou instalar o NPM para instalar pacotes R. Tudo bem, vamos tentar isso de novo. Você não é o Yarn install Yarn run dev e vá para localhost. 3 mil falharam na entrada. Certo, então excluímos alguns arquivos. Precisamos excluir as importações também ir para o aplicativo JSX, excluir esta importante declaração de logotipo. Não temos um CSS de aplicativo, você pode excluí-lo, salvá-lo. E acho que é isso. JS principal. Sim, isso é bom. Se abrirmos nosso aplicativo . Lá vamos nós. Sim, diz olá, então nossos aplicativos estão funcionando bem. Então, a primeira coisa que vou fazer, vamos usar um pensamento sobre qual estrutura CSS devemos usar com isso. Na verdade, vamos usar a interface do usuário do chakra porque acho que podemos realmente aumentar isso rapidamente com isso. Agora eu não usei muito. Então, se você também não o usou, estamos no mesmo barco, mas é muito fácil. Então, vamos visitar o site primeiro. UI de Chakra. E estou no Brave, não quero estar no Brave. Deixe-me fechar isso. Chakra Ui.com. Chakra-Ui.com e, em seguida, clique em Começar. Eu consideraria usar o Tailwind, mas fiz um tutorial de dois ventos de cauda uma vez no passado e era tão, tantas aulas para acompanhar. Acho que será muito mais fácil com isso. Então, vamos começar e chegamos a esta primeira página de etapas. Vamos rolar para baixo até a página do aplicativo Create React. Clique nisso. E vemos aqui que, se estivermos usando o aplicativo Create React, podemos executar o comando que inicializa essa estrutura CSS com ele. Não estamos usando o aplicativo Create React, mesmo que seja muito semelhante. Então, precisamos fazer isso manualmente. Então venha aqui para a instalação manual. Clique em yarn ou em VM e vamos instalá-lo. Portanto, pare seu servidor e cole esse comando e vamos instalar a interface do usuário do chakra. Há alguns outros pacotes, emoção e quadro ou movimento. Em seguida, vamos querer fazer essa configuração do provedor. Portanto, precisamos adicionar esse provedor envolvendo nosso componente de aplicativo. Então, vou usar essa instrução de importação primeiro. Vou copiá-lo e ir para o JS principal. Vamos colar isso aqui acima do seu CSS de índice. Em seguida, queremos embrulhar o aplicativo. E eu só vou pegar essa coisa toda e substituí-la. Também vamos usar ícones. Então, se você for para Componentes e em algum lugar, há ícones. Vamos apenas procurar por isso. Mídia e ícones procuram esta seção e clique no ícone, vai querer instalar este pacote de ícones para copiá-lo e instalá-lo. Então cole isso aqui e instale seu pacote de ícones. E enquanto isso está instalando o que queremos fazer por uma questão de tempo, já que este não é realmente um curso CSS, interface do chakra tem muitos componentes que você pode basicamente copiar e colar. Você pode copiar e ajustá-lo para como quiser. Não queremos fazer as coisas do zero aqui. Não queremos reinventar a roda. Então, se você for para o chakra UI Navbar, isso o levará a uma página que tem muitos componentes pré-fabricados. Portanto, há as seções da página, formulários de navegação, componentes, muitas coisas que já estão juntas. Agora, essa página às vezes, por algum motivo, não carrega, como esse conteúdo não carrega. Então eu quero essa primeira barra de navegação porque é a mais simples. Então, basta clicar nesta seta para abri-la em uma nova página para obter uma prévia de como ela se parece. Então, sim, isso é o que parece. Aqui está o seu logotipo, Aqui estão alguns itens de navegação. Eles têm submenus e , em seguida, um login e se inscreve. Vamos correr com isso. Então, vamos voltar a esta página e clicar no código. Vamos usar a subnavegação de largura e o CTA. Clique em Código e clique em Copiar. E então vamos criar um novo componente. Então, vamos ao código-fonte, criar uma nova pasta chamada componentes e criar um novo arquivo chamado nav bar dot js X. E eu vou colar isso nessa coisa toda. E vou encontrar a função principal com isso, que é com subnavegação. Vou mudá-lo apenas para navbar. Ele já é exportado como padrão, portanto, não precisamos adicionar isso na parte inferior. E nós temos alguns erros. O que está acontecendo? Oh, isso parece que é TypeScript, então só precisamos nos ajustar para isso. Então, vamos até o fundo e remova todos esses tipos. Então, remova isso da matriz de itens NAB. E não precisamos fazer interface porque isso não é TypeScript. Encontre o próximo erro. Remova esse tipo em item de navegação móvel. Continue subindo na sub-rede da área de trabalho. Remova isso. E acho que estamos no claro. Portanto, devemos ser capazes de salvar isso e executar o fio do servidor aéreo, executar dev. E devemos ver que essa barra de navegação deve ser tão fácil. É claro que não o fazemos porque não o adicionamos ao componente do aplicativo. Então isso é uma barra de navegação. Então, vamos voltar ao aplicativo. Então APA, JSX e, em seguida, na parte superior, vamos importá-lo, importar navbar de barra de barra de barra de barra de pontos. E então aqui podemos simplesmente mudar esse olá e substituí-lo por navbar e salvá-lo. E nós deveríamos ter um navbar. Lá vamos nós. Parece ótimo. Agora não precisamos de todas essas coisas, tudo o que vamos manter como a seção de logotipo. Vamos colocar qualquer que seja o nome do nosso aplicativo. E precisamos que não precisamos fazer login e se inscrever, só precisamos conectar a carteira. Então, vamos fazer alguns ajustes para que possamos nos livrar. Vamos ver, encontrar trabalho. Então, aqui estão os itens da barra de navegação. Então, vamos nos livrar dos designers de contratação. Vamos nos livrar do Learn Design e dessas subnavegações. Vamos nos livrar do bom trabalho. Vamos nos livrar do rótulo de inspiração. E acabamos com uma matriz vazia. Salve e veja se está tudo bem. Sim, livrou-se de nossos itens de navegação. Tudo bem, item de navegação móvel. Vamos nos livrar disso totalmente porque não temos nenhum item de navegação. Vai ficar bem de qualquer forma. Então, vou apagar isso. Vou apagar o mobile nav. Livre-se disso. E tenho certeza que isso é referenciado em algum lugar. Então, vamos encontrá-lo. Mobile nav Lá está. Então, vou me livrar de toda essa seção lá. E acho que isso cobre isso. Vamos salvá-lo e garantir que está tudo bem. Ainda está bem. Vamos encontrar o sinal aqui. Faça login e inscreva-se. Apenas se livrar do sinal M. E basta mudar a inscrição para conectar a carteira. Nós realmente não queremos esse rosa. Queremos até 500. E o pairar, vamos fazer também cerceta, mas um pouco mais leve, então sim, vamos fazê-lo até 300. E em vez do logotipo, vamos colocar uma corrente de bicicleta. Acho que é isso que chamamos de cadeia de bicicletas do aplicativo. E vamos fazer a direita antes dessa tag de fechamento. Vamos adicionar um peso de fonte igual a 900. Vamos torná-lo grande. E tamanho da fonte. Vai ser X grande. Então, salve isso e veja o que parece. Corrente de bicicleta. Então queremos tornar esse fundo um pouco mais escuro. Então, aqui em cima, onde é usado o valor do modo de cor, ele é definido como branco. Vamos colocar cinza 200. Salve isso e dê uma olhada. E isso parece ótimo. E se o reduzirmos para celular, temos esse pequeno ícone de hambúrguer, que eu realmente não quero. Veja se podemos descobrir onde isso está. Botão de ícone, provavelmente isso. Vamos nos livrar disso completamente. E economize. É. Parece que nossos botões desapareceram, então ainda há algo móvel acontecendo. Hum, provavelmente tem algo a ver com os desktops sub NAB. Vamos nos livrar do subnav. E, na verdade, vamos nos livrar do desktop nav porque não precisamos de nenhum desses itens de navegação. Então, vamos nos livrar disso também. E isso cairia aqui na área de trabalho. Agora, vamos nos livrar disso e salvá-lo e ver o que temos. Tudo bem, e o botão ainda está desaparecendo. E parece ver este botão aqui com esta base de exibição MD. Isso é responsivo como consultas de mídia. Então, na base, que eu acho que é o menor, não diz nada. Vamos tirar isso e deixar o meio. Tenha sempre em linha flexível e isso deve corrigi-lo. Sim, lá vamos nós. E isso se move, mas eu não estou realmente preocupado com isso. Podemos corrigi-lo mais tarde, se necessário. Isso parece bom. Então, corrente de bicicleta e temos nossa carteira de conexão. Vejo como isso foi fácil de configurar, basta colar o exemplo e ajustá-lo como quiser. Em seguida, vamos colocar um grande herói aqui que nos aponta para a página do painel. Então, se voltarmos aos nossos modelos de chakra, há em algum lugar herói de seções de página de herói aqui. Isso é o que queremos. Vou escolher este primeiro aqui. Há outras opções se você quiser ir com elas, vou escolher esta primeira, e desculpe, vá para código, copie. E vamos criar um componente para isso chamado herói ponto JSX. Vou colá-lo como antes, e vamos mudar o nome da função principal , o herói. Vamos criar mais um componente chamado home. Então home dot js X. E esta será a nossa página inicial. Nós só teremos duas páginas neste aplicativo, então vamos fazê-lo assim. E para casa, digamos que const home seja igual a retornar um para casa. Vamos colocar em casa para devolver alguma coisa. Na verdade. Vamos tê-lo. Claro, devolva nosso herói. Herói. Certifique-se de fazer sua declaração de importação na parte superior. E aqui na parte inferior, vou exportar a casa padrão. E vamos voltar ao nosso herói e ajustar isso para que ele funcione. E, na verdade, vamos colocar em casa aqui por enquanto. Eu não quero isso aqui, mas vamos colocá-lo aqui para que possamos ver o que parece ao construí-lo. E, novamente, certifique-se de importar na parte superior. E não gosta que não tenhamos um elemento pai envolvendo esses elementos. Então, vou envolvê-lo com esses elementos em branco. Ótimo, e temos alguns erros porque precisamos ajustar algumas coisas e heróis. Então, a primeira coisa é que diz import hid from next head, que se parece ao lado de JS. Portanto, esses modelos usam tecnologias diferentes. Não estamos usando ao lado de js. Vou remover isso. E, na verdade, vou remover a parte da cabeça. Não precisamos disso. E tudo o resto parece bom. Vamos salvá-lo e meio que ver o que parece. É, como já está pronto para ir aqui, mas precisamos mudar esse texto. Então, vamos encontrar nosso texto aqui em cima e diz que ganhe dinheiro, e vamos dizer, alugue sua próxima bicicleta. E então este texto aqui, vamos dizer com cripto. Então, para este texto, vamos digitar conectar sua carteira, escolher sua bicicleta e você vai para as corridas. Quando você devolvê-lo. Você pode facilmente pagar sua tarifa com B & B. E vamos ativar o envoltório de palavras. E todos nós gostamos dessas taxas de gasolina de B&B porque realmente economizamos isso e damos uma olhada. Seu próximo espaço em branco com criptografia, e aqui está nossa declaração. E vamos realmente fazer essa correspondência com nosso botão lá em cima. Vamos fazer toda essa partida verde e há um Get Started e a partir de 15, vamos abordar isso também. Então, a primeira coisa que vou fazer, alugue seu próximo espaço em branco. Vamos colocar isso como cerceta. Queremos usar cerceta, não verde. Então aqui embaixo, comece, digamos que escolha minha bicicleta. E novamente, defina isso para cerceta. E estes aqui em cima, o plano de fundo até o esquema de cores Vamos fazer TOO também ver como isso se parece. Então, isso saiba mais. Nós realmente não precisamos disso. Então, apenas se livrar desse botão inteiro. Depois, há a partir de US $15 por mês. Vamos colocar o aluguel sem nenhum custo adiantado. E nós deveríamos terminar com isso. Escolha minha moto alugada sabe custar adiantado, então devemos ser capazes de clicar nisso. E isso deve nos levar ao painel. E isso funcionou sem nenhum custo. Está um pouco próximo. Vamos voltar e ver se podemos mover isso. Então, vamos colocar o topo. Queremos colocá-lo como 25 em vez de 15. Acho que isso é bom. Sim, tudo bem. Corria sem nenhum custo adiantado. Você pode tirar a bicicleta , você pode escrevê-la e você só precisa pagar quando eles voltarem. Então, agora queremos poder clicar neste botão e ir para a página do painel. Então, para isso, vamos precisar do roteador React. Então, vou para o Google tão rápido. Roteador React. Leia a instalação do documento e só precisamos do fio ou NPM Yarn adicionar o roteador React dom às seis. Então, vamos adicionar isso. Interrompeu meu servidor, execute-o, inicie o backup do meu servidor. E vamos ao aplicativo JSX e adicionaremos tudo isso aqui. Então, precisamos fazer uma importação. Na verdade, provavelmente posso obtê-lo na página. Importar roteador do navegador. Vamos seguir em frente e pegar isso, salva algum tipo de digitação. Vamos fazer isso como um roteador. Acho que isso é convenção. Vamos importar rota, rota e rotas do roteador React, dom. Nesta instrução de retorno, vamos colocar um componente de roteador, R. maiúsculo Vamos envolver tudo nesse componente do roteador. Vou manter meu navbar lá. Vou retirar para casa. E dentro desse roteador, quero definir minhas rotas. Então, rotas. E então, dentro disso, vamos colocar duas rotas, uma para uma página inicial, uma para nossa página do painel. Então, o primeiro é a rota. Em seguida, faça o caminho exato igual a barra, que é a página inicial deles. elemento mais fino é o componente doméstico e seu fechamento automático. E, em seguida, basta copiar isso. E o segundo caminho será o painel. O elemento será um painel que ainda não criamos. Vamos em um minuto, provavelmente vai dar um erro , mas está tudo bem. Deixe-me apenas formatar isso. Sim. Acho que é isso. Isso é bom e não precisamos disso. Isso sobra do Bootstrap inicial. Portanto, temos um roteador dentro dele, temos rotas e temos duas rotas definidas. Agora podemos voltar ao nosso herói para onde um botão está bem aqui. E como este é um botão, você não pode realmente fazer um link. Então, vamos apenas fazer um onclick. Vamos ter alguns parênteses e vamos chamar handle click. E, como argumento, vamos passar no painel. Então vamos definir isso. Então, vamos subir aqui para a nossa função de herói. E, na verdade, antes disso, precisamos importar a navegação, que é um recurso do Roteador React dom, que nos permite navegar para caminhos diferentes. Então, importamos, usamos navegar a partir do roteador React, dom. Agora precisamos definir esse gancho. Então, deixe navegar igual a usar navegar. E agora vamos criar nossa função Const, lidar com cliques iguais. Vamos passar por qualquer caminho como parâmetro. E vamos ligar para navegar. Esta é uma convenção do Roteador React seis, a propósito, use navegou no gancho e estamos apenas definindo-o como navegar e vamos usá-lo aqui. Então navegue caminho no caminho sendo o que eu passar. E se você olhar aqui, eu passo em painéis. Portanto, isso deve navegar por nós, nos direcionar para a rota do painel. Então, salve isso e não temos rotas de painel. Então, vamos para o novo arquivo e criar um novo componente. Ponto do painel JSX. E eu só vou copiar para casa e colá-lo aqui e mudar de casa para Dashboard. E eu não preciso dessa importação de heróis. Temos que corrigir a ortografia, e eu também não preciso desse componente aqui. Vou colocar um H um que diz painel. Então, vamos verificar nosso componente doméstico. Temos nosso herói. Então isso vai mostrar seu herói. Neste componente inicial será chamado sempre que vamos para a página inicial com base em nossas rotas, lembre-se das rotas que criamos. Portanto, devemos poder agora acessar nosso aplicativo e ir para a página inicial. Então localhost 3 mil atualiza e não está funcionando. O que esquecemos de fazer? O painel não está definido. Claro que não está definido. Não o importamos no topo. Veja que estamos usando o componente , mas não o importamos. Portanto, só precisamos adicionar uma instrução de importação painel de importação do painel de componentes. Salve e nossa página inicial deve ser essa. Lá vamos nós. Então, temos nossa barra de navegação, temos um botão Connect Wallet, com o qual lidaremos mais tarde. Temos um bom herói e se clicarmos em escolher minha bicicleta, ela deve nos levar para a página do painel. Impressionante, nossa página inicial está terminada. Então, apenas para recapitular, temos nosso JSX principal, que está envolvido com esta interface de usuário de chakra, para que possamos usá-lo em qualquer lugar por esse provedor de chakra. aplicativo deles JSX, temos a rota em andamento. Portanto, nossa página inicial, a rota da página inicial exibirá o componente inicial. Nossa rota do painel exibirá o componente do painel. E então temos uma barra de navegação, que é nossa barra de navegação chamada no aplicativo aqui. Porque queremos que isso também esteja em um roteador. Temos nosso componente doméstico, que está exibindo nosso herói. Porque é isso que está na página inicial. Temos nosso herói, que acabamos de olhar. E então temos um painel o qual vamos pular para o próximo. No painel, poderemos exibir todas as estatísticas. Seremos capazes de escolher a bicicleta deles e interagir com a carteira. É aqui que toda a magia vai acontecer. Então, vamos seguir em frente e construir isso. 5. Como criar o painel: Tudo bem, então a próxima coisa que queremos fazer é construir nossa página do painel. Agora, aqui está o que é suposto parecer. Então, vamos ter essa declaração de boas-vindas e teremos algumas estatísticas aqui. Esse será o nosso painel, terá um formulário que permite que você pague What's du terá um formulário para creditar sua conta, terá uma seleção de bicicletas aqui. Então, temos três tipos diferentes de bicicletas. Algumas descrições sobre cada bicicleta e a capacidade de verificar em cheque e uma bicicleta, é isso que vamos construir. Então, primeiro, vamos criar o painel de estatísticas. Então, vou voltar a esses modelos de chakra e tenho esta seção de Página chamada estatística. E nós só vamos puxá-lo diretamente de lá. Então, estamos usando a chamada estatísticas com ícone. Vai ficar assim. E então clique no código e copie isso. Então, vou criar um novo componente para isso. Vou chamá-lo de totais atuais ponto JSX e apenas colar nesse código. E eu acho que isso também é TypeScript, então teremos que remover tipos. Então, removeremos isso, removeremos a interface. E acho que isso é tudo o que temos que fazer. Então, agora vamos importar isso para nosso componente de painel, que será o componente pai desses componentes filhos. Então importe o total atual. E minha inteligência não está chegando está me dizendo que não a exportamos. Então, vamos verificar isso novamente. Cartão de estatísticas de função. Na verdade, nem sequer chamamos isso. Então, exporte a função padrão, vamos chamar esses totais atuais. E vamos tentar isso de novo. Volte para o painel. Importe totais atuais dos totais atuais. Está na mesma pasta. E então, em vez desse H1, vamos exibir os totais atuais e ver como isso se parece. E temos um filtro de erro resolvido ícones react, BS dos totais atuais, JSX o arquivo existe? E parece que eles estão usando o pacote NPM de ícones do React. Vamos nos certificar de que é um pacote. Ícones do React. E sim, para que possamos clicar nisso e instalá-lo. Então aqui, npm install, React, dash ícones. Vou usar fios como venho fazendo. Instalação do Yarn, ícones React. Oops, adicionar fios, reagir ícones. E vamos instalar, e devemos ser bons depois disso. Agora vou executar meu servidor novamente e atualizar. E lá vamos nós. Temos nossas três estatísticas, mas queremos quatro e queremos ajustá-las um pouco. Então, queremos que o primeiro tenha um ícone de carteira. Segundo, um ícone de dinheiro. Vamos trabalhar nisso. Então, vamos rolar para baixo até o cartão de estatísticas, componentes de chocolate ou UI. E você verá aqui que diz como ícone BS pessoa, F phi server, go location. O que faz tudo isso? Bem, podemos voltar para reagir ícones e procurar isso. Então eu quero uma carteira. Qual deles usamos aqui? Parece isso. Parece que usamos essa conta de esboço MD. Agora você pode dizer de qual biblioteca elas vêm pelas duas primeiras letras ou três letras. Então, se você vir como IO enquanto estiver nítido, provavelmente são esses ícones de íons. Se você vir MD, provavelmente é Material Design em nosso olho é como um ícone de remixagem. Então, quando você realmente clica nisso, ele copia esse nome para sua área de transferência. Você quer ir até aqui e ver onde diz barra BS slash FI. Estas são as diferentes bibliotecas aqui. Portanto, não vamos MD porque esta é uma conta de esboço do Md em MD is Material Design. Vou copiar isso e importar o nome do meu ícone copiado da barra de ícones do React MD. E devemos ser bons lá. Então, vou descer e mudar o primeiro. Vou alterar o ícone para a carteira de saldo da conta de esboço MD. E chamamos isso de crédito B e B, crédito B & B. E digamos que 0,05. Incrível, parece bom. Em seguida, temos esse símbolo de dinheiro. Então, vou aos meus ícones do react e digitar dinheiro. Talvez. Sim, aqui está, RI, dinheiro, círculo de dólares e é RIs, então é ícone remixado. Então clique nele e role de volta para o topo. E provavelmente posso começar a substituí-los porque não vou usá-los. Então eu vou colar isso aqui e é RI, e eu vou vir aqui e colá-lo no próximo. Então cole isso. E então eu vou mudá-lo para B e B fazer. Então, B & B faz. E eu vou colocar 0.001 apenas para enchimento. Então nosso próximo ícone é este relógio. E serão minutos de pedalada. Então, vou voltar ao meu ícone react e digitar o relógio. Nós vamos com este, círculo de relógio ai contorno. É IA. Então, precisamos ter certeza de colocar isso. Mas esse é o meu terceiro. E mude isso para minutos de pedalada. Vou deixar esses sete. Isso é bom comigo. Então precisamos adicionar mais um. Então, se você procurar aqui, a grade simples é configurada para uma base de três colunas e depois uma em telas pequenas. Mas precisamos mudar isso para quatro. Então, teremos quatro colunas porque gostaríamos de ícones. E então eu vou copiar isso e salvá-lo para ter certeza de que está certo. Não é o círculo do relógio do esboço da IA não é definido, é claro. Então, vamos subir aqui e colar isso. E isso é um dy. Então podemos nos livrar deste e salvá-lo e ele deve funcionar. Agora, lá vamos nós. Portanto, temos nosso crédito B & B ou B&B fazer uma carona minutos. E então o último diz status da bicicleta e, na verdade, é uma cor. Então, o que podemos fazer é, antes de tudo, fazer o mesmo status de bicicleta. E então não precisamos desses dois, então vou comentar esses dois. Precisamos adicionar uma variável de cor de fundo para que possamos aparecer e dar uma olhada na estatística pai real. E então veremos aqui que na verdade há prompts sendo passados. Portanto, a estatística e o ícone do título estão correlacionados a cada cartão de estatísticas tem uma estatística e um ícone de título. E então, aqui em cima, estamos realmente transmitindo essa informação. Então, tudo o que realmente precisamos fazer é adicionar outro suporte aqui chamado cor BG para cor de fundo. Então, vamos passar isso. E estes são destruídos, então não precisamos ir adereços ponto cor BG. Na verdade, podemos apenas usar a variável. Podemos adicionar outro atributo aqui que diz que cor de fundo é igual a cor BG. Então, seja o que for que passamos como adereço, ele vai mudá-lo para essa cor de fundo. Incrível. Agora vamos descer. E este último, vamos dizer que a cor bg é igual. E vamos seguir em frente e apenas fazer vermelho por enquanto. Salve e veja se isso funcionou. Sim, aqui temos isso agora. As cores de fundo vermelhas. Portanto, nenhum dos outros obtém uma cor de fundo porque isso não está sendo passado. Só está sendo passado . E este último. O que podemos fazer é tornar isso condicional, como se o locatário tivesse uma bicicleta verificada e queremos que isso seja verde. Então, vamos revisitar isso quando começarmos a juntar toda a lógica. Então eu acho que acabamos lá com o pequeno painel deles. Na verdade, temos que mudar esse texto. Então, vamos alterá-lo para dar as boas-vindas ao seu nome. Aqui estão suas estatísticas e tornarão seu nome dinâmico mais tarde. Se você vier aqui, bem aqui. Bem-vindo. Travis. Aqui estão suas estatísticas. Incrível. Então, novamente, estamos apenas construindo a interface do usuário. Não temos nada dinâmico acontecendo. Estamos apenas fazendo com que pareça bonito. Então, em seguida, na nossa lista, temos esses dois formulários, pagamos seu devido e creditamos sua conta. Então, vamos voltar a esses modelos de chakra e ver se conseguimos encontrar algo. Aqui estão os formulários. E eu realmente não quero usá-los. Quero algo simples. E quando faço fóruns e reajo, gosto de usar o formulário de gancho do React, que é uma biblioteca que eu acho muito fácil, acho que é mais fácil do que alguns dos outros lá fora. Se você fizer o formulário de gancho React e a interface do usuário do chakra, você deve ter um bom exemplo com o qual podemos trabalhar. Então isso é, na verdade, do site do chakra. Então, novamente, fui ao Google, digitei em forma de gancho React e interface de usuário de chakra. E você vai obter esse URL, interface do usuário de chakra. Além disso, o gancho React para eles. Então clique nisso. E vamos pegar, vamos apenas copiar isso aqui e ver o que parece. Então, vamos criar um novo componente. Vamos chamá-lo de formulário de pagamento. Esta é a fórmula pe com ponto JSX. E cole isso e, em seguida, encontre nossa função principal chamada Hook form e troque-a para pagar por eles. E então, em nosso painel, e na verdade eu acho que vou incluir isso nos totais atuais em meio que mantê-los juntos porque vamos adicionar esses valores a esse painel. Então, vou colocá-los no fundo aqui. E o que vou fazer é criar um componente flexível. E vou justificar o conteúdo para o centro. E vou alinhar itens também ao centro. Entre eles, vou colocar o formulário de pagamento. Um formulário. Se eu pressionar Enter, acho que ele o importa automaticamente para mim. Caso contrário, certifique-se de chegar ao topo e importar o formulário de pagamento de um formulário. Na minha formatação está tudo desativado. Deixe-me formatar isso. Lá vamos nós. E vamos ver o que isso parece. Então, vou salvá-lo e tenho um problema. Falha ao resolver, React hook para ele. Certo. Sim. Portanto, temos que instalar esta biblioteca. Então deixe-me matar meu servidor e fazer fio. Adicionar, Reagir, forma de gancho. Acho que é isso que dizemos. Ou você pode fazer npm install, formulário de gancho React. Vamos instalar isso primeiro. Tudo bem, execute seu servidor novamente. Vamos dar uma olhada. Tudo bem, bom. Então, temos uma pequena forma aqui que apenas diz FirstName. Ele tem uma entrada de texto para seu nome e, em seguida, um botão de envio. Então está tudo bem. Vamos ajustar um pouco para dizer que pague o devido e depois receba um pagamento. Então, se rolarmos para baixo, veremos aqui este é o nosso formulário. Temos um rótulo de formulário que diz FirstName. Temos uma entrada que tem alguns atributos. Nome do ID, nome do espaço reservado, este registro, como registros, esse valor com o formulário de gancho. Você verá como isso funciona em um minuto e , em seguida, definirá alguns requisitos. Portanto, este é um campo obrigatório, comprimento mínimo deve ser quatro. E, em seguida, há essa mensagem de erro que pode surgir se esses requisitos não forem atendidos. Então, vamos ajustar isso antes de chegarmos ao controle de forma. Hum, eu só vou fazer bem acima do controle do formulário aqui. E deixe-me formatar isso porque também não gosto do formato, logo acima deste controle de formulário na instrução return. Vamos fazer um componente de texto. Isso é do componente Chakra UI Text. E dentro disso, vamos colocar uma fonte. A família de fontes é igual ao cabeçalho e ao tamanho da fonte. Como queremos que isso seja maior, vamos fazer um peso extra grande e a fonte. Vamos fazer 600. E então vamos colocar alguma margem na parte inferior. Então nb é igual a quatro. E deixe-me trazer isso de volta. E entre isso, vamos colocar o pagamento do seu fazer. Então, vamos ter isso acima do formulário ou acima da entrada. Então tudo o que precisamos fazer aqui realmente é mudar todas essas ocorrências de nome para algo como pagamento. Então, vamos mudar isso dois erros inválidos, pagamento por ponto. Vamos retirar o rótulo completamente porque não precisamos dele, porque temos o texto acima do controle de formulário aqui. Para a entrada, faremos pagamento de ID, espaço reservado, Vamos colocar pagamento, pagamento de P capital. Vamos registrar esse valor, seja lá o que for inserido, vamos registrá-lo como pagamento. E isso é muito legal. Como se você fizesse um monte de entradas aqui, ele criará uma matriz de pares de valores-chave do que você enviar em seu formulário. Então, vai dizer dois pontos de pagamento, seja lá o que entrarmos no fórum, ele faz todo o trabalho para nós. Obrigatório. Sim, é necessário. Não vou ter um comprimento mínimo. Então, vou tirar isso. Então aqui embaixo setas nome do ponto, vou colocar pagamento e erros nome de ponto, mensagem de ponto, alterar o pagamento. A propósito, você poderia deixar isso como nome. Só dirá na saída, ele terá a chave do nome em vez do pagamento. Isso é meio confuso. Então, estamos fazendo o pagamento em vez disso. Incrível. E tem algum gancho embutido, está enviando, acho que cria um spinner ou algo assim. Mas aqui está o botão Enviar. Então, vamos ver o que isso se parece. Na verdade, antes de fazermos isso, vamos subir aqui e ver a função onsubmit. Então, eles até incluem esse formulário emenvio do identificador de envio, no envio. Este é um formulário de gancho React. Convenção aqui, mas você verá aqui em cima no envio, temos uma nova promessa. Agora, eu não quero esse setTimeout. É apenas colocar como um preenchimento para nós que depois de três segundos ele mostrará quaisquer valores que fazemos para que pareça real. Eu realmente não quero isso. Vou tirar isso. Vou manter esse JSON stringify. Mas vou tirar isso. E vou fazer disso uma função de seta ES6. Portanto, const onsubmit é igual a valores. Então vou fazer disso uma pia. E tudo o que vou fazer é registrar os valores no console, console.log. E vamos ver se isso funciona. Opa, eu preciso deles. Então, JSON estringifica esses valores , salve isso e vamos dar um giro. Mas é claro que temos um erro porque sempre temos um erro. Falha ao construir texto, use o novo operador. Então, acho que é porque não importamos esse componente de texto. Então, vamos adicionar texto à nossa importação, importação de interface do usuário de chakra. E o que mais usamos? Acho que não usamos mais nada, então isso deve funcionar. Salve isso. E aqui vamos nós. Pague seu fazer. Deixe-me limpar o console e devemos ver nosso valor surgir. Então, vou colocar olá e enviar. Aí está, pagamento. Olá, valor-chave. Então isso é bom, mas não queremos que as pessoas coloquem cordas aqui. Queremos que eles coloquem apenas números e não apenas números, mas números decimais porque estamos lidando com B & B. Então, para fazer isso, nós realmente viemos aqui e definimos o tipo como número. E então, como queremos ser capazes de usar decimais, podemos adicionar o atributo step e simplesmente salvar isso. E agora podemos fazer como um 0.001, clicar em Enviar e ele é enviado corretamente. E se tentarmos enviar sem nada, ele dirá que isso é necessário. Isso é obrigatório. Não vou deixar que façamos isso. Isso é o que há de bom nos formulários de gancho React. Gosta de todas essas coisas para você. E quando você se acostumar a usá-lo, é uma ótima biblioteca. E caso você esteja se perguntando qual é esse passo, se eu removê-lo e tentar colocar esse número, posso colocar em 0,01, mas quando eu clicar em Enviar, ele diz, insira um valor válido. Os valores mais próximos são 01, então você só pode usar números inteiros. Você não pode usar esse decimal. Portanto, temos que permitir essa funcionalidade de etapa. Então passo é igual a NE. Agora que isso funciona, vamos frente e adicionar o outro, que é o crédito da sua conta, onde você pode adicionar crédito ao seu saldo. Então, vamos fazer exatamente a mesma coisa. Na verdade, posso simplesmente copiar este formulário de página. Vou criar um novo componente e chamá-lo adicionar duas formas balanceadas que JSX colam isso em nossa outra forma e apenas faça alguns ajustes. Então, em vez de pagar sua conta, colocaremos crédito na sua conta. Então, em vez de pagamento, faremos saldo de crédito. Então, vou selecionar todos esses na verdade, e fazer saldo de crédito. Então, para o espaço reservado, quero ver e acho que é isso. Vamos garantir que isso funcione. Temos o tipo e o passo lá que precisarão. Vamos salvar isso e atualizar esta página. E, claro, precisamos adicionar o formulário à nossa página. Você vai para os totais atuais e escreve um formulário de pagamento inferior, adiciona, adiciona ao saldo. E, na verdade, precisamos alterar esses nomes de função que são pagos. Adicione ao formulário equilibrado. Então precisamos adicioná-lo aos nossos totais atuais, certo? Formulário de pagamento inferior. Precisamos adicionar o componente. Certifique-se de importá-lo nas principais mentes para fazê-lo automaticamente e equilibrar a forma. Então, há meu componente e ele é importado aqui. Agora vamos conferir. Ótimo. Tenho o pagador devido e credito sua conta. Agora esses dois parecem presos juntos, veja o quão perto eles estão. Vamos dar-lhes alguma separação entre si e com o conteúdo acima dele. Vou para o formulário PE. E logo acima deste formulário, vou adicionar conteúdo flex justify igual ao Center. E isso é apenas os itens de alinhamento do Flexbox no próprio centro de chakras. Então vamos colocar algum preenchimento, então P é igual a cinco. E então eu vou colocar alguma margem superior igual a dez. E preciso fazer a mesma coisa nos outros. Então, vou copiar o primeiro bit. Certifique-se de descer até o fundo e fechar isso. E também tenho que colocar minha etiqueta de fechamento lá e também garantir que você importou no topo. Portanto, certifique-se de colocar flex para importar isso da biblioteca de chakra. E então queremos fazer o mesmo no anúncio para um formulário equilibrado. Então, logo acima do formulário, cole no flex com a etiqueta de fechamento e venha para a parte inferior para colar isso. E, em seguida, aqui em cima, adicionado na importação. Vamos dar uma olhada nisso. Lá vamos nós. Então eles têm algum espaço entre eles e eles têm algum espaço acima e abaixo. Agora, logo abaixo disso, vamos colocar três motos. Então, estamos realmente criando o que o chakra chama de pilha aqui. Estamos empilhando isso em cima disso, além disso. Então, eu quero colocar uma pilha no componente do painel. E aqui acima disso, vou escrever pilha como caixa, caixas e outra convenção de chakra. O texto alinha o centro. Tudo está centrado. E então vamos fazer algumas coisas responsivas aqui. E acho que copiei isso de algum outro lugar do projeto. Como eu disse, não quero passar muito tempo em CSS porque não é por isso que estamos aqui. Estamos tentando construir isso rapidamente para que possamos chegar às coisas divertidas do blockchain. Então espaçamento base oito. E isso é apenas ditos em telas pequenas, usando oito no meio é 14. Então, MD 14. E então o preenchimento PY y, que é o preenchimento superior e inferior. Vamos colocar a base 20 e MD 36. E faremos uma etiqueta de fechamento. E na parte inferior, em totais atuais, cole essa tag de fechamento. E então, no topo, você precisa importar a pilha. Imports pilha da barra da interface do usuário chakra dash reagem. Então, basta usar essa instrução de importação e salvá-la. E agora temos um erro. A caixa não está definida, então precisamos importar a caixa também. Salve isso. Lá vamos nós. Agora você vê que nossos rótulos, caixas de texto e botões estão todos centralizados de acordo porque fizemos essa pilha e tudo nessa pilha precisa ser centralizado. Então isso parece ótimo. Então, logo abaixo disso, vamos colocar esta fileira de bicicletas. Então, uma descrição e, em seguida, esses dois botões, e estaremos prontos para chegar às coisas divertidas. Então, aqui nos totais atuais, vou colocar flex, justificar conteúdo igual a Center e alinhar itens também é igual ao centro. E minha tag de fechamento vou colocar abaixo na minha tag de fechamento, vou colocar diretamente abaixo disso. Entre eles. Vou adicionar esses componentes de bicicleta. Então, vou colocar a bicicleta por enquanto. E vamos ter três motos. Então vá até os componentes, clique com o botão direito do mouse em criar um novo arquivo e vamos chamá-lo de bike dot JSX. Bicicleta Const é igual a bicicleta de retorno H1 de bicicleta. Vamos exportar essa bicicleta padrão de exportação. E então, em nosso painel, vamos adicionar três dessas bicicletas e não se esqueça de importá-la no topo. Importe bicicleta da bicicleta. Vamos adicionar três desses e garantir que ele funcione. Confira isso. E a caixa não está definida no painel. Ele é definido. Vamos salvar isso novamente. Talvez eu só precise me refrescar. Ok, flex não está definido, então não se esqueça de adicionar flex aqui também. Aqui vamos nós, bicicleta, bicicleta, bicicleta. Então, precisamos substituí-los por imagens. Tenho três imagens para você usar. Estará abaixo deste vídeo ou em algum lugar, onde quer que o conteúdo do curso esteja. E o que posso fazer é abrir, bem, vou criar uma pasta chamada ativos. Deixe-me abrir isso no Finder e abrir outro. E deixe-me encontrar o meu. Então, vou colar nesses três itens. Bicicleta um, bicicleta e bicicleta três. Tudo bem, então para a nossa bicicleta, o que vamos fazer é criar uma caixa. Lembre-se disso, todos eles são flexionados. Então, cada um terá esse componente de caixa. E então o tamanho da caixa é igual a grande margem x, que é esquerda ou direita. Vamos colocar dois. Então, há algum espaço entre ele. Feche isso. E entre a caixa, faremos uma imagem que será nossa fonte de imagem igual a bicicleta, margem, fundo igual a dez. Nesta moto, na verdade, vai ser um adereço. Então, em vez de adereços, vamos destruí-lo e colocar bicicleta. Vamos passar isso como um adereço. Vamos fechar essa imagem. É fechamento automático. Em seguida, faremos um componente de texto. E aqui você pode colocar um pouco de Lorem Ipsum. Você pode encontrar alguns detalhes da bicicleta, se quiser. Só vou fazer o gerador Lorem Ipsum por enquanto. E eu vou apenas copiar esse bit. Mais uma vez. Você pode colocar o que quiser lá, colá-lo. E eu vou colocar um envoltório de palavras. Então, se você acessar o código VS até Exibir e clicar em quebra de palavras. Então, há alguns textos que estarão sob a imagem. Então vou empilhar alguns botões. Então, vou fazer uma pilha. espaçamento é igual a 0, direção é igual a rho, alinhar, centralizar, justificar centro. E então a margem superior é igual a cinco. Dentro da pilha, queremos colocar um botão. Lembre-se de que usamos um botão no herói. Então, vou apenas copiar isso. Vá aqui e copie este botão. Isso tornará a vida mais fácil do que nós digitar tudo isso. Volte para a bicicleta e cole isso. Então, meu botão mudará esse texto para dizer checkout. E vamos colocar outro abaixo dele. Portanto, copie isso novamente e altere isso para fazer check-in e remover o onclick. Não queremos lidar com isso ainda. Vou formatar meu documento e salvá-lo. E, na verdade, vamos fazer isso antes marcarmos o botão Importar da interface do usuário do rastreador, caixa de importação, imagem, pilha de texto. E acho que é isso. Também queremos, bem, não poderemos ver nossas imagens ainda porque estamos passando pelas motos. Vamos lidar com isso antes de verificarmos nosso site. Portanto, nossa bicicleta é uma criança para painel. Então, aqui é onde precisamos definir nossa imagem de bicicleta. Então, aqui em cima eu posso importar bicicleta. Um de eu acho que são ativos de ponto, ponto barra barra bicicleta um ponto JPEG porque acho que o nome da imagem, copie isso duas vezes. E troque a bicicleta um para bicicleta para trocar de bicicleta 12 por três. Então agora podemos pegá-los e passá-los como adereços. Então podemos dizer que a bicicleta é igual a bicicleta um. Bicicleta é igual a bicicleta para bicicleta é igual a bicicleta três. Então estamos passando em cada bicicleta individual e estamos recebendo como um suporte no componente da bicicleta. Incrível, vamos dar uma olhada nisso e ver se funciona. Ótimo. Então nossas imagens estão aqui. Eles devem ser responsivos. Estamos usando o Flex. Sim, eles são responsivos. E temos algum texto que podemos voltar e ajustar como você quiser. E temos botões de checkout e check-in. Agora eles são circulares e não têm espaço entre eles, então vamos consertar isso. Então, sob o botão, não precisamos desse esquema de cores, cerceta, vamos colocar m igual a dois para colocar alguma margem lá. tamanho da fonte é igual a pequeno. peso da fonte é igual a 600. E então esse plano de fundo deve ser um total de 500. Remova o arredondado e remova este preenchimento x. e, em seguida, para passar o mouse, vamos torná-lo um 300. Então, é um pouco mais leve quando você passa o mouse sobre ele. Então, vou pegar tudo isso e colá-lo aqui embaixo. Vou colar isso aqui e salvá-lo. E agora ele deve parecer muito melhor, exceto que o texto é preto. Vamos deixar o texto branco. A cor é igual a branco. Para combinar com todo o resto. Certifique-se de fazer isso no outro botão para salvá-lo e boom, está com boa aparência. Agora devemos fazer esta corrente de bicicleta, este logotipo aqui em cima, vá para a página inicial quando você clicar nela. Então, vamos para a barra de navegação de cabeçalho, desculpe. Vamos descobrir onde está isso, corrente de bicicleta, e vamos fazer disso um elo. Então, vamos colocar o link. Porque lembre-se de que o Roteador React configura um link para barra, que é nossa página inicial. E então vamos colocar a corrente de bicicleta entre isso. E isso será vinculado à página inicial. Então, salve-o. E agora atualize. E agora, quando passarmos o mouse sobre ele, veremos que é um link. Podemos clicar nele. E isso não nos leva à página inicial. Algo deu errado. Oh, eu vejo o que está acontecendo. Está importando o link da interface do chakra. E, na verdade, precisamos importá-lo do roteador React dom, importar o link do roteador React dom. Isso é o que está acontecendo. Portanto, não precisamos desse link aqui. Vamos tirar isso e como isso deve funcionar. Sim, aqui vamos nós. Cadeia de bicicleta e você vê abaixo localhost 3 mil vem aqui em baixo. Se clicarmos nele, vamos para a página inicial. Tão incrível. Acho que acabamos com a interface do usuário e podemos realmente começar agora e a lógica. Então, se eu estiver na minha página inicial, posso conectar a carteira , o botão lá, posso escolher minha bicicleta para ir ao painel, que configuramos aqui. O painel dá crédito ao meu B&B. B&b faça minutos de passeio no status da minha bicicleta. Tenho permissão para pagar meu pagamento, crédito, minha conta. Posso escolher uma bicicleta aqui, check-out, check-in. E acho que estou bem. A única coisa que resta é quando, quando um novo usuário entra nesta página, ele não quer ver seu painel porque ainda não entrou como locatário no contrato inteligente. Então, se eu chegar a este aplicativo e nunca o usei, preciso me registrar como locatário. Lembre-se que temos que adicionar aluguel ou função. Então, quando eles chegam aqui pela primeira vez, precisa haver um formulário que eles possam se adicionar como locatário, mas ainda não colocamos nenhuma lógica para determinar isso. Então, vamos adiar. E à medida que começamos a lógica, quando realmente somos capazes determinar se elas são ou não. Vamos adicionar nesse formulário. Tão ótimo trabalho promovendo essa interface do usuário. Sei que você está mais animado interagir com o contrato inteligente e construir essa lógica , conectar-se à carteira e fazer transações, todas essas coisas divertidas. Mas tivemos que tirar isso do caminho e agora está fora do caminho. E vamos nos divertir ainda mais na próxima seção. 6. Conectando o MetaMask e falando com nosso contrato: Ok, então agora para a parte divertida, vamos conectar nossa aplicação ao contrato inteligente e começar a falar com a blockchain. Então, antes de entrarmos no front-end, precisamos voltar para a pasta do contrato aqui. E lembre-se quando compilamos este contrato, ele criou esta pasta de artefatos e uma pasta Contratos, uma pasta de alma de pontos de corrente de bicicleta neste arquivo JSON com um monte de dados. E lembre-se que falamos sobre o bytecode e a ABI. A ABI novamente, é uma maneira de dizer ao seu aplicativo quais funções ou métodos ele pode chamar, quais funções podem chamar e você é contrato inteligente e algumas outras informações a ver com isso. Precisamos incluir isso em nosso projeto, este ABI. Então pegue toda a matriz e role para baixo até o final dela e inclua os colchetes e copie-a. E agora vamos criar em nossa pasta do cliente um arquivo na pasta de origem chamado config dot json. E vamos criar apenas alguns JSON regulares. Então, colchetes encaracolados aqui, vamos colocar a ABI como chave e tem um valor. Vamos colar nessa matriz. E vou formatá-lo. E esse será o nosso ABI. Agora, além disso, precisamos poder agora, além disso, precisamos de endereço de contrato aéreo , como onde implantamos nosso contrato também. Então, vou adicionar outra chave aqui depois disso. Então, coloque uma vírgula e digite o endereço do contrato. E o valor será o endereço para o qual implantamos. E não me lembro o que foi quando fiz isso. Então, vou implantá-lo novamente. Vou voltar para a pasta raiz, cd na minha pasta de contrato e executar NP x hardhat, executar scripts slash sample script.js. Vamos definir esse sinalizador de rede para a rede de testes. Lembre-se que definimos em nossa configuração de hardhat, na verdade, config hardhat essas redes, esse objeto de redes e recriamos uma chamada rede de teste. Então é isso que estamos fazendo. Estamos implantando a execução desse script de exemplo ou esse script de implantação na rede de teste. Então, vou apertar Enter e deixar essa implantação e, em seguida, vou pegar o endereço do contrato que foi implantado para lá, é a cadeia de bicicletas implantada neste endereço. Vou copiá-lo, voltar para minha configuração JSON e colar isso como um valor para o endereço do contrato e salvá-lo em nosso contrato, podemos guardá-lo por enquanto. Então abra o backup da pasta do cliente. E nós vamos, e vamos voltar a isso. Então, o que vamos fazer a seguir é que precisamos de uma maneira de armazenar o estado. E eu realmente não quero lidar com redox porque este é um projeto pequeno e Redux é um pouco complicado. Então, vamos usar algo muito mais fácil chamado de Context API. E isso faz parte do reagente vem com o React e nos permite gerenciar o estado. Então, se você já trabalhou com reagiu antes, sabe que passamos adereços para crianças e, às vezes, isso pode ficar fora de controle e estamos passando backup de eventos para os pais e isso é apenas louco. Então, o que essa API de contexto faz é como Redux na medida em que gerencia o estado. Mas o que isso faz, o que isso nos beneficia é que podemos envolver todo o nosso projeto neste provedor e, em seguida, qualquer componente dentro desse provedor pode acessar o estado. Então, o estado será global e você pode acessá-lo em qualquer lugar. Você acabou de trazer esse contexto, para acessá-lo. Então, vamos configurar isso e isso realmente vai controlar como todas as nossas funções com as quais conversamos com esse contrato inteligente. Portanto, se você for para a origem e clicar com o botão direito do mouse e criar uma nova pasta, e nós a chamaremos de contexto. Whoops, crie um. Vamos clicar com o botão direito do mouse na pasta de origem, criar uma nova pasta chamada contexto. Por algum motivo , simplesmente não vai. Deixe-me fazer isso. Aqui está, contexto. Então, vamos clicar com o botão direito do mouse na pasta de origem e criar uma nova pasta chamada contextos. E dentro dessa pasta criará um arquivo chamado blockchain context dot js X. E daqui vamos importar algumas coisas. Então importe, reaja e use o estado porque vamos usá-lo do React. Em seguida, vamos importar isso. Config JSON. Então, vamos importar essa ABI e o endereço do contrato, e vamos estruturá-lo para que possamos acessar ambos individualmente. Então importe ABI, endereço do contrato de. E então eu acho que é ponto, ponto barra configuração JSON. Bom. Então, em seguida, vamos ser, em seguida, vamos usar um pacote chamado ethers js. Agora, muitas pessoas usam a Web três js. Este pacote nos permite falar com o blockchain, mas sou o próximo, vamos usar um pacote chamado ethers JS. Agora, muitas pessoas que conheço usam Web três JS. Eu gosto de éteres, JS cada vez mais familiarizados com isso. Então, vou usar isso neste pacote nos permite conversar com nosso contrato inteligente na cadeia de blocos. Por isso, é muito fácil de instalar. Venha aqui. Deixe-me voltar para minha pasta de clientes. No Yarn executado, adicione éteres, ETA GRS. E enquanto isso estiver instalando, vou importar éteres. Éteres. Muito fácil. Ótimo. Em seguida, vamos criar um contexto e vamos exportá-lo como contextos blockchain. Então, vamos colocar Export. Em seguida. Na verdade, vamos criar esse contexto. Estamos falando sobre a API de contexto. Vamos criar isso agora e vamos defini-lo como uma variável e exportá-lo. Assim, podemos colocar o contexto de exportação, const, blockchain igual a React dot create context. E é isso. Em seguida, criaremos nosso componente. Exportar. Em seguida, criaremos nosso componente de provedor. E se você não sabe como usar isso, basta fazer o Google. E é muito fácil. Você pode ler e ser pego em alguns minutos. E lembre-se que usaria a variação de ganchos, que é muito mais fácil na minha opinião. Vamos exportar, const blockchain provider é igual. E vamos destruir nossos filhos em vez de adereços. E isso parece bom. Então, o que vamos retornar aqui, a chave para isso tudo é retornar esse provedor de pontos de contexto blockchain. Então, vamos fazer contextos blockchain ponto e você verá que eles têm provedor de consumidores. Não precisamos de consumidores. Estamos usando ganchos, mas há muitas coisas que você poderia usar aqui. Vamos usar o provedor. E é obrigatório que você coloque um valor lá, o que não temos no momento. Então, vou deixar isso em branco. Na verdade, deixe-me colocar isso na próxima linha. Vamos retornar aqui o componente-chave neste provedor. Então, vamos retornar, ponto de contexto blockchain, e você vê que há um consumidor e um provedor. Se você ler sobre a API de contexto, você lerá sobre ambos estavam usando ganchos. Então, vamos usar o provedor. E nós vamos fornecer, na verdade, deixe-me fechar isso. Vamos fornecer aqui um valor que temos que fornecer. Mas ainda não temos nada . Vou deixar isso em branco. E então, entre elas, colocarão as crianças porque é isso que estamos passando . Então, salve isso. E então temos esse provedor aqui. Mas precisamos ir ao nosso JSX principal e envolver todo o aplicativo neste provedor. Então, vou primeiro importá-lo. Importar o provedor de blockchain contextos de barra de pontos reduzem o contexto de blockchain. E então vamos embrulhar essa coisa toda. Então, aqui em baixo, posso dizer provedor de blockchain e colocá-lo fora do chakra ou provedor de UI e de todo o aplicativo. E salve isso. Agora, esses valores que passamos, todos os valores que passarmos aqui estarão disponíveis para todos os componentes que trouxerem nesse contexto. Espero que isso faça sentido. Tudo bem, então vamos em seguida para os éteres, documentação JS. Éteres. Vamos apenas digitar éteres JS na pesquisa do Google e, em seguida, basta clicar em começar. Vamos seguir essas instruções. Então, como você instala? Já fizemos isso. Já o importamos. Não estamos usando tags de script, então continue. Então, aqui está a chave para todo esse pacote. Na minha opinião, são três coisas. Você tem que fornecer um signatário e um contrato. Então, o provedor agradece, somente leitura. Então, um provedor é uma classe que eu provedor em éteres. Não vamos confundir isso com o provedor Blockchain ou a Context API. Isso é separado. Um provedor em éteres é uma classe que fornece uma abstração para uma conexão com a rede Ethereum. Ele fornece acesso somente leitura à cadeia de blocos e seu status. Lembre-se de que quando você acha provedor pensa em acesso somente leitura ao blockchain. Agora, um signatário é uma classe que, de alguma forma direta ou indiretamente, tem acesso a uma chave privada. Lembre-se, colocamos sua chave privada uma chave privada que pode assinar mensagens e transações para autorizar a rede a cobrar sua conta ou executar operações. Então, quando você pensa em provedor, você pensa somente leitura, quando acha que o signatário pensa chave privada e assina mensagens, cria transações, faz alterações diretamente no blockchain. Então você precisará do signatário para isso. Você tem que o signatário somente leitura do provedor pode agir e fazer coisas. Então você tem o provedor que é somente leitura e o signatário que é capaz de transacionar e fazer transações. E então você tem esse contrato. E vamos falar sobre isso a seguir. Contratos e abstração, que representa uma conexão com um contrato específico na rede Ethereum. Contrato inteligente que implantamos para que os aplicativos possam usá-lo como um objeto JavaScript normal. Então, vamos criar esse objeto de contrato e vamos chamar todas as nossas funções a partir dele. Portanto, a primeira tarefa aqui é conectar nossa carteira ao nosso aplicativo e fazemos isso por meio do MetaMask. Portanto, não se esqueça de baixar o MetaMask se você não o tiver, basta ir para o MetaMask. Não sei por que é ponto Zendesk. Se você não tiver baixado e configurá-lo, há um milhão de artigos sobre como fazer isso. Mas suponho que, desde que você está fazendo esse curso, você já tem o MetaMask, mas apenas o Google MetaMask e vá para Download e é um navegador. Portanto, certifique-se de ter o MetaMask baixado e configurado. Aqui está uma amostra de éteres de como falar. Então, aqui está os éteres assumem a interação com o MetaMask. Então lembre-se que há um provedor, há um signatário. O provedor é a conexão com a rede Ethereum. Então, o provedor realmente será MetaMask. E então o signatário segura sua chave privada e consigna coisas. Lembre-se de que inserimos nossa chave privada quando a implantamos. E lembre-se que nossa chave privada está nesse arquivo ENV. E usamos isso quando implantamos o contrato e, em seguida, nossas carteiras combinarão com essa chave privada. Você usará a mesma conta que você usa para seu contrato. Tudo bem, então vamos dar uma olhada nisso. Vamos em frente e copiá-lo porque vamos usá-lo. Certo? Então, olhando aqui, os comentários são realmente úteis. Essa documentação é muito boa, na minha opinião. Mas primeiro você tem esse provedor e eles passaram por fornecer um wraps, um provedor padrão de três web, que é o que MetaMask injeta Como janela ponto um teorema em cada página. Então, nesta página do navegador, MetaMask injeta algo chamado janela ponto um teorema em cada página. Então, quando configuramos esse provedor, usamos, instanciamos um novo provedor de três web, que é fornecido por éteres. Então, fazemos um novo éteres adotar provedores de largura de ponto três provedor e passamos basicamente o teorema de dados da janela MetaMask é o objeto MetaMask. Então, isso vai ser um provedor. Dizemos isso sob a variável provedor. Então, podemos realmente usar o provedor para enviar isso. E, em seguida, podemos usar o método de envio para solicitar permissão para conectar contas de usuário. Então, finalmente, podemos pegar esse provedor e ligar, colocar o signatário nele e salvá-lo como nosso Signatário. Na verdade, vamos copiar isso e colá-lo em nossos aplicativos. Então copie isso. E aqui no topo, basta colá-lo. E vou remover todos esses comentários. Uma coisa que vou fazer é eliminar esses provedores aguardam. E vamos adicionar isso em uma função real porque só queremos que isso aconteça quando clicarmos nos botões Conectar carteira. Então, tire isso. Temos um provedor, temos nosso signatário. Agora precisamos do contrato. Agora é aqui que vai fazer todo o sentido para você. Portanto, se você continuar indo para contratos, ele diz que o objeto de contrato facilita o uso um contrato onchange como objetos JavaScript normais com o tapete, com os métodos mapeados para codificação e decodificação de dados para você. Isso é ótimo. Este objeto de contrato faz com que seja justo, esse objeto de contrato faz com que possamos tratar todas essas funções de contrato inteligente é apenas objetos JavaScript. Então, se você continuar rolando, eles lhe dão o melhor exemplo aqui. Então copie essa coisa toda e cole-a em seu aplicativo. Então eu vou descer aqui, copiar isso, e vamos trabalhar com este um por um e isso fará sentido para você. Então, em vez do endereço dy, nós não estamos lidando com di nós só estamos lidando com B & B. Então, basta mudar isso para endereço e nós apenas colocamos, o que você acha? Bem, se você subir, lembre-se que estamos importando a ABI e o endereço do contrato. Portanto, nosso endereço pode ser vestido contratado. Agora morra ABI, onde novamente não estamos usando die, então mude isso para ABI. E o que você acha que isso poderia ser? Bem, ABI. Mas o problema é que nós meio que confundimos o JavaScript. Abi está acinzentado, o que significa que não vai funcionar. Então, vamos mudar isso para contratar a ABI. Contrato ABI. Então vamos colocar aqui contrato ABI. Então, temos nosso endereço definido. Temos a ABI. Novamente, esse é um bom comentário. O contrato ERC-20 ABI, que é uma interface de contrato comum para não colocar isso. Então, vamos nos livrar desse comentário. E, finalmente, temos o objeto real. Novamente, mude isso para contrato. Em seguida, instancia um novo contrato. Então, em vez de endereço dy colocará endereço, em vez de dy ABI, colocar contrato ABI. E então passamos em nosso provedor. Mas, na verdade, vou passar meu Signer porque vou fazer muitas transações. Incrível. Então, salve isso. Temos todas as nossas informações aqui para falar com ela. Contrato inteligente. Agora vamos executar o aplicativo air. Então, fio, execute dev. E vamos fazer localhost 3 mil. E aqui está nosso aplicativo. Então, vamos fazer yarn run dev para executar nosso servidor e abrir localhost 3 mil. E temos alguns erros, bom. Tudo bem, então vamos fazer yarn, executar dev to startup ou um servidor. Isso vai ser no anfitrião local, 3 mil. Então, vamos abrir isso. Oops, a atualização aberta saudita. E temos um erro ou o módulo solicitado não fornece um contrato de exportação nomeado ABI. Então, algo está errado com isso. Vocês provavelmente chamam isso, mas está importando ABI porque em nossa configuração JSON, está sob a chave da ABI, então temos que manter isso. Então, vamos fazer isso. Vamos mudar o IVA, a variável para contratar ABI e deixar o que estamos importando como ABI. E então nós mudamos aqui. Agora, o problema é que estamos importando o contrato ABI, o que está errado porque em seu Config JSON, é uma chave da ABI. Então, temos que importar ABI. E então chamaremos esse contrato constante ABI igual a ABI, que é o que estamos importando. E então aqui em baixo nós acertamos, então tivemos todos os tipos de erros lá. Você provavelmente pegou. Mas certifique-se de fazer essas alterações. Importe ABI, salve-a como uma variável chamada ABI de contrato e, em seguida, passe isso para o seu contrato. Vamos salvá-lo e ver se isso o corrige . Sim, lá vamos nós. Então, agora o que queremos fazer é quando clicamos nesta carteira de conexão, queremos que ela abra o MetaMask e solicite sua permissão para conectar a carteira à nossa conta. Solicita permissão para se conectar a uma das contas. Então, vamos criar uma função para isso, certo, sob isso, vou dizer const, connect wallet igual vai ser assíncrono. Vamos fazer uma declaração de try-catch. Try-catch. Aqui, vamos dizer se o teorema dos dados da janela, então, se isso, esse objeto MetaMask não existir, então vamos apenas retornar um alerta e um alerta. Instale o MetaMask. Em seguida, faremos contas const. Queremos obter as contas do MetaMask, então aguarde o envio do ponto do provedor. Lembre-se em éteres JS, se eu ainda tiver isso. Esse foi o nosso exemplo, um ponto do provedor de peso pecou. E o que queremos é yf solicitar contas. Isso é o que estamos chamando-os apenas por chutes. Vamos consolar contas de log de pontos. E o primeiro, porque essa será a que estamos usando atualmente, a conta corrente. E vamos deixá-lo lá e ver que estamos consolando isso ou estamos registrando isso corretamente. E então aqui embaixo na captura, faremos o erro console.log. E, na verdade, vou fazer um lançamento aqui novo erro. E vamos apenas dizer que não, um objeto teorema. E não consigo soletrar a palavra lançar. Lá vamos nós. Então, queremos chamar isso quando o botão conectar Wallet for pressionado. Então, como trabalhamos com esse provedor é que pegamos esse nome de função, chegamos aqui e passamos isso como valor, conecte a carteira. E então, onde está o botão que? Bem, o botão se formos e componentes, o botão é uma barra de navegação. Então, no topo do navbar, vamos importar o provedor. Portanto, importe contextos de blockchain de contextos blockchain de barra de contexto . Portanto, certifique-se de importá-lo. Então, porque estamos usando ganchos. Podemos vir aqui e digitar const. E que função estamos fornecendo e o provedor conectará carteira igual ao contexto de uso, contexto blockchain. Agora você pode criar vários contextos em seu aplicativo. Você pode ter como um contexto de usuário em um contexto de transação e coisas assim. Então, tudo o que estamos fazendo aqui para isso. Componente é que estamos apenas disponibilizando esse contexto blockchain. E estamos trazendo a carteira Connect. E então, aqui em baixo, onde temos nosso botão que diz Carteira Connect, vamos adicionar um onclick. Onclick é igual à carteira de conexão para chamar essa função. E é assim que é fácil. Então, vamos salvá-lo e verificar se funciona. Abra o aplicativo e há um erro. Portanto, o erro é usado, contexto não está definido. Então, temos que vir aqui. E onde não estamos sequer. E basta fazer uma importação. Use o contexto do React em, lembre-se de quando você tem um arquivo JSX agora no React, lembre-se de quando tiver, então certifique-se de importar isso. Vamos salvá-lo e tentar novamente. E assim, quando clicamos neste botão conectar à Wallet, ele deve abrir o MetaMask assim. E eu quero conectar minha conta de teste BSC. Então, vou clicar em Avançar. Agora, se eu selecionei vários, ele colocará todos os quatro nisso. É por isso que estamos escolhendo o primeiro. Mas eu só vou clicar em um porque isso é tudo o que eu realmente faço. Acerte Próximo. Então, se eu clicar em Connect wallet, ele exibirá o MetaMask como deveria. E vou selecionar a conta que quero conectar. Agora. Eu poderia coletar conexão. Agora ele pode conectar vários. E é por isso que temos as contas 0, porque é uma série de contas na primeira será sua conta corrente. Mas vou selecionar um e clicar em Avançar e conectar. E ele conectará minha carteira MetaMask ao meu aplicativo. Ótimo, então estamos conectados. Se abrirmos o MetaMask, vemos que essa pequena luz conectada é verde. Mas o problema é que não o conhecemos em nosso aplicativo. Ele só diz enquanto ainda está. Então, vou desconectar e vamos consertar isso. Então, desconecte essa conta e, em seguida, vamos voltar e fazer algo melhor com ela. Então, de volta ao contexto blockchain. Vamos criar algum estado para armazenar essa conta corrente. Então, vou chegar ao topo e fazer conta corrente const. Conjunto. Conta atual é igual ao estado de uso. E isso é apenas React Hooks. Eles usam o estado. E tudo o que está dizendo é a conta corrente será a variável que mantém meu estado definido. Conta corrente é o que eu uso para definir esse estado aqui em baixo, onde eu consolei a conta. Também vou salvar isso no estado da conta atual. E você faz isso dizendo definir conta corrente, contas 0. Então isso vai salvá-lo em, então isso vai salvá-lo lá. Então, isso vai salvá-lo como conta corrente. Mas isso realmente não nos ajuda porque precisamos passar essa conta corrente pelo provedor aéreo. Então, venha aqui e coloque uma vírgula e coloque conta corrente para que possamos passá-la ao nosso provedor e depois voltar para a barra de navegação. E também queremos trazer isso na conta corrente, disponibilizá-lo para o nosso componente. Então, aqui em baixo, podemos fazer alguma lógica. Então, diremos que se não houver conta corrente, anote o ponto de exclamação e, em seguida, vamos apenas dizer connect wallet. Isso significa que nada está conectado porque não há uma conta corrente que ainda não tenha sido definida. Então, senão, vamos exibir o endereço da nossa carteira, mas vamos cortá-lo para que seja como os primeiros cinco caracteres, ponto, ponto, ponto e depois os últimos quatro caracteres. A maioria dos aplicativos faz isso. Então, vamos fazer isso também. E podemos dizer que vamos usar um modelo literal. Assim como os dois backticks, chaves encaracoladas de cifrão. E vamos colocar a fatia de pontos da conta corrente. Em seguida, 0 a cinco, então os primeiros cinco caracteres. E então vamos colocar ponto, ponto, ponto. E é por isso que usamos esses modelos literais porque podemos misturar variáveis com valores de string como ponto, ponto, ponto. E logo depois disso, faremos o cifrão. Chaves curly no tipo conta corrente, no tipo conta corrente, fatia de pontos. E desta vez vamos até o fim e contaremos todos os personagens e depois pegaremos os últimos quatro. Assim, podemos fazer isso dizendo o comprimento dos pontos da conta corrente. Isso obterá o comprimento disso enquanto estiver no endereço menos quatro. E é isso que vamos cortar. Então, vamos salvar isso e experimentá-lo. Atualizar. E agora vamos conectar a carteira. Certifique-se de se desconectar para poder se conectar novamente. Escolha sua conta, clique em Avançar. E quando eu clicar em Connect, ele deve dizer armazene isso no estado e, em seguida, atualize meu componente para mostrar o endereço da minha carteira. Então clique em Conectar. Olhe isso já. Há o endereço da minha carteira, 0 x seis a 73 pontos, ponto B F6. Mas ainda temos um problema. Se eu atualizar, ele vai desaparecer. Agora diz carteira Connect, mesmo que eu ainda esteja conectado. Vamos desconectar e corrigir isso. Para corrigir isso, precisaremos de outra função no contexto blockchain para verificar se a conexão sem fio está conectada. Então, veja como nos conectamos. Mas quando o aplicativo carrega pela primeira vez, precisamos verificar se ele está conectado ou não. Se for, precisamos armazenar o estado. Vamos criar outra função. E, na verdade, vou apenas copiar isso. E vamos chamar isso. Verifique se a carteira está conectada. E ainda faremos isso. Verificaremos se o objeto MetaMask está lá. Faremos contas. Mas neste momento, em vez de contas de solicitação de sublinhado, na verdade, vamos apenas fazer contas sublinhadas. Então, isso solicitará as contas, não permissão para usar as contas, mas apenas as contas em geral. Então, se houver algo conectado, ele vai aparecer aqui. E então faremos algo aqui como se o comprimento do ponto das contas for verdadeiro. Portanto, se houver vinculado nas contas, definiremos contas de conta corrente 0. Else console.log. Não, nenhuma conta encontrada. E se livrar desses dois. Desta vez não vou lançar um erro. Mas, novamente, tudo o que estamos fazendo é obter as contas conectadas. E então, se houver algum, definirá o estado. Se não, vamos apenas consolá-lo. Então, saberemos. Portanto, este não queremos passar para o provedor porque não precisamos dele em nenhum outro lugar. Na verdade, precisamos disso quando a página é carregada pela primeira vez. Então eu vou vir aqui e adicionar um efeito de usuário Hooke. E usar ganchos de efeito permitem que você execute. E usar ganchos de efeito permitem que você execute funções uma vez que algo carrega ou uma vez que algo mude. Então, no final disso, você pode fazer vírgula, seja lá o que for. Como se você estiver assistindo a uma variável sempre que essa variável mudar, essa coisa será executada novamente. Mas vamos colocar colchetes vazios aqui estão vazios. Colchetes vazios aqui, o que significa que ele será executado quando o componente for carregado pela primeira vez, terminar de carregar. Na verdade, vamos fazer esse checkup enquanto isso estiver conectado lá. Isso será executado quando a página for carregada pela primeira vez. Novamente, quando a página for carregada pela primeira vez, ela verificará se uma carteira está conectada. Em caso afirmativo, ele definirá o estado. Então, vamos salvar isso e experimentá-lo novamente. E, a propósito, toda vez que você carrega, a propósito, toda vez que você economiza. A propósito, toda vez que salvo, ele só lança esses erros malucos. Vou te mostrar como consertar isso em um minuto. Mas vamos apenas atualizar e testar isso. Então clique em Conectar carteira. Vou conectá-lo novamente, conectar e ele define meu endereço. E agora, se eu atualizar, ele permanece. É bom ir. Se eu for para a próxima página, ela ainda está lá. Eu vou para a primeira página ainda está lá. Então isso cuidou disso. Agora, assim como eu estava dizendo, se eu salvar isso de novo, e voltar, minha página está completamente destruída. E para ser honesto, não sei o que está acontecendo. Por algum motivo, o vite JS está fazendo um carregamento de página, está fazendo uma recarga de página em vez da recarga a quente. Não sei se é um inseto ou talvez algo que eu negligenciei. Mas outras pessoas estão reclamando online. Acho que isso é uma coisa nova. E se eu soubesse disso, teria usado o aplicativo Create React, mas na verdade é uma solução muito fácil. Esse cara acabou de listá-lo aqui. E o que precisamos fazer é ir para nossa configuração vite e apenas adicionar essa configuração de servidor. Então, se você for, se o seu não está fazendo isso, não se preocupe com isso. Mas se for ir para vite, config js e apenas adicione isso, coloque uma vírgula depois disso, e faça o servidor h EMR true, que é a recarga do módulo quente, que é o que deveria acontecer de qualquer forma eu pensava. E depois assista. Use sondagem. Verdade? E é isso. Agora salve-o. E provavelmente quero reiniciar meu servidor só porque é uma configuração. Muitas vezes precisamos que eu vou reiniciá-lo e isso deve cuidar do problema. Então, deixe-me atualizar agora deixe-me salvar e ver se ele lança esse erro. Vou vir aqui e clicar em Salvar algumas vezes. E ainda há um erro. O que está acontecendo? Servidor ASMR true, Assista, use sondagem, true. Tudo bem, o servidor foi reiniciado. Então deixe-me salvá-lo. Está tudo bem. Salve novamente. Salve aqui. Salve aqui novamente. Na verdade, parece que está acontecendo no meu arquivo do provedor. Então, se eu vier aqui para o JSX principal e clicar em Salvar, então está tudo bem. Mas se eu for ao meu provedor e fizer isso, salve-o, isso estraga tudo. Bem, vou tentar descobrir a resposta para isso no futuro. Eu. Voltaremos e lhe diremos como corrigi-lo. Mas isso realmente não importa. Somente em desenvolvimento, como se você vier aqui e clicar, isso nunca acontece. Isso só acontece com esta recarga de módulo quente branco. Então eu vou descobrir isso e vou postá-lo aqui daqui a pouco. Tudo bem, então a última coisa que queremos fazer neste vídeo é que queremos tentar falar com nosso contrato para garantir que estabelecemos isso. E assim que tivermos no próximo vídeo, vamos avançar a toda velocidade e configurar tudo. Então, vamos voltar aos nossos contextos blockchain. E vamos criar uma função que obtenha o saldo de seu contrato inteligente. Então, se você se lembra, temos em nossa pasta de contratos e nosso contrato, lembre-se de que temos uma função chamada saldo que retorna o saldo dos contratos. Vamos tentar chamar isso e ver se ele funciona. Então eu vou para o meu contexto blockchain e apenas fazer const, obter equilíbrio igual, igual a um coletor. E vamos fazer uma try-catch. Erro no log de pontos do console. Aqui em cima, em tentativa, vamos dizer equilíbrio const. E lembre-se que temos esse objeto de contrato que nos permite conversar com nosso contrato inteligente. Vamos dizer contrato. Vamos fazer uma espera porque temos uma função assíncrona. E, em seguida, contrate pontos o saldo de pontos porque esse é o nome da função de contrato inteligente. Então, logo depois disso, vamos salvar isso em nosso estado. Então. Na verdade, vamos apenas consolá-lo para Ashley. Vamos fazer login no console. Então, console.log equilibra e veja se isso aparece. Volte para o projeto e recarregue a página, e ela deve estar aparecendo em nosso console. Leva um minuto para chamá-lo de realmente não, isso não vai funcionar. Então logo depois disso vamos definir o estado, vamos colocá-lo no estado. Então podemos colocar isso no console para ver se ele funciona. Vamos subir aqui e criar uma nova variável de estado, constante, equilíbrio, equilíbrio SET. E você vê o padrão aqui. Há a palavra e, em seguida, definir a palavra é igual ao estado de uso. E então, aqui em baixo, vamos definir o equilíbrio em equilíbrio. Então vou saldo console.log. E isso não está sendo usado em nenhum lugar, então não será chamado. Não há nada disso vai funcionar. Mas só para testá-lo, vamos descer aqui e chamar ficar equilibrado. Quando a página é carregada. Vamos salvá-lo e atualizar nossa página. E olhe para isso. Recebemos devolvidos o que é chamado de grande número. Um grande número é a quantidade de erro ou a quantidade de ar com 18 zeros nele. É por isso que se chama um grande número. C aqui em 0 x 00 é grande número verdadeiro. Então, o grande número é ótimo. É ótimo fazer o trabalho no contrato, mas não é legível. Como se não quiséssemos olhar e ser como se eu tivesse 1 trilhão algo de éter. Queremos dizer que tenho 0,001 ou 0,01, B&B ou o que quer que seja. Portanto, há uma função auxiliar. Se você for para éteres, JS e digitar utilitários e digitar utilitários. E isso não foi útil. Digite éteres, dot js utils e clique em utilitários. E então você deve ver e, em seguida, digitar um grande número. Aí está. E você deveria ver aqui embaixo, eu acho que se chama éter parse. Sim, aqui vamos nós. Então, existem essas conversões. Utilitários de ponto éter, unidades de formato de ponto, unidades análise de éter em formato éteres. E tudo isso faz é apenas converter esse valor para nós, como o que vamos usar é o formato éter. E isso simplesmente não é uma boa página. Deixe-me, deixe-me copiar e colar isso. Éteres ponto js. Aqui vamos nós. Cordas de éter e pesa. O que vamos usar é chamado de éter de formato. E é quando você tem jeito e quer mostrá-lo como éter regular ou B & B regular ou o que quer que esteja acostumado a ver como a quantidade legível por humanos. Então, formatou a quantidade de caminho em uma string decimal representando a quantidade de éter. Isso é o que vamos usar. Para fazer isso, vamos digitar. Então, para fazer isso, precisamos estabelecer o equilíbrio. Então, para fazer isso, precisamos colocar em vez de equilíbrio, precisamos colocar éteres, ponto util, utils dot format éter. E então passamos na balança. E isso vai defini-lo para este formato legível em éter ou B & B, não da forma como formatação 180. Então, vamos salvá-lo e agora ele deve estar mostrando 0. Vamos atualizar a página. Ainda diz grande número. Vamos salvá-lo novamente. Eu não sei, talvez meu estado Ainda esteja mostrando grande número e isso é provavelmente porque estou chamando equilíbrio, que é isso. Oh, sim, é que ainda está mostrando grande número. Acho que meu problema é que eu nomeei esse saldo e então também defini, meu estado está equilibrado, o que estou usando aqui. Então, provavelmente está usando esse número original. Vamos mudar isso para um balanço de saldo de apenas colocar. E agora temos certeza de que esta é nossa variável de estado aqui e não essa. Então isso é meu mal. Então, vamos chamar o saldo variável de formato que e, em seguida, pegar as variáveis de estado. Então, salve-o e agora deve ser bom. Então atualize a página. Na parte tentativa disso, vamos dizer const, equilíbrio de iguais. E vamos usar nosso objeto de contrato. Lembre-se que é assim que vamos chamar todas essas funções de contrato inteligente farão o saldo de pontos do contrato, porque você se lembra que se você voltar ao nosso contrato, temos uma função chamada balance of poderíamos chamar a duração total ou definir fazer e vamos fazer tudo isso. Mas, por enquanto, vamos testar este. Então, vamos chamá-lo. Então, diremos saldo de pontos de contrato de. Então logo abaixo disso, vamos definir outra variável de estado para manter esse valor. Vamos voltar aqui e digitar, logo abaixo deste put const, balance, SET balance é igual ao estado de uso. Agora você vê o padrão aqui. primeira é a variável e a segunda começa com set, porque essa é a variável que você usa. Isso é o que você usa para definir essa primeira variável. Então, podemos salvar isso agora em nosso estado. Então, logo abaixo disso, diremos saldo SET. Equilíbrio neste bloco try, vamos conseguir o saldo. Então, vamos fazer uma const, saldo de contrato é igual e vamos usar nosso objeto de contrato porque é assim que falamos com essas funções em nosso contrato inteligente. Agora vamos usar esse objeto de contrato que criamos aqui porque é assim que vamos interagir com o contrato inteligente deles. Então, diremos ponto de contrato. E se você se lembrar, se você voltar para os contratos, você se lembra que temos uma função chamada saldo que retorna o saldo do contrato. Também definimos fazer e obter a duração total. Vamos usar todos esses. Mas, por enquanto, vamos usar esse equilíbrio de. Então, faremos o saldo de pontos do contrato de. E então aqui vamos salvar esse valor em nosso estado. Então, vamos voltar e definir uma nova variável de estado. Então, const, vamos chamá-lo de saldo e, em seguida, saldo SET. Você vê o padrão aqui. Há a variável state e, em seguida, você a define com a segunda, é igual ao estado de uso. Então, de volta aqui, diremos SALDO SET para o saldo do contrato. E vamos salvar isso. Atire. Neste bloco de tentativa, o que vamos fazer é obter o saldo. Então, diremos const. Vamos chamá-lo de saldo de contrato igual à espera porque esta é uma função assíncrona. E então lembre-se aqui que temos esse objeto de contrato. Isso é o que vamos usar para interagir com o contrato deles. Então, vamos fazer ponto de contrato em qual função queremos chamar? Bem, se voltarmos aos nossos contratos, queremos chama 7. Como criar o formulário Adicionar locatário: Agora vamos começar a usar nosso painel aqui, onde podemos começar a preenchê-los dinamicamente. Atualmente, apenas temos valores estáticos, mas precisamos ser capazes de preenchê-los. Precisamos ser capazes de fazer um pagamento e creditar nossa conta. E a propósito, aqui em cima temos crédito e, em seguida, o pagamento aqui, é para trás. Vamos trocar isso rapidamente. Se formos para os totais atuais na parte inferior, basta trocar esses dois componentes, adicionar o formulário equilibrado antes de pagar por eles. Isso consertará isso. Mas antes de fazermos tudo isso, precisamos criar um formulário como este, do jeito que este painel está atualmente, pressupõe que o locatário já se adicionou como locatário, mas ainda não o fizemos . Isso novamente é apenas texto estático. Então, precisamos colocar um formulário aqui para exibir se o aluguel ou não se adicionou como locatário. E se eles já tiverem, mostraremos o painel e seus valores atuais. Se tentarmos entrar em crédito ao locatário e verificar seus minutos de viagem e tudo isso, não funcionará porque lembre-se de que temos essa função em nosso contrato aqui que diz Adicionar locatário. Precisamos adicionar locatário ao nosso mapeamento de locatários aqui. Então é isso que eles precisam fazer. Essencialmente, eles precisam preencher o formulário para se adicionar como locatário, o que permite que eles verifiquem uma bicicleta. Logo antes de fazermos isso, temos uma coisa a abordar. Então, no vídeo anterior, você, uma coisa que você deve ter notado é sempre que eu estava trabalhando no arquivo de contexto blockchain dele e eu fiz uma mudança ou o que quer que eu estivesse fazendo. E eu fui clicar em Command S para salvá-lo, ele realmente travou minha página. Então deixe-me apertar o Comando S, volte e você verá minhas páginas travarem. Se eu abrir o console, você verá um monte de erros relacionados ao gancho de contextos usados. Agora, a razão para isso é porque no contexto de blockchain de ar no topo onde criamos os contextos, deixamos o argumento nulo ou parâmetro. Não, devemos colocar algo aqui e vamos colocar uma corda vazia. E vou salvar isso. E agora vamos testá-lo novamente. Então, deixe-me atualizar isso. E vou vir aqui e salvá-lo algumas vezes. E você deve ver que minha página está boa. Então isso é um erro da minha parte. Vá para o contexto de criação de ponto React e certifique-se de colocar um valor. Nesse caso, vamos colocar uma string vazia. Tudo bem? Então, vamos criar um novo formulário. Vamos chamá-lo de aluguel ou formar ponto JSX. E novamente, vamos assumir uma dessas outras formas. Vamos tentar o anúncio para um formulário equilibrado. E vamos apenas copiar e colar isso. E então iremos até o nome da função e chamaremos de aluguel ou formulário. Tudo bem, e então nós rolamos para baixo, você vê esse crédito em sua conta. Queremos mudar isso para algo diferente e eu realmente vou subir aqui acima do flex. E vou colocar um campo de texto. E no TextField vou colocar como atributos, a família da fonte é igual a título. tamanho da fonte é igual a 600 ou, na verdade, x grande. E então o peso da fonte é igual a 600. Tudo bem, e certifique-se de colocar a etiqueta de fechamento. E então, dentro disso, vamos colocar alguns textos. Vamos dizer bem-vindo. E então vou colocar uma quebra de linha. E insira seu nome e sobrenome para se registrar. Você pode ser como, este não é um aplicativo descentralizado? Por que queremos o sobrenome ou mesmo o nome de alguém? Mas é apenas um conceito que criei quando fiz o aplicativo. Se você quiser alterá-lo, sinta-se à vontade para alterá-lo. E você verá que temos esse erro porque nós, porque não podemos ter várias tags e um retorno, resolvemos isso fazendo isso abrir e fechar tags vazias. Então coloque isso na parte superior e um fechamento na parte inferior em todos também. Então, temos nossos textos aqui. Temos um flex e , em seguida, temos nossa forma. No formulário, na verdade, queremos apenas o FirstName e o LastName porque can rent lembre-se será definido como verdadeiro porque eles estão apenas criando sua conta. Claro, eles podem alugar. Ativo será definido como falso porque eles ainda não têm uma bicicleta. Em seguida, a hora de início, hora de término, o saldo e o valor devido serão 0. Então, isso será definido no back-end, ou fora do fórum ou fora da capacidade dos usuários de alterar isso. Então, só precisamos de um nome e sobrenome. Então, já temos uma entrada. Então eu formei o controle. Vamos fazer isso. Vamos realmente fazer um rótulo aqui. Portanto, o rótulo do formulário em HTML quatro é igual a FirstName. E vamos colocar o FirstName aqui. Este é apenas um rótulo. E então temos nossa entrada, nossa mensagem de erro. E então vamos copiar e colar outro desses. Portanto, outra mensagem de erro e entrada de rótulo de formulário. Então, logo abaixo da mensagem de erro, cole outro. E vamos configurar esses dois. Então HTML para FirstName. Então, vamos novamente colocar FirstName, retirar esse número de tipo na etapa qualquer porque queremos caracteres. Espaço reservado, FirstName. E então em todos os lugares há um saldo de crédito, basta fazer o FirstName. E então, no segundo, queremos o sobrenome aqui, altere isso para LastName, LastName, retire o número na etapa. espaço reservado será o LastName. Registrar é o LastName. E lembre-se que eu te disse que esse registro, e eu vou fazer isso não aquele caso de camelo. Quero fazer tudo minúsculo para combinar com os outros. Mas lembre-se que eu te falei sobre esse registro. Na verdade, ele registra a entrada que você está colocando nos campos e a coloca nesse objeto que é enviado para onde quer que você esteja enviando o formulário, é bem legal. Isso é tudo o que eu tenho que fazer. Então, LastName, altere esses dois para LastName. E então, aqui em cima, onde diz controle de formulário, há um cheque de inválido. Quero verificar se há erros. Nome e gritos, e erros sobrenome. Então aqui temos uma mensagem de erro. Então, se houver um erro neste ou neste, e realmente o definimos para, e então ambos precisam ser livres de erros para serem aprovados. Então você não pode colocar um campo. Então você não pode colocar valores em um e não no outro. E para este, queremos um comprimento mínimo. Então, vamos fazer o comprimento dos homens valor quatro. E a mensagem vai ter o comprimento mínimo deve ser quatro. Vamos colocar isso no próximo. Vamos salvá-lo. E aqui em cima, onde diz creditar sua conta, tire todo esse texto porque os textos deles estarão acima dele. Em seguida, no ar emenvie. Vamos registrar os valores do console. Então, vamos, acho que estamos bem. Na verdade, vamos ver o que isso parece. Portanto, não colocamos nenhuma condição aqui se eu atualizar e, na verdade, nem sequer a adicionamos à página. Então, isso realmente vai para os totais atuais, eu acho. Não, ele vai para o painel. Então, aqui, onde diz os totais atuais. Vamos apenas comentar isso por enquanto. Só para ver o que isso parece. Vamos puxar um formulário de locatário e garantir que você o importe, salve isso e vamos dar uma olhada no que isso se parece. Sim, então aqui está FirstName, LastName. Então, vou adicionar um pouco de espaço abaixo do primeiro para fazer com que pareça um pouco melhor. Então, se eu for ao painel, na verdade ele vai ser aluguel ou formulário. Então, neste segundo rótulo de formulário, vou fazer margem superior igual a quatro. Vamos fazer três. Veja o que isso se parece. Três não são suficientes. Vamos tentar cinco. Tudo bem, então bem-vindo, por favor, coma éter. Eu coloquei éter. Por favor, insira seu nome e sobrenome para se registrar. Então, vamos tentar Travis e depois testar. E se eu pressionar Enviar, ele deve fazer login no console. Aí está, FirstName Travis, sobrenome, teste. É tão fácil com o formulário de gancho React. Incrível. Então, agora precisamos de uma maneira de saber se um locatário existe ou não. E se você se lembrar, em nosso contrato, se formos para a alma do ponto da corrente de bicicleta, criamos que este locatário existe em tudo o que faz é retornar verdadeiro se houver um endereço de carteira para aquele locatário e falso se não, vamos usar isso para determinar e isso nos ajudará a virar entre o formulário aéreo em nosso painel. Tão bons contextos de blockchain. E exatamente de onde paramos neste Fique equilibrado. E, na verdade, você não precisa chamar o get balance porque ninguém realmente precisa obter o saldo do contrato, exceto o proprietário. Portanto, não queremos essa cor, mas você pode deixá-la aqui em Obter balanceamento, vamos criar uma nova função chamada get renter existe. Então, vamos verificar e ver se o locatário existe. Uma pia. E vamos fazer uma tentativa de pegar. E o problema, vamos apenas consolá-lo. Então, aqui em cima, vamos fazer duas coisas. Vamos verificar se eles existem. E se eles existirem, vamos obter as informações deles. Então lembre-se em nosso contrato aqui, temos uma função chamada locatário existe. E o que isso faz é que ele retorna verdadeiro se eles tiverem um endereço de carteira e nosso mapeamento. Então, ele retorna verdadeiro se eles existirem em false, se não o fizerem. Se isso retornar verdadeiro, então iremos em frente e chamaremos essa função get renter para que possamos obter as informações dos locatários armazenadas em nosso estado e fazer tudo o que precisamos com ela. Então, na verdade, teremos duas funções aqui. Começaremos com a obtenção de locatário existe. E, na verdade, não sei por que o nomeei que o locatário de verificação existe faz mais sentido. Então, aqui vamos dizer que o locatário const é igual a aguardar ponto do contrato, e chamamos que o locatário de função existe. Veja aqui o contrato inteligente. locatário de ponto de contrato existe. E precisamos passar o endereço da carteira aérea. E se você se lembrar aqui, estamos salvando isso no estado em uma variável chamada conta corrente. Então, copie isso, venha aqui e passe isso. E então queremos definir esse estado. Então, queremos definir o estado, quer eles existam ou não. Gosto de manter as coisas no estado caso eu precise disso. Acho que em outras páginas precisaremos saber se isso é verdadeiro ou falso. Então, vamos criar uma variável de estado. Portanto, existe o locatário, locatário definido existe igual ao estado dos EUA. E vamos colocar aqui definido locatário existe. locatário passará isso. Incrível. E como eu disse, se eles existirem, queremos ir em frente e obter suas informações. Então, logo abaixo disso, vou dizer que se locatário, então se o locatário existir, se isso for verdade, então vamos chamar uma função chamada get renter. E vamos colocar um peso sobre ele. Então, logo abaixo disso, vou colocar const, conseguir locatário. Vamos criar essa função é igual a uma pia, gritos, é igual a uma seta de pia. Então faremos esse try-catch, mas vou copiar isso para economizar tempo. E ponto contratado. Agora, o que a função deles é chamada para isso? Chama-se obter locatário e passamos um endereço de carteira. Então, aqui, pegue o locatário, passamos um endereço de carteira e, em seguida, vamos definir o estado. Vamos salvar os valores do locatário no estado deles. Então, vamos subir aqui e criar um novo. Const, locatário, locatário definido é igual ao estado U. E aqui em baixo, vamos colocar locatário, locatário para salvá-lo em nosso estado. Então podemos remover isso. Então, agora, quando esse componente carrega, esse contexto é carregado queríamos chamar o locatário de verificação existe porque queremos saber isso antecipadamente. Então, precisamos pegar isso e incluí-lo em nosso efeito de usuário. Então, é chamado quando isso carrega. E então essa renderização de verificação existe, salva, salva que verdadeiro ou falso na variável de estado do locatário existe. Para que possamos vir aqui e passar para o nosso provedor, o locatário existe. Então isso nos dirá verdadeiro ou falso. E então vamos salvar isso e voltaremos para obter as informações do locatário. Mas só queremos saber agora verdadeiro ou falso se eles existem. Vamos enviar isso para o nosso provedor. E então, em nosso painel, será possível testar se devemos mostrar o formulário ou o painel. Então, aqui em cima, vamos dizer const, locatário existe igual a contextos de uso, contexto blockchain, e certifique-se de trazer isso. Você importa contextos de uso do React e também importa os contextos blockchain também. Agora podemos vir aqui e dizer, então precisamos verificar algumas coisas aqui. Queremos verificar se o locatário existe. Queremos exibir um spinner. contrário, se o locatário existir é verdadeiro. Queremos exibir o painel. Caso contrário, exiba o formulário deles. Então, se definirmos que o valor padrão do locatário existe se definirmos isso como falso ou algo assim, isso não seria bom porque isso nos diria sempre para mostrar o formulário porque aluguel deles ou não existem. Então mostre o formulário. Mas nós realmente queremos que ele gire antes de definir qualquer coisa. Então, queremos girar antes que ele determine, Ei, é falso ou ei, é verdade. Então, podemos realmente fazer isso com o operador ternário. E muitas pessoas não gostam disso. Não me importo porque vejo muito e estou acostumado com isso. Mas podemos fazer como um if else, else com ternário ou se else-if else. E podemos fazer isso assim. Portanto, existe um locatário é igual a nulo. Em seguida, ShowSpinner. Eu só vou colocar isso entre aspas por enquanto. contrário, se o locatário existir for verdadeiro, então mostre os totais atuais. Caso contrário, mostre o aluguel ou o formulário. Então eu sei que isso pode parecer meio estranho para você. Se o locatário existir igual a nulo, então mostre o spinner. E geralmente é como outra coisa. Mas você pode dizer senão se o locatário existe é verdadeiro, então quando você coloca esse ponto de interrogação aqui, então mostra os totais atuais, caso contrário, mostrar aluguel ou formulário. Portanto, isso verifica três condições, nulas, falsas e verdadeiras. Então, em vez do ShowSpinner, isso não vai fazer nada. Vamos instalar algum tipo de pacote giratório. Vou aqui e reagir ao spinner. Spinners. Vamos com isso. Então o fio adiciona, reaja aos spinners. Inicie meu servidor. Instale isso. Incrível. Então, aqui vamos exibir um spinner. E como fazemos isso? Então, vamos usar este carregador de clipes. Então copie isso. Este é um pequeno clipe Loder deste spinners do React. Vou colá-lo no topo. O que mais? Parece que. Precisamos definir um carregamento variável de estado e definir o carregamento. E isso, por padrão , será verdade. Então, isso será carregado quando iniciarmos a página. Então isso provavelmente vai se correlacionar com o nosso spinner de alguma forma. Então aqui está nosso carregador de clipes. Há uma propriedade de cor com a qual não queremos mexer, ou CSS ou tamanho, talvez queiramos mexer com o tamanho, mas aqui está o carregamento igual a carregamento. Então, vamos copiar isso e colocá-lo no spinner de clipe de erro. E, na verdade, eu só vou copiar essa coisa toda. E vamos retirar o que não precisamos para copiar isso e colá-lo aqui. E vamos tirar a cor. E vamos retirar CSS igual a substituição. E acho que 150 serão grandes. Então, vamos fazer 75. E então retire esse pseudocódigo e salve-o e veja como isso se parece. Então, vamos iniciar nosso aplicativo. Fios run dev. E vamos atualizar. Temos um grande erro. O estado de uso não está definido, sim, então precisamos trazer o estado dos EUA. Há contextos usados. Basta adicionar o estado de uso, salvá-lo. Incrível. Então parece que temos um spinner e não está resolvendo nada. E então parece que ainda estamos mostrando o formulário. Queremos nos livrar desse formulário porque ele não deveria estar aparecendo. E então queremos centralizar esse spinner. Então, centralizar o spinner é muito fácil. Acabamos de pegar este carregador de clipes e apenas envolvê-lo neste componente do Chakra UI Center. Então, basta colocar o Center e colocá-lo no início e depois a etiqueta de fechamento no final do carregador de clipes. E então esquecemos de remover o aluguel ou o formulário aqui embaixo e, em seguida, vamos em frente e remova os totais atuais comentados. Agora vamos salvá-lo e ver o que acontece. Então, ela atualizou a página e está apenas girando. Isso nos diz que algo está errado porque deve resolver como aluguel ou existe deve mudar nessa condição. Ela não deveria mais mostrar este carregador de clipes. Na verdade, ele deve mostrar os totais atuais ou aluguel ou o formulário depois de resolver. Então, há algum outro problema acontecendo. E você pode ver que aqui, temos um erro. Esse erro diz que o resolvedor ou o endereço não está configurado para o nome DNS. Isso é como um dos erros mais vagos dos éteres JS. Isso pode significar um milhão de coisas, mas eu sei em nosso contexto, provavelmente significa que em nosso contexto blockchain, quando estamos usando essa conta corrente, isso provavelmente significa que essa conta corrente ainda não está definido quando estamos chamando isso. E podemos determinar isso colocando um log de console aqui, conta corrente. E, na verdade, vou colocar backticks e dizer conta corrente. E então conta corrente só para sabermos o que é isso. Vamos salvá-lo e ver o que ele nos dá a conta corrente. Então olhe para isso. A conta corrente está em branco. Então é exatamente isso que está acontecendo. E para ser honesto, não sei a correção no momento. Tenho que me aprofundar nisso para ver o porquê, mas vou descobrir e avisarei aqui no próximo vídeo. Mas uma solução rápida para nós agora é vir aqui para o efeito dos EUA e adicionar a conta corrente aqui. Agora usaria efeito é usado o efeito é chamado quando o componente carrega. Ele também pode ser chamado novamente quando esses valores mudam qualquer coisa nessa matriz. Então eu posso ter conta corrente, posso ter locatário e todas essas outras coisas. Quando esses valores mudam. Ou atualizado de alguma forma, fará com que a chamada que eles usem efeito novamente. Se colocarmos a conta corrente aqui, se essa função for chamada, não haverá conta corrente e ela lançará um erro. Bem, quando a conta corrente for resolvida, ela voltará e chamará isso novamente, o que chamará essas duas funções. Mais uma vez. Embora ocorra um erro, ele voltará e o chamará novamente assim que for resolvido. Então, vamos fazer isso por enquanto só para que possamos continuar em movimento. Vou te dar a correção aqui daqui a pouco, mas se você salvar isso agora ele deve funcionar bem. Então atualize. E lá vamos nós. E então você vê que a conta corrente está em branco aqui, mas ela a mostra novamente com o endereço. Então esse é o problema acontecendo. Vamos abordar isso daqui a pouco. Mas aqui diz: Bem-vindo, por favor, insira seu primeiro e sobrenome para mostrar que as coisas estão funcionando. Se atualizarmos novamente, são giros e então ele mostra, Ei, o locatário não existe. Então está fazendo uma chamada, está retornando falso e mostrando nossa forma. Então agora vamos configurá-lo para que possamos realmente se registrar como locatário. Então, logo abaixo de obter locatário, precisamos fazer uma chamada para nos registrarmos como locatários. Então, vamos voltar ao nosso contrato para descobrir que acho que chamamos isso de adicionar locatário aqui adiciona locatário. Isso é o que precisamos chamar. Então, vamos voltar aqui e vamos criar uma nova função. Vou copiar e colar isso. Vou chamá-lo de adicionar locatário. E locatário. E então vamos adicionar locatário de pontos de contrato porque essa é uma função de contrato inteligente. Então, neste anúncio aluguel ou função, se você voltar para o contrato inteligente, estamos passando tudo enquanto no endereço, primeiro nome, sobrenome pode alugar ativo, iniciar no saldo do tempo e fazer. Então. Vamos passar isso diretamente para nossa função aqui em cima. Então, coloque o endereço da carteira, o nome próprio, LastName pode alugar, ativar , equilibrar, iniciar e terminar. Então, vamos passar tudo isso quando for chamado. E assim, aqui, no locatário do anúncio, vamos passar essas informações. Então eu posso realmente pegar isso, copiá-lo e colá-lo aqui. Então, quando estamos fazendo chamadas para o contrato, podemos usar esse bom método chamado peso. Então você pode ver um peso, adicionar peso do locatário. E o que isso faz é parar por aí até que a transação seja concluída. Então ele fica aqui e espera. E então, quando a transação terminar, ela continua a executar o código. Então, vamos apenas testar isso por log do console, alugar ou adicionar. Na verdade, podemos fazer algumas coisas divertidas. Podemos adicionar o FirstName. E logo abaixo disso, vamos querer obter as informações do locatário. Portanto, temos essa função chamada get renter que define a variável de estado dos locatários com as informações dos locatários em que get locatário é chamado por esse check rent ou existe. Então, tudo o que temos que fazer aqui é apenas chamar cheque aluguel ou existe. E isso verificará se eles existem em preencher nosso estado com essas informações dos locatários. Então, vamos salvar isso. Não queremos que isso seja chamado quando a página for carregada. Então, vamos pegar toda a função e passá-la para o nosso provedor. Salve isso e, em seguida, iremos para um formulário de locatário. E queremos trazer essas informações do provedor que declaram informações para um componente de formulário de locatário. E você já fez isso um monte, você sabe como fazer isso. É tão simples quanto const. Adicione iguais ao locatário, use contextos de contexto e blockchain. E certifique-se de importar contextos de uso do React e importar o contexto blockchain. E então, quando formos para onsubmit, vamos chamar esse locatário de adição. Agora lembre-se, estamos recebendo apenas o FirstName e o LastName do formulário. E isso porque pode alugar quando um locatário criou pode alugar é verdade porque obviamente eles são capazes de alugar. Ativo será falso porque eles ainda não têm uma bicicleta. Eles estão apenas se inscrevendo. O saldo será 0. O valor devido é 0, e a hora de início e término vamos ser zeros. Assim, eles sempre podem ser configurados daqui para que a pessoa que preenche o formulário não precise colocar informações inúteis. Então, no nosso onsubmit, vamos fazer isso. Estamos passando os valores. Vamos dizer valores. Pode alugar igual a verdade. E o que estamos fazendo aqui é definir mais valores em um objeto. Então deixe-me copiar e colar isso algumas vezes. Valores, ativo igual a 0, valores, saldo é igual a 0. Os valores começam e terminam. Tudo é igual a 0. Oh, desculpe, ativo é falso. Em seguida, zeros, zeros, zeros. Então, estamos preenchendo isso porque eles sempre serão padrão. Então também precisamos passar o endereço da carteira. E não queremos que o usuário tenha passar um tempo esse endereço e não o colocamos no fórum, então precisamos incluir isso também. Assim, podemos trazer a conta corrente aqui a partir dos contextos blockchain. E podemos fazer esse operador spread para criar um novo objeto de valores. Portanto, const novos valores objeto. O que faremos é ter o endereço da carteira. Opa. O que faremos é criar um objeto. O primeiro valor chave no objeto será o endereço da carteira, que será igual à conta corrente. Então podemos simplesmente espalhar os valores. Neste objeto. Este é o operador spread. E o que isso faz é que ele apenas adiciona todos esses valores, os que eles enviaram, incluindo esses dois, esse objeto. É muito legal. Se consolarmos, faça logout do novo objeto de valores. Vamos ver o que isso parece. Um novo, vamos colocar Travis teste, enviar e olhar para isso. Temos um objeto que tem endereço de carteira, FirstName, LastName pode alugar, ativo em todas essas outras coisas. Portanto, temos nossos principais valores e estamos prontos para usá-los. Mas não queremos ter que ser como novos valores objeto ponto carteira endereço novos valores objeto ponto pode alugar. Então, vamos agora usar a estruturação D para retirá-las. Então o endereço da carteira const, FirstName, LastName, pode alugar. Balanço ativo. Comece em e, em seguida, é igual a novos valores objeto. Esta é apenas a estruturação. Ele extrai todos esses valores para que não precisemos usar essa notação de pontos. E, finalmente, o último passo é que chamaremos de espera aérea, adicionar locatário passará tudo isso. Novamente, se não fizéssemos essa reestruturação, teríamos que fazer assim. Novos valores objeto dot wallet aborda novos valores ou objetos. Então isso é apenas um atalho. Você pode fazer isso. Mas acho que isso parece muito mais limpo. Então, novamente, estamos passando nossos valores. Estamos adicionando esses padrões a ele. Estamos adicionando nosso endereço de carteira na criação um novo objeto onde D estruturando os valores dele. E então nós os estamos passando para nossa função adicionar locatário. Incrível, vamos experimentar isso e ver se ele adiciona um locatário. Então, vou dizer Travis test e clique em Enviar. E isso deve trazer o MetaMask. Temos um erro. A propriedade não é possível ler tem comprimento de leitura indefinido. Então adicione locatário. Sim, há algum problema aqui. Então, vamos voltar para aqui em vez de. Mas espere, adicione aluguel ou vamos fazer um console.log. Salve isso e veja o que ele diz. Teste Travis. Temos alguns zeros falsos verdadeiros indefinidos. Tudo bem, então o sobrenome é indefinido. Parece que esse é o problema sempre endereço da carteira, FirstName. último nome é indefinido. Vamos ver o que está acontecendo. Então, se formos ao nosso formulário de renderização aqui embaixo. Sim, eu sabia que fiz isso por sentimento. Lastname. É como a última capital N. Aqui está o nome próprio sem a capital N. Eu vou colocar esses fins de capital de volta só para ser consistente. Então, vamos destacar tudo isso. E faça o FirstName. E, em seguida, destaque todos os sobrenomes. E faça da mesma forma, capital N. E então, aqui em cima, precisamos ter certeza de que temos as coisas certas. E esses mudam esses dois nomes, sobrenome e salvam isso. E agora devemos ser bons. Vamos tentar consolá-lo novamente. Travis teste, envie e temos endereço da carteira Testes Travis true-false 0000. Tudo bem, estamos bem. Vamos mudar isso de volta para aguardar, adicionar locatário e tentar novamente. Atualize apenas para ter certeza de que eu tenho tudo claro. Travis testa e clique em Enviar. Isso deve trazer o MetaMask. E aqui vamos nós. Olhe para essa baixa taxa de gás. Isso é ótimo. Gosto disso. Agora. Vou apertar Confirmar. E vamos ver. Provavelmente está pendente. Está pendente agora e veja como isso ainda está girando. Essa é a forma de gancho React. O gancho está enviando que eles adicionaram ao formulário que mantém esse gancho girando até que esteja completo. Agora, olhe para isso. Uma vez que fomos adicionados, ele detectou a alteração e agora mostra nosso painel. Isso não é incrível? Isso é ótimo. Agora, se eu atualizar, verei meu painel em vez disso. Então eu peguei a roda giratória e lá está o meu painel. Incrível. Então, novamente, novamente, apenas para recapitular isso, essa questão era que deveríamos ter usado esse caso de camelo, minúsculas, primeira palavra e depois maiúsculas, todas as outras palavras. Isso estragou nosso sobrenome. Então, acabamos de voltar e mudamos todos esses CamelCase. Altere os primeiros nomes para CamelCase. Então aqui em cima, apenas certificando-se de que estamos passando a versão CamelCase. Tão ótimo trabalho. Parece que um painel está funcionando. Ele pode dizer se somos locatários ou não uma renderização. Então, no próximo vídeo, vamos começar a preencher esses campos dinamicamente. Seremos capazes de creditar nossa conta, pagar nossos saldos e verificar as bicicletas. Então, vamos fazer um grande empurrão no próximo vídeo. E isso nos aproximará do final do nosso aplicativo. 8. Populando o painel final otimizado: Tudo bem, então eu reimplanto meu contrato só para poder testar que tudo está funcionando novamente. Então vou colocar o teste Travis e vou me adicionar como locatário. Então, vou clicar em Enviar. Metamask surgirá e eu confirmarei. E uma vez feito isso, ele deve mostrar meu painel. Portanto, está pendente no momento. Lá vamos nós. Painéis para cima. Então, antes de pressionarmos todos esses valores, o que na verdade não demorará tanto quanto você pensaria porque eles são contratos inteligentes fizeram todo o trabalho. Antes de realmente fazermos isso, há duas coisas que eu quero abordar. Primeiro, temos um pequeno bug. Então, se eu abrir minhas ferramentas de desenvolvimento, então se eu vier aqui para o MetaMask desconecte minha carteira. Então, desconecte e atualize. Você verá que o spinner continuará girando, girando, girando e girando. E nada carregará. Precisamos consertar isso. E a maneira como corrigimos isso é chegamos ao painel e lembramos que colocamos isso se else-if else ternary aqui. Bem, precisamos adicionar mais uma condição. Portanto, se o problema for, se o locatário existir é nulo, então o girador gira. Mas se não tivermos uma conta conectada, o locatário existe, será não. Então, o spinner sempre girará até conectarmos uma carteira. Então, para corrigir isso, colocamos outra condição aqui. Colocamos a conta corrente final. O que isso faz é que, se a renderização existir seja nula e houver uma conta corrente, mostre o spinner. Portanto, se não houver uma conta corrente, ela não mostrará o spinner porque ambos não correspondem. E então ele seguirá para verificar se o locatário existe, que não vai, e mostrará o formulário do locatário. Então, basta adicionar essa conta corrente e salvá-la. Vamos tentar novamente. Então, deixe-me atualizar. E, na verdade, preciso trazer isso. Então, aqui em meu contexto, preciso dizer conta corrente para que eu possa acessá-la. Então, vou salvá-lo. E devemos ser bons agora. Sim, lá vamos nós. Minha carteira não está conectada e está mostrando meu formulário. Agora isso não vai fazer nada. Se eu preenchê-lo, ele lançará um erro. Se eu colocar algo assim, isso vai lançar um erro porque obviamente não temos uma carteira conectada. Não podemos falar com o blockchain ou com o contrato inteligente. Então, vamos em frente e conectar a carteira dela. Conecte-se. E agora meu painel será exibido. Agora, a segunda coisa que queremos resolver é o problema que estávamos tendo no último vídeo. Agora lembre-se, sempre que chamamos a conta corrente nessas funções, o valor ainda não havia sido preenchido no estado, então ele lançaria um erro. E nós combatemos isso adicionando conta corrente em nosso efeito de usuário. Então, quando isso mudasse, chamaria de efeito Hughes novamente. Então, obteríamos nosso valor. Portanto, lembre-se de que temos conta corrente em branco e, em seguida, recebemos um erro porque estamos chamando um valor que ainda não existe neles e que é preenchido, então ele funciona. Então, falamos sobre isso em nosso último vídeo e vamos consertar isso agora. Não queremos lançar um erro toda vez antes de ele realmente ser executado. Então, a maneira como vou resolvê-lo neste aplicativo é apenas envolvê-lo em uma declaração if. Então, em qualquer lugar em que quisermos obter a conta corrente, como aqui, vou me livrar desse registro do console em qualquer lugar que desejamos obter essa conta corrente. Vou embrulhar em uma conta corrente se. Então, se isso existir, só execute isso. Vou para minha próxima função que usa conta corrente. E também vou embrulhar isso. Se a conta corrente fizer isso, faça essas coisas. Acho que esses são os únicos dois no momento. O que isso faz é quando isso carrega e vem aqui e tenta obter o locatário ou realmente verificar se o locatário existe e ele chama renderização existe na conta atual ainda não está definido nos lançamentos esse erro. Desta vez, ele verificará se essa conta atual está definida primeiro. Não será, então vai pular isso. E então aqui embaixo no efeito dos EUA quando ele é chamado, lembre-se de que passamos aqui. Então, sempre que isso mudar, ele chamará o efeito Hughes novamente. Sempre que isso acontecer, ele chamará essa função novamente. E desta vez vai funcionar. Agora, se o salvarmos e voltarmos e atualizarmos, não recebemos esse erro, apenas recebemos isso. Algo não é mais suportado. E reagir 18, o que não é grande coisa, tenho que investigar isso. Mas também temos esse erro favicon, que podemos corrigir indo para index.html e apenas tirando o favicon. Acho que preciso parar ou reiniciar meu servidor para que isso entre em vigor. Então, deixe-me atualizar e esse erro desapareceu. Então, acho que estamos prontos para começar aqui. A primeira coisa que vamos fazer é preencher esse crédito BNB. Então isso é balanço aéreo, o balanço dos locatários. Então, se voltarmos ao nosso contrato e rolarmos para baixo, temos essa função chamada equilíbrio do locatário. Isso é o que vamos chamar que vai verificar o saldo aéreo ou crédito Air BnB que colocamos no saldo da conta ERA da Renner. Vamos voltar aos contextos blockchain. E vamos fazer const, pegue. Um saldo de locatário é igual a um coletor. Vamos fazer um try-catch no erro de log de pontos do console de erros. Então aqui vamos dizer que o equilíbrio constante é igual à espera. Use nosso objeto de contrato e chame o saldo de aluguel ou função. Vamos passar na conta corrente. E vamos envolver isso novamente em uma declaração if. Se a conta corrente, então só faça essas coisas. E então vamos definir o estado. Então, vamos vir aqui e criar um estado para isso. Então vamos dizer aluguel, aluguel ou saldo. Conjunto. saldo locatário é igual ao estado de uso. Aqui vamos definir o saldo do locatário. Defina o saldo do locatário para equilibrar Na verdade, precisamos formatar isso porque ele vai voltar. Então, precisamos formatar isso como fizemos com o outro saldo que fizemos no início. Então, para fazer isso, você coloca éteres ponto utils, éter de formato de ponto. E passaremos em equilíbrio. Precisamos que isso seja chamado quando o contexto for carregado. Então, vamos adicioná-lo ao nosso efeito de usuário. Vamos chamar isso e ele vai definir os estados. Então, precisamos passar essa variável de estado para o nosso provedor. Então, vamos colocar o equilíbrio do locatário. E agora isso deve estar disponível para usarmos em outro lugar. Então, precisamos ir ao nosso painel. Na verdade, os totais atuais são para onde precisamos ir. Totais atuais. Precisamos trazer contextos aéreos. Então, vamos fazer const. saldo do locatário é igual. Use contexto, blockchain, contexto. Incrível. Agora, certifique-se de importar isso na parte superior. Portanto, devemos ter o contexto Blockchain e deveríamos ter usado contextos importantes. Isso está disponível aqui em baixo. Agora, em nosso cartão de estatísticas, podemos alterar esse número estático para alugar ou saldo. Então, vamos salvar isso. E vamos atualizar a página. E temos 0, o que tem que estar certo porque não temos um valor padrão definido. Mas, para verificar isso, vamos em frente e fazer esse crédito de seu formulário de conta funcionar para que possamos seguir em frente e creditar nossa conta e garantir que ela altere esse valor aqui de acordo com quanto temos no contrato inteligente. Então, vamos pular para o formulário Adicionar ao balanceado. Na verdade, precisamos começar nos contextos blockchain. Vamos vir aqui para o fundo. E vamos ligar, se olharmos em nosso contrato inteligente, vamos chamar a função de depósito. Veja se podemos encontrar esse depósito. Aqui está. Vamos chamar essa função de depósito. Passamos o endereço da nossa carteira em seu pagamento. O fato de ser pago significa que também podemos enviar uma quantidade de éter ou B & B ou o que quer que estejamos enviando que será enviado em um objeto, o que mostrarei em um minuto. Portanto, temos depósito, também é pago e adicionará isso ao contrato inteligente, mas credite a conta dos locatários que está neste endereço da carteira. Então, vamos chamar essa função de depósito. Vamos voltar ao contexto blockchain. E eu só vou copiar essa função. E vou chamá-lo de depósito. E eu posso remover isso se vamos apenas remover isso Totalmente. Então pense nisso. Agora estamos entrando em um decimal e queremos convertê-lo em peso ou dez para 1800. Porque em nosso contrato inteligente, queremos lidar com formas não decimais porque a solidez ainda não suporta decimais. Então, precisamos converter isso de outra forma. Então, temos usado Format éter para convertê-lo de maneira para decimais. Agora precisamos usar uma função de utilitário para converter de decimais para pesar. Essa função é chamada de éter de análise. Então aqui vamos chegar quando eu disser valor de B & B. Então, o valor que vamos passar. E, na verdade, vamos colocar isso como um parâmetro. Valor. Então o valor B & B é igual a meios de ponto éteres. Vamos formatar esse valor de duas vias. Então precisamos chamar éter parse. E passaremos o valor. Uma vez que tenhamos isso, então podemos chamar nossa função de depósito Const, depósito igual a aguardar. função interna do ponto do contrato é chamada de depósito. E vamos passar o endereço da nossa carteira, que é conta corrente. E não precisamos envolver isso em um if porque isso não carrega no carregamento da página, ele só o procura quando clicamos no botão. Então, nesse ponto , ele estará bem carregado. E depois da conta corrente, é aqui que podemos passar o valor de quanto estamos enviando para o contrato. E eu disse que isso era um objeto. Então, vamos criar um aparelho encaracolado. E para a chave colocará valor. Para o valor, vamos colocar o valor b e b porque estamos passando esse valor aqui. E então há esse método adorável chamado peso, onde quando estamos fazendo essa transação, iniciamos a transação e queremos esperar até que essa transação seja concluída antes de passarmos para a próxima coisa. Então, para fazer isso, acabamos de colocar o depósito aguardado, que é o que definimos acima do peso do ponto. E isso aguardará até que a transação seja concluída. Em seguida, queremos atualizar o saldo, o balanceamento dos locatários. Assim que creditarmos a conta, queremos atualizar esse número na página. E para fazer isso, é muito fácil. Acabamos de chamar obter saldo do locatário. Mais uma vez. Este depósito, isso não é chamado quando a página é carregada. Só é chamado quando enviamos esse formulário. Então, vamos aqui e enviar essa função para o depósito do provedor de ar. E então vamos pular para o nosso formulário Adicionar ao balanceado. Aqui, vamos para o onsubmit e valores é o que estamos recebendo. Vamos verificar e ver novamente o que isso envia. Então clique em Salvar. Vamos ver como esse log para o console se parece, o teste e ele está sendo um pouco lento. Lá vamos nós. Então, se eu colocar 0.1 e enviá-lo, Ele enviará um objeto com uma chave de saldo de crédito e um valor de 0,1, não precisamos desse saldo de crédito, só queremos o número. Então, vamos para a estrutura D que indo const crédito, saldo de crédito é igual a valores. Então podemos chamar aguardar deformação de depósito. O que foi isso? Aguarde depósito, saldo de crédito. E isso deve ser tudo o que precisamos fazer. Então, vamos salvar isso e dar uma chance. Eu sempre gosto de atualizar minha página só para ter certeza de que estou começando de novo. Então, antes de fazer isso, certifique-se de ter alguns testes B&B em sua conta. Então, se eu abrir o meu, eu tenho 1,96. Se você não tiver nenhum, basta ir para a torneira de teste B e B no Google. Clique no teste net.finance.org e, em seguida, envie-se um B&B. Você pode enviar um B & B por dia. Aqui você acabou de colocar o endereço da sua carteira. Clique em me dar BNB e clique no único BNB e ele o enviará em cinco minutos. É muito legal. Mas já consegui meu fim por hoje , então não posso mais enviar. Então, vou creditar minha conta com 0.1 B&B. Então, se eu clicar em Enviar, teremos um erro. O depósito não está definido. Isso está em nosso formulário de anúncio para equilibrar é provavelmente porque não o trouxemos. Sim, não podemos chamar depósito porque não trouxemos nosso contexto. Então volte para o topo. Depósito é igual a contextos de uso. E vou passar no contexto blockchain e garantir que você importe esses dois. O meu faz isso automaticamente? Já te disse isso um milhão de vezes, mas só estou tentando lembrá-lo. Então, agora vamos tentar novamente. Atualize a página. E vou creditar meu balanceado com 0.1 B&B. Clique em enviar e vou esperar pelo MetaMask. Tudo bem, então meu total, então é um gás muito pequeno v, é por isso que eu gosto de BNB. É 0,0043 B & B. E tack isso no meu 0.01. É muito pouco gás. Então, vamos confirmá-lo. Quando fizermos isso, ele vai esperar. Lembre-se que chamamos esse método de peso, ele vai esperar. E, quando isso for feito, ele deve atualizar o crédito do Airbnb. Então clique em Confirmar que o assistirá aqui. Atualmente, está ao cubo. Agora está pendente. Em nossa rotação giratória por causa dessa forma de gancho React , gancho embutido, acho que é chamado está enviando, mas você verá agora que nosso crédito B & B é 0,01 ou 0,1 B & B. Vamos ver o quanto isso é. 0.1. B&b tem 38 dólares. Ótimo. Gostei desse equilíbrio. Isso está funcionando. Agora vamos para B e B preencham isso. Então, vamos voltar ao contexto blockchain. E vou copiar e colar isso para o próximo. Se olharmos em nosso contrato, temos uma função chamada get du. Então é isso que vamos chamar de get fazer. Não estamos passando nada. E então eu vou remover isso rapidamente em uma conta corrente if. Então faremos isso kannst du equals aguardar contrato ponto obter, fazer conta corrente. E então vamos definir o estado. Isso vai ser um padrão recorrente para as próximas funções. Então eu irei aqui e criarei uma variável de estado chamada do e, em seguida, defino du igual ao estado U. Então eu posso vir aqui e definir, fazer, e vou defini-lo para o valor devido que definimos logo acima disso. Portanto, não confunda isso com a variável state faz. E queremos chamar isso de get do quando os contextos forem carregados. Então, pegue du. E então isso definirá as variáveis de estado devido. Portanto, queremos passar isso para nossos provedores para que possamos usá-lo em nosso painel. Então, basta passar e salvar isso, vá para o painel, não para os totais atuais do painel. E depois passe, faça aqui. Então, vamos passar por causa do nosso contexto. E então, no segundo em que é 0,01, vamos passar o devido e salvá-lo e ver se isso nos dá uma quantia una através de nós um grande erro. E diz que os objetos não são válidos como um filho do React, o que isso significa é que ele está retornando um grande número, que é um objeto. Então, na verdade, precisamos analisá-lo, esquecemos disso. Então, em vez de, em vez de fazer, precisamos colocar éteres, utilitários de ponto, éter em formato de ponto. Faça, e isso deve corrigi-lo. Isso nos dará nossa quantia decimal. E já está lá. Olhei para 0, atualize novamente, 0, legal. E vamos testar isso em um minuto. Vamos seguir em frente e fazer uma configuração de minutos de viagem. Então, e os minutos de passeio? Onde está isso em nosso contrato? Então, se voltarmos ao nosso contrato, temos essa função chamada obter duração total. Então, vamos chamar isso, ele retorna 0 se eles ainda não tiverem verificado sua bicicleta ou não o verificaram. Eu disse que retorna a quantidade de tempo que eles estavam na bicicleta. Então, se eles tiverem uma hora de início e término, isso vai calculá-lo aqui. Então, precisamos chamar isso de duração total. Então, novamente, vou copiar isso e colá-lo. Na verdade, vou chamar isso de obter duração total. E vamos deixar essa declaração se. E vamos fazer exatamente a mesma coisa aqui. Vamos dizer que a duração total const é igual a aguardar ponto do contrato obter a duração total, que é uma função em nosso contrato como acabamos de ver. E depois passe na conta corrente. E então vamos definir o estado. Então, vamos subir aqui. E logo abaixo disso, basta colocar const, duração, definir a duração igual ao estado de uso. E volte aqui e vamos defini-lo. Defina a duração para a duração total. E isso, na verdade, vai ser uma corda. Queremos lançá-lo para um número. Então, vamos salvar isso. E também queremos obter isso quando a página carregada porque ela está em um painel. Então, começamos a usar o Effect, obter a duração total nessa configuração da duração. Então, vamos passar o valor do estado de duração para o provedor. E então, assim como fizemos antes, vamos pular para os totais atuais e adicioná-lo aqui, duração para trazê-lo. E então aqui em baixo minutos de passeio em vez de sete, vamos colocar a duração. Salve isso. Atualize minha página e temos Ryan minutos de 0. Agora vamos definir esse status de bicicleta. Então, a maneira como eu o fiz foi que isso vai ficar vermelho até você verificar a bicicleta. Se a bicicleta estiver ativamente verificada, ela mudará para verde. Como Hey, você está pronto para ir, curtir sua bicicleta. Uma vez que sua bicicleta é verificada , suas costas ficam vermelhas. Vermelho significa que quando sua bicicleta é devolvida, você não pode verificar outra até pagar seu saldo. Agora você pode querer distinguir entre quando eles pagam o saldo, quando eles verificam a bicicleta novamente. Você pode fazer isso se quiser. Vou deixá-lo vermelho apenas por simplicidade. Então, para fazer isso, precisamos vir aqui e ver, sim, estamos definindo essa cor de fundo para vermelho. O que queremos fazer é descobrir se eles estão ativos ou não. Se eles estiverem ativos, queremos configurá-lo para verde, caso contrário, lido . Então, vamos voltar. Acho que já temos isso no ar. Temos um erro. Adicione locatário. Não, não temos algum lugar aqui. Traga o locatário aqui está. Verificamos se o locatário existe, se o fizerem, chamamos get locatário em preenchimento que locatários a variável de estado C onde diz Set renter. Então, devemos ser capazes de vir aqui e apenas passar o valor do locatário. Então, o locatário e isso deve nos lembrar quando adicionamos um locatário, ele nos dá o endereço da carteira, FirstName, LastName pode alugar saldo ativo, todas essas coisas boas. Então, devemos ter isso disponível. Portanto, deve ser tão fácil quanto passar as informações do locatário, chegar aos nossos totais atuais e adicionar locatário aos nossos contextos. E então, em vez de vermelho aqui, diremos o ponto do locatário ativo. Se isso for verdade, então queremos mudar isso para verde. Caso contrário, vermelho. Salve isso. Vamos testá-lo. Então, temos um grande erro aqui. Ele diz que não é possível ler propriedades de indefinido. E o que isso geralmente significa é que ainda não havia povoado. Portanto, ele está verificando essa variável de estado antes de ser preenchida. Então, o que podemos fazer também é fazer um check-in para o locatário para garantir que locatário também esteja disponível. Portanto, o locatário e o locatário estão ativos somente em verde mais lido. Então, se salvarmos isso, devemos ser bons. Atualizar o status da bicicleta é vermelho. Agora, quando verificarmos, isso deve ficar verde. Em seguida, precisamos que este formulário funcione para que possamos pagar o valor devido. Uma vez que fizermos isso e adicionamos nossas motos testarão que tudo isso funciona. Então, vamos fazer isso em seguida. Então, de volta aos contextos blockchain. E vou copiar isso novamente, colá-lo abaixo dele. E eu vou chamar isso de fazer pagamento. E vamos passar um valor. Porque lembre-se que isso é pago. Vamos enviar uma quantia com isso. E vamos dar uma olhada na função em nosso contrato. Então, em algum lugar, deve ser onde estamos fazendo nosso pagamento. Aqui, faça o pagamento. Então aqui está nossa função de pagamento. Lembre-se de que ele o subtrai do nosso saldo, por isso faz um pagamento ao contrato e subtrai esse valor do nosso balanceado que ele define pode alugar de volta para verdade, porque agora você pode alugar uma bicicleta novamente. Ele define devido a 0 e inicia e termina de volta para zeros. Então, ele meio que faz seu pagamento e atualiza você como você estava no início. Então, vamos vir aqui e vamos chamar a função fazer pagamento. E dentro dessa conta corrente. E não precisamos da conta atual porque, novamente, ela só é executada quando pressionamos o botão. Então, vou fazer como fiz aqui em cima. Vou copiar tanto isso. Na verdade, vou copiar tudo. Cole-o. E então o valor B & B, esse é o valor que estou enviando. E então vou chamar o depósito porque estamos depositando dinheiro, estamos fazendo um pagamento. Mas em vez de chamar a função de depósito, chamaremos a função make payment. Passaremos o endereço da nossa carteira e o valor que estamos enviando, esperaremos até que isso seja feito. Então precisamos fazer várias coisas aqui. Então lembre-se em nossa função de contrato, estamos fazendo um monte de coisas. Estamos subtraindo do nosso saldo. Estamos mudando pode alugar de volta para verdade em todos esses dois zeros. Então, precisamos atualizar algumas coisas. Certo, sob isso, vamos chamar um locatário de peso. Porque precisamos atualizar nosso locatário. Eles têm novos valores agora, o pode alugar o saldo. Tudo isso é atualizado. Então, precisamos atualizar o locatário. Precisamos atualizar o aluguel ou o saldo do get. Precisa atualizar isso porque nosso saldo vai mudar. Precisamos atualizar a duração porque tivemos um motim de dez minutos. Precisamos disso para voltar para 0, então precisamos atualizar isso. Então aguarde, obtenha a duração total. E, finalmente, precisamos atualizar o valor devido. Então aguarde, faça, porque isso também será 0. E isso só é executado quando pressionamos um botão. Então, vamos passar a função para o provedor. E então vamos para o formulário de pagamento. E traga nosso contexto. Pode, fazer o pagamento igual a usar o contexto. Em nosso contexto estão os contextos blockchain. Então, novamente, certifique-se de importar ambos , então no ar em nossa cúpula. Então, vamos tentar nosso Enviar primeiro, ver se ele funciona. Então pague suas dívidas 0,1 enviar, e lá está. Então, novamente, queremos estruturar isso para obter o 0.1. Para fazer isso, diremos pagamento const. Acho que é isso que usamos aqui. Sim, o pagamento D é igual valores e, em seguida, podemos chamar aguardar, fazer o pagamento. Pagamento, pagamento. Deixe-me salvá-lo e poderíamos experimentá-lo, mas não temos nenhum Mountain Dew. Então, vamos também saltar para as nossas bicicletas e fazer esses botões funcionarem. Então, de volta ao contexto blockchain, vamos adicionar duas funções. Um será chamado de checkout, const, check-out é igual a uma pia. E o outro será chamado de check-in. Então, vamos verificar a bicicleta. Vamos verificar de volta na bicicleta. E faremos uma tentativa de pegar. Console.log o erro. Aqui. Nós diremos que se a conta corrente fizer esse cheque, então só execute isso fará essa verificação. Se isso for verdade, só execute isso. Então, vamos começar com o checkout const igual a aguardar ponto do contrato. E vamos ver o que temos. Portanto, temos um checkout e temos um check-in. E você observará no checkout, provavelmente queremos atualizar o locatário porque ele terá novos valores. E depois no check-in, há muita coisa acontecendo. Estamos alterando alguns valores do locatário, mas também estamos definindo o valor devido. Então, estamos calculando quanto é devido e vamos definir isso. Precisamos atualizar esses valores. Então contratos, ponto, check-out, conta corrente. Vamos aguardar o término da transação , peso do ponto de checkout. E então vamos chamar get locatário para atualizar isso. Aqui embaixo. Eu vou realmente copiar isso, colá-lo. Aqui. Vamos dizer check-in, check-in pontos de contrato. Então vamos aguardar o check-in. Então vamos ligar para obter locatário. Vamos chamar get devido a atualizar esse valor e obter duração total porque precisamos redefinir isso para 0. Nestes, como os outros são botões que você pressiona. Então, vamos passar as funções reais para o nosso provedor. E eu realmente não preciso disso se a conta atual porque é um botão pressionado, isso não vai acontecer no carregamento da página. Então, vamos movê-los de volta e salvá-lo. E vou passar no checkout e fazer o check-in para o meu provedor. E depois vamos para a bicicleta do painel. Agora vai ser de bicicleta. Lá vamos nós. Então, vamos trazer o contexto para o nosso componente de bicicleta. Então const, confira, verifique n iguais, use contextos, contextos blockchain, trazendo suas importações. E vou salvá-lo. Agora há uma coisa sobre a qual devemos falar. Uma coisa que você pode fazer com seu contrato é quando você verificar esta bicicleta, você pode salvá-la no seu contrato ou em seu estado ou algo assim. Então você pode exibir aqui o tipo de bicicleta também que você verificou. Eu não queria tornar isso muito complicado e queria deixar algumas coisas para você ser criativo e criar seu próprio aplicativo com isso. Mas todos esses checkout e check-ins farão a mesma coisa. Então, se eu verificar esta bicicleta, é o mesmo que verificar esta bicicleta. Não temos que diferenciar qual bicicleta estamos verificando. Então, vai ser o mesmo e cada um desses componentes de bicicleta. Para o checkout, vou adicionar um clique ao clicar. É igual ao checkout. E para este botão, o botão de check-in, adicionarei um check-in ao clicar , chamando minha função de check-in. E então salvamos isso. E acho que somos bons para isso. Podemos realmente experimentá-lo. Então atualize minha página. E vou tentar verificar uma bicicleta. Agora há muitas coisas que vão acontecer aqui que podemos testar. Então, primeiro, vou verificar esta bicicleta. Tudo bem. E me cobra uma taxa de gasolina muito minúscula. Preço B&b. Vamos ver o quanto isso realmente é. É como 27, gás v é $0,20. Fico feliz por termos usado para o BnB, mesmo que seja testemunho. Então deixe-me voltar para o MetaMask. Deixe-me confirmar. Então, o que vai acontecer aqui é que quando eu confirmo, esse status deve ficar verde. E deve definir um monte de coisas que dissemos em nosso contrato como, pode alugar deve ser falso, hora de início do ar deve ser documentada, deve haver um carimbo de data/hora para isso e todos que, você sabe, o contrato tão bem quanto eu, você sabe, o que vai acontecer. Para que eu possa clicar em Confirmar. Agora está pendente. Quando o pendente estiver pronto, isso deve ficar verde, então cuidado com isso. Isso é feito. E somos verdes. Olhe para isso. Ou a bicicleta é verificada. E o que queremos fazer agora é esperar cerca de seis minutos, algo ao longo de cinco minutos, e então vamos verificar novamente e ver que tudo acontece corretamente. Então é 1157 aqui. Então eu vou voltar como 1203 e vamos voltar a entrar naquele momento. Devemos ter minutos de passeio de seis minutos. Devemos ter uma quantidade de B&B. Lembre-se de 0,05 a cada cinco minutos. E a partir daí devemos poder pagar ou pagar isso até 0 e fazer com que nosso crédito B reflita a diferença. Então eu te vejo de volta em cerca de cinco minutos. Tudo bem, então está quase na hora de verificar o back-end da minha bicicleta. Antes de fazer isso, vou verificar minhas variáveis de estado apenas para ver que as coisas mudaram corretamente. Então vá para componentes. Você verá que o aluguel pode ser realmente falso agora porque ele foi verificado, então isso funcionou bem. E então é verdade, ativo é verdade. Esses funcionaram muito bem. E tudo está funcionando corretamente. Tudo bem, então já se passaram cerca de 78 minutos. Então o que vamos fazer é verificar a bicicleta de volta. Quando fazemos isso e esta transação terminar, eu deveria ter o status da minha bicicleta deve ir ler meus minutos de viagem devem ser preenchidos com quanto tempo eu estava na bicicleta no meu B & B deve ser povoado também. Então, vamos tentar isso. Então, vou clicar em check-in e confirmá-lo no MetaMask. E vamos verificar esse status. Então isso está pendente. Quando isso for feito, devemos ter valores preenchidos. Tudo bem, ótimo. Então, o status da bicicleta voltou para vermelho. Eu estava fora sete minutos no meu B & B fazer é 0,005, o que é certo. Se eu tivesse 12 minutos, eu teria 0,01. Lembre-se de que são 0,005 a cada cinco minutos. Tão ótimo. Então, o teste final aqui é que posso pagar o valor devido e redefinir isso e deduzi-lo do meu crédito B & B. Nosso estado agora é pode alugar ainda é falso porque eu não paguei minhas dívidas. E ativo é falso porque não sou mais ativo na moto. Então, vamos colocar na montagem do 0.005 e vamos tentar pagá-lo. Então envie e estamos fazendo um pagamento de 0,005 e, em seguida, taxas de gás. Então aperte Confirmar e isso vai estar pendente, mas uma vez que isso for feito, meus homens de carona, deve ser em 0. Meu B & B deve ser 0 e meu crédito deve ser deduzido o valor que paguei. Acabou de passar por Reimann, é 0. B&b não é nada. E o crédito B & B é muito assim. Então 0,01 menos 0,05 é 0,095. Então, ainda tenho algum crédito. Ainda posso verificar que outra bicicleta em nosso aplicativo está funcionando maravilhosamente. Então, no próximo vídeo, faremos uma pequena limpeza e vamos adicionar alguns recursos de segurança que não adicionamos desde o início. Depois que isso for feito ou a Apple terminar. Você será capaz de mostrar todo o seu trabalho. Vejo você no próximo vídeo. 9. Como otimizar as verificações de UI e segurança: Neste vídeo, vamos dar os retoques finais em nosso aplicativo. encerrar as coisas, vamos começar exibindo essas mensagens requeridas em nosso front-end. Então, se você se lembra, em nosso contrato inteligente, temos essas declarações requeridas de que, se não forem verdadeiras, então cuspimos esta mensagem. Precisamos exibi-los no front-end. Então, vamos trabalhar nisso. Depois disso, vamos implementar alguns recursos de segurança para que os locatários não possam interferir nas informações de outros locatários e também algumas coisas de proprietários que são realmente importantes. Então, passe por esta lição porque vai haver muita diversão. E, como sempre antes de começarmos com eles, precisamos corrigir alguns bugs. Vamos consertar um simples adiantado e outro mais tarde no vídeo. No primeiro, é assim. Então, se você abrir seu contexto de blockchain, e já deve ter notado isso. Se você abrir seu contexto de blockchain e salvá-lo, esse painel muda para o formulário de locatários de anúncios, que significa que estamos perdendo nosso estado de alguma forma. Então, se você for para o contexto blockchain e salvá-lo, verá que, ei, agora temos o formulário adicionar locatários. Se você for ao seu painel e apenas fizer um console.log, locatário existe, você verá o problema. Então, salve isso. E vou atualizar a página. E vou salvar meu contexto blockchain. Assim que você fizer isso, você vê aqui no console que diz Hot updated, o que significa que Vijay S é Hot Reload aconteceu e então esse valor é indefinido. Você vê logo acima que é verdade. Mas assim que essa recarga acontecer, ela é indefinida. Agora eu tentei encontrar uma boa solução para isso, e estou convencido de que só precisa ser algum bug JS byte ou algum problema com Vijay S que eu simplesmente não conheço, mas tenho uma solução fácil para nós, um que não nos impactará muito. Tem a ver com um plugin que Vijay S usa. Então, se você entrar na pasta raiz e ir para vite dot config dot js. Existe esse plugin react plugin. Então, estamos importando aqui e estamos usando-o aqui com o React. Agora, dentro disso, só precisamos desativar a atualização mais rápida. E você faz isso escrevendo um objeto de chave, atualização rápida, valor falso. Então, estamos desativando a atualização rápida. Se salvarmos isso e agora atualizarmos esta página, realmente atualizamos de qualquer maneira. Você não deveria mais ter esse problema. Então, vou para o contexto de blockchain, contexto, e vou salvá-lo aqui. E vou salvá-lo na minha página, apenas atualiza sem perder o estado. Então, essa é uma solução simples. Adicione isso em seu arquivo de configuração e podemos avançar. Agora, apenas uma palavra de cautela se você estiver fazendo alterações na interface do usuário e quiser vê-las instantaneamente, acho que você precisará reativar isso, mas atualmente terminamos as alterações na interface do usuário. Então você não precisa se preocupar com isso, mas só queria anotar isso. Mais uma vez. Se você encontrar uma solução, por favor me avise. Ou se eu encontrar um nesse meio tempo, vou colá-lo abaixo deste vídeo. Tudo bem, então primeiro, como eu disse, queremos adicionar essas mensagens de erro quando tivermos erros. Então, se voltarmos ao nosso contrato, você se lembra que temos essas declarações requeridas que dizem coisas como Você não tem nada para isso desta vez, você não tem fundos suficientes para cobrir pagamento, coisas assim. Portanto, se o usuário tentar fazer algo que não tem permissão para fazer, ele deve exibir uma mensagem de erro. Então, por exemplo, se eu tentasse pagar, poderia fazer quando eu não tiver nada devido. Então 0.1 e enviá-lo, recebo esse erro aqui no console. Aqui está esse objeto. Por isso, diz mensagem de código, pilha de dados. Tudo isso bom. Então, se abrirmos isso, você verá que temos esse objeto de dados. E se abrirmos isso, há uma mensagem lá dentro que diz que a execução foi revertida. Você não tem nada devido neste momento. Isso é o que queremos exibir na página. Então, para fazer isso, só precisamos pegar esses valores específicos. Então, se eu for fazer o pagamento, que é o que estamos chamando agora, nos meus contextos blockchain. Em vez de erro console.log, vamos dizer Dados de ponto de erro. Lembre-se de que era a mensagem de ponto do objeto. Então, salve isso e vamos tentar novamente. Deixe-me atualizar 0.1 e enviar, e eu deveria ver a mensagem aqui. Execução revertida. Você não tem nada devido neste momento. Então, agora só precisamos exibi-lo na página. Bem, um dos meus pacotes favoritos e react é toast desafiar. Testify é usado para alertar o usuário sobre determinadas ações. E há um milhão de maneiras que ele pode ser exibido. Ele pode deslizar na página. Ele pode fazer tudo isso, mas vamos manter isso simples. Então, se você for testemunhar, reaja deve haver um pacote NPM, mas reaja para testemunhar. É muito fácil de configurar. Você pode ver aqui todas as diferentes mensagens que você pode usar. Você pode fazer spinners. Você pode colocar ícones nele. Você tem cores diferentes, muitas opções. Então, para instalá-lo, basta obter um fio e reagir a justificar ou instalar o NPM. Portanto, pare seu servidor, instale-o e inicie o backup do servidor. No que vamos fazer é exibi-lo através do mesmo contexto aqui, os contextos blockchain. Normalmente, você gostaria de criar um novo contexto para isso. Como um contexto de torradeira phi. Configure isso e use-o apenas para alertar sobre mensagens e erros. Mas se eu começar a fazer isso, teremos mais uma hora de vídeo apenas configurando mensagens de erro. Então, vamos fazer isso fácil aqui. Mas se você estivesse em um projeto maior e quisesse colocar mais tempo nele, é claro que alguém gostaria de usar um contexto separado. Então, se analisarmos nossa documentação para o React testemunhar, vou clicar na demonstração e na documentação. E você verá aqui, vamos apenas verificar a torrada de posicionamento. Na verdade, vamos para o próximo porque isso não é muito útil. Mas o que você precisa fazer aqui é que você precisa colocar este contêiner de torradas no, na página que você deseja exibi-lo. E então você pode chamar a função toast. Então você pode ver isso melhor aqui. Então, Toast dot success, e então você tem sua notificação, o que quiser dizer, e então você escolhe sua posição na página para exibi-la. Você pode fazer um brinde para acessar um erro, um mandado e informações, ou algum tipo de brinde personalizado. Então, vamos começar colocando este contêiner de torradas. Bem, na verdade, isso é importado. Vamos colocar isso na página de totais atuais porque temos os dois formulários lá. Aquele em que creditamos nossa conta, aquela em que fazemos um pagamento. Então vá para os totais atuais. Então, na parte superior, você quer apenas colocar essa instrução de importação, importar contêiner de torradas. Então vou pegar esse exemplo. E vou rolar para baixo e depois na parte inferior. Então aqui está minha função de totais atuais na parte inferior abaixo da caixa, para que eu não tenha nenhum tipo de estilo com ela. Vou colocar que o fechamento automático do contêiner dos pés está definido para oito segundos. Vou mudá-lo para, vamos fazer 3 mil por três segundos. E então temos vários pais aqui. Então, precisamos colocar uma etiqueta vazia. Um na parte superior, um na parte inferior. Meu contêiner de brinde está nessa página. Então, quando é chamado, ele deve ser exibido nessa página. Agora vou voltar aos contextos blockchain, e vou chamá-lo aqui com aquela chamada de erro de ponto torrado. Então, vou voltar ao erro de ponto de posicionamento e brindar. Então, vou tirar esta mensagem de log de pontos do console e substituí-la por esse erro de ponto de torrada, que novamente você encontrará na parte de torrada de posicionamento desta página. Então, para minha notificação de erro, vou colocar dados de ponto de erro, mensagem de ponto. E eu queria entrar no canto superior direito. Então, vamos salvar isso. Agora há mais uma coisa que você tem que fazer. Você precisa importar o CSS ou ele não parecerá adequado ou mesmo funcionará corretamente. Então, basta ir para começar a instalação. E eles não mencionam isso aqui com a instalação, mas você o verá importado aqui. Então, copie isso. E queremos importar isso na página de totais de corrente aérea porque é aí que estamos exibindo esse contêiner de torradas. Então, no topo, traga isso para dentro, salve-o. E vamos experimentar isso. Então, vou atualizar a página só porque gosto de fazer isso. Agora vou colocar apenas o número um e enviar. E vamos ver se recebemos uma mensagem de brinde. Não temos, porque o brinde não está definido. Então, vamos voltar ao nosso exemplo e garantir que pegamos brinde de importação de reatores para disparar. De volta ao contexto de blockchain aéreo, coloque isso no topo. Importar brinde. remover o contêiner de torradas porque não estamos usando isso aqui. Estamos apenas usando dedos dos pés porque estamos chamando o erro do brinde. Então, salve isso e vamos tentar novamente. Então atualize. Tudo bem, e eu vou colocar o número um e enviar, e você deve ver algo aparecer no canto superior direito. Aí está ele. Execução revertida. Você não tem nada devido neste momento. Parece que está pendurado lá por um segundo, mas é suposto desaparecer em três segundos. Mas isso é ótimo. Então, alguém entra e envia isso permitirá que eles saibam que você não tem nada a ver com esta vez. Vamos adicionar um ao nosso formulário de crédito. Então get du colocará a mesma coisa lá. Você pode personalizá-los como quiser. Há um milhão de maneiras de fazer isso. Você vai para isso. Onde está nos reatores desafiam Demo. Há como todos os tipos de coisas que você pode ver o erro de aviso de sucesso da informação. Mas sim, você pode selecionar qual deles você quer ver. E, em seguida, clique em Mostrar brinde e ele mostrará como é. Temas diferentes. Aqui está o tema escuro e o tema de cores. Muito legal se você estiver usando, se você estiver usando promessas, você pode dizer promessas pendentes e depois promessa resolvida. Muitas coisas ótimas. Então, vou pegar isso e adicioná-lo ao formulário de crédito. Então, o depósito. E vou salvar isso e, na verdade, isso não vai erro. Não sei se temos alguma coisa para a torta. Não temos nada para depósito. Mas vamos encontrar outra coisa. Faça o pagamento, receba o locatário , faça check-in e check-out, pois ambos exigem extratos. Vamos voltar. Então, vou remover isso do depósito. Ele irá para o check-in e check-out e adicionará lá. Incrível. Então, se eu tentei verificar em uma bicicleta que não tenho, acho que vou receber um erro. Deixe-me confirmar isso. Check in. Por favor, confira uma bicicleta primeiro. Sim, vamos ver se conseguimos algo lá. Então eu vou escolher, na verdade, deixe-me refrescar apenas para o meu hábito e ir para o check-in. E lá está ele. Por favor, confira uma bicicleta primeiro. Incrível. Então, temos mensagens e nos sentimos à vontade para ajustar isso, como você quiser colocá-lo em um lado diferente, adicionar algumas cores diferentes, fazer um tema escuro, o que quer que seja. Então eu acho que as coberturas de ar exigem declarações. Temos checkout, temos que fazer o check-in adquirir exige, temos que fazer o pagamento. E é isso. Então isso é reagir à justificação ter adicionado. Agora, a próxima coisa que queremos fazer é adicionar alguns recursos de segurança ao ar Smart Contract. Então, teoricamente, se eu tiver endereço de carteira pública de outra pessoa e puder inseri-lo em algumas dessas funcionalidades. Então eu posso conferir uma bicicleta para outra pessoa responsável, dinheiro para a conta de outra pessoa. Posso fazer coisas com a conta de outras pessoas. Não há nenhum cheque para dizer, ei, você só pode interagir com seu endereço. E eu não acho que, em geral nada no front-end você possa fazer isso como eu não acho que posso vir aqui e clicar em checkout e adicionar o endereço da carteira de outra pessoa. Mas ainda assim você quer colocar esses cheques lá. E eu acho que é bom passar por isso só para que você veja que se você for para o contrato da cadeia de bicicletas, deixe-me dar um exemplo. Se eu for ao checkout e souber o endereço da carteira de outra pessoa, posso colocar o endereço deles e verificar uma bicicleta e depois deixá-la funcionando por uma semana e depois verificá-la novamente. E então eles tinham esse enorme equilíbrio eles não tinham parte de correr para cima? Então, gostaríamos apenas de colocar um cheque que diz, ei, você só pode executar essas ações em sua conta específica. E é muito fácil de fazer. Acabamos de inserir um modificador. Então, logo abaixo de Adicionar locatário, vou dizer modificador. Opa. Vou dizer que modificador é locatário. E então eu vou passar um endereço enquanto estiver no endereço. E então você coloca esses colchetes e diz que requer remetente de ponto de mensagem é igual ao endereço da carteira nele. Isso não é verdade. Você dirá que só pode gerenciar sua conta. Então, logo abaixo disso, você tem esse ponto e vírgula de sublinhado. E o que isso significa é continuar com o resto da função. Então, como isso funciona é aqui em baixo. Para esta função de checkout, você adicionaria aqui o locatário. Este é um modificador e você passaria no endereço while at. Nessa é uma maneira limpa de adicionar uma instrução requerida repetível duas funções. Então, quando esta função for executada, ela vai verificar primeiro, se for locatário, ela passará no endereço da carteira e vai dizer, faz o remetente da mensagem, o pessoa que faz essa chamada, corresponda ao endereço da carteira, o que significa que ela só pode modificar sua própria conta. Então, quando você cria um modificador, basta colocá-lo na função. E vou te mostrar como isso funciona em um minuto quando jogamos em remix. Mas precisamos adicionar isso a tudo o que estamos adicionando um endereço de carteira também. Então, vou colocá-lo aqui no check-in. Você só pode verificar em uma bicicleta com seu endereço. aluguel ou o tempo de ninguém mais é interno. Não precisamos nos preocupar com isso. Obtenha a duração total. Você só quer ter sua própria duração. E como este retorna algo, vamos colocar isso logo após o público. E então este também retorna algo e é público. Mas este é o saldo do contrato. Só queremos que o dono faça isso e vamos lidar com isso a seguir. Mas obtenha equilíbrio dos locatários, você só pode obter seu próprio saldo. Coloque isso após o valor devido ao conjunto público. Isso é interno, sem problema. Chamá-lo fora do contrato, pode alugar uma bicicleta, colocá-la lá, depositar. Você só pode depositar através de seu próprio endereço, mesmo que as pessoas gostem que você deposite no deles. Faça o pagamento. Agarre isso no final. Coloque-o lá. Obter locatário. Você só pode obter suas próprias informações. E o locatário existe, coloque-o lá também. Então, tudo isso está fazendo novamente, em vez de colocar uma instrução require repetidamente em cada um deles, estamos apenas colocando esse modificador nesta instrução de função aqui antes das chaves, estamos apenas adicionando esse modificador. Você está modificando a função para atender a esses requisitos. Tudo bem, então esse é o modificador do locatário. Agora temos mais duas coisas e estaremos todos feitos. Primeiro, temos que corrigir um bug. Em segundo lugar, precisamos falar sobre o proprietário. O proprietário deve ser capaz de ver quanto dinheiro é realmente dele ou dela. E eles devem ser capazes retirar os ganhos que eles obtiveram com essas transações. Então, vamos corrigir o bug primeiro. Agora você se lembra que falamos sobre a logística por trás do contrato inteligente. Se alguém depositar dinheiro, ele vai para o contrato inteligente, mas credita sua conta. Então, se alguém colocar US $10 lá, a única pessoa que colocou dinheiro, eles colocaram US $10. Há US$10 no Contrato Inteligente, mas todos os dez são creditados em sua conta. Agora, eles gastam US$5 em uma bicicleta e fazem um pagamento, então ainda há US $10 no contrato, mas apenas cinco deles são creditados com eles. Bem, cometemos um erro ao efetuar o pagamento. Quando fazemos um pagamento, estamos apenas subtraindo esse valor do saldo. Na verdade, não estamos enviando dinheiro para o contrato. Estamos apenas subtraindo-o do saldo no dinheiro que sobrou é o dinheiro dos proprietários. Portanto, não podemos pagar aqui e não podemos usar o valor do ponto da mensagem. Na verdade, nós, na verdade, nos contextos blockchain, quando fazemos um pagamento, estamos enviando dinheiro, esse valor BNB. Então isso é um erro. Não devemos fazer isso. Deveríamos apenas subtrair do crédito. No contrato inteligente, há alguns ajustes que precisamos fazer. Primeiro, retire a pagar porque não há mais uma função a pagar. Segundo, vamos colocar um segundo, vamos colocar um U e uma quantidade. Então, vamos enviar uma quantia. Quando fazemos um pagamento, precisamos enviar um valor que realmente será deduzido do nosso saldo. Então, temos uma quantia aqui. E então vamos mudar esse valor de ponto de mensagem para valor porque não estamos realmente enviando dinheiro, estamos apenas deduzindo do nosso saldo. E isso deve ser tudo. Então, quando executarmos o pagamento, vamos testar isso em um minuto. Vamos enviar um valor e esse valor será deduzido do nosso saldo. Então, como removemos o fator a pagar adicionou um parâmetro de valor uint8, precisamos atualizar nossa função de contexto blockchain aqui e fazer o pagamento. Estamos passando esse objeto de valor, que é como você lida com uma função a pagar. É assim que passamos um valor para uma função a pagar. A única diferença porque estamos trazendo o valor agora como um uint8 e não esse valor a pagar, só precisamos substituir esse objeto valor B & B como o segundo parâmetro ou o segundo argumento. Portanto, certifique-se de atualizar isso no contexto blockchain e depois voltar para o seu contrato. Agora isso segue está perfeitamente no dono. O proprietário, se alguém tiver US$10 e pagar US$5 em sua conta, ele tem US$5 sobras nos outros cinco realmente pertence ao proprietário. Então, precisamos permitir que o proprietário do contrato que basicamente administrará a loja de bicicletas verifique seu saldo. Como quanto custam os lucros deles? Quanto do dinheiro, todo o dinheiro no contrato inteligente, quanto disso é ousado, com base em pessoas cobrindo contas e fazendo pagamentos e recriando sua conta e tudo isso. Então, há algumas maneiras de fazer isso. Pensei nisso. Então, usamos mapeamentos. Você não pode percorrer um mapeamento. Pensei em talvez quando adicionamos um locatário para criar uma matriz e apenas temos uma matriz de endereços que podemos percorrer. Mas realmente não queremos percorrer as coisas porque podemos acabar tendo centenas, talvez milhares de inquilinos e isso vai ser monstruoso taxas de gasolina. Se conseguirmos percorrer 11000 locatários, acho que a melhor maneira de resolver isso é criar uma nova variável chamada uint8, saldo do proprietário. Então, temos saldo de dono. E se você pensar sobre isso, o único tempo que o dinheiro entrará saldo do proprietário é quando as pessoas fazem pagamentos. Novamente, se eu tiver US $10 no contrato inteligente e tudo isso é meu e eu fizer um pagamento de US $5, meu saldo cai para cinco e os outros cinco pertencem ao proprietário. Então, essa é realmente a única vez que precisamos adicionar ao saldo do proprietário. Então, aqui em baixo, onde fazemos o pagamento, vamos adicionar mais uma coisa abaixo disso. Vai ser. Saldo do proprietário mais o valor igual. Então isso será creditado a esse saldo de dono. E então faça backup aqui onde temos o saldo de, queremos que isso seja chamado apenas pelo proprietário. Então, vamos criar outro modificador, modificador, único proprietário. E não temos nenhum parâmetro lá. E podemos exigir que o remetente do ponto de mensagem seja igual ao proprietário. Porque esse é um endereço de carteira. E você não tem permissão para acessar isso. E então faremos nosso ponto e vírgula de sublinhado para executar o resto da função. E usaremos apenas o proprietário no balanço aéreo de aqui no proprietário. Se quisermos adicionar mais duas funções relacionadas ao proprietário, uma para obter sua função de equilíbrio equilibrado ou seu saldo, obtenha o saldo do proprietário. E vamos ver público e vamos torná-lo apenas proprietário e devolver um uint8. E aqui vamos devolver o saldo do proprietário. E então queremos fazer mais uma função para o proprietário retirar o dinheiro. Agora você pode ser como, cara, isso é, isso é arriscado porque o dono pode simplesmente arrancar o dinheiro de todos e correr com ele. Mas isso não é verdade porque o saldo do proprietário é apenas o dinheiro na conta que não é creditado às pessoas. Então, vamos fazer a função. Retirada, saldo do proprietário. Isso vai ser pago e público. E vamos dizer transferência de pontos do proprietário, saldo do proprietário. Agora você vê que temos esse erro aqui. E diz que Enviar e transferir só estão disponíveis para objetos do tipo endereço a pagar e não endereço. Agora podemos corrigir isso apenas lançando este proprietário S a pagar. Então, finalmente, precisamos definir o saldo do proprietário de volta para 0 porque estamos transferindo esse saldo de proprietário, que está configurado no topo. Você foi saldo do dono. Estamos transferindo esse valor para nossa carteira. Agora precisamos definir isso de volta para 0. Portanto, o saldo do proprietário é igual a 0. E com isso, acho que acabamos. Então selecione essa coisa toda e copie-a e vamos colá-la no remix para que possamos testá-la. Vou colá-lo aqui e compilá-lo. E, em seguida, faça isso maior. Tudo bem, então vamos implantar o contrato. E eu vou, vou implantar usando a primeira conta que será o dono. Então clique em Implantar. Em seguida, vamos adicionar um locatário. Então, vou escolher a segunda pessoa. Copie e coloque-o no endereço da carteira. Quer colocar o teste Travis? O aluguel é verdade. Ativistas falsos. Zeros, zeros, zeros 0. Então, clicaremos em Adicionar locatário. E vou ir em frente e verificar uma bicicleta para aquele locatário. A bicicleta é verificada. E agora vou para a terceira conta. Então, será o segundo locatário que copiará isso. Cole-o aqui. E vou colocar algo como Tracy. E vou ir em frente e conferir uma bicicleta. Bem, eu preciso adicioná-los primeiro. Portanto, certifique-se de ter o endereço certo para essa terceira pessoa e adicione o locatário. E depois vou verificar uma bicicleta para aquele locatário. Incrível. Então, temos carimbos de data/hora, poderemos verificá-lo aqui em um minuto. Mas vamos em frente enquanto estamos aqui e depositar algum dinheiro. Então, vou escolher um éter e escolherei o segundo locatário. E eles vão depositar um éter no contrato inteligente. Então, aqui, onde diz depositar, certifique-se de que este é um éter e clique em depositar. Incrível. Então eles depositaram um éter. Se eu verificar o locatário aqui, você verá que eles têm uma hora de início, então as motos saíram e elas têm um saldo. Agora, o que acontece se eu tentar mudar para o terceiro o segundo locatário aqui. E depositar usando o primeiro endereço dos locatários, devo receber um erro. Então clique em depositar. Aqui vamos nós. Você só pode gerenciar sua conta. Então isso é que o modificador de locatário está funcionando. Isso é incrível. E esse é o caso de uso. Então, se estou depositando dinheiro, mas estou fazendo isso de uma carteira diferente da minha na conta de outra pessoa. Isso não deve ser permitido. Isso funciona. Então, vamos realmente mudar para a pessoa certa. Então, vamos realmente pegar o endereço dessa pessoa e depositar um éter também. Então, vou clicar em depositar. E eu não mudei o endereço, então certifique-se de mudar o endereço. Então clique em depositar. Certo. Então, temos que locatários com duas bicicletas verificadas em cada um. locatário depositou dinheiro. Então, em mais alguns minutos, voltarei e verificaremos a bicicleta de volta e terminaremos as coisas. Tudo bem, então antes de verificarmos esses back-end, vamos realmente mudar para o proprietário. E, na verdade, agora, na verdade, antes de voltarmos , verifique os bytes de volta, vamos tentar obter o saldo do contrato com um dos locatários. Então clique em saldo de e você recebe um erro. Você não tem permissão para acessar isso. Obtenha o saldo do proprietário. Você não tem permissão para acessar isso. Então agora vamos mudar para o proprietário e ver o que é isso. Se conseguirmos o equilíbrio , temos um éter, pensei que tinha depositado outro. Vamos verificar nossos locatários e ver. O primeiro locatário ganhou. O segundo locatário não tem nenhum, então não devo ter clicado em depositar para o outro Enter. Então deixe-me fazer isso muito rápido. Ou talvez eu não tenha depositado nada e talvez eu não tenha selecionado o 1 oitavo. Então, vamos colocá-lo no outro locatário que termina em dB. Certifique-se de escolher esse locatário. E, em seguida, coloque esse éter em um e clique em depositar. Um interruptor Alpha de volta para o proprietário. Posso verificar o saldo disso para Eve. Então deixe-me realmente colocar isso aqui para acompanhar. O contrato tem que sair. O saldo do proprietário é 0. O proprietário tem 0. Aluguel ou um tem, tem, tem um éter em laranja são dois, tem um éter também. Ok, então é onde estamos e vamos testar isso. Vamos verificar essas bicicletas de volta. Então, vou escolher esta primeira renderização. Vou verificá-los de volta. Check in. E esse locatário agora tem um Mountain Dew. Então vou verificar a outra renderização. Verifique-os. E então eles devem ter a mesma quantidade. Faça incrível. Em um GAN ou saldo. Mais uma vez, deixe-me voltar para o dono. O saldo deve ser o mesmo e o saldo do proprietário ainda deve ser 0. Então, vamos ver o que acontece quando fazemos um pagamento. Fazemos um pagamento que o saldo do contrato inteligente não deve mudar. Ele deve apenas trocar as mãos para o saldo do proprietário. Então este locatário aqui, aluguel ou dois O's, tanto cinco para muitos zeros. Então, vamos copiar isso e fazer esse pagamento. Então, vou pegar esse valor. Eles têm cinco, fazem quantos zeros, não precisamos vir aqui e adicionar esse valor aqui em cima. Porque agora, na função make payment aceitamos como segundo argumento. Então vou colocar isso e, em seguida, o primeiro argumento foi o endereço da carteira deles. Então, vamos seguir em frente e fazer o pagamento. Portanto, faça o pagamento e só posso gerenciar minha conta. Então, deixe-me mudar para a conta certa. Aqui vamos nós. Vou seguir em frente e fazer o pagamento. E você vê agora do que quando clico em locatários, eles não têm nada a ver. Mas eles tinham que cinco no entanto, muitos zeros deduzidos de seu saldo. Agora esse valor, que cinco, no entanto muitos devem agora fazer parte do saldo do proprietário. Então deixe-me voltar para o dono. Na verdade, deixe-me fazer essas mudanças aqui. Então, o saldo agora para aluguel ou um é tanto 995. Eles tiveram cinco tudo o que for deduzido dele. E se eu mudar para o dono agora, eu deveria ter essa quantia em minha posse. Então mudei para o proprietário. Vou clicar no saldo do e é o mesmo, nada mudou. Foi o que consertamos porque antes estávamos adicionando ao saldo e deduzindo da contagem de Eric, o que é errado. Então, o saldo do ainda é o mesmo. Obtenha o saldo do proprietário, vamos clicar nisso e há esse valor. Então agora o dono tem tanto. E se você adicionar isso com aluguel ou um, voltamos a este para quantos zeros, então sabemos que está funcionando, tudo está funcionando muito bem. E acho que é isso. Nós testamos que é locatário. Testamos apenas os contratos de proprietário e EHR funcionando bem. Então, agora tudo o que temos que fazer é que eles são contratos inteligentes mudados, temos que realmente reimplantá-lo. Então, vamos fazer isso para obter um novo contrato. Isso é muito simples. Basta voltar para o aplicativo, parar o servidor, sair da pasta do cliente para a pasta do contrato. Antes de reimplantarmos, na verdade temos que compilar esse novo contrato. E, de fato, deixe-me copiá-lo daqui apenas para ter certeza de que tenho as últimas alterações. Então copie isso no meu contrato, salve-o e precisamos recompilar, atualizar esta pasta de artefatos com novas ABIs de bytecode, todas essas coisas boas. Então, basta fazer NP x, capacete, compilar. Impressionante compilado um arquivo Solidity com sucesso. Agora vá para sua pasta de artefatos, contrai por alma de pontos de corrente e escolha o ponto de corrente de bicicleta json. A primeira coisa que queremos fazer é pegar toda essa ABI novamente a partir do colchete dois, copiar e colá-lo em nosso ponto de configuração json em nossa pasta do cliente. Pegue tudo isso e cole isso. Então precisamos atualizar o endereço do contrato. Então, primeiro precisamos implantá-lo. Então isso é NP x hardhat run e, em seguida, os scripts cortam o exemplo script.js. E, em seguida, para sua rede, escolha test net para reimplantar. Então clique em Enter. Quando fazemos isso, temos um novo contrato. Em um novo aplicativo. Basicamente. Lá está a corrente de bicicleta implantada neste endereço. Então, copie isso e cole-o no endereço do contrato. Salve e você está bem. Então cd dot dot cd client e , em seguida, yarn execute dev e devemos ter um novo aplicativo. Vou para localhost 3 mil e, na verdade, vou desconectar minha carteira dela para começar, para desconectar essa conta e atualizar a página. Escolha minha bicicleta e diz: Bem-vindo, por favor, insira seu nome e sobrenome. Então deixe-me conectar minha carteira primeiro. Conecte-se. Tudo bem. Digite meu nome para se registrar como locatário. Teste Travis. Enviar. Implante isso. Incrível. Vamos creditar a conta com o 0.1 B & B. Aí está. 0,1 apenas por chutes. Vamos tentar verificar em uma bicicleta que nunca verificamos e recebemos esse aviso aqui. Por favor, confira uma bicicleta primeiro. Isso ainda está funcionando. Agora vamos conferir uma bicicleta e confirmar. E uma vez feito isso, devemos ficar verdes aqui porque suas motos foram verificadas. Ainda pendente. Aí está ele. Somos verdes. Então, parece que nosso aplicativo está funcionando muito bem. Temos nosso painel em ordem. Agora temos cheques para que as pessoas só possam modificar suas próprias contas. E temos mensagens aparecendo para exibir erros que recebemos de instruções require. E isso é tudo que tenho para você. Espero que você tenha gostado muito desse curso. Se você está procurando mais coisas para fazer aqui, uma coisa que seria divertida é colocar um item de navegação aqui, como um item de menu que diz admin, que aparece se o proprietário fizer login. Como eu pensei em fazer isso, mas não quero manter o curso indo e indo e indo. Você já percorreu um longo caminho. Mas se digamos que desde que sou o proprietário, eu implanto esse endereço de contrato, sou o proprietário. E já temos as funções em vigor em um contrato inteligente. Assim, você pode colocar um ou você pode querer adicionar uma função chamada is owner. E então você pode verificar como se essa pessoa é a proprietária. caso afirmativo, coloque um item de menu de administração aqui e quando você clicar nele, haverá dois formulários. Um em que você pode clicar e verificar seu saldo, um em que você pode retirar o saldo e você deve saber 100 por cento como fazer isso porque fizemos isso aqui e fizemos isso aqui. E no contrato inteligente que já está em vigor, já construímos a função. Acabamos de atualizar o contrato e reimplantá-lo, então ele está lá. Então esse é o meu desafio para você. Isso será muito divertido de acompanhar. Mas, neste momento, temos um aplicativo totalmente funcional. Fizemos muito trabalho. Você deve parabenizar-se. Sinta-se à vontade para ajustar isso para torná-lo mais limpo. Adicione mais alguns recursos a ele, alguns CSS melhores, o que quer que você queira fazer, empurre-o para o GitHub e mostre para o mundo. Mais uma vez. Obrigado por pegar este curso e seguir comigo enquanto eu juntei essa coisa. Se você gostou, considere deixar um comentário ou me enviar uma mensagem, me dizendo se você gostou ou se você tem alguma coisa, gostaria de ver feito melhor no futuro. Adoraria ouvi-lo. Então, novamente, obrigado por passar por este curso comigo. Agora fale com você mais tarde. 10. Recursos bônus do Proprietário: Então, aqui está um projeto de bônus para você. O que vamos fazer é criar um painel para o proprietário. O proprietário seria capaz de visualizar o saldo do contrato, seu saldo, o saldo do proprietário e seria capaz de retirar o saldo do proprietário. Então, parece assim. Estou logado como não o proprietário. E se eu for ao administrador do traço, vou ter uma página que diz que o acesso negado. Então, o que você quer fazer é criar uma rota chamada slash admin. E se você não for o proprietário, basta ver o acesso negado. Agora, se você é o dono, deixe-me desconectar isso. E vou conectar a conta do proprietário. Agora, você deve ver um painel. Portanto, esta página é como o painel que temos aqui. Há um título, há alguns cartões de estatísticas e, em seguida, há um formulário. Então é a mesma coisa aqui. Então, se eu voltar ao administrador, tenho um título, ele tem alguns cartões de estatísticas e, em seguida, tenho um formulário sem campos de texto é apenas um botão. E o que faremos aqui é que teremos o saldo do proprietário, teremos o saldo total do contrato. E então, quando retirarmos, retire esse saldo do proprietário para nossa carteira. E como o saldo do proprietário faz parte de todo o saldo do contrato, devemos ver essa mudança para 0,18. Então, vamos experimentar isso. Então, está processando. Tudo bem, então retirei meu 0,01 B&B no saldo do meu contrato agora é 0,18. Então esse é o seu desafio. Se você está meio esgotado do projeto, você tem trabalhado duro nisso e está pronto e nem quer lidar com isso, não se preocupe com isso. É bônus. Mas eu acho que é importante se você puder, fazer isso porque um, um proprietário precisa ser pago, certo? Ele está construindo receita com esses alugueres de bicicletas. Ele precisa ser capaz de ser pago por isso. Segundo, esta é uma ótima oportunidade para você tomar tudo o que aprendeu neste curso e fazer algo sem qualquer assistência. Então pegue todas essas habilidades que você aprendeu e tente fazer isso sozinho. Agora, abaixo deste vídeo, coloquei alguns passos para ajudá-lo. Como alguns passos que você deve tomar para fazer isso. E, finalmente, postei um link para o branch no GitHub com essas alterações de código que você pode verificar, mas não veja isso até terminar. Tente tentar isso. De qualquer forma. Acho que você vai achar muito divertido. Então, tenha nisso.