Ejecución de guiones

JavaScript (JS) es un lenguaje de programación ligero, interpretado o compilado justo a tiempo con funciones de primera clase.

Remix IDE soporta la ejecución de scripts JS.

Escribir y ejecutar un script

Cree un archivo con extensión .js y ponga su lógica dentro de él. Una vez listo, hay dos formas de ejecutar este script:

  1. Haga del script el archivo activo en el editor y ejecute remix.exeCurrent() desde el terminal Remix

  2. Sólo tiene que hacer clic con el botón derecho del ratón en el nombre del script en el plugin Files Explorers y hacer clic en la opción Run. Atajo: Ctrl+Mayús+S cuando el script se muestre en el editor.

Aquí tiene un ejemplo de guión:

function test() {
  var num=12;
  if(num<10)
    console.log(num + " is less than 10");
  else
    console.log(num + " is not less than 10");
}

test();

Ejecutándolo utilizando una de las opciones mencionadas anteriormente mostrará el resultado en el terminal Remix

¿Por qué ejecutar scripts JavaScript en Remix?

  • Para imitar cómo el front-end de su dapp utilizará web3.js o ethers.js

  • Para desplegar e interactuar rápidamente con un grupo de instancias de un contrato sin pasar por la interfaz gráfica de Remix.

  • Para realizar algunas pruebas en un contrato desplegado anteriormente.

Script para desplegar un contrato

Remix acepta scripts async/await para ejecutar comandos web3.js o ethers.js. El script debe estar envuelto en una función autoejecutable.

Configurar

  1. Estos scripts necesitarán acceder al ABI del contrato. La ABI se encuentra en el archivo de metadatos del contrato. Asegúrese de que este archivo de metadatos se creará yendo al módulo Configuración y comprobando que la opción Generar metadatos del contrato está efectivamente marcada.

  2. Compilar un archivo Solidity - para generar los metadatos del contrato.

  3. En el plugin Despliegue y ejecución, elija el Entorno.

    • Los scripts asíncronos/de espera funcionan en todos los entornos: la VM Remix, el proveedor inyectado (normalmente MetaMask) y el proveedor HTTP externo.

Scripts JS en los exploradores de archivos

En la carpeta scripts de un workspace, hay 2 archivos de ejemplo: uno que utiliza web3.js y otro que utiliza ethers.js.

Compilar un contrato y ejecutar un script sobre la marcha

A menudo resulta conveniente, a la hora de redactar un contrato, ejecutar una secuencia de comandos justo después de que la compilación haya tenido éxito.

De esta forma se pueden desplegar y llamar rápidamente varios contratos para ponerlos en un estado deseado con fines de prueba.

Además, si el script contiene pruebas Mocha, éstas también se ejecutarán.

Para ello, añada la etiqueta NatSpec @custom:dev-run-script al contrato seguida de la ruta absoluta del archivo, como:

  /**
   * @title ContractName
   * @dev ContractDescription
   * @custom:dev-run-script file_path
   */
  contract ContractName {}

Cortocircuito: Ctrl+Mayús+S , al editar un archivo solidity, compilará ese archivo y luego ejecutará el script. Por el contrario, Ctrl+S sólo iniciará la compilación.

Un guión de ejemplo

El siguiente ejemplo despliega un contrato solidity llamado CustomERC20.sol. Este ejemplo utiliza la biblioteca web3.js. También se podría utilizar Ethers.js.

Para más información sobre este ejemplo, consulte: ejecución de scripts async/await

(async () => {
  try {
    console.log('deploy...')

    // Note that the script needs the ABI which is generated from the compilation artifact.
    const metadata = JSON.parse(await remix.call('fileManager', 'getFile', 'browser/artifacts/CustomERC20.json'))
    const accounts = await web3.eth.getAccounts()

    let contract = new web3.eth.Contract(metadata.abi)

    contract = contract.deploy({
      data: metadata.data.bytecode.object,
      arguments: ["Mask", "N95"]
    })

    newContractInstance = await contract.send({
      from: accounts[0],
      gas: 1500000,
      gasPrice: '30000000000'
    })
    console.log(newContractInstance.options.address)
  } catch (e) {
    console.log(e.message)
  }
})()

Si desea ver más ejemplos de scripts, consulte Scripts frecuentes.

require en scripts en Remix

require or importstatement is supported in a limited manner for Remix supported modules with Remix Scripts.

For now, modules supported by Remix are:

  • ethers

  • web3

  • swarmgw

  • chai

  • starknet

  • multihashes

  • zokrates-js

  • snarkjs

  • circomlibjs

  • @zk-kit/incremental-merkle-tree

  • @semaphore-protocol/proof

  • @semaphore-protocol/group

  • @semaphore-protocol/identity

  • @semaphore-protocol/data

  • @chainlink/functions-toolkit

  • @personaelabs/spartan-ecdsa

  • @ethereumjs/util

  • ffjavascript

  • sindri

  • remix

  • hardhat (only for hardhat.ethers object)

Para los módulos no soportados, se mostrará este error <module_name> module require is not supported by Remix IDE.