Instalação de Frontend | Bootcamp #EthereumRio | Guilherme Viana

Bootcamp Ethereum Rio (2023) · 16 Dec 2022 · 1:02:13

A hands-on bootcamp session builds a bare-bones React frontend that connects to MetaMask and talks to a smart contract, deliberately avoiding higher-level tooling so participants see the underlying pieces. It explains how the wallet injects a provider that reaches Ethereum nodes through an RPC service, then uses the ethers library to read the connected address and balance, call an inheritance contract's read function and send a small ETH deposit. Along the way it covers ABIs, why financial amounts use integers instead of floating point, and why a contract should zero a balance before transferring to block double withdrawals. The presenter calls the result rough and unstyled.

Speakers

Topics

From Bootcamp Ethereum Rio (2023), hosted by Ethereum Brasil.

Transcript

vamos lá pessoal vamos voltar então vocês viram que sim o hobby Já falou um pouquinho do Guilherme tive o prazer de estar com eles lá em Denver Inclusive acho que eu te conheci bem mesmo né acho que a gente não acho que foi antes não foi aquele rakatão lá que vocês fizeram do White Paper É verdade então teve um arrastão que eu era jurada e que eles até ganharam Eu votei neles inclusive e bom deixa vocês agora com Guilherme Viana Gui para nós e ele vai fazer um frontinho aqui com vocês tá bom divirta-se Bom vamos lá o que eu vou apresentar aqui vai ser basicamente o front Change mais

conhecido como site que você usa para interagir com a Então antes de antes de mais nada vamos vamos fazer o comando que dói mais aí né que é a coisa que que vai vai derrubar a internet né que é o npx como a gente o Guilherme vai inclusive usar o mesmo Smart conta de tudo a gente vai continuar no mesmo projeto você vai usar o projeto deles mesmo e daí fazer a instalação do Frontier é isso Gui

exatamente Tá bom então é lá no mesmo diretório ele já tá colocando o próximo comando que vocês vão usar lá no terminal Vou colocar aqui como bootcamp então basicamente o que que vai acontecer aqui né o react ele é uma biblioteca para você criar interfaces e o que eu planejei hoje é que a gente criasse uma interface apesar do Alex ele mostrou uma forma muito mais avançada

onde tá tudo incorporado ali tudo pronto para você começar a criar uma interface e eu quero fazer ao contrário eu quero mostrar a forma mais crua de você fazer uma interface que integra com metames que e você consegue usar ela para interagir com contratos porque eu decidi por esse caminho porque Imagino que se você conhece o princípio de como funcionam as coisas mais tarde mais tarde fica mais assim se você colocar outras ferramentas por cima para

adiantar seu trabalho melhor se vocês já sabem o princípio então fica tranquilo aqui no meu foi rápido não sei não como é que como é que tá indo é bom vamos lá né aí depois disso vocês vão mudar para pasta né que no meu caso o aliás eu vou migrar isso daqui e vou começar a usar no e vou começar a usar no meu editor de texto então basicamente o Create react vai criar esse essa estrutura aqui de diretórios uma outra coisa que que é interessante

adicionar eu tenho que terminar aqui que eu vou que eu vou dar um no etters esse éters para você lidar com a blockchain do Tá bom vamos vamos dar uma revisada aqui enquanto não sei se vocês estão com problema na internet mas vamos dar uma revisada aqui o que que acontece como que é a característica de uma aplicação web que interage com a blockchain Bom basicamente

você tem seu browser né onde você vai ter o seu rodando você vai instalar o metamesk ou alguma outra White que a gente vai mostrar o metamesc e o meta Magic basicamente ele vai fazer ele vai colocar ele vai depois que você instala o seu meta Magic ele vai injetar no seu no seu browser esse Windows que é basicamente o endpoint para você interagir com a blockchain como que isso acontece o metamesc por detrás ele vai conversar com em fura

ele vem por padrão ele vem com infura porque isso aparentemente é uma coisa que seria uma coisa muito difícil de você configurar né se você é um usuário leigo Mas ele já vem com furo aqui você já pode sair usando tal mas você também pode configurar outro servidor que interage com a Block a gente chama isso de RPC que é remote por Sider call então basicamente o infra ele é um fura uma empresa que ela faz ela faz o serviço de rodar no objetivo que é basicamente cópias da blockchain do etirium Esse é o serviço muito caro muito chato

de fazer recomendo que um dia vocês façam mas por enquanto vamos vamos ao infora que ele já provei isso para gente e e é mais tranquilo então basicamente por detrás do infra ele vai estar toda vez que você pedir para ler alguma coisa aqui no front-end alguma informação que vem da blockchain ele vai usar ele vai chamar o inferno vai chamar diretamente de um modo Retiro que é basicamente uma cópia da blockchain mesma coisa para escrever se você quiser escrever se você quiser mandar algum comando que

vai escrever alguma coisa na blockchain vai fazer todo esse caminho e depois aqui no metam mais que ele vai te pedir um preço que é o preço para você escrever na blockchain também então basicamente Esse é o fluxo do de como que a gente usa aplicações da blockchain na dentro do browser agora indo mais propriamente dito para aplicação né já tá instalado aqui o éter tem um comando aqui bem

bem simples para rodar aqui acho que é mpm Ram start Beleza vou entrar na nesse app.gs e vou apagar toda essa papagaiada aqui que ele que ele queria que é basicamente essa coisa do que ele deveria pronto atualizou Vou colocar aqui uma outra coisa aqui aquele já tá atualizando tudo que eu escrevo lá no código ele já tá atualizando aqui

não sei o quão familiar vocês são com react eu vou usar uma parte do react aqui chamada hulks que é uma é uma forma de você escrever código para aplicações de beleza aqui no eu vou usar dois hulks basicamente eu preciso eu preciso deixar disponível para aplicação O provider que é que voltando lá né voltando lá é esse Windows então como eu vou fazer isso

eu vou usar é basicamente quando alguma coisa quando ele quando o react ele percebe que existe alguma coisa diferente no Browser ou alguma variável que mudou Ele ativa uma função então o que que eu quero o que que eu quero perceber de diferente eu quero perceber se eu estou num browser que tem mas tá mais que instalado como que eu percebo isso então ele vai executar essa função e eu tenho que ver aqui ó se tem Windows

tá aqui Teoricamente eu deveria colocar meu código né Eu convenientemente salvei aqui a forma de você deixa eu importar a forma de você encapsular o Window ponto ele tira de uma forma que você consiga usar com éters o éters ele você encapsula esse provider e com ele ele já tem funções que te facilitam a distanciar um contrato de por exemplo ler o balanço e tudo mais só que para eu dar um trigger no meta

mestre ele verificar para ele entender que eu estou tentando acessar porque o metamed Apesar de ele estar instalado ele não necessariamente me dá informação do usuário porque não seria um problema de segurança Então eu tenho que pedir para o meta mesc para ele falar assim ó manda uma mensagem para o usuário e fala que eu estou tentando conectar com o plugin metais que tá que tá no computador dele Então beleza aqui Eu acho que eu já tinha conectado

é uma coisa muito básica que aqui você tem que colocar o código nessa parte aqui do app [Música] aqui importei aqui use meta Mask eu acho que assim ele não vai funcionar tem que colocar esse beleza aqui atualizou e a primeira coisa que ele faz é quando ele atualiza ele fala assim ó conectar com metamesk por causa da resolução não tá dando

para o aí deixa eu só aumentar um pouquinho a resolução aqui vocês não viram mas eu conectei né eu

aqui não acho que não tava dando scroll o suficiente para para pegar aqui aí eu conectei eu vou entrar aqui no os alcovan então para usar o fogão você tem que clicar aqui né no show Hide teste Networks e vou escolher que eu quero mostrar as testes e vou colocar aqui no covan que é uma flor que eu tenho 34 héteros de mentira sou rico Beleza agora a gente até agora a gente não tá mostrando nada né vamos

eles estão eles têm até na grande eles podem fazer nada mesmo eu vou fazer no covar porque eu não tenho na guarnley mas se quiser põe o endereço colocar aqui meu endereço bom

estou fazendo no kovan mas passa na rede então acho que não tô conseguindo conectar aqui no prédio ok eu vou fazendo vocês fazem a mesma coisa Ok já tá já tá conectando meta mais ver esse reconhece accounts que é

basicamente você pede Quais são as contas que aquele usuário tem no meta Magic e assim você pode você não precisa você quando você desenvolve o site você tem que entender que você talvez você não tá tendo todas as contas que aquele usuário tem esse só tá tendo as contas que o usuário deixou você ver Ok isso até então nenhum problema que eu vou fazer aqui eu vou usar o State e eu vou salvar Qual que é o provider

que tá vindo aqui né essa linha aqui ela é uma promis e significa que é uma função assíncrona que assim que ela terminar de ser rodada ela vai me ela vai me dizer quais são os quais são as contas logadas eu não preciso necessariamente saber quais são as contas lugares Eu só preciso retornar aqui o provider né então vou chamar aqui 7 provar e colocar esse provar aqui que essa que essa parte aqui do código e aqui eu coloco Hitler que que tá acontecendo aqui

então essa variável aqui ela começa com nu esse provar dele ele começa com nu assim que eu entro na página eu peço Qual que é a conta do usuário Quais são as contas vinculadas ao meta mais que dele quando depois que ele responde isso ele certo provar e retorna para o Rider aqui Então a partir de agora Isso aqui vai me retornar um vai me retornar para o vamos Vamos fazer alguma coisa com isso né então aqui no

Vou colocar aqui o endereço Então se se tem o provider né porque eu provar ele pode ser nulo enquanto não rodou né a pergunta né de qual que é o Viber essa variável vai ser nula mas assim que ela tiver respondida eu posso colocar aqui que meu endereço

ele é um certo parece que

não bom vamos criar outro Vamos criar outro outro Hulk A lógica é a mesma do do outro Hulk né vou ter um efeito esse efeito ele só vai aparecer quando tiver um provader então eu quero monitorar essa variável para quando se tiver um provar

eu chamo essa função e aqui eu dou um retorno no

zerados e eu vou usar esse daqui logo aqui abaixo passando para vou colocar um debater aqui para

entender o que que tá o que que tá acontecendo aqui Ah tá entendi então o que que

a promis é esse sinner get address aí aqui vai retornar o endereço Então beleza esse daqui é o endereço mesmo que eu coloquei aqui no que eu autorizei né o site a saber né Outra coisa que eu posso fazer também é colocar aqui também o eu posso colocar aqui meu balanço né

que a quantidade de héteros que eu tenho Então vou retornar duas coisas agora eu vou usar uma fórmula aqui para formatar

[Música] e aqui eu coloco mais como vai ter o momento onde não vai ter o meu balanço porque a promessa não vai ter retornado né é um código assim eu vou colocar aqui se tem o mais Balance ele vai mostrar uma bala senão ele não vai mostrar nada vamos ver aqui pronto 347193 que é o que eu tenho aqui ele tá redondando Ok vamos vamos

então aqui basicamente que eu tô mostrando né primeiro eu tô mostrando aqui que ele tá conectado com a minha Wallace segundo que eu tô mostrando que ele tá puxando a quantidade de dietas que eu tenho na no meu endereço mas é mais interessante você ver algum outro contrato vamos vamos tentar usar o contrato um contrato com o Robin tinha tinha feito de

manda o endereço aí para mim ok então basicamente o Robin criou um

contrato é um contrato bem simples que é uma é um contrato de inventário então Digamos que você Digamos que você um dia vai morrer isso pode acontecer com todo mundo né só que um dos problemas Um dos problemas com Cristo é cara é muito difícil de passar cripto para as próximas pessoas né já pararam para pensar nisso você perde a sua si de frase e seus filhos não não recupera aquela sede fez acabou o dinheiro vai estar para sempre trancado lá e ninguém vai saber que ele existe ou pior alguém pode saber que ele existe e não e você não conseguir passar

para frente né então basicamente o que que esse inventário faz você como uma pessoa que está se precavendo você coloca um uma quantidade de fundos você diz para quem quem vai receber esses Fundos e quanto só que a pessoa não pode retirar imediatamente se ela pudesse retirar imediatamente é basicamente ela tá te roubando Então qual que é a lógica que a gente colocou aqui é uma lógica onde ela só pode retirar a partir de uma certa data essa data tá escrito aqui nessa data

retirada que a gente colocou no Construtor então um dos cheques que a gente faz é a data precisa estar no futuro né Não pode ser uma data no passado Tem uma função aqui que é a função onde o eu não sei qual que é o nome dessa pessoa tem o herdeiro e a pessoa que que cria a herança é quem Qual que é o nome disso o cabeça branca é isso aí Então velho da lancha foi lá daí ele Adiciona os Fundos e você que é o herdeiro você vai fazer o saque

basicamente é a função peba onde ele tá mandando éter para dentro do contrato ele vai salvar nesse map aqui você diz né Qual que é o para qual herdeiro você tá enviando aqui dentro vai ter um registro né de paradeiro que tava mostrando e e a parte do Herdeiro é essa daqui né Essas duas partes aqui primeiro uma função Onde você consegue consultar suas heranças para ver se você de fato vai

ser contemplado né você coloca o seu endereço aqui e você fica sabendo o número que é o valor de quanto você pode você poderia tirar no futuro esse desse contrato e aqui é o saque onde você de fato faz o saque da herança se você Obviamente você precisa Messenger é o endereço da onde você tá chamando o contrato né então por exemplo se seria no caso seria esse endereço né então ele vê olha dentro do Map ver se tem alguma coisa depositada para

mim e se não tem ele responde você não é o herdeiro a outra condição é eu só posso sacar depois a data de retirada e aqui tem uma coisa interessante é mais uma questão de segurança na verdade é interessante que você sempre atualize antes e faça a transferências depois porque porque se você fizer nessa ordem Lembrando que a gente não sabe o que que

é esse esse endereço esse endereço aqui ele pode ser um outro contrato não necessariamente é um outro metamesk inclusive você pode dizer que um esse você pode colocar herança para um outro contrato que também tem uma herança e que divide para mais pessoas um endereço ele ele é só um ele é só a quantidade de bytes ele não necessariamente ele tá falando assim óbvio que tem formas de você saber se no endereço tem um contrato ou se ou se não é um contrato

Mas é uma coisa interessante você poder interagir com você poder interagir com outros contratos só que esse contrato pode ser malicioso nesse caso aqui Esse contrato ele pode ter uma sacanagem porque esse contrato ele pode chamar enquanto você está chamando essa função ele pode chamar essa função de novo de saque E aí o que que aconteceria o que que iria acontecer Se Essa ordem dessas linhas tivesse trocada você vai conseguir sacar duas vezes E aí o seu saldo Digamos que o meu saldo aqui fosse sei lá 400 Na verdade eu fiz errado Digamos que

Então vamos lá esse herança não sei o que tem 400 só que Digamos que não seja esse aqui não seja o meu endereço esse aqui na verdade seja o endereço do contrato Então você consegue colocar no contrato que toda vez que alguém te transferir alguma coisa você executa uma outra coisa e se você pode executar uma outra coisa Por que que você não chama esse saco aqui porque se você chamar de novo o saldo vai estar 400 então você pode sacar 800 então o que que é interessante aqui para a gente

nos proteger né porque herança é uma coisa complicada né se você se você facilitar para os outros também é Então você zera o saldo antes porque é como se você estivesse dizendo Ok você vai sacar então zero o seu saldo para você não conseguir sacar duas vezes E aí eu te transfiro Ok o contrato é esse beleza vamos interagir com esse contrato então a receita do bolo aqui é

copiar Cola que eu vou chamar é só esse daqui de 11 inventário aí você me complica né mas faz um covan eu vou colocar meu endereço Então não precisa não [Música]

ansiedade né aí você abre o você abre o éter Scan e fica aqui ó dando refresh refresh aí sabe o que acontece eles gravam seu IP nada de graça nesse mundo ainda fala essa pessoa é esse IP porque ela tá muito interessada eu vou salvar aqui o contrato

deixa eu ver se já não precisa Beleza já chegou aqui eu vou mudar isso aqui para os inventários e aqui eu vou receber meu é praticamente o mesmo código desse

daqui ó vou até copiar e colar essa parte Lembrando que eu tô fazendo eu estou fazendo as coisas do jeito mais porco e rápido possível tá isso aqui não é o final isso aqui é o começo e aí vocês podem levar isso aqui para casa e ver como é que vocês melhoraram aí melhorariam isso até porque também não tem nenhum estilo aqui tá completamente horrível eu coloquei aqui abi O que que é uma abi

[Música] acabei basicamente uma interface onde ela explica para o éters Como que você interage com um contrato então basicamente isso daqui esse texto todo esse texto aqui ele vai gerar um número que é como se fosse um um contrato ele tem vários é como se fosse um prédio onde tem vários apartamentos diferentes e cada apartamento desse é uma função para gerar o para você saber qual que é o qual que é o apartamento que você bate

né para você ter uma função outra ele vai usar essa string aqui e ele vai fazer um vai fazer um resto vai fazer um cálculo matemático lá que ele fala a função herança é zero x alguma coisa ele vai gerar um código de quatro bytes que é basicamente dizendo qual parte do contrato que ele vai acessar né então aqui o estancial contrato chama o o primeiro o primeiro argumento aqui se

eu não me engano é o endereço o segundo Ah tá escrito aqui esse daqui é o [Música] Lembrando que se você não tiver se você não tiver a b e você não vai assim basicamente você injetar a meia aqui fala para o éters ele montar um objeto aqui que tem essas funções né e aqui fica muito mais fácil de você chamar né a gente pode chamar contrato ponto herança é basicamente uma forma de você gerar as

assinaturas dos contratos né então eu quero saber aqui vamos voltar lá no código para pegar o Sider que é o meu próprio endereço era uma coisa muito chata sobre o react é que ele dá complicada para você usar funções A5 eu vou tentar fazer isso usando assim que a White que é a forma mais

atualizada aí mas só que isso aqui é meio que uma gambiarra mas aí depois vocês vão entender o que que aconteceu né é porque assim é muito mais fácil você usar um A5 aqui e colocar conste isso daqui eu passo o endereço né que é seria no

caso o meu e aqui eu vou ter o valor né ok em vez de provar aqui vamos colocar o valor herança aqui retornar aqui aqui e aqui é o sétimo valor herança ok

vamos ver se funciona agora aqui tem que fazer a mesma coisa aqui do

My balance Porque assim vai ter vai ter um exato um determinado momento do tempo onde não vai existir a herança aqui depois porque o valor começa como nulo né depois vem o valor da herança vamos ver tá deu um erro de um porte aqui tá essa

Esse contrato aqui eu tenho que colocar um ninho aqui na frente beleza é zero puxa o que que eu vou fazer aqui né como como qualquer pessoa pode adicionar uma herança para uma outra pessoa eu vou colocar uma herança para mim mesmo mas dessa vez eu vou começar pelo pelo botãozinho né que é mais dá mais uma aquela sensação de você tá completando as coisas né eu vou colocar aqui ó então

adicionar 0,00 [Música] certo vai ter um botãozinho aqui vamos voltar aqui e colocar e pedir para retornar uma função aqui uma das formas de você fazer essa parte do react acho que não me

lembro direito vamos ver se vamos ver se eu consigo lembrar mas uma das formas de você fazer retornar uma função aqui Deixa eu ver se eu consigo fazer usar com os States provavelmente não é a forma mais certa de fazer isso mas é colocar aqui adicionar e das e aqui eu retorno adicionar herança como que eu faço para adicionar herança

vai ser uma função assim deixa eu colocar como ok basicamente nessa função então vou ter que chamar o contrato e chamar essa outra função que é a de adicionar fundos e eu vou colocar aqui adicionar fontes para mim mesmo né que é nesse caso aqui é o address

agora é uma parte importante aqui né uma forma a forma de você mandar hétero para dentro de um contrato usando o éters que a Biblioteca né Cara eu acho sou horroroso mas enfim é uma escolha deles é basicamente você coloca um objeto no final da como o último argumento da função né e esse objeto tem um velho E no caso ali eu queria adicionar 0,001 Como que eu faço isso tem uma função que que ajuda a gente

fazer isso coloca parte e aqui eu coloco uma string 00 eu quero rodar essa função no eu quero rodar uma função porque eu acho que o Alex ele falou sobre isso ele falou como todos os números eles são mesmos números fracionados eles são tratados como inteiro dentro do contrato Então acho que eu quero rodar isso daqui é para deixar mais mais visível esse não quebrou nada

quebrou Ok só vou comentar então depois eu conserto então eu vou fazer a mesma coisa aqui eu vou colocar esse número escrever aqui esqueci uma parte interessante de

mostrar então que que tá acontecendo aqui né o éter Ele tem 12 casos decimais e significa que 0,001 é assim se você levar em consideração que um éter é um elevado a 18

então 001 ele é um seria um elevado a são três casas né então se é 15 anos sei lá exato É um elevado a 15 Então dentro do contrato vocês vão lidar com esse tipo de número aqui ó Mas como você sabe que você olha esse número você tem que interpretar como um elevado a 18 é mais ou menos essa forma que você lida com número porque que é feito desse

jeito tem uma coisa nos computadores eu não sei se vocês já viram falar de ponto flutuante o ponto flutuante é uma forma de você é fazer uma é porque assim os computadores Eles são muito ruins em interpretar interpretar números decimais o ponto flutuante é uma forma de você fazer uma aproximação para números para números decimais isso funciona assim no mundo da ciência funciona bastante porque assim Digamos que você tá fazendo um cálculo de

partículas no ar ou sei lá partículas dentro de uma solução de álcool se você errar um pouquinho não vai mudar tanto para o cálculo entendeu não imagino que a gente tá fazendo cálculo de física mas para um cálculo de financeiro é importante não ter erros de arredondamento porque vocês sabem que de grão em grãos você ficou tirando um centavo ali uma hora você faz um bolo de um erro absurdo que faz alguém perder milhões como ele mesmo como ele mesmo falou então quando a gente assim essa é uma

coisa que vocês podem levar de the fire ou para fintex quando você usa quando você tá lidando com um problema que é um problema financeiro você quer usar números inteiros só que o problema de você usar números inteiros é uma hora você tem que converter ele para um número que seja um número real né um número fracionado para almoçar para os usuários sério cara muito Ok vou tentar fazer aqui bem rápido essa conversão essa adicionar para mim mesmo

pessoal enquanto o tá fazendo aqui só lembrar vocês vocês viram que na programação amanhã é para a gente acabar também ali 15 para sete sete horas e em seguida vocês podem se programar para ficar no happy hour especial da TIM link para vocês mas vocês precisam estar com o ticket tem lá na programação para você está no Rio programação o link para vocês pegarem o ticket para continuar a noite tá bom mas aí a ideia desse happy hour é realmente assim aí a gente vai ter chopp caipirinha salgadinhos docinhos um DJ com músicas brasileiras aí um sambinha umas coisas mais dança de salão tal que a minha

praia tá bom e vamos ver se a gente arrasta uma cadeira e dança um pouquinho também tá então a gente pode ficar até às 10 horas da manhã acabou a aula um happy hour para gente não vai até muito tarde porque ainda tem aula no domingo né pessoal então é isso Espero ficar com vocês e aí eu estarei mais calma também você conversar com vocês tá bom vou tentar fazer isso da forma mais

em vez de retornar a herança que eu vou retornar o próprio contrato e vou tentar resolver as coisas lá no beleza vamos ver se vai rolar aqui

Quais as beleza eu apertei aqui o botão

depois assim eu fiz bem nas pressas mas depois eu vou disponibilizar o código e aí vocês podem ver e dar risada da minha cara e tentar melhorar o código nas suas casas mas assim eu falei que era 0,001 dieter e aqui no mercado mais que realmente foi 0,001 agora o que que a gente precisa O que que a gente precisa ver né a gente precisa ver ah Espera aí deixa eu cancelar é uma coisa que tá faltando porque eu tinha tirado aqui o valor da minha herança

aqui então o que que eu preciso ver eu preciso ver o meu balanço diminuindo e o valor da minha herança aumentando né Será que vai rolar beleza a transação foi eu vou dar uma atualizada aqui e a gente pode ver que esse aqui é óbvio que tem o valor que é o valor da é o valor da herança que foi tirado do meu do meu Balanço mas também teve o valor da que eu paguei da mineração

que eu mandei uma transação e aqui ele já tá lendo o que que tá depositado para mim que seria o que o que deveria ter eu não vou fazer a parte de de trazer de volta né de resgatar a herança Até porque eu não sei qual que é o tempo que o Robin colocou lá no contrato que eu posso sacar mas tá aí uma boa coisa para vocês melhorarem depois e treinarem em casa é isso aí se alguém tiver alguma dúvida Vamos trocar ideia depois pode ser é do hobby com Guilherme junto para eles

falarem de Finanças descentralizadas então eles até podem preparar esse código de disponibilizar no github amanhã ele só passa um link para vocês darem uma olhadinha tá bom e bom é um como eu falei para vocês assim é um prazer gigante tá fazendo esse curso acho que é uma super realização eu Espero realmente que a gente tenha mais desenvolvedores no mercado estamos preparando vocês para isso com uma base de cada coisa eu sei que é muito conteúdo e também a gente vai cansando mais no final do dia amanhã 9 horas vamos tentar começar pontualmente 9 horas faça uma credenciamento um pouquinho antes para a gente não atrasar que hoje eu corri para caramba na parte da manhã não fiz tudo que eu queria com

vocês e aí a gente vai ter mais tempo para aproveitar todo o conteúdo Tá bom boa noite para vocês Bom descanso Até amanhã e palmas para mim [Aplausos] e obrigada aos nossos voluntários monitores assistentes a todo mundo que ajudou o amiguinho que continuamos assim