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 :
Faites du script le fichier actif dans l’éditeur et exécutez
remix.exeCurrent()
depuis le terminal Remix.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
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.
Compiler un fichier Solidity - pour générer les métadonnées du contrat.
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 import
statement 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.