Ejecución de guiones

Remix IDE supports execution of JS & TS scripts.

Escribir y ejecutar un script

Create a file with .js or .ts extension and put your logic inside it. To run a script either:

  • Click the green play button in the upper left of the Editor.

  • Right click on the script name in the File Explorers and click on the Run option.

  • Ctrl+Shift+S when the script is displayed in the editor.

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

Here is a sample .js script:

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

Why run scripts in 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.

Compile a contract and run a script in one click

When drafting a contract, it can be helpful to run a script just after the compilation succeeds.

With this technique, one can write some code then quickly deploy and set the state of the contracts.

The script can contains Mocha tests to be run.

In order to connect a contract with a script, add the NatSpec tag @custom:dev-run-script to the contract followed by the absolute file path, like:

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

When you are ready to deploy the code for real, remove the NatSpec comment @custom:dev-run-script.

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.