Ejecución de guiones
Remix IDE supports execution of JS & TS scripts.
Escribir y ejecutar un script
Create a file with .js
or .ts
extension and put your logic inside it. To run a script either:
Click the green play button in the upper left of the Editor.
Right click on the script name in the
File Explorers
and click on the Run option.Ctrl+Shift+S
when the script is displayed in the editor.Haga del script el archivo activo en el editor y ejecute
remix.exeCurrent()
desde el terminal Remix
Here is a sample .js 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();
Ejecutándolo utilizando una de las opciones mencionadas anteriormente mostrará el resultado en el terminal Remix
Why run scripts in 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.
Compile a contract and run a script in one click
When drafting a contract, it can be helpful to run a script just after the compilation succeeds.
With this technique, one can write some code then quickly deploy and set the state of the contracts.
The script can contains Mocha tests to be run.
In order to connect a contract with a script, add the NatSpec tag @custom:dev-run-script
to the contract followed by the absolute file path, like:
/**
* @title ContractName
* @dev ContractDescription
* @custom:dev-run-script file_path
*/
contract ContractName {}
When you are ready to deploy the code for real, remove the NatSpec comment @custom:dev-run-script
.
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
.