Implementación de contratos de solidez en movimiento utilizando Foundry y Fractal

Este tutorial lo guiará en la implementación de un contrato inteligente de Solidity en M1 usando Fractal y Foundry.

Nuestro kit de herramientas

¿Qué es la fundición?

Foundry es una poderosa cadena de herramientas de desarrollo de contratos inteligentes para máquinas virtuales Ethereum.

¿Qué es Fractal?

Fractal es el intérprete de Movement Labs que permite a cualquier desarrollador implementar cualquier contrato inteligente de Solidity en M1, una máquina virtual basada en lenguaje Move , convirtiendo efectivamente el código de Solidity en código Move, heredando todas las propiedades de seguridad disponibles de forma nativa para los contratos inteligentes de Move.

Requisitos previos

Antes de comenzar este tutorial, deberá:

Paso 1: Financia tu billetera con tokens MOVE

Financia una dirección de billetera EVM con algunos MOVEtokens usando nuestro faucet . Otro método para obtener MOVEes conectar desde M1 a su billetera EVM usando nuestro puente . Para conectarse a nuestra testnet y verificar si ha recibido los MOVEtokens, puede seguir los siguientes pasos:

  1. Agregue la red move-evm a su billetera compatible con EVM.

    Propiedad

    Valor

    Nombre de red

    mevm

    RPC de red

    https://mevm.devnet.m1.movementlabs.xyz/v1/

    Identificación de red

    0x0150

    Moneda de la red

    MOVER

  2. Asegúrese de haber cambiado su red Wallet a la red agregada anteriormente, es decir, move-evm.

Paso 2: configura tu proyecto Foundry

Si no tienes un directorio específico para tu proyecto, crea uno y accede a él:

Copiar

mkdir foundry-move-evm

Copiar

cd foundry-move-evm

Ábrelo en tu editor favorito. Aquí estamos usando VSCode

Copiar

code .

Inicie su proyecto de fundición. Esto creará un foundry.toml, un README.md y algunas carpetas, lib, script, src y test.

Copiar

forge init

Crear un archivo .env

Copiar

touch .env

Agregue su clave privada al archivo .env. Puede obtener su clave privada de su billetera EVM con la que financió MOVE. Por ejemplo, si está utilizando MetaMask , puede encontrar su clave privada en Configuración > Avanzado > Exportar clave privada. Asegúrese de mantener segura su clave privada y nunca la comparta con nadie.

Copiar

PRIVATE_KEY=<your private key>

Paso 3: escriba su contrato de Solidity

Aquí introduciremos cambios mínimos en nuestros contratos para hacerle la vida más fácil. No hay nada intrínseco aquí que sea específico de M1. Puede redactar sus contratos como lo haría normalmente.

Debajo src/abra el archivo Counter.sol. Este es el contrato inteligente que implementará en M1. Puede reemplazar el contenido de este archivo con su propio contrato.

Copiar

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;
contract Counter {
    uint256 public number;
    function setNumber(uint256 newNumber) public {
        number = newNumber;
    }
    function increment() public {
        number++;
    }
}

Tiene una variable de estado numbery dos funciones, setNumbery incrementpuede establecer su valor numbere incrementarlo respectivamente.

Ahora, en script, abra el archivo Counter.s.sol. Este es un script simple que usaremos para implementar nuestro contrato en M1. Puede reemplazar el contenido de este archivo con su propio script.

Copiar

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;
import {Script} from "forge-std/Script.sol";
import {Counter} from "../src/Counter.sol";
contract CounterScript is Script {
    Counter public counter;
    uint256 public deployerPrivateKey = vm.envUint("PRIVATE_KEY");
    function run() public {
        vm.startBroadcast(deployerPrivateKey);
        counter = new Counter();
        vm.stopBroadcast();
    }
}

Esto implementará el contrato disponible en src/Counter.sol. Puedes jugar con él y cambiar su lógica, ¡siéntete libre de probar cosas!

Paso 4: Implemente su contrato de Solidity

Para implementar su contrato, ejecute el siguiente comando:

Copiar

forge script CounterScript --broadcast --chain-id 336 --rpc-url https://mevm.devnet.m1.movementlabs.xyz/v1 --legacy

Después de ejecutarlo, deberías ver un mensaje similar en tu consola:

Copiar

## Setting up (1) EVMs.

(...)

##### move-evm
✅  [Success]Hash: <transactionHash>
Contract Address: <contractAddress>
Block: 27547820
Paid: 0.002988132 ETH (106719 gas * 28 gwei)


Transactions saved to: /home/user/test/broadcast/Counter.s.sol/336/run-latest.json

Sensitive values saved to: /home/user/test/cache/Counter.s.sol/336/run-latest.json



==========================

ONCHAIN EXECUTION COMPLETE & SUCCESSFUL.
Total Paid: 0.002988132 ETH (106719 gas * avg 28 gwei)

Transactions saved to: /home/user/test/broadcast/Counter.s.sol/336/run-latest.json

Sensitive values saved to: /home/user/test/cache/Counter.s.sol/336/run-latest.json

¡Éxito! Ha implementado exitosamente su contrato usando Foundry. Ahora debería poder interactuar con el contrato proporcionado en el mensaje anterior.

Paso 5: interactúe con su contrato de Solidity

Ahora que tiene su contrato, también puede interactuar con él usando Foundry. Para ello, escribiremos otro guión. En script, cree un nuevo archivo Interact.s.soly agregue el siguiente contenido:

Copiar

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;
import {Script} from "forge-std/Script.sol";
import {Counter} from "../src/Counter.sol";
import "forge-std/console.sol";
contract InteractScript is Script {
    Counter public counter;
    uint256 public deployerPrivateKey = vm.envUint("PRIVATE_KEY");
    function run() public {
        vm.startBroadcast(deployerPrivateKey);
        counter = Counter(<counterAddress>);
        counter.setNumber(1);
        console.log("Number is now: ", counter.number());
        counter.increment();
        console.log("Number was incremented to: ", counter.number());
        vm.stopBroadcast();
    }
}

Asegúrese de reemplazar <counterAddress>con la dirección de su contrato implementado. Puede encontrarlo en el mensaje impreso en su consola después de implementar su contrato.

Ahora, todo lo que tienes que hacer es ejecutar el siguiente comando:

Copiar

forge script InteractScript --broadcast --chain-id 336 --rpc-url https://mevm.devnet.m1.movementlabs.xyz

Si tiene éxito, debería ver el siguiente mensaje:

Copiar

(...)

Compiler run successful!
Script ran successfully.

== Logs ==
  Number is now:  1
  Number was incremented to:  2

(...)

¡Eso es todo! Si está acostumbrado a implementar contratos en redes EVM, debería sentirse como en casa. Si no es así, esperamos que este tutorial haya sido útil y que ahora esté listo para trabajar en su contrato, implementar sus propios contratos y continuar construyendo en M1.

Si desea obtener más información sobre M1 e implementar contratos Move, consulte la documentación .

No dudes en comunicarte con nosotros en Discord si tienes algún problema, pregunta o comentario. ¡Nos encantaría saber de usted!

Last updated