我开始使用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";
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^语法--如何在smart契约中导入此库:
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/access/Ownable.sol";我使用的是语用稳健性>=0.7.3;
Smartcontract是有效的,我用草帽编译它,没有问题。
我导入了openzeppelin版本- @openzeppelin/contracts@3.1.0-solc-0.7
这些文件应该在哪里生成.abi和.bin文件?谢谢你的帮助。
发布于 2022-02-12 10:46:39
我也犯了同样的错误,最终在其他地方找到了解决方案,只有Solidity编译器本身的GitHub页面!见这。
要编译通过相对路径导入其他合同的合同:
solcjs --bin --include-path node_modules/ --base-path . MainContract.sol使用--base-path和--include-path选项来描述项目的布局。--base-path表示您自己的源代码树的根,而--include-path允许您指定包含外部代码的额外位置(例如,安装了包管理器的库)。 注意:确保命令行上指定的所有文件都位于基本路径或包含路径之一内。编译器使用绝对路径引用这些目录之外的文件。在契约元数据中拥有绝对路径将导致字节码只有放置在这些绝对位置时才是可复制的。
假设您的所有包(包括OpenZeppelin)都很好地组织在单个node_modules目录中(可能是您为项目创建的本地目录),那么只需将node_modules/替换为指向此节点模块目录的路径。同样,用包含正在编译的契约的目录的路径替换.。
以这种方式编译合同的唯一问题是,它为所有合同生成ABI文件,包括导入到主合同的合同(以及它们导入的合同等)。我不知道是否有命令行选项指定要生成哪些ABI文件(例如,只生成MainContract.sol的ABI文件)。
PS:您还可以使用.abi选项为您的.bin和-o输出文件指定输出目录。这是非常有用的,特别是当大量的输出文件正在被产生。
发布于 2022-01-20 05:18:56
您需要直接在硬盘上下载openzeppelin合同,并将其导入文件系统。您可以使用以下命令进行此操作:"npm i openzeppelin-solidity“。
https://stackoverflow.com/questions/70742806
复制相似问题