Exécution de scripts

JavaScript (JS) est un langage de programmation léger, interprété ou compilé en flux tendu, doté de fonctions de premier ordre.

Remix IDE supporte l’exécution de scripts JS.

Écrire et exécuter un script

Créez un fichier avec l’extension .js et mettez-y votre logique. Une fois prêt, il y a deux façons d’exécuter ce script :

  1. Faites du script le fichier actif dans l’éditeur et exécutez remix.exeCurrent() depuis le terminal Remix.

  2. Faites un clic droit sur le nom du script dans le plugin Files Explorers et cliquez sur l’option Exécuter. Raccourci : Ctrl+Shift+S lorsque le script est affiché dans l’éditeur.

Voici un exemple de 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.

Pourquoi exécuter des scripts JavaScript dans 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.

Compiler un contrat et exécuter un script à la volée

Il est souvent pratique, lors de la rédaction d’un contrat, d’exécuter un script juste après que la compilation a réussi.

De cette manière, il est possible de déployer et d’appeler rapidement plusieurs contrats afin de les placer dans l’état souhaité à des fins de test.

Si le script contient des tests Mocha, ceux-ci seront également exécutés.

Pour ce faire, ajoutez la balise NatSpec @custom:dev-run-script au contrat, suivie du chemin absolu du fichier, comme suit :

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

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.