No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Intercomunicación entre capas

6/10
Recursos

La verdadera magia de los protocolos de segunda capa está en la total compatibilidad con la blockchain subyacente. Toda la información que se genera en un contrato en Capa 1, puede ser enviada a Capa 2 (y viceversa) por medio de un bridge.

¿Cómo se comunican contratos en diferentes capas?

Así como puedes utilizar los bridges entre Capa 1 y 2 para mover fondos, también puedes utilizarlos para enviar datos, ejecutar funciones entre contratos u obtener información.

Estos puentes no dejan de ser contratos inteligentes desplegados en Capa 1, que permiten comunicarte con contratos en Capa 2. Debemos localizar estos contratos en la red en donde nos encontremos para poder utilizarlos. Por ejemplo, sin nos encontramos en la testnet Goerli, en la misma encontraremos el contrato 0x5086...bE294 que representa el bridge con la testnet de prueba de Optimism.

Intercambio de mensajes entre capas

Para ejecutar una función en un contrato desplegado en Optimism desde Ethereum Goerli, comienza desplegando en L2 el contrato en cuestión que quieres ejecutar desde L1.

```c // SPDX-License-Identifier: MIT pragma solidity 0.8.17;

contract HelloWorld { string public hello = "Hola mundo!";

function setHello(string memory hello_) public {
    hello = hello_;
}

} ```

Un sencillo contrato para persistir un mensaje del tipo string. Para desplegarlo en Optimism, necesitarás fondos que puedes obtener utilizando este bridge para enviar algo de ETH desde Goerli. También tendrás que agregar la red a tu Metamask, puedes hacerlo desde el explorador de Optimism Goerli.

A continuación, sitúate en Remix, o en tu entorno de desarrollo preferido, para desplegar un contrato en L1. El contrato que se comunicará con la L2 será el siguiente:

```c // SPDX-License-Identifier: MIT pragma solidity 0.8.17;

interface CrossDomainMessenger { function sendMessage(address _target, bytes memory _message, uint32 _minGasLimit) payable external; }

contract HelloWorldOperatorL1 { // Instanciamos el bridge con su dirección CrossDomainMessenger ovmL1CrossDomainMessenger = CrossDomainMessenger(0x5086d1eEF304eb5284A0f6720f79403b4e9bE294);

function executeFuncionInL2(address l2ContractAddress, string memory hello_, uint32 gasLimit) public {
    ovmL1CrossDomainMessenger.sendMessage(
        l2ContractAddress,
        abi.encodeWithSignature(
            "setHello(string)",
            hello_
        ),
        gasLimit
    );
}

} ```

Si observas en detalle el bridge, 0x5086...bE294, la función sendMessage() te permitirá ejecutar una función en un contrato en L2.

Para esto, hacemos uso de una interfaz custom en nuestro contrato llamada CrossDomainMessenger para instanciar el puente y que reconozca la función sendMessage(). Luego, utilizamos el objeto abi que nos ayudará a encriptar el mensaje y enviarlo a L2 cuando se ejecute la función executeFuncionInL2.

Despliega este contrato en L1 y, al ejecutar la función mencionada, podrás observar el cambio del mensaje que guardamos en el contrato de la segunda capa. Esta transacción debe confirmarse en ambas capas, por lo que demorará algunos minutos en verse reflejado los cambios.

Hemos realizado un muy sencillo ejemplo para enviar un mensaje de texto desde Capa 1 hacia Capa 2. Pero con esto es suficiente para apreciar lo poderoso e interesante que puede ser la comunicación de contratos en diferentes capas.


Contribución creada por: Kevin Fiorentino.

Aportes 2

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

<https://chainlist.org/?chain=421614&search=sepol&testnets=true> Dejo una pagina que tiene lista de chains incluyendo testnet, para agregar a metamask

El contrato 0x5086d1eEF304eb5284A0f6720f79403b4e9bE294 es el bridge entre Ethereum y Optimisms en Goerli. Por aquí encontré algunos contratos de Optimism para construir los puentes con Ethereum.