Ejecución de guiones
JavaScript (JS) es un lenguaje de programación ligero, interpretado o compilado justo a tiempo con funciones de primera clase.
Remix IDE soporta la ejecución de scripts JS.
Escribir y ejecutar un script
Cree un archivo con extensión .js
y ponga su lógica dentro de él. Una vez listo, hay dos formas de ejecutar este script:
Haga del script el archivo activo en el editor y ejecute
remix.exeCurrent()
desde el terminal RemixSólo tiene que hacer clic con el botón derecho del ratón en el nombre del script en el plugin
Files Explorers
y hacer clic en la opción Run. Atajo:Ctrl+Mayús+S
cuando el script se muestre en el editor.
Aquí tiene un ejemplo de guión:
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();
Ejecutándolo utilizando una de las opciones mencionadas anteriormente mostrará el resultado en el terminal Remix
¿Por qué ejecutar scripts JavaScript en Remix?
Para imitar cómo el front-end de su dapp utilizará web3.js o ethers.js
Para desplegar e interactuar rápidamente con un grupo de instancias de un contrato sin pasar por la interfaz gráfica de Remix.
Para realizar algunas pruebas en un contrato desplegado anteriormente.
Script para desplegar un contrato
Remix acepta scripts async/await para ejecutar comandos web3.js o ethers.js. El script debe estar envuelto en una función autoejecutable.
Configurar
Estos scripts necesitarán acceder al ABI del contrato. La ABI se encuentra en el archivo de metadatos del contrato. Asegúrese de que este archivo de metadatos se creará yendo al módulo Configuración y comprobando que la opción Generar metadatos del contrato está efectivamente marcada.
Compilar un archivo Solidity - para generar los metadatos del contrato.
En el plugin Despliegue y ejecución, elija el Entorno.
Los scripts asíncronos/de espera funcionan en todos los entornos: la VM Remix, el proveedor inyectado (normalmente MetaMask) y el proveedor HTTP externo.
Scripts JS en los exploradores de archivos
En la carpeta scripts de un workspace, hay 2 archivos de ejemplo: uno que utiliza web3.js y otro que utiliza ethers.js.
Compilar un contrato y ejecutar un script sobre la marcha
A menudo resulta conveniente, a la hora de redactar un contrato, ejecutar una secuencia de comandos justo después de que la compilación haya tenido éxito.
De esta forma se pueden desplegar y llamar rápidamente varios contratos para ponerlos en un estado deseado con fines de prueba.
Además, si el script contiene pruebas Mocha, éstas también se ejecutarán.
Para ello, añada la etiqueta NatSpec @custom:dev-run-script
al contrato seguida de la ruta absoluta del archivo, como:
/**
* @title ContractName
* @dev ContractDescription
* @custom:dev-run-script file_path
*/
contract ContractName {}
Cortocircuito: Ctrl+Mayús+S
, al editar un archivo solidity, compilará ese archivo y luego ejecutará el script. Por el contrario, Ctrl+S sólo iniciará la compilación.
Un guión de ejemplo
El siguiente ejemplo despliega un contrato solidity llamado CustomERC20.sol. Este ejemplo utiliza la biblioteca web3.js. También se podría utilizar Ethers.js.
Para más información sobre este ejemplo, consulte: ejecución de scripts 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)
}
})()
Si desea ver más ejemplos de scripts, consulte Scripts frecuentes.
require
en scripts en 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)
Para los módulos no soportados, se mostrará este error <module_name> module require is not supported by Remix IDE
.