当前位置: 首页 > 知识库问答 >
问题:

当Smartcontract包含Openzeppelin导入时,无法生成.abi和.bin文件

岳安福
2023-03-14

我开始使用web3j,我想生成智能合同包装。根据文档,可以这样做:

web3j generate solidity -b /path/to/<smart-contract>.bin -a /path/to/<smart-contract>.abi -o /path/to/src/main/java -p com.your.organisation.name

这非常有效。您需要.bin和.abi文件。使用此命令也很容易生成:

solcjs <contract>.sol --abi --bin

在我不进口Openzeppelin的合同上,这很有效。但是在我导入Openzeppelin的合同上,当调用solcjs命令时,我得到一个错误:

ParserError: Source "@openzeppelin/contracts/token/ERC721/ERC721.sol" not found: File not found inside the base path or any of the include paths.
 --> MyNFT.sol:5:1:
  |
5 | import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


ParserError: Source "@openzeppelin/contracts/utils/Counters.sol" not found: File not found inside the base path or any of the include paths.
 --> MyNFT.sol:6:1:
  |
6 | import "@openzeppelin/contracts/utils/Counters.sol";
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


ParserError: Source "@openzeppelin/contracts/access/Ownable.sol" not found: File not found inside the base path or any of the include paths.
 --> MyNFT.sol:7:1:
  |
7 | import "@openzeppelin/contracts/access/Ownable.sol";
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

语法我如何在Solidity的智能合同中导入此库:

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

我使用语用可靠性

Smartcontract有效,我用hardhat编译没有问题。

我进口了开蜡飞艇版本 - @openzeppelin/contracts@3.1.0-solc-0.7

这些文件应该在哪里能够生成 .abi 和 .bin 文件?感谢您的帮助。

共有2个答案

徐高韵
2023-03-14

您需要将openzeppelin合同直接下载到硬盘上,并将其与文件系统一起导入。您可以使用以下命令执行此操作:“npm i openzeppelin solidity”

越鸿才
2023-03-14

我遇到了同样的错误,最终在其他地方找到了解决方案,而是Solidity编译器本身的GitHub页面!请参阅此内容。

要编译一个通过相对路径导入其他合约的合约:
solcjs--bin--include-pathnode_modules/--base-path。MainContract.sol
使用--base-path--include-path选项来描述项目的布局。--base-path表示您自己源代码树的根,而--include-path允许您指定包含外部html" target="_blank">代码的额外位置(例如安装有包管理器的库)。
注意:确保您在命令行上指定的所有文件都位于基本路径或包含路径之一内。编译器使用绝对路径引用这些目录之外的文件。在合同元数据中拥有绝对路径将导致您的字节码只有在放置在这些确切的绝对位置时才可复制。

假设您的所有软件包(包括OpenZeppelin)都很好地组织在一个node_modules目录中(可能是您为项目创建的本地目录),只需将node_modules/替换为指向此节点模块目录的路径。类似地,将.替换为包含您正在编译的合约的目录的路径。

以这种方式编译合同的唯一问题是,它为所有合同生成ABI文件,包括您导入到主合同的合同(以及它们导入的合同等)。我不知道是否有任何命令行选项指定要生成哪些ABI文件(例如,仅为MainContract.sol生成ABI文件)。

PS:你也可以为你的。阿比和。使用< code>-o选项来绑定输出文件。这在生成大量输出文件时非常有用。

 类似资料:
  • 我正在使用ora2pg将模式和数据从oracle迁移到postgres数据库。 conf文件有以下修改: null 请让我知道如果你有任何解决办法。 谢谢

  • 尝试从sklearn导入时出现以下错误: 我使用的是Python2.7,scipy-0.12。0b1超级背包,numpy-1.6。0 superpack,scikit-learn-0.11我有一台windows 7计算机 我已经检查了这个问题的几个答案,但是没有一个能解决这个错误。

  • 我一直在遵循gRPC教程,这非常好。当我尝试将https://github.com/grpc-ecosystem/grpc-gateway添加到我的项目时,问题就开始了。我使用他们给你的命令: 我在我的原型中导入包: 我在上面的“文件未找到”行收到错误。当我复制项目中的文件时,它们会被找到,但当我运行命令时 它会抱怨找不到文件。 有人能告诉我如何使grpc网关正常工作的正确方法吗? 我目前使用Go

  • 问题内容: 基本上,我试图使用Selenium的Xpath处理以下HTML: 我正在使用以下选择器: 看起来很简单,但是根据Selenium,它返回0个匹配项。我也在在线xpath测试器中尝试过: http://codebeautify.org/Xpath-Tester 而且也不会返回任何结果。奇怪的是,当我删除 xmlns =“ http://www.w3.org/1999/xhtml” -at

  • 问题内容: 我在构建会话bean 时遇到了麻烦。 找不到以下内容: 一些解决方案暗示将库和.jar 添加到Java构建路径。 我正在使用并且在给定位置($ JAVA_HOME \ lib)找不到这些库中的任何一个。我在机器上使用eclipse(kepler) 问题答案: javaee.jar既不提供eclipse也不提供java(jdk)。该文件必须手动下载并添加到项目构建路径。可以在此处找到ja

  • 好的,所以最近我一直在尝试在Android Studio(1.1.0)上运行我的应用程序,但是每次尝试运行的时候,都会弹出以下错误: 注意:我最近导入了一个jar文件,从那以后,问题就开始了。不确定这是否重要。