Importación y carga de archivos fuente en Solidity

Hay dos razones principales para cargar archivos externos en Remix:

  • para importar una biblioteca o dependencia (para archivos que NO vaya a editar)

  • para cargar algunos archivos para manipularlos, editarlos y reproducirlos (para los archivos que quiera editar)

Importar una biblioteca o dependencia

When importing from NPM, or a URL (like github, an IPFS gateway, or a Swarm gateway) you do not need to do anything more than use the import statement in your contract. The dependencies do not need to be «preloaded» into the File Explorer’s current Workspace before the contract is compiled.

Los archivos cargados desde la sentencia import se colocan en la carpeta .deps del espacio de trabajo actual del Explorador de archivos.

Bajo el capó, Remix comprueba si los archivos ya están cargados en el directorio .deps. Si no es así, los obtiene a través de unpkg si se trata de una lib NPM.

He aquí algunos ejemplos de sentencias import:

Importar desde NPM

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts@4.2.0/token/ERC20/ERC20.sol";

Nota: En el ejemplo anterior, @openzeppelin es el nombre de la biblioteca npm. En el siguiente ejemplo el nombre de la biblioteca no comienza con una @ - pero Remix irá a buscar en npm una biblioteca con ese nombre.

import "solidity-linked-list/contracts/StructuredLinkedList.sol";

Importar desde una URL de Github

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v2.5.0/contracts/math/SafeMath.sol";

Debe especificar la etiqueta release (cuando esté disponible), de lo contrario obtendrá el último código de la rama master. Para OpenZeppelin Contracts sólo debe utilizar código publicado en una versión oficial, el ejemplo anterior importa de OpenZeppelin Contracts v2.5.0.

Importar desde Swarm

import 'bzz-raw://5766400e5d6d822f2029b827331b354c41e0b61f73440851dd0d06f603dd91e5';

Importar desde IPFS

import 'ipfs://Qmdyq9ZmWcaryd1mgGZ4PttRNctLGUSAMpPqufsk6uRMKh';

Importar un archivo local que no está en .deps

Para importar un archivo que NO se encuentre en la carpeta .deps, utilice una ruta relativa (./). Por ejemplo:

import "./myLovelyLovelyLib.sol";

Nota: No es posible importar entre espacios de trabajo.

Importar un archivo desde el sistema de archivos de su ordenador

This method uses remixd - the remix daemon. Please go to the remixd docs for instructions about how to bridge the divide between the browser and your computer’s filesystem.

Más información sobre la palabra clave de importación

Para una explicación detallada de la palabra clave import consulte la documentación de Solidity

Importing files for manipulation

When importing from the home tab widgets or with a remix command in the console, the files are placed in the root of the current Workspace inside a folder that shows their source - eg github or gists.

Botones de importación en la pestaña de inicio de Remix

Los botones Gist, Github, Swarm, IPFS y HTTPS son para ayudarle a introducir archivos en Remix para que pueda explorarlos.

Al hacer clic en cualquiera de los botones Importar aparecerá un modal como éste:

No es necesario encerrar la entrada entre comillas.

Carga con un comando remix en la consola

Los 2 comandos de remezcla para la carga son:

  • remix.loadurl(url)

  • remix.loadgist(id)

remix.loadurl('https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v2.5.0/contracts/math/SafeMath.sol')
remix.loadgist('5362adf2000afa4cbdd2c6d239e06bf5')

Acceso a los archivos cargados desde la pestaña Inicio o desde un comando remix

Cuando carga desde github, se crea una carpeta llamada github en la raíz de su espacio de trabajo actual. Para importar un archivo desde la carpeta github, utilizaría un comando como este:

import "github/OpenZeppelin/openzeppelin-contracts/contracts/math/SafeMath.sol";

Observe que esta sentencia import no incluye la información de versión que había en la orden remix.load(url). Así que se recomienda que utilice los métodos descritos al principio de esta página para importar dependencias que no tenga intención de editar.

Supongamos que el archivo .sol que contenía la sentencia import anterior se encuentra en la carpeta contracts. Observe que esta declaración de importación no necesitaba recorrer de nuevo a la carpeta github con una ruta relativa como: ../github.