Exécution de scripts

Remix IDE supports execution of JS & TS scripts.

Écrire et exécuter 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.

  • Faites du script le fichier actif dans l’éditeur et exécutez remix.exeCurrent() depuis le 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();

Si vous l’exécutez en utilisant l’une des options mentionnées ci-dessus, le résultat s’affichera dans le terminal Remix.

Why run scripts in Remix?

  • Pour imiter la façon dont le front-end de votre application utilisera web3.js ou ethers.js

  • Pour déployer et interagir rapidement avec plusieurs instances d’un contrat sans passer par l’interface graphique de Remix.

  • Pour effectuer des tests sur un contrat précédemment déployé.

Script de déploiement d’un contrat

Remix accepte les scripts asynchrones/attendus pour exécuter les commandes web3.js ou ethers.js. Le script doit être enveloppé dans une fonction qui s’exécute elle-même.

Mise en place

  1. Ces scripts devront accéder à l’ABI du contrat. L’ABI se trouve dans le fichier de métadonnées du contrat. Assurez-vous que ce fichier de métadonnées sera créé en allant dans le module Paramètres et en vérifiant que l’option Générer les métadonnées du contrat est bien cochée.

  2. Compiler un fichier Solidity - pour générer les métadonnées du contrat.

  3. Dans le plugin Deploy & Run, choisissez l’environnement.

    • Les scripts Async/await fonctionnent dans tous les environnements : la VM Remix, le fournisseur injecté (généralement MetaMask) et le fournisseur HTTP externe.

Scripts JS dans l’explorateur de fichiers

Dans le dossier scripts d’un espace de travail, il y a 2 fichiers d’exemple : l’un utilisant web3.js et l’autre utilisant 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.

ShortCut : Ctrl+Shift+S` , lors de l’édition d’un fichier solidity, compile ce fichier et exécute le script. En revanche, Ctrl+S ne fait que lancer la compilation.

Un exemple de script

L’exemple ci-dessous déploie un contrat Solidity nommé CustomERC20.sol. Cet exemple utilise la bibliothèque web3.js. Ethers.js peut également être utilisée.

Pour plus d’informations sur cet exemple, veuillez consulter : [exécution de scripts asynchrones/attendus] (https://medium.com/remix-ide/running-js-async-await-scripts-in-remix-ide-3115b5dd7687?source=friends_link&sk=04e650dfa65905fdab0ecd5b10513d41)

(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)
  }
})()

Pour plus d’exemples de scripts, veuillez consulter Frequently Asked Scripts.

require dans les scripts chez 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)

Pour les modules non supportés, cette erreur <module_name> module require is not supported by Remix IDE sera affichée.