Este es el futuro de Ethereum

Ahmed Castro - Jan 3 '22 - - Dev Community

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.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Terabox Video Player