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:

  1. Rendi lo script il file attivo nell’editor ed esegui remix.exeCurrent() dal terminale di Remix

  2. È 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

  1. 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.

  2. Compila un file Solidity - per generare i metadati del contratto.

  3. 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 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)

Per i moduli non supportati, verrà mostrato l’errore <module_name> il modulo richiesto non è supportato da Remix IDE.