用于erc190包的python抽象。
eth-pm的Python项目详细描述
- 分析并验证包
- 给定一个web3实例,提供对契约工厂类的访问
- 给定一个web3实例提供对所有已部署契约的访问 Web3连接到的链的实例。
- 验证包字节码是否与编译输出匹配。
- 验证部署的字节码是否与编译输出匹配
- 访问包依赖项
- 构造新包
web3
Package对象的功能与Contract类非常相似 由web3提供。而不是实例化提供的基类 通过ethpm,您将使用classmethod,它将生成 为给定包新建Package类。
OwnedPackage=BasePackage.factory('/path/to/owned-v1.0.0.json')
然后,可以用任何^{tt3}实例化OwnedPackage$ 维护
owned_package=OwnedPackage(web3)
一个Package类只能直接从解析的 包json。它也可以用包的uri或 使用Package.from_file(path)指向包的本地文件系统路径。
承包工厂
合同工厂应该可以从package类访问,但是 还必须提供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_bytecodeTrue>>>math.is_bytecode_linkedFalse>>>linked_math=math.link_bytecode({'MathLib':'0x1234...'})>>>linked_math.is_bytecode_linkedTrue
Note: the actual format of the link data is not clear since library names aren’t a one-size-fits all solution. We need the ability to specify specific link references in the code.
部署的合同
部署的合同仅可从包实例中获得。这个 包实例将根据 web3已连接到。
访问部署是通过属性访问完成的
package.deployed_contracts.Greeter
IPF
我们需要一个可插入的后端系统来访问ipfs。内置的 默认使用infura的应该足够了 地面。
优先级较低但重要的是确保用户可以配置 连接到他们自己的ipfs节点。
验证内容
Package类应该验证以下所有内容
- 包json与EthPM V2清单规范匹配
- 包含的字节码与编译输出匹配
- 部署的字节码与编译输出匹配
依赖关系
Package类应该提供对完全依赖树的访问
>>>owned_package.build_dependencies['zeppelin']<ZeppelinPackage>
测试策略
- 从磁盘加载和验证包。
- 访问包数据。
- 进入合同工厂。
注册表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$$
如何提升版本
此repo的版本格式为 稳定,{major}.{minor}.{patch}-{stage}.{devnum}表示不稳定 (stage可以是alpha或beta)。
若要在行中发布下一个版本,请指定要凹凸的部分,如 make release bump=minor或make release bump=devnum。
如果您是beta版本,make release bump=stage将切换到 马厩
若要在当前版本稳定时发布不稳定版本,请指定 新版本显式地 make release bump="--new-version4.0.0-alpha.1 devnum"