Eseguire Script
JavaScript (JS) è un linguaggio di programmazione leggero, interpretato o compilato just-in-time con funzioni di prima classe
Remix IDE supporta l’esecuzione di script JS.
Scrivi & Esegui uno script
Crea un file con estensione .js
e metti la tua logica al suo interno. Una volta pronto, ci sono due modi per eseguire questo script:
Rendi lo script il file attivo nell’editor ed esegui
remix.exeCurrent()
dal terminale di RemixÈ sufficiente fare clic con il pulsante destro del mouse sul nome dello script nel plugin
Esplora File
e fare clic sull’opzione Esegui. Scorciatoia:Ctrl+Maiusc+S
quando lo script è visualizzato nell’editor.
Ecco uno script di esempio:
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();
Eseguirlo utilizzando una delle opzioni sopra menzionate mostrerà il risultato nel terminale di Remix
Perché eseguire script JavaScript in Remix?
Per imitare il modo in cui il front-end della tua dapp utilizzerà web3.js o ethers.js
Per distribuire e interagire rapidamente con un gruppo di istanze di un contratto senza passare per la GUI di Remix.
Per eseguire alcuni test su un contratto distribuito in precedenza.
Script per distribuire un contratto
Remix accetta script async/await per eseguire comandi web3.js o ethers.js. Lo script deve essere racchiuso in una funzione autoesecutiva.
Configurazione
Questi script dovranno accedere all’ABI del contratto. L’ABI si trova nel file dei metadati del contratto. Assicurarsi che questo file di metadati venga creato andando nel modulo Impostazioni e controllando che l’opzione Genera metadati del contratto sia effettivamente selezionata.
Compila un file Solidity - per generare i metadati del contratto.
Nel plugin Distribuisci & Esegui, scegliere l’Ambiente.
Gli script Async/await funzionano in tutti gli ambienti: Macchina Virtuale di Remix, Injected Provider (di solito MetaMask) e Provider HTTP Esterno.
Script JS negli Esplora File
Nella cartella scripts di un ambiente di lavoro, ci sono 2 file di esempio: uno che usa web3.js e l’altro che usa ethers.js.
Compila un contratto ed esegui uno script al volo
Spesso è conveniente, durante la stesura di un contratto, eseguire uno script subito dopo la compilazione.
In questo modo è possibile distribuire e richiamare rapidamente diversi contratti per impostarli nello stato desiderato a scopo di test.
Inoltre, se lo script contiene dei test Mocha, verranno eseguiti anche quelli.
Per farlo, aggiungere il tag NatSpec @custom:dev-run-script
al contratto seguito dal percorso assoluto del file, come ad esempio:
/**
* @title ContractName
* @dev ContractDescription
* @custom:dev-run-script file_path
*/
contract ContractName {}
Scorciatoia: Ctrl+Shift+S
, quando si modifica un file di Solidity, compila il file e poi esegue lo script. Al contrario, Ctrl+S avvia solo la compilazione.
Uno Script di Esempio
L’esempio seguente distribuisce un contratto solidity denominato CustomERC20.sol. Questo esempio utilizza la libreria web3.js. È possibile utilizzare anche Ethers.js.
Per ulteriori informazioni su questo esempio, vedere: esecuzione di script 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)
}
})()
Per ulteriori esempi di script, vedere Script Richiesti Frequentemente, in inglese «Frequently Asked Scripts».
require
negli script su 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)
Per i moduli non supportati, verrà mostrato l’errore <module_name> il modulo richiesto non è supportato da Remix IDE
.