Hola mundo! En Optimism [ Optimistic Rollups ]
Tags: blockchain, solidity, ethereum, layer2
Published: 2021-07-28 22:43:07

---
title: Hola mundo! En Optimism [ Optimistic Rollups ]
published: true
description: 
tags: #blockchain, #solidity, #ethereum, #layer2
cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2jk6nkz99mj30w21gmft.png
---

Optimism es una solución de Layer 2 para Ethereum que busca solucionar problemas de escalabilidad. En Optimism podemos gozar de transacciones mas rápidas y mas baratas conservando siempre a Layer 1 (Ethereum mainnet) como proveedor de seguirdad. En este tutorial lanzaremos un "Hola mundo!" en Solidity mediante Hardhat en un blockchain local en nuestra computadora. Usaremos la Optimistic Virtual Machine (OVM) en vez de la Ethereum Virtual Machine para compilar nuestro contrato.

{% youtube JNTcZYaCy3Y %}

Antes de iniciar, asegurate de tener instalado [node](https://heynode.com/tutorial/install-nodejs-locally-nvm/), [docker](https://docs.docker.com/engine/install/ubuntu/) y [docker compose](https://docs.docker.com/compose/install/).

## 1. Dependencias

```bash
npm install -g yarn hardhat
git clone https://github.com/ethereum-optimism/optimism.git
cd optimism
yarn install
yarn build
```

## 2. Optimism corriendo local

Esta parte tarda bastante así que debemos ser pacientes.

```bash
cd ops
export COMPOSE_DOCKER_CLI_BUILD=1
export DOCKER_BUILDKIT=1
sudo docker-compose build && echo Build complete
sudo docker-compose up
```

## 3. Proyecto de Hardat

Creamos un proyecto de Hardhat como cualquier otro con la diferencia que usaremos la Optimism Virtual Machin (OVM) en vez de la Ethereum Virtual Machine (EVM).

```bash
mkdir MyHardhatProject
cd MyHardhatProject
npx hardhat
yarn add @eth-optimism/hardhat-ovm
```

`contracts/MyContract.sol`
```solidity
// SPDX-License-Identifier: MIT

pragma solidity 0.7.6;

contract MyContract {
    string public hello;

    constructor()
    {
        hello = "Hola mundo!";
    }

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

`hardhat.config.js`
```js
require("@nomiclabs/hardhat-waffle")
require('@eth-optimism/hardhat-ovm')

task("accounts", "Prints the list of accounts", async () => {
  const accounts = await ethers.getSigners();

  for (const account of accounts) {
    console.log(account.address);
  }
});

module.exports = {
  solidity: "0.7.6",
  networks: {
    optimistic: {
       url: 'http://127.0.0.1:8545',
       accounts: { mnemonic: 'test test test test test test test test test test test junk' },
       gasPrice: 15000000,          
       ovm: true // This sets the network as using the ovm and ensure contract will be compiled against that.
    }
  }
};
```

## 4. Compilar, deployar y probar

Compilamos.

```bash
npx hardhat compile
```

Ingresamos en la consola.

```bash
npx hardhat console
```

Deployamos.

```js
const MyContract = await ethers.getContractFactory("MyContract")
const my_contract = await MyContract.deploy()
await my_contract.deployed()
```

Y probamos nuestro contrato.

```js
await my_contract.hello()
await my_contract.setHello("Probando...")
await my_contract.hello()
```

[Documentación oficial](https://github.com/ethereum-optimism/optimism-tutorial/tree/main/hardhat)

**Gracias por ver este tutorial!**

Sígueme en dev.to y en [Youtube](https://www.youtube.com/channel/UCNRB4tgwp09z4391JRjEsRA) para todo lo relacionado al desarrollo en Blockchain en Español.