Deploy de Smart Contract com Remix e MetaMask

Cripto

Deploy de Smart Contract com Remix e MetaMask

Luiz Duarte
Escrito por Luiz Duarte em 19/09/2022
Junte-se a mais de 34 mil devs

Entre para minha lista e receba conteúdos exclusivos e com prioridade

Atualizado em 04/06/2023!

Recentemente escrevi um tutorial onde ensinei como criar seu primeiro Smart Contract usando a linguagem Solidity e o editor online Remix, você confere este tutorial neste link. Uma coisa que não ensinei na ocasião é que é extremamente importante é o processo de deploy do seu smart contract na blockchain e este é o objetivo do tutorial de hoje.

O processo de fazer deploy consiste da compilação do seu contrato em bytescodes que possam ser interpretados pela EVM (Ethereum Virtual Machine) e envio esses bytecodes para um provedor distribuir aos nós da rede. O processo de compilação eu mostrei juntamente no tutorial anterior, até a parte de testarmos se deu tudo certo e um deploy fake em uma VM do próprio Remix. Agora, para enviar a um provider de blockchain existem várias formas mas a que escolhi para este tutorial aqui é usando a carteira de criptomoedas MetaMask.

Se preferir, ao invés de ler este tutorial você pode assistir a este vídeo.

#1 – Preparando a Carteira

Já falei extensivamente da MetaMask e também ensinei como criar uma gratuitamente neste tutorial aqui então vou partir do pressuposto que você já possui uma no seu browser. Se tiver dificuldade no processo, confere o vídeo abaixo.

A MetaMask não é um provider, ela é uma carteira, mas funciona conectada a um provider da Infura se não estou enganado. Usaremos a MetaMask para o pagamento da taxa de rede (gas fee) necessária ao deploy e envio dos bytecodes para o provider dela, que distribuirá nosso código pela rede.

Outro ponto importante a considerar é em qual rede você fará o seu deploy. Eu usarei aqui a Testnet da BNB Smart Chain (antiga BSC, a blockchain da Binance). Isso porque a taxa de rede dos deploys costuma ficar alta e como é apenas um contrato para fins didáticos não faz sentido gastar moedas reais com ele. Sendo assim, recomendo que configure a rede de teste da Binance pois é muito útil não apenas para este tutorial como para outras atividades usando a carteira. Para adicionar redes, você deve ir até as configurações da MetaMask e em Redes.

Os dados da rede de produção da Binance (BSC) são (obtidos no site oficial):

  • Nome da Rede: Smart Chain
  • Novo URL do RPC: https://bsc-dataseed.binance.org/
  • ID da chain: 56
  • Símbolo da moeda: BNB
  • URL do Block Explorer: https://bscscan.com

E os dados da rede de teste (Testnet), que usaremos neste tutorial, são:

  • Nome da Rede: Smart Chain – Testnet
  • Novo URL do RPC: https://data-seed-prebsc-1-s1.binance.org:8545/
  • ID da chain: 97
  • Símbolo da moeda: BNB
  • URL do Block Explorer: https://testnet.bscscan.com

Certifique-se de deixar a rede de testes selecionada como principal na sua MetaMask (repare na imagem abaixo, tipo direito) para que nosso desenvolvimento seja realizado em cima dela a fim de não gastarmos fundos com os testes. Basta deixar ela aparecendo no topo da sua carteira e em seguida copie o endereço da sua carteira de testes, que fica logo abaixo do nome da sua conta, como na imagem abaixo.

Agora, antes de sairmos fazendo deploy, nosso próximo passo é adicionarmos fundos para os testes. Você pode fazê-lo usando o Faucet da Binance no Discord. Entre no servidor deles com este convite. Uma vez no server, escolha qualquer role e vá no canal testnet-faucet usando o comando abaixo para pedir saldo:

!faucet <endereco da sua carteira>

Isso vai te fornecer 0.1 BNB . Precisaremos sempre ter BNB já que é a moeda oficial da rede e é com ela que pagamos as taxas das transações. Note que você só pode fazer isso uma vez a cada 24h e que esse saldo é completamente fake, só funciona na testnet, não pode ser transacionado nas exchanges e não pode ser sacado mas pode ser transferido entre carteiras de teste, que é o que faremos aqui.

Agora com saldo na carteira e ela apontada para a Testnet, podemos avançar para o deploy em si.

Curso Node.js e MongoDB

#2 – Fazendo o Deploy

Uma vez que sua carteira esteja devidamente configurada no seu browser, volte ao Remix para fazermos o deploy, fica na mesma aba que você fazia o deploy fake anteriormente, a última de cima para baixo.

Nesta tela, escolha o environment “Injected Provider” que provavelmente já deve ter detectado uma MetaMask no seu browser e que quando você selecionar ele vai disparar um aviso à MetaMask solicitando permissão para conexão, que você deve fornecer. Se você fornecer a permissão corretamente vai aparecer o endereço da sua carteira no campo “account” do deploy, como abaixo.

Selecione o contrato a ser feito deploy e clique no botão marrom para que o mesmo aconteça. Neste momento uma transação irá ser iniciada para envio dos bytescodes à blockchain e como em toda transação, você deverá pagar as taxas de rede usando o saldo da sua MetaMask que vai lhe informar desta cobrança, estimar o valor e lhe solicitar a confirmação.

Você confirmando, os bytescodes serão enviados para registro junto da transação, o que costuma ocorrer em poucos segundos. Para conferir basta você pegar o hash que vai receber (fica na lista de deploys, logo abaixo do botão marrom) e ir conferir no site da BSC Scan, lembrando que como é um teste, deve usar o BSC Scan Testnet que fica neste endereço. Colando o endereço/hash do seu contrato você verá se o deploy dele já foi finalizado e todos os detalhes das transações que já aconteceram com esse contrato, como abaixo.

Quando a transação de deploy estiver marcada como concluída/bem sucedida o seu contrato já está live na blockchain, ou seja, pode ser usado normal e publicamente por qualquer pessoa que possua o endereço dele, invocando todas as funções e propriedades públicas do mesmo.

#3 – Testando o Contrato

Depois que você faz o deploy na blockchain o contrato pode ser testado em produção e uma das maneiras mais simples de fazer isso é pelo próprio site da BSC Scan. Para fazer isso primeiro você terá de publicar também o código-fonte do contrato, para que ele seja verificado e possa ser testado online, o que você faz na aba Contract da tela de detalhes do contrato (mesma tela que mandei o print acima).

Clique no link “Verify and Publish”, preencha o formulário que vai abrir informando o tipo de compilador (Solidity Single File), a versão que você usou e a sua licença de código para, na tela seguinte, você informa todo o código fonte do seu contrato (copie do arquivo .sol e cole diretamente aqui) e clica em “Verify and Publish”.

Tudo estando certo a sua aba Contract da tela do contrato agora irá lhe fornecer as opções de “Read Contract” e “Write Contract”, respectivamente as operações públicas possíveis de leitura e de escrita, este último incorrendo em taxas de rede (gas fee). Atenção ao link de Reset no canto direito, ele é importante para atualizar a página pois ela não o faz automaticamente.

Para as operações de escrita você precisará pagar as taxas de rede e para isso precisará de uma carteira, certo? O site BSC Scan também se integra com a MetaMask, basta clicar no link “Connect to Web3” que fica com uma bolinha vermelha na esquerda, até que a conexão seja feita e você autorize o dapp BSC Scan na sua carteira quando solicitado.

Você então pode usar os botões azuis fornecidos para invocar as propriedades e funções públicas do contrato, fazendo seus testes em produção. Caso queira ver como ficou o meu, confira neste link. Mais tarde, você pode fazer testes usando algum dapp criado por você, como os que eu ensino a criar neste tutorial aqui pegando o ABI gerado tanto no Remix quanto no BSC Scan.

Espero que tenha gostado do tutorial, qualquer dúvida deixe nos comentários!

Quer fazer um tutorial mais avançado de programação de Smart Contracts? Dá uma olhada neste, com Truffle e Node.js ou neste de HardHat e Node.js.

Curso Bot

Olá, tudo bem?

O que você achou deste conteúdo? Conte nos comentários.

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

6 Replies to “Deploy de Smart Contract com Remix e MetaMask”

Marcos

Boa noite !!!
Primeiro gostaria muito de te PARABENIZAR pela clareza, didática e gentileza !!! Ganhou um fã !!!
Vou procurar o seu canal no youtube e me inscrever nele.

Eu fiz o contrato hello world, compilei no remix, testei no remix e fiz o deploy na BSC de teste.
Quando eu fui verificar, ele dá um erro de compilação e diz que esta diferente do bytecode.

Ja fiz a mesma operação 3 vezes e o erro é o mesmo … não da erro nenhum no remix e funciona tudo perfeitamente.

O que será que esta acontecendo?

Compiler debug log:
Error! Unable to generate Contract ByteCode and ABI
Found the following ContractName(s) in source code : Hellow
But we were unable to locate a matching bytecode (err_code_2)
For troubleshooting, you can try compiling your source code with the Remix – Solidity IDE and check for exceptions

Compiler Version: v0.8.19+commit.7dd6d404
Optimization Enabled: False
Runs: 200
ByteCode (what we are looking for):
60806040526040518060400160405280601a81526020017f6d6575207072696d6569726f20636f6e747261746f20212121210000000000008152506000908051906020019061004f929190610062565b5034801561005c57600080fd5b50610166565b82805461006e90610105565b90600052602060002090601f01602090048101928261009057600085556100d7565b82601f106100a957805160ff19168380011785556100d7565b828001600101855582156100d7579182015b828111156100d65782518255916020019190600101906100bb565b5b5090506100e491906100e8565b5090565b5b808211156101015760008160009055506001016100e9565b5090565b6000600282049050600182168061011d57607f821691505b6020821081141561013157610130610137565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6102e9806101756000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806319ff1d211461003b578063e21f37ce14610059575b600080fd5b610043610077565b60405161005091906101d0565b60405180910390f35b610061610109565b60405161006e91906101d0565b60405180910390f35b60606000805461008690610241565b80601f01602080910402602001604051908101604052809291908181526020018280546100b290610241565b80156100ff5780601f106100d4576101008083540402835291602001916100ff565b820191906000526020600020905b8154815290600101906020018083116100e257829003601f168201915b5050505050905090565b6000805461011690610241565b80601f016020809104026020016040519081016040528092919081815260200182805461014290610241565b801561018f5780601f106101645761010080835404028352916020019161018f565b820191906000526020600020905b81548152906001019060200180831161017257829003601f168201915b505050505081565b60006101a2826101f2565b6101ac81856101fd565b93506101bc81856020860161020e565b6101c5816102a2565b840191505092915050565b600060208201905081810360008301526101ea8184610197565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561022c578082015181840152602081019050610211565b8381111561023b576000848401525b50505050565b6000600282049050600182168061025957607f821691505b6020821081141561026d5761026c610273565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f830116905091905056fea26469706673582212208e65eeadd13d482b80d11a7798c97c4b644ae3ccfd9e2728a46e905f9a50ed7c64736f6c63430008070033

– vs what we got –

We tried looking for a match from the list of compiled contract bytecode outputs (as listed below), but was unable to find an exact match.

1) Hellow
60806040526040518060400160405280601a81526020017f6d6575207072696d6569726f20636f6e747261746f20212121210000000000008152506000908161004891906102ab565b5034801561005557600080fd5b5061037d565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806100dc57607f821691505b6020821081036100ef576100ee610095565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026101577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261011a565b610161868361011a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006101a86101a361019e84610179565b610183565b610179565b9050919050565b6000819050919050565b6101c28361018d565b6101d66101ce826101af565b848454610127565b825550505050565b600090565b6101eb6101de565b6101f68184846101b9565b505050565b5b8181101561021a5761020f6000826101e3565b6001810190506101fc565b5050565b601f82111561025f57610230816100f5565b6102398461010a565b81016020851015610248578190505b61025c6102548561010a565b8301826101fb565b50505b505050565b600082821c905092915050565b600061028260001984600802610264565b1980831691505092915050565b600061029b8383610271565b9150826002028217905092915050565b6102b48261005b565b67ffffffffffffffff8111156102cd576102cc610066565b5b6102d782546100c4565b6102e282828561021e565b600060209050601f8311600181146103155760008415610303578287015190505b61030d858261028f565b865550610375565b601f198416610323866100f5565b60005b8281101561034b57848901518255600182019150602085019450602081019050610326565b868310156103685784890151610364601f891682610271565b8355505b6001600288020188555050505b505050505050565b6102df8061038c6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806319ff1d211461003b578063e21f37ce14610059575b600080fd5b610043610077565b6040516100509190610227565b60405180910390f35b610061610109565b60405161006e9190610227565b60405180910390f35b60606000805461008690610278565b80601f01602080910402602001604051908101604052809291908181526020018280546100b290610278565b80156100ff5780601f106100d4576101008083540402835291602001916100ff565b820191906000526020600020905b8154815290600101906020018083116100e257829003601f168201915b5050505050905090565b6000805461011690610278565b80601f016020809104026020016040519081016040528092919081815260200182805461014290610278565b801561018f5780601f106101645761010080835404028352916020019161018f565b820191906000526020600020905b81548152906001019060200180831161017257829003601f168201915b505050505081565b600081519050919050565b600082825260208201905092915050565b60005b838110156101d15780820151818401526020810190506101b6565b60008484015250505050565b6000601f19601f8301169050919050565b60006101f982610197565b61020381856101a2565b93506102138185602086016101b3565b61021c816101dd565b840191505092915050565b6000602082019050818103600083015261024181846101ee565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061029057607f821691505b6020821081036102a3576102a2610249565b5b5091905056fe{ipfs}64736f6c63430008130033

Luiz Duarte

Alguns contratos eu também não consigo verificar manualmente, mas verificando via ferramentas como Truffle ou HardHat, funciona. Não sei dizer exatamente o motivo da sua recusa, mas pode ser alguma dependência externa, alguma coisa no constructor…Enfim, fica a dica de tentar usando as ferramentas que mencionei, tem tutorial aqui no blog.

Daniel

Opa tudo bem ?
Eu tô achando que cair em um golpe pois entrei no YouTube fiz um procedimento de uma pessoa em dois contratos agora tentei recuperar meu saldo depois de 24horas e não voltou para meu metamask segue dois

0x043c3bc8d0c9052d9936e8e3d0b58279f96610a0e0f438ab589ca85dd9786913

Esse acima coloquei 0.635538114 BNB⬆️

0x81b605bee1fbbed19e8c0709e71d9f101474d653fcd17c4533dce15830da9cf1

Esse acima coloquei 1 BNB⬆️

contratos abaixo, será q vc pode me ajudar ?
Será q eu perdi meu saldo ?
Por favor me ajude não posso perder esse capital .

Luiz Duarte

Pode ser que tenha caído em um golpe sim, recomendo que tente conversar com a pessoa que disse para fazer o procedimento pois somente ela poderá lhe ajudar (se for idônea). Caso ela não te ajude, será impossível recuperar os fundos pois as transações na blockchain são irreversíveis.

João

Olá ,
Como faz para por um logo no token?