首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >继承、进口和Remix

继承、进口和Remix
EN

Ethereum用户
提问于 2021-05-19 19:58:16
回答 1查看 1.1K关注 0票数 0

这是LSP3Account合同:https://github.com/lukso-network/standards-implementations/blob/master/contracts/Accounts/LSP3Account.sol

我想在Remix上建立一份继承它的合同。我试过这个:

代码语言:javascript
复制
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)。我也修好了。

但我的进口开始失控。这是我档案的顶部。我使用OLDNEW标记固定进口:

代码语言:javascript
复制
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,所有的依赖项都将被安装。但是:

  1. 我遇到了问题,因为依赖项有不同的编译器版本。
  2. 从Remix部署比从本地文件部署容易得多。

所以有几个问题:

1.我可以取消从合同继承的合同的导入吗?

2.更重要的是,难道没有办法简化Remix上的这些继承和导入问题吗?

EN

回答 1

Ethereum用户

发布于 2021-05-19 20:38:48

不,您不能避免继承导入,因为您正在继承的合同需要它。

您必须导入每个合同工作所需的每个包。

@openzeppelin/contracts/cryptography/ECDSA.sol这种语法用于导入本地包,但是由于在混合中没有本地包,所以您必须使用GitHub的完整路径,您已经在这里这样做了:

代码语言:javascript
复制
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/docs-v3.x/contracts/introspection/ERC165.sol"; 

另一种导入方法是将每个依赖项复制粘贴到您的文件夹中,因此它可以使用'./'语法进行导入,但这将使您的工作场所变得有点混乱,而且老实说,使用GitHub路径是一种更简单、更简洁的方法。

作为记录,我强烈建议使用松露/硬帽子,这可能比混合有点困难,但对于严肃的项目来说,它在许多方面都非常有用,特别是在单元测试中,而且管理依赖关系也更容易。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/99300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档