用于编译Solidity合约的Ape Ethereum框架插件
项目描述
快速开始
编译Solidity合约。
依赖项
- python3版本3.9至3.12。
安装
通过pip
您可以通过pip
安装最新版本
pip install ape-solidity
通过setuptools
您可以克隆存储库并使用setuptools
获取最新版本
git clone https://github.com/ApeWorX/ape-solidity.git
cd ape-solidity
python3 setup.py install
快速使用
在您的项目中,确保您有一个包含Solidity文件(.sol
)的contracts/
目录。
然后,在此插件安装期间,编译您的合约
ape compile
您的合约的字节码和ABI现在应该存在于.build/
目录中的__local__.json
文件中。
Solidity版本控制
默认情况下,ape-solidity
会通过查看所有源文件的pragma指定来尝试使用最好的Solidity版本。然而,直接指定版本通常更好。如果你知道要使用的最佳版本,请在你的 ape-config.yaml
中设置它,如下所示
solidity:
version: 0.8.14
EVM 版本控制
默认情况下,ape-solidity
将使用编译器版本中默认设置的任何EVM规则版本。有时,你可能想使用不同的版本,例如在Arbitrum或Optimism上部署,因为这些环境中尚不支持新的opcodes。如果你想在编译器的配置中要求使用不同的EVM规则版本,请在你的 ape-config.yaml
中设置它,如下所示
solidity:
evm_version: paris
依赖映射
默认情况下,ape-solidity
会查找已安装的依赖项中的潜在重映射值,并在检测到你正在导入它们时使用它们。例如,如果你使用以下依赖项
dependencies:
- name: openzeppelin
github: OpenZeppelin/openzeppelin-contracts
version: 4.4.2
并且你的源文件以这种方式从 openzeppelin
导入
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
Ape知道如何解析@openzeppelin
的值并找到正确的源。
如果你想覆盖此行为或添加不是依赖项的新重映射,你可以在 ape-config.yaml
中的 solidity:
键下添加它们。例如,假设你在某处下载了openzeppelin
,但没有在Ape中安装它。你可以这样将其映射到本地安装的openzeppelin
solidity:
import_remapping:
- "@openzeppelin=path/to/openzeppelin"
库链接
要编译使用库的合约,您需要首先添加库。使用 ape-solidity
编译器类中的 add_library()
方法添加库。一个典型的流程是
- 部署库。
- 使用Solidity编译器插件调用
add_library()
,这将重新编译需要库的合约。 - 部署并使用需要库的合约。
例如
import pytest
@pytest.fixture
def contract(accounts, project, compilers):
# Deploy the library.
account = accounts[0]
library = project.Set.deploy(sender=account)
# Add the library to Solidity (re-compiles contracts that use the library).
compilers.solidity.add_library(library)
# Deploy the contract that uses the library.
return project.C.deploy(sender=account)
编译器设置
当使用 ape-solidity
时,你的项目清单的编译器设置将包括标准JSON输出。你应该为你的项目中使用的每个 solc
版本列出一个 compiler
。你可以通过以下方式查看你的当前项目清单,包括编译器设置
from ape import project
manifest = project.extract_manifest()
for compiler_entry in manifest.compilers:
print(compiler_entry.version)
print(compiler_entry.settings)
注意:这些是使用Etherscan 插件进行合约验证时使用的设置。
--via-IR
Yul IR 编译器管道
你可以通过向你的 ape-config.yaml
添加以下值来启用 solc
的 --via-IR
标志
solidity:
via_ir: True
合约展开
ape-solidity
具有合约展开功能。如果你正在使用Ape发布合约,Ape会自动检测并使用所需的展开合约方法。
要手动展开合约以供自己使用,请使用以下代码
from ape import compilers, project
source_path = project.source_paths[0] # Replace with your path.
flattened_src = compilers.flatten_contract(source_path)
print(str(flattened_src))
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源分布
构建分布
ape-solidity-0.8.4.tar.gz 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 7e27a59f930792fcd92794eace7820f917a2d3cbb97f98a55994244b9e5b50e0 |
|
MD5 | e02a0416305371990a87c3fbc913eaf5 |
|
BLAKE2b-256 | 1c89f8d20f8179b66e2fef7659b83d03bc937b478fb9d1882fd9c9d349e8a53d |
ape_solidity-0.8.4-py3-none-any.whl 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 05a8aba38f17eda7bf92dc9caf11c5dbce4cf20c7d3e98d8eb1ed06376c8e94b |
|
MD5 | 65f0be0f90fd7ba88fe921d7c22f85ad |
|
BLAKE2b-256 | e1cd0c1cf11ef383f888098a87f8854442bd203494f1a02326869b7ec290023a |