跳转到主要内容

ERC190包的Python抽象。

项目描述

  • 解析和验证包

  • 给定一个web3实例,提供对合约工厂类的访问

  • 给定一个web3实例,提供对连接到的链上所有已部署合约实例的访问。

  • 验证包的字节码与编译输出匹配。

  • 验证已部署的字节码与编译输出匹配

  • 访问包的依赖项

  • 构建新的包

Web3

Package对象将类似于由web3提供的Contract类。您将使用一个classmethod来生成针对特定包的新Package类,而不是实例化由ethpm提供的基类。

OwnedPackage = BasePackage.factory('/path/to/owned-v1.0.0.json')

然后,可以使用任何web3实例来实例化OwnedPackage

owned_package = OwnedPackage(web3)

包类只能从解析后的包JSON直接构造。您也可以使用 Package.from_file(path) 通过包的URI或包在本地文件系统中的路径来初始化。

合约工厂

合约工厂应该可以从包类中访问,但您还必须提供一个web3实例。

Owned = OwnedPackage.get_contract_factory(web3, 'owned')

从包实例中,它们也可以作为属性访问。

Owned = owned_package.contract_factories.owned

当合约使用库时,合约工厂将具有未链接的字节码。ethpm包附带了自己子类的 web3.contract.Contract,它有一些与字节码链接相关的额外方法和属性。

>>> math = owned_package.contract_factories.math
>>> math.has_linkable_bytecode
True
>>> math.is_bytecode_linked
False
>>> linked_math = math.link_bytecode({'MathLib': '0x1234...'})
>>> linked_math.is_bytecode_linked
True

注意:由于库名称不是一刀切的解决方案,因此实际链接数据的格式尚不清楚。我们需要在代码中指定特定的链接引用。

已部署的合约

已部署的合约只能从包实例中访问。包实例将根据web3连接的链过滤 deployments

通过属性访问来访问部署。

package.deployed_contracts.Greeter

IPFS

我们需要一个可插拔的后端系统来访问IPFS。一个内置的默认后端,默认使用infura,应该足以开始。

虽然优先级较低但很重要的一点是,确保用户可以配置连接到他们自己的IPFS节点。

验证事项

Package 类应该验证以下所有事项。

  • 包JSON与EthPM V2 Manifest规范匹配

  • 包含的字节码与编译输出匹配

  • 部署的字节码与编译输出匹配

依赖项

Package 类应提供访问完整依赖项树的功能。

>>> owned_package.build_dependencies['zeppelin']
<ZeppelinPackage>

测试策略

  • 从磁盘加载和验证包。

  • 访问包数据。

  • 访问合约工厂。

EthPM-Spec

  • EthPM-Spec 在此仓库中作为子模块引用。

  • 如果您克隆此仓库,应该运行此命令以获取子模块的内容

git submodule init

注册表URI

从注册表中查找包的URI应遵循以下格式。(根据注册表合约标准的EIP进程可能会更改)

scheme://authority/package-name?version=x.x.x
  • URI必须是字符串类型

  • scheme: ercxxx

  • authority: 必须是有效的ENS域名或指向注册表合约的有效校验和地址。

  • package-name: 必须符合 EthPM-Spec 中指定的包名称。

  • version: URI转义版本字符串,应该 符合 semver 版本编号规范。

例如 ercxxx://packages.zeppelinos.eth/owned?version=1.0.0

发布设置

对于类似Debian的系统

apt install pandoc

要发布新版本

make release bump=$$VERSION_PART_TO_BUMP$$

如何bumpversion

此仓库的版本格式为稳定版本的 {major}.{minor}.{patch},以及不稳定版本(stage 可以是alpha或beta)的 {major}.{minor}.{patch}-{stage}.{devnum}

要发布下一个版本,指定要提升的部分,例如 make release bump=minormake release bump=devnum

如果您处于beta版本,则 make release bump=stage 将切换到稳定版本。

当当前版本稳定时发布不稳定版本,请明确指定新版本,例如 make release bump="--new-version 4.0.0-alpha.1 devnum"

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码发行版

eth-pm-0.1.0a23.tar.gz (14.7 kB 查看哈希值)

上传时间 源代码

构建发行版

eth_pm-0.1.0a23-py3-none-any.whl (15.7 kB 查看哈希值)

上传时间 Python 3

由以下支持