Lição 4

Interações e implantação de contratos inteligentes

Os contratos inteligentes podem interagir com outros contratos no blockchain Ethereum, permitindo chamadas de função, leitura de variáveis e a transferência de Ether ou tokens.

Interagindo com contratos externos

Os contratos inteligentes podem interagir com outros contratos no blockchain Ethereum, permitindo que chamem funções, leiam variáveis e enviem Ether ou tokens. Uma maneira de facilitar essa interação é usando Web3j, uma biblioteca Java leve para trabalhar com Ethereum. O Web3j pode gerar automaticamente código wrapper de contrato inteligente, permitindo a implantação e interação perfeitas com contratos inteligentes da JVM.

Para interagir com contratos externos usando Web3j, primeiro precisará compilar seu contrato inteligente e gerar o código de envoltório. Em seguida, pode criar e implementar seu contrato inteligente ou usar um contrato existente, tornando fácil transacionar e chamar métodos de contrato inteligente diretamente.

Eventos e registos

Os eventos são cruciais para rastrear e monitorizar a atividade de contratos inteligentes na blockchain. Eles fornecem uma maneira de emitir registos que podem ser armazenados e posteriormente recuperados por sistemas off-chain. Os eventos facilitam o rastreamento de eventos de contrato específicos ou alterações em variáveis de estado, o que é especialmente útil para dApps (aplicações descentralizadas) que necessitam de atualizações em tempo real.

Os logs são os registos emitidos pelos eventos e são armazenados na blockchain. Eles são uma parte essencial do ecossistema Ethereum, pois possibilitam uma comunicação eficiente entre contratos inteligentes e sistemas off-chain. Os logs também são indexados, facilitando a filtragem e pesquisa de eventos ou pontos de dados específicos para as aplicações.

Exemplo: Implementar um contrato inteligente usando o Remix e o MetaMask

Passo 1: Abrir o Remix IDE
Primeiro, abra o Remix IDE (https://remix.ethereum.org/no seu navegador da web.

Passo 2: Criar um novo ficheiro
Clique no botão “+” no canto superior esquerdo da IDE para criar um novo Espaço de Trabalho em branco. Em seguida, clique na Página “Novo Ficheiro” para criar um novo Ficheiro

Nomeie o ficheiro “Auction.sol”.

Passo 3: Definir o contrato
Copie e cole o seguinte código no novo ficheiro “Auction.sol”:

TypeScript// SPDX-License-Identifier: MIT// Especifique a versão Soliditypragma solidity ^0.8.0;// Defina o contrato de leilãocontrato Leilão { // Declare variáveis de estado endereço a pagar proprietário público; // O proprietário do contrato (pode cancelar o leilão) uint public startBlock; // O número do bloco em que o leilão começa uint public endBlock; // O número do bloco no qual o leilão termina string public ipfsHash; // IPFS hash para o item a ser leiloado bool public cancelado;  Se o leilão foi cancelado bool público terminou; Se o leilão terminou com o maior lance público; O lance mais alto até agora endereça-se ao maior lance público pagável; O endereço do licitante mais alto // Declarar eventos evento AuctionCanceled(); Evento emitido quando o leilão é cancelado evento HighestBidIncreased (endereço licitante, valor uint); Evento emitido quando um novo lance mais alto é definido evento AuctionEnded(endereço vencedor, valor uint); Evento emitido quando o leilão termina // Declarar mapeamento de mapeamento (endereço => uint256) saldos públicos;    Constructor function constructor() { owner = payable(msg.sender); // Defina o proprietário para o endereço que implanta o contrato startBlock = block.number; // Defina o bloco inicial para o número de bloco atual endBlock = startBlock + 40320; // Defina o bloco final para 1 semana (40320 blocos) após o bloco de início ipfsHash = ""; Inicialize o hash IPFS para uma string vazia } // Função para colocar uma função de licitação placeBid() public payable { require(block.number >= startBlock && block.number <= endBlock, "Auction is not ative."); // Verifique se o leilão está ativo require(msg.value > highestBid, "Já existe uma licitação mais elevada."); // Verifique se a nova licitação é superior à exigida pela licitação mais alta atual (!cancelada, "Leilão cancelado."); // Verificar se o leilão não foi cancelado        Se houve um lance mais alto anterior, adicione o valor do lance ao saldo se (highestBidder != address(0)) { balances[highestLicder] += highestBid;    } // Defina o novo lance mais alto e o lance mais altoBid = msg.value;        highestBidder = a pagar (msg.sender);        Emitir um evento para sinalizar um novo lance mais alto foi definido emitir HighestBidIncreased (msg.sender, msg.value);    } // Função para cancelar a função de leilão cancelAuction() public { require(msg.sender == owner, "Only the owner can cancel the auction."); // Verifique se o remetente é o proprietário require(!ended, "Auction has already ended."); // Verifique se o leilão ainda não terminou // Defina a bandeira cancelada e emita um evento para sinalizar que o leilão foi cancelado cancelado = true;        emitir LeilãoCancelado();    } // Função para terminar a função de leilão endAuction() public { require(block.number > endBlock, "O leilão ainda não acabou."); // Verifique se o leilão acabou(!cancelado, "Leilão cancelado."); // Verificar se o leilão não foi cancelado exigir(!terminou, "O leilão já terminou."); // Verifique se o leilão ainda não terminou // Defina a bandeira terminada e emita um evento para sinalizar que o leilão terminou = true;        emitir AuctionEnded(highestBidder, highestBid);        Transferir o valor de lance mais alto para o proprietário owner.transfer(highestBid);        Se houve um lance mais alto anterior, adicione o valor do lance ao saldo se (highestBidder != address(0)) { balances[highestLicder] += highestBid;        } } // Função para definir o hash IPFS para o item que está sendo leiloado função setIpfsHash(string memory hash) public { require(msg.sender == owner, "Somente o proprietário pode definir o hash IPFS."); // Verifique se o remetente é o proprietário ipfsHash = hash; // Defina o hash IPFS para o valor fornecido }}

Este código define o Leilãocontrato, que permite aos utilizadores fazerem licitações num item e termina o leilão após um período especificado. O contrato também possui uma função para cancelar o leilão e uma função para definir um hash IPFS para o item em leilão.

Passo 4: Compilar o contrato

Clique na aba "Compilador Solidity" no menu do lado esquerdo. Em "Compilar Auction.sol", clique no botão "Compilar". O contrato deve ser compilado com sucesso e você deve ver uma marca de verificação verde ao lado de "Auction.sol" no explorador de arquivos.

Passo 5: Implementar o contrato

Clique no separador “Implementar e Executar Transações” no menu do lado esquerdo. Em “Ambiente”, selecione “Web3 Injetado” como ambiente. Em “Contrato”, selecione “Leilão” como contrato a implementar. Clique no botão “Implementar”.

Passo 6: Interaja com o contrato
Uma vez que o contrato é implementado, pode interagir com ele usando as várias funções definidas no contrato. Por exemplo, pode chamar o placeBid()função para colocar uma oferta no item

Ao usar o Remix e o MetaMask, pode facilmente implementar e interagir com contratos inteligentes na rede Ethereum, permitindo o desenvolvimento e teste de aplicações descentralizadas num ambiente amigável para o utilizador.

Destacados
Os contratos inteligentes podem interagir com outros contratos na blockchain Ethereum, permitindo chamadas de função, leitura de variáveis e a transferência de Ether ou tokens.
Web3j é uma biblioteca Java leve que facilita a interação com o Ethereum. Pode auto-gerar código de invólucro de contrato inteligente para implantação e interação perfeitas com contratos a partir do JVM.
Os eventos são essenciais para rastrear e monitorar a atividade do contrato no blockchain. Eles emitem logs que podem ser armazenados e recuperados por sistemas off-chain, permitindo atualizações em tempo real para dApps.
Os registos, que são os registos emitidos pelos eventos, desempenham um papel crucial na comunicação eficiente entre contratos inteligentes e sistemas fora da cadeia. Estão indexados, permitindo a filtragem e pesquisa fácil de eventos específicos ou pontos de dados.
O exemplo fornecido demonstra o processo de implementação de um contrato inteligente usando o Remix IDE e o MetaMask. Inclui passos como criar um novo ficheiro, definir o contrato, compilá-lo, implementá-lo e interagir com as suas funções.

Exclusão de responsabilidade
* O investimento em criptomoedas envolve riscos significativos. Prossiga com cuidado. O curso não pretende ser um conselho de investimento.
* O curso é criado pelo autor que se juntou ao Gate Learn. Qualquer opinião partilhada pelo autor não representa o Gate Learn.
Catálogo
Lição 4

Interações e implantação de contratos inteligentes

Os contratos inteligentes podem interagir com outros contratos no blockchain Ethereum, permitindo chamadas de função, leitura de variáveis e a transferência de Ether ou tokens.

Interagindo com contratos externos

Os contratos inteligentes podem interagir com outros contratos no blockchain Ethereum, permitindo que chamem funções, leiam variáveis e enviem Ether ou tokens. Uma maneira de facilitar essa interação é usando Web3j, uma biblioteca Java leve para trabalhar com Ethereum. O Web3j pode gerar automaticamente código wrapper de contrato inteligente, permitindo a implantação e interação perfeitas com contratos inteligentes da JVM.

Para interagir com contratos externos usando Web3j, primeiro precisará compilar seu contrato inteligente e gerar o código de envoltório. Em seguida, pode criar e implementar seu contrato inteligente ou usar um contrato existente, tornando fácil transacionar e chamar métodos de contrato inteligente diretamente.

Eventos e registos

Os eventos são cruciais para rastrear e monitorizar a atividade de contratos inteligentes na blockchain. Eles fornecem uma maneira de emitir registos que podem ser armazenados e posteriormente recuperados por sistemas off-chain. Os eventos facilitam o rastreamento de eventos de contrato específicos ou alterações em variáveis de estado, o que é especialmente útil para dApps (aplicações descentralizadas) que necessitam de atualizações em tempo real.

Os logs são os registos emitidos pelos eventos e são armazenados na blockchain. Eles são uma parte essencial do ecossistema Ethereum, pois possibilitam uma comunicação eficiente entre contratos inteligentes e sistemas off-chain. Os logs também são indexados, facilitando a filtragem e pesquisa de eventos ou pontos de dados específicos para as aplicações.

Exemplo: Implementar um contrato inteligente usando o Remix e o MetaMask

Passo 1: Abrir o Remix IDE
Primeiro, abra o Remix IDE (https://remix.ethereum.org/no seu navegador da web.

Passo 2: Criar um novo ficheiro
Clique no botão “+” no canto superior esquerdo da IDE para criar um novo Espaço de Trabalho em branco. Em seguida, clique na Página “Novo Ficheiro” para criar um novo Ficheiro

Nomeie o ficheiro “Auction.sol”.

Passo 3: Definir o contrato
Copie e cole o seguinte código no novo ficheiro “Auction.sol”:

TypeScript// SPDX-License-Identifier: MIT// Especifique a versão Soliditypragma solidity ^0.8.0;// Defina o contrato de leilãocontrato Leilão { // Declare variáveis de estado endereço a pagar proprietário público; // O proprietário do contrato (pode cancelar o leilão) uint public startBlock; // O número do bloco em que o leilão começa uint public endBlock; // O número do bloco no qual o leilão termina string public ipfsHash; // IPFS hash para o item a ser leiloado bool public cancelado;  Se o leilão foi cancelado bool público terminou; Se o leilão terminou com o maior lance público; O lance mais alto até agora endereça-se ao maior lance público pagável; O endereço do licitante mais alto // Declarar eventos evento AuctionCanceled(); Evento emitido quando o leilão é cancelado evento HighestBidIncreased (endereço licitante, valor uint); Evento emitido quando um novo lance mais alto é definido evento AuctionEnded(endereço vencedor, valor uint); Evento emitido quando o leilão termina // Declarar mapeamento de mapeamento (endereço => uint256) saldos públicos;    Constructor function constructor() { owner = payable(msg.sender); // Defina o proprietário para o endereço que implanta o contrato startBlock = block.number; // Defina o bloco inicial para o número de bloco atual endBlock = startBlock + 40320; // Defina o bloco final para 1 semana (40320 blocos) após o bloco de início ipfsHash = ""; Inicialize o hash IPFS para uma string vazia } // Função para colocar uma função de licitação placeBid() public payable { require(block.number >= startBlock && block.number <= endBlock, "Auction is not ative."); // Verifique se o leilão está ativo require(msg.value > highestBid, "Já existe uma licitação mais elevada."); // Verifique se a nova licitação é superior à exigida pela licitação mais alta atual (!cancelada, "Leilão cancelado."); // Verificar se o leilão não foi cancelado        Se houve um lance mais alto anterior, adicione o valor do lance ao saldo se (highestBidder != address(0)) { balances[highestLicder] += highestBid;    } // Defina o novo lance mais alto e o lance mais altoBid = msg.value;        highestBidder = a pagar (msg.sender);        Emitir um evento para sinalizar um novo lance mais alto foi definido emitir HighestBidIncreased (msg.sender, msg.value);    } // Função para cancelar a função de leilão cancelAuction() public { require(msg.sender == owner, "Only the owner can cancel the auction."); // Verifique se o remetente é o proprietário require(!ended, "Auction has already ended."); // Verifique se o leilão ainda não terminou // Defina a bandeira cancelada e emita um evento para sinalizar que o leilão foi cancelado cancelado = true;        emitir LeilãoCancelado();    } // Função para terminar a função de leilão endAuction() public { require(block.number > endBlock, "O leilão ainda não acabou."); // Verifique se o leilão acabou(!cancelado, "Leilão cancelado."); // Verificar se o leilão não foi cancelado exigir(!terminou, "O leilão já terminou."); // Verifique se o leilão ainda não terminou // Defina a bandeira terminada e emita um evento para sinalizar que o leilão terminou = true;        emitir AuctionEnded(highestBidder, highestBid);        Transferir o valor de lance mais alto para o proprietário owner.transfer(highestBid);        Se houve um lance mais alto anterior, adicione o valor do lance ao saldo se (highestBidder != address(0)) { balances[highestLicder] += highestBid;        } } // Função para definir o hash IPFS para o item que está sendo leiloado função setIpfsHash(string memory hash) public { require(msg.sender == owner, "Somente o proprietário pode definir o hash IPFS."); // Verifique se o remetente é o proprietário ipfsHash = hash; // Defina o hash IPFS para o valor fornecido }}

Este código define o Leilãocontrato, que permite aos utilizadores fazerem licitações num item e termina o leilão após um período especificado. O contrato também possui uma função para cancelar o leilão e uma função para definir um hash IPFS para o item em leilão.

Passo 4: Compilar o contrato

Clique na aba "Compilador Solidity" no menu do lado esquerdo. Em "Compilar Auction.sol", clique no botão "Compilar". O contrato deve ser compilado com sucesso e você deve ver uma marca de verificação verde ao lado de "Auction.sol" no explorador de arquivos.

Passo 5: Implementar o contrato

Clique no separador “Implementar e Executar Transações” no menu do lado esquerdo. Em “Ambiente”, selecione “Web3 Injetado” como ambiente. Em “Contrato”, selecione “Leilão” como contrato a implementar. Clique no botão “Implementar”.

Passo 6: Interaja com o contrato
Uma vez que o contrato é implementado, pode interagir com ele usando as várias funções definidas no contrato. Por exemplo, pode chamar o placeBid()função para colocar uma oferta no item

Ao usar o Remix e o MetaMask, pode facilmente implementar e interagir com contratos inteligentes na rede Ethereum, permitindo o desenvolvimento e teste de aplicações descentralizadas num ambiente amigável para o utilizador.

Destacados
Os contratos inteligentes podem interagir com outros contratos na blockchain Ethereum, permitindo chamadas de função, leitura de variáveis e a transferência de Ether ou tokens.
Web3j é uma biblioteca Java leve que facilita a interação com o Ethereum. Pode auto-gerar código de invólucro de contrato inteligente para implantação e interação perfeitas com contratos a partir do JVM.
Os eventos são essenciais para rastrear e monitorar a atividade do contrato no blockchain. Eles emitem logs que podem ser armazenados e recuperados por sistemas off-chain, permitindo atualizações em tempo real para dApps.
Os registos, que são os registos emitidos pelos eventos, desempenham um papel crucial na comunicação eficiente entre contratos inteligentes e sistemas fora da cadeia. Estão indexados, permitindo a filtragem e pesquisa fácil de eventos específicos ou pontos de dados.
O exemplo fornecido demonstra o processo de implementação de um contrato inteligente usando o Remix IDE e o MetaMask. Inclui passos como criar um novo ficheiro, definir o contrato, compilá-lo, implementá-lo e interagir com as suas funções.

Exclusão de responsabilidade
* O investimento em criptomoedas envolve riscos significativos. Prossiga com cuidado. O curso não pretende ser um conselho de investimento.
* O curso é criado pelo autor que se juntou ao Gate Learn. Qualquer opinião partilhada pelo autor não representa o Gate Learn.
It seems that you are attempting to access our services from a Restricted Location where Gate.io is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Thailand, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.