gpt4 book ai didi

python - Py-solc 和 Solidity 导入

转载 作者:行者123 更新时间:2023-12-01 09:27:37 32 4
gpt4 key购买 nike

如何编译通过 py-solc 执行相对导入的 Solidity 文件?这是一个最小的例子:

目录结构

my-project   - main.py   - bar.sol   - baz.sol

main.py:

from solc import compile_sourcedef get_contract_source(file_name):    with open(file_name) as f:        return f.read()contract_source_code = get_contract_source("bar.sol")compiled_sol = compile_source(contract_source_code)  # Compiled source code

baz.sol:

pragma solidity ^0.4.0;contract baz {    function baz(){    }}

酒吧.sol:

pragma solidity ^0.4.0;import "./baz" as baz;contract bar {    function bar(){    }}

当我尝试运行 python 文件时,出现以下错误:

solc.exceptions.SolcError: An error occurred during execution        > command: `solc --combined-json abi,asm,ast,bin,bin-runtime,clone-bin,devdoc,interface,opcodes,userdoc`        > return code: `1`        > stderr:        > stdout:        :17:1: Error: Source "baz" not found: File outside of allowed directories.import "./baz" as baz;^----------------------^

我仍然不是 100% 清楚导入是如何运作的。我有reviewed the docs看来我需要向 compile_source 命令传递一些额外的参数。我发现了一些可能有用的文档 here我想我需要使用 allow_pathscompile_files 我会的。如果我在得到答案之前找到解决方案,我将发布我找到的内容。

最佳答案

好吧,事实证明 compile_files 正是我所需要的。

新的编译命令是

import osPROJECT_ROOT = os.path.dirname(os.path.dirname(__file__))compiled_sol = compile_files([os.path.join(self.PROJECT_ROOT, "bar.sol"), os.path.join(self.PROJECT_ROOT, "baz.sol")])

事实证明我的导入是错误的。我需要像 import "./baz.sol"as baz; 一样导入 baz - 我缺少 .sol 扩展名。

关于python - Py-solc 和 Solidity 导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50238914/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com