这是LSP3Account合同:https://github.com/lukso-network/standards-implementations/blob/master/contracts/Accounts/LSP3Account.sol
我想在Remix上建立一份继承它的合同。我试过这个:
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) {
}但结果是:未找到@openzeppelin/contracts/introspection/ERC165.sol
因此,我在Remix中复制并粘贴了整个LSP3Account.sol合同,试图手动修复导入。
我认为,一旦这些导入被修复,我最终将能够从LSP3Account合同继承。
但是,当我修复ERC165.sol导入时,出现了另一个导入错误(UniversalReceiverDelegate.sol)。
一旦修复了这个问题,就会出现另一个导入错误(UniversalReceiver.sol)。我也修好了。
但我的进口开始失控。这是我档案的顶部。我使用OLD和NEW标记固定进口:
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 {但是你猜怎么着,现在我得到了一个错误:找不到@openzeppelin/contracts/cryptography/ECDSA.sol
这个新的导入错误甚至不是来自LSP3Account合同。这是它继承的合同之一。
我看到的唯一解决方案是复制和粘贴整个继承树,并修复自下而上的导入。但这似乎复杂得离谱。
我还知道我可以在本地克隆项目,运行npm install,所有的依赖项都将被安装。但是:
所以有几个问题:
2.更重要的是,难道没有办法简化Remix上的这些继承和导入问题吗?
发布于 2021-05-19 20:38:48
您必须导入每个合同工作所需的每个包。
@openzeppelin/contracts/cryptography/ECDSA.sol这种语法用于导入本地包,但是由于在混合中没有本地包,所以您必须使用GitHub的完整路径,您已经在这里这样做了:
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/docs-v3.x/contracts/introspection/ERC165.sol"; 另一种导入方法是将每个依赖项复制粘贴到您的文件夹中,因此它可以使用'./'语法进行导入,但这将使您的工作场所变得有点混乱,而且老实说,使用GitHub路径是一种更简单、更简洁的方法。
作为记录,我强烈建议使用松露/硬帽子,这可能比混合有点困难,但对于严肃的项目来说,它在许多方面都非常有用,特别是在单元测试中,而且管理依赖关系也更容易。
https://ethereum.stackexchange.com/questions/99300
复制相似问题