跳转到主要内容

用于编译Solidity合约的Ape Ethereum框架插件

项目描述

快速开始

编译Solidity合约。

依赖项

安装

通过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() 方法添加库。一个典型的流程是

  1. 部署库。
  2. 使用Solidity编译器插件调用 add_library(),这将重新编译需要库的合约。
  3. 部署并使用需要库的合约。

例如

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 (418.2 kB 查看散列值)

上传时间

构建分布

ape_solidity-0.8.4-py3-none-any.whl (28.8 kB 查看散列值)

上传时间 Python 3

由以下组织支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面