DEV Community

Cover image for Este es el futuro de Ethereum
Ahmed Castro
Ahmed Castro

Posted on • Updated on

Este es el futuro de Ethereum

Es muy importante estar actualizados con el blockchain, por eso en este video exploramos los ZK-Rollups. Lanzaremos e interactuaremos con un smart contract en Starknet, una solución de ethereum L2 que provee escalabilidad a nivel de protocolo. Starknet cuenta con su propio lenguaje basado en Cairo, conserva muchas similitudes con Solidity que veremos a continuación.

Dependencias

Antes de comenzar debemos instalar las dependencias.

apt install -y python3.8-venv libgmp3-dev
sudo apt install python3.8-venv
python3.8 -m venv ~/cairo_venv
source ~/cairo_venv/bin/activate
pip3 install cairo-lang
Enter fullscreen mode Exit fullscreen mode

Lanzar smart contract

Creamos un archivo y escribimos el contrato usando el lenguaje StarkNet.

contract.cairo

# Declare this file as a StarkNet contract and set the required
# builtins.
%lang starknet
%builtins pedersen range_check

from starkware.cairo.common.cairo_builtins import HashBuiltin

# Define a storage variable.
@storage_var
func balance() -> (res : felt):
end

# Increases the balance by the given amount.
@external
func increase_balance{
        syscall_ptr : felt*, pedersen_ptr : HashBuiltin*,
        range_check_ptr}(amount : felt):
    let (res) = balance.read()
    balance.write(res + amount)
    return ()
end

# Returns the current balance.
@view
func get_balance{
        syscall_ptr : felt*, pedersen_ptr : HashBuiltin*,
        range_check_ptr}() -> (res : felt):
    let (res) = balance.read()
    return (res)
end
Enter fullscreen mode Exit fullscreen mode

Compilamos el contrato.

starknet-compile contract.cairo --output contract_compiled.json --abi contract_abi.json
Enter fullscreen mode Exit fullscreen mode

Establecemos que estaremos deployando nuestro contrato en el testnet.

export STARKNET_NETWORK=alpha-goerli
Enter fullscreen mode Exit fullscreen mode

Lo lanzamos.

starknet deploy --contract contract_compiled.json
Enter fullscreen mode Exit fullscreen mode

Probarlo

Ejecutamos la función increase_balance, asegúrate de cambiar el address por el que devolvió el comando anterior.

starknet invoke \
    --address 0x0000000000000000000000000000000000000000000000000000000000000000 \
    --abi contract_abi.json \
    --function increase_balance \
    --inputs 1234
Enter fullscreen mode Exit fullscreen mode

Observamos el estado de la transacción. Asegúrate de cambar el tx hash por el que devolvió el comando anterior.

starknet tx_status --hash 0x0000000000000000000000000000000000000000000000000000000000000000
Enter fullscreen mode Exit fullscreen mode

Una vez que el estado de la transacción sea ACCEPTED_ON_L2 ejecutamos obtenemos el comando de la siguiente manera.

starknet call \
    --address 0x0000000000000000000000000000000000000000000000000000000000000000 \
    --abi contract_abi.json \
    --function get_balance
Enter fullscreen mode Exit fullscreen mode

Bono: Cairo vs Solidity

¿Te preguntás cómo se miraría este contrato si lo escribimos en Soldity? Aquí te lo dejo.

// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;

contract MyContract {
  uint balance;

  function increase_balance(uint amount) public
  {
    balance += amount;
  }

  function get_balance() returns(uint) public view
  {
    return balance;
  }
}
Enter fullscreen mode Exit fullscreen mode

Documentación Oficial

¡Gracias por ver este tutorial!

Sígueme en dev.to y en Youtube para todo lo relacionado al desarrollo en Blockchain en Español.

Top comments (3)

Collapse
 
chdgp profile image
Christian Daniel Garcia Perdigon

me gustaria comunicarme contigo para trabajar un proyecto chdgp1988@gmail.com

Collapse
 
turupawn profile image
Ahmed Castro

Hola, si aún necesitas ayuda por favor contacta a mi asistente con todos los detalles. emely@filosofiacodigo.com

Collapse
 
julianm77801546 profile image
Julian Martinez

soy seguidor tuyo de hace tiempo, como puedo hacer para comunicarme con vos? me puedes dar tu email?