Lição 4

Interacciones e implementación de contratos inteligentes

Los contratos inteligentes pueden interactuar con otros contratos en la cadena de bloques de Ethereum, lo que permite llamadas de función, lectura de variables y la transferencia de Ether o tokens.

Interactuar con contratos externos

Los contratos inteligentes pueden interactuar con otros contratos en la cadena de bloques de Ethereum, lo que les permite llamar funciones, leer variables y enviar Ether o tokens. Una forma de facilitar esta interacción es mediante el uso de Web3j, una biblioteca liviana de Java para trabajar con Ethereum. Web3j puede generar automáticamente código de envoltura de contrato inteligente, lo que permite el despliegue y la interacción sin problemas con contratos inteligentes desde la JVM.

Para interactuar con contratos externos utilizando Web3j, primero necesitará compilar su contrato inteligente y generar el código de envoltura. Luego puede crear y implementar su contrato inteligente o usar un contrato existente, lo que facilita la transacción y la llamada a los métodos del contrato inteligente directamente.

Eventos y registros

Los eventos son cruciales para rastrear y monitorear la actividad del contrato inteligente en la cadena de bloques. Proporcionan una forma de emitir registros que pueden ser almacenados y posteriormente recuperados por sistemas fuera de la cadena. Los eventos facilitan el seguimiento de eventos específicos del contrato o cambios en las variables de estado, lo cual es especialmente útil para las dApps (aplicaciones descentralizadas) que requieren actualizaciones en tiempo real.

Los registros son los registros emitidos por eventos y se almacenan en la cadena de bloques. Son una parte esencial del ecosistema de Ethereum, ya que permiten una comunicación eficiente entre contratos inteligentes y sistemas fuera de la cadena. Los registros también están indexados, lo que facilita a las aplicaciones filtrar y buscar eventos o puntos de datos específicos.

Ejemplo: Implementar un contrato inteligente utilizando Remix y MetaMask

Paso 1: Abrir Remix IDE
Primero, abra el IDE de Remix (https://remix.ethereum.org/) en tu navegador web.

Paso 2: Crear un archivo nuevo
Haga clic en el botón “+” en la esquina superior izquierda del IDE para crear un nuevo espacio de trabajo en blanco. Luego haga clic en la página “Nuevo archivo” para crear un nuevo archivo

Nombrar el archivo “Auction.sol”.

Paso 3: Define el contrato
Copia y pega el siguiente código en el nuevo archivo “Auction.sol”:

TypeScript// SPDX-License-Identifier: MIT// Especifica la versión de Soliditypragma solidity ^0.8.0;// Define el contrato de subasta Auction { // Declara las variables de estado address payable public owner; // El propietario del contrato (puede cancelar la subasta) uint public startBlock; // El número de bloque en el que se inicia la subasta uint public endBlock; // El número de bloque en el que finaliza la subasta string public ipfsHash; // Hash IPFS para el artículo que se subasta bool public cancelado;  Si la subasta ha sido cancelada por el público; Si la subasta ha finalizado uint public highestBid; La oferta más alta hasta el momento se dirige al mejor postor público pagadero; La dirección del mejor postor // Evento de declaración de eventos AuctionCanceled(); Evento emitido cuando se cancela la subasta evento HighestBidIncreased (dirección del licitador, uint importe); Evento emitido cuando se establece una nueva puja más alta event AuctionEnded(dirección ganadora, uint importe); Evento emitido cuando finaliza la subasta // Declarar mapping mapping(address => uint256) saldos públicos;    Función constructora constructor() { owner = payable(msg.sender); // Establece el propietario en la dirección que despliega el contrato startBlock = block.number; // Establece el bloque de inicio en el número de bloque actual endBlock = startBlock + 40320; // Establece el bloque final en 1 semana (40320 bloques) después del bloque de inicio ipfsHash = ""; Inicializar el hash IPFS en una cadena vacía } // Función para colocar una puja function placeBid() public payable { require(block.number >= startBlock && block.number <= endBlock, "La subasta no está activa."); // Comprobar que la subasta está activa require(msg.value > highestBid, "Ya hay una puja más alta."); // Comprobar que la nueva puja es superior a la puja más alta actual require(!canceled, "La subasta está cancelada."); // Comprobar que la subasta no ha sido cancelada        Si hubo un postor más alto anteriormente, agregue el monto de su oferta a su saldo if (highestBidder != address(0)) { balances[highestBidder] += highestBid;    } // Establece la nueva oferta más alta y el postor más altoBid = msg.value;        highestBidder = payable(msg.sender);        Emitir un evento para indicar que se ha establecido una nueva oferta más alta emit HighestBidIncreased (msg.sender, msg.value);    } // Función para cancelar la subasta function cancelAuction() public { require(msg.sender == owner, "Solo el propietario puede cancelar la subasta."); // Comprueba que el remitente es el propietario require(!ended, "La subasta ya ha finalizado."); // Comprueba que la subasta no ha finalizado ya // Establece el indicador cancelado y emite un evento para indicar que la subasta ha sido cancelada cancelada = true;        emitir AuctionCanceled();    } // Función para finalizar la subasta función endAuction() public { require(block.number > endBlock, "La subasta aún no ha terminado."); // Comprobar que la subasta ha terminado require(!canceled, "La subasta está cancelada."); // Comprobar que la subasta no ha sido cancelada require(!ended, "La subasta ya ha finalizado."); // Comprobar que la subasta no ha finalizado // Establecer el indicador de finalización y emitir un evento para indicar que la subasta ha finalizado finalizado = true;        emit AuctionEnded(highestBidder, highestBid);        Transfiera el monto de la oferta más alta al propietario owner.transfer(highestBid);        Si hubo un postor más alto anteriormente, agregue el monto de su oferta a su saldo if (highestBidder != address(0)) { balances[highestBidder] += highestBid;        } } // Función para establecer el hash IPFS para el elemento que se subasta function IpfsHash(string memory hash) public { require(msg.sender == owner, "Solo el propietario puede establecer el hash IPFS."); // Comprobar que el remitente es el propietario ipfsHash = hash; // Establecer el hash IPFS en el valor proporcionado }}

Este código define el Subasta contrato, que permite a los usuarios hacer ofertas por un artículo y finaliza la subasta después de un período especificado. El contrato también tiene una función para cancelar la subasta y una función para establecer un hash IPFS para el artículo que se está subastando.

Paso 4: Compilar el contrato

Haga clic en la pestaña "Compilador de Solidity" en el menú de la izquierda. En "Compilar Auction.sol", haga clic en el botón "Compilar". El contrato debe compilarse correctamente y debería ver una marca de verificación verde junto a "Auction.sol" en el explorador de archivos.

Paso 5: Implementar el contrato

Haga clic en la pestaña “Implementar y ejecutar transacciones” en el menú de la izquierda. En “Entorno”, seleccione “Web3 inyectado” como entorno. En “Contrato”, seleccione “Subasta” como contrato a implementar. Haga clic en el botón “Implementar”.

Paso 6: Interactuar con el contrato
Una vez desplegado el contrato, puede interactuar con él utilizando las distintas funciones definidas en el contrato. Por ejemplo, puede llamar a la función placeBid()función para realizar una oferta por el artículo

Al usar Remix y MetaMask, puedes implementar e interactuar fácilmente con contratos inteligentes en la red de Ethereum, lo que permite el desarrollo y la prueba de aplicaciones descentralizadas en un entorno fácil de usar.

Aspectos destacados
Los contratos inteligentes pueden interactuar con otros contratos en la cadena de bloques de Ethereum, lo que permite llamadas de función, lectura de variables y la transferencia de Ether o tokens.
Web3j es una biblioteca Java ligera que facilita la interacción con Ethereum. Puede generar automáticamente el código de envoltura de contratos inteligentes para una implementación e interacción perfectas con los contratos de la JVM.
Los eventos son esenciales para rastrear y monitorear la actividad del contrato en la cadena de bloques. Emiten registros que pueden ser almacenados y recuperados por sistemas fuera de la cadena, lo que permite actualizaciones en tiempo real para dApps.
Los registros, que son los registros emitidos por eventos, juegan un papel crucial en la comunicación eficiente entre contratos inteligentes y sistemas fuera de la cadena. Están indexados, lo que permite filtrar y buscar fácilmente eventos específicos o puntos de datos.
El ejemplo proporcionado demuestra el proceso de implementación de un contrato inteligente utilizando Remix IDE y MetaMask. Incluye pasos como crear un nuevo archivo, definir el contrato, compilarlo, implementarlo e interactuar con sus funciones.

Isenção de responsabilidade
* O investimento em criptomoedas envolve grandes riscos. Prossiga com cautela. O curso não se destina a servir de orientação para investimentos.
* O curso foi criado pelo autor que entrou para o Gate Learn. As opiniões compartilhadas pelo autor não representam o Gate Learn.
Catálogo
Lição 4

Interacciones e implementación de contratos inteligentes

Los contratos inteligentes pueden interactuar con otros contratos en la cadena de bloques de Ethereum, lo que permite llamadas de función, lectura de variables y la transferencia de Ether o tokens.

Interactuar con contratos externos

Los contratos inteligentes pueden interactuar con otros contratos en la cadena de bloques de Ethereum, lo que les permite llamar funciones, leer variables y enviar Ether o tokens. Una forma de facilitar esta interacción es mediante el uso de Web3j, una biblioteca liviana de Java para trabajar con Ethereum. Web3j puede generar automáticamente código de envoltura de contrato inteligente, lo que permite el despliegue y la interacción sin problemas con contratos inteligentes desde la JVM.

Para interactuar con contratos externos utilizando Web3j, primero necesitará compilar su contrato inteligente y generar el código de envoltura. Luego puede crear y implementar su contrato inteligente o usar un contrato existente, lo que facilita la transacción y la llamada a los métodos del contrato inteligente directamente.

Eventos y registros

Los eventos son cruciales para rastrear y monitorear la actividad del contrato inteligente en la cadena de bloques. Proporcionan una forma de emitir registros que pueden ser almacenados y posteriormente recuperados por sistemas fuera de la cadena. Los eventos facilitan el seguimiento de eventos específicos del contrato o cambios en las variables de estado, lo cual es especialmente útil para las dApps (aplicaciones descentralizadas) que requieren actualizaciones en tiempo real.

Los registros son los registros emitidos por eventos y se almacenan en la cadena de bloques. Son una parte esencial del ecosistema de Ethereum, ya que permiten una comunicación eficiente entre contratos inteligentes y sistemas fuera de la cadena. Los registros también están indexados, lo que facilita a las aplicaciones filtrar y buscar eventos o puntos de datos específicos.

Ejemplo: Implementar un contrato inteligente utilizando Remix y MetaMask

Paso 1: Abrir Remix IDE
Primero, abra el IDE de Remix (https://remix.ethereum.org/) en tu navegador web.

Paso 2: Crear un archivo nuevo
Haga clic en el botón “+” en la esquina superior izquierda del IDE para crear un nuevo espacio de trabajo en blanco. Luego haga clic en la página “Nuevo archivo” para crear un nuevo archivo

Nombrar el archivo “Auction.sol”.

Paso 3: Define el contrato
Copia y pega el siguiente código en el nuevo archivo “Auction.sol”:

TypeScript// SPDX-License-Identifier: MIT// Especifica la versión de Soliditypragma solidity ^0.8.0;// Define el contrato de subasta Auction { // Declara las variables de estado address payable public owner; // El propietario del contrato (puede cancelar la subasta) uint public startBlock; // El número de bloque en el que se inicia la subasta uint public endBlock; // El número de bloque en el que finaliza la subasta string public ipfsHash; // Hash IPFS para el artículo que se subasta bool public cancelado;  Si la subasta ha sido cancelada por el público; Si la subasta ha finalizado uint public highestBid; La oferta más alta hasta el momento se dirige al mejor postor público pagadero; La dirección del mejor postor // Evento de declaración de eventos AuctionCanceled(); Evento emitido cuando se cancela la subasta evento HighestBidIncreased (dirección del licitador, uint importe); Evento emitido cuando se establece una nueva puja más alta event AuctionEnded(dirección ganadora, uint importe); Evento emitido cuando finaliza la subasta // Declarar mapping mapping(address => uint256) saldos públicos;    Función constructora constructor() { owner = payable(msg.sender); // Establece el propietario en la dirección que despliega el contrato startBlock = block.number; // Establece el bloque de inicio en el número de bloque actual endBlock = startBlock + 40320; // Establece el bloque final en 1 semana (40320 bloques) después del bloque de inicio ipfsHash = ""; Inicializar el hash IPFS en una cadena vacía } // Función para colocar una puja function placeBid() public payable { require(block.number >= startBlock && block.number <= endBlock, "La subasta no está activa."); // Comprobar que la subasta está activa require(msg.value > highestBid, "Ya hay una puja más alta."); // Comprobar que la nueva puja es superior a la puja más alta actual require(!canceled, "La subasta está cancelada."); // Comprobar que la subasta no ha sido cancelada        Si hubo un postor más alto anteriormente, agregue el monto de su oferta a su saldo if (highestBidder != address(0)) { balances[highestBidder] += highestBid;    } // Establece la nueva oferta más alta y el postor más altoBid = msg.value;        highestBidder = payable(msg.sender);        Emitir un evento para indicar que se ha establecido una nueva oferta más alta emit HighestBidIncreased (msg.sender, msg.value);    } // Función para cancelar la subasta function cancelAuction() public { require(msg.sender == owner, "Solo el propietario puede cancelar la subasta."); // Comprueba que el remitente es el propietario require(!ended, "La subasta ya ha finalizado."); // Comprueba que la subasta no ha finalizado ya // Establece el indicador cancelado y emite un evento para indicar que la subasta ha sido cancelada cancelada = true;        emitir AuctionCanceled();    } // Función para finalizar la subasta función endAuction() public { require(block.number > endBlock, "La subasta aún no ha terminado."); // Comprobar que la subasta ha terminado require(!canceled, "La subasta está cancelada."); // Comprobar que la subasta no ha sido cancelada require(!ended, "La subasta ya ha finalizado."); // Comprobar que la subasta no ha finalizado // Establecer el indicador de finalización y emitir un evento para indicar que la subasta ha finalizado finalizado = true;        emit AuctionEnded(highestBidder, highestBid);        Transfiera el monto de la oferta más alta al propietario owner.transfer(highestBid);        Si hubo un postor más alto anteriormente, agregue el monto de su oferta a su saldo if (highestBidder != address(0)) { balances[highestBidder] += highestBid;        } } // Función para establecer el hash IPFS para el elemento que se subasta function IpfsHash(string memory hash) public { require(msg.sender == owner, "Solo el propietario puede establecer el hash IPFS."); // Comprobar que el remitente es el propietario ipfsHash = hash; // Establecer el hash IPFS en el valor proporcionado }}

Este código define el Subasta contrato, que permite a los usuarios hacer ofertas por un artículo y finaliza la subasta después de un período especificado. El contrato también tiene una función para cancelar la subasta y una función para establecer un hash IPFS para el artículo que se está subastando.

Paso 4: Compilar el contrato

Haga clic en la pestaña "Compilador de Solidity" en el menú de la izquierda. En "Compilar Auction.sol", haga clic en el botón "Compilar". El contrato debe compilarse correctamente y debería ver una marca de verificación verde junto a "Auction.sol" en el explorador de archivos.

Paso 5: Implementar el contrato

Haga clic en la pestaña “Implementar y ejecutar transacciones” en el menú de la izquierda. En “Entorno”, seleccione “Web3 inyectado” como entorno. En “Contrato”, seleccione “Subasta” como contrato a implementar. Haga clic en el botón “Implementar”.

Paso 6: Interactuar con el contrato
Una vez desplegado el contrato, puede interactuar con él utilizando las distintas funciones definidas en el contrato. Por ejemplo, puede llamar a la función placeBid()función para realizar una oferta por el artículo

Al usar Remix y MetaMask, puedes implementar e interactuar fácilmente con contratos inteligentes en la red de Ethereum, lo que permite el desarrollo y la prueba de aplicaciones descentralizadas en un entorno fácil de usar.

Aspectos destacados
Los contratos inteligentes pueden interactuar con otros contratos en la cadena de bloques de Ethereum, lo que permite llamadas de función, lectura de variables y la transferencia de Ether o tokens.
Web3j es una biblioteca Java ligera que facilita la interacción con Ethereum. Puede generar automáticamente el código de envoltura de contratos inteligentes para una implementación e interacción perfectas con los contratos de la JVM.
Los eventos son esenciales para rastrear y monitorear la actividad del contrato en la cadena de bloques. Emiten registros que pueden ser almacenados y recuperados por sistemas fuera de la cadena, lo que permite actualizaciones en tiempo real para dApps.
Los registros, que son los registros emitidos por eventos, juegan un papel crucial en la comunicación eficiente entre contratos inteligentes y sistemas fuera de la cadena. Están indexados, lo que permite filtrar y buscar fácilmente eventos específicos o puntos de datos.
El ejemplo proporcionado demuestra el proceso de implementación de un contrato inteligente utilizando Remix IDE y MetaMask. Incluye pasos como crear un nuevo archivo, definir el contrato, compilarlo, implementarlo e interactuar con sus funciones.

Isenção de responsabilidade
* O investimento em criptomoedas envolve grandes riscos. Prossiga com cautela. O curso não se destina a servir de orientação para investimentos.
* O curso foi criado pelo autor que entrou para o Gate Learn. As opiniões compartilhadas pelo autor não representam o Gate Learn.