Este es el LSP3Account
contrato: https://github.com/lukso-network/standards-implementations/blob/master/contracts/Accounts/LSP3Account.sol
Quiero crear un contrato en Remix que herede de él. Intenté esto:
pragma solidity ^0.6.0;
import "https://github.com/lukso-network/standards-implementations/blob/master/contracts/Accounts/LSP3Account.sol";
contract MyProfile is LSP3Account(msg.sender) {
}
Pero esto da como resultado: no encontrado @openzeppelin/contracts/introspection/ERC165.sol
Así que copié y pegué todo el LSP3Account.sol
contrato en Remix, para intentar arreglar las importaciones manualmente.
Pensé que una vez que se arreglaran estas importaciones, finalmente podría heredar del LSP3Account
contrato.
Sin embargo, cuando arreglé la ERC165.sol
importación, apareció otro error de importación ( UniversalReceiverDelegate.sol
).
Una vez que arreglé eso, apareció otro error de importación ( UniversalReceiver.sol
). También arreglé eso.
Pero mis importaciones comenzaron a salirse de control. Aquí está la parte superior de mi archivo. Usé OLD
y NEW
para marcar las importaciones fijas:
pragma solidity ^0.6.0;
pragma experimental ABIEncoderV2;
// interfaces
//import "../_LSPs/ILSP1_UniversalReceiver.sol"; OLD 3
import "https://github.com/lukso-network/standards-implementations/blob/master/contracts/_LSPs/ILSP1_UniversalReceiver.sol"; // NEW 3
//import "../_LSPs/ILSP1_UniversalReceiverDelegate.sol"; OLD 2
import "https://github.com/lukso-network/standards-implementations/blob/master/contracts/_LSPs/ILSP1_UniversalReceiverDelegate.sol"; // NEW 2
// modules
import "erc725/contracts/ERC725/ERC725Account.sol";
//import "@openzeppelin/contracts/introspection/ERC165.sol"; OLD 1
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/docs-v3.x/contracts/introspection/ERC165.sol"; // NEW 1
contract LSP3Account is ERC165, ERC725Account, ILSP1 {
Pero adivina qué, ahora aparece el error: no encontrado @openzeppelin/contracts/cryptography/ECDSA.sol
Este nuevo error de importación ni siquiera es del LSP3Account
contrato. Es de uno de los contratos de los que hereda.
La única solución que veo sería copiar y pegar todo el árbol de herencia y corregir las importaciones de abajo hacia arriba. Pero esto parece ridículamente complicado.
También sé que puedo clonar el proyecto localmente, ejecutarlo npm install
y se instalarán todas las dependencias. Pero:
Así que un par de preguntas:
1. ¿Puedo cancelar importaciones de contratos de los que heredo mi contrato?
2. Más importante aún, ¿no hay una forma de simplificar estos problemas de herencia e importación en el IDE de Remix?
No, no puede evitar las importaciones heredadas porque el contrato del que hereda lo necesita.
Debe importar cada paquete que se necesita para que funcione cada contrato.
@openzeppelin/contracts/cryptography/ECDSA.sol
Este tipo de sintaxis se usa para importar paquetes locales, pero dado que no hay paquetes locales en remix, debe usar la ruta completa a GitHub, ya lo hizo aquí:
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/docs-v3.x/contracts/introspection/ERC165.sol";
Otra forma de importar es simplemente copiar y pegar todas las dependencias en su carpeta, por lo que será importable con './'
sintaxis, pero eso hará que su lugar de trabajo sea un poco desordenado y, sinceramente, usar rutas de GitHub es una forma mucho más fácil y limpia de hacerlo.
Para que conste, recomiendo encarecidamente usar truffle/hardhat, puede ser un poco difícil que remix pero para proyectos serios, es muy útil de muchas maneras, especialmente para pruebas unitarias, y también, la gestión de dependencias es más fácil.