Py-solc 和 Solidity 导入
Posted
技术标签:
【中文标题】Py-solc 和 Solidity 导入【英文标题】:Py-solc and solidity imports 【发布时间】:2018-10-18 17:14:29 【问题描述】:如何编译通过py-solc
执行相对导入的solidity 文件?这是一个最小的例子:
目录结构
我的项目 - 主要.py - bar.sol - baz.solmain.py:
从 solc 导入 compile_source def get_contract_source(文件名): 使用 open(file_name) 作为 f: 返回 f.read() contract_source_code = get_contract_source("bar.sol") compiled_sol = compile_source(contract_source_code) # 编译好的源代码baz.sol:
编译指示 ^0.4.0; 合同 baz 功能巴兹()bar.sol:
编译指示 ^0.4.0; 将“./baz”导入为 baz; 合约栏 函数栏()当我尝试运行 python 文件时,出现以下错误:
solc.exceptions.SolcError:执行过程中发生错误 > 命令:`solc --combined-json abi,asm,ast,bin,bin-runtime,clone-bin,devdoc,interface,opcodes,userdoc` > 返回码:`1` > 标准错误: > 标准输出: :17:1: 错误:找不到源“baz”:文件超出允许的目录。 将“./baz”导入为 baz; ^---------------------^我仍然不是 100% 清楚导入的工作原理。我有reviewed the docs,似乎我需要将一些额外的参数传递给compile_source
命令。我发现了一些可能有用的文档here,我认为我需要使用allow_paths
或compile_files
,我会的。如果我在得到答案之前找到解决方案,我会发布我的发现。
【问题讨论】:
【参考方案1】:好的,原来compile_files
正是我需要的。
新的编译命令是
导入操作系统 PROJECT_ROOT = os.path.dirname(os.path.dirname(__file__)) 编译溶胶 = 编译文件([os.path.join(self.PROJECT_ROOT,“bar.sol”),os.path.join(self.PROJECT_ROOT,“baz.sol”)])事实证明我的导入是错误的。我需要像import "./baz.sol" as baz;
一样导入baz
- 我缺少.sol
扩展。
【讨论】:
以上是关于Py-solc 和 Solidity 导入的主要内容,如果未能解决你的问题,请参考以下文章