跳转到主要内容

dpac是一种evm工件包格式

项目描述

dpac-py ☀️

dpac evm打包格式的Python端口。

dpac允许您共享整个部署,包括与evm合约交互所需的所有适当的地址和工件。

该库提供了一个低级实现,以及ape的绑定。

安装

pip install dpack-py

由于dpac使用ipfs指针,您需要运行一个ipfs守护进程。有关如何安装它的说明,请参阅ipfs文档

如果您使用远程ipfs节点,可以设置一个IPFS_RPC_URL环境变量。

开发

要设置用于开发的有用的额外库

uv venv
make dev

加载dpac

使用dpac.load从本地文件加载dpac。当您访问相应的合约类型和对象时,它将懒加载所需的工件。

both typesobjects 展示一个 contract_type 属性,由 ethpm-types 解码为 python模型。它允许像下面显示的简单abi查找。

import dpack

pack = dpack.load("examples/uniswap-v3.dpack.json")

pack.types['UniswapV3Factory'].contract_type.selector_identifiers

objects 还展示一个 contract_instance 属性(与ape中的不同),允许查找合约 typenameaddress

pack.objects['factory'].address
# or use a shorthand attribute access
pack.factory.address

创建dpac

要创建dpac,请使用 pack_typepack_object 方法。打包类型是可选的,因为您可以直接打包命名对象,库将自动处理唯一合约类型的打包。

import dpack

pack = (
    dpack.Dpack(network="sepolia")
    .pack_object(
        path="tests/weth-ropsten-artifact.json",
        typename="WETH9",
        objectname="weth",
        address="0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14",
    )
)

要保存dpac到json文件,只需调用save并指定文件路径。

pack.save('weth.sepolia.dpack.json')

您可以打包尽可能多的对象和类型,但请注意,当前版本(dpack-1)的格式在顶级指定了网络,因此您还不能创建多链dpac。

在ape中使用dpac

这个库还提供了一个简单的包装器,可以将对象作为ape合约实例加载,因此您可以立即与之交互。

types作为感知提供者的包装器暴露为ContractContainerobjects是可直接使用的ContractInstance

可以使用类似pack["MyType"]的下标简写来访问types。您可以使用.at(address)将地址转换为类型,它返回一个ContractInstance

也可以使用属性简写pack.my_contract来访问objects

$ ape console --netwowrk ethereum:mainnet

import dpack.ape

pack = dpack.ape.load('examples/uniswap-v3.dpack.json')
# <ApeDpack types=['UniswapV3Factory', 'UniswapInterfaceMulticall', 'Multicall2', 'ProxyAdmin', 'TickLens', 'NFTDescriptor', 'NonfungibleTokenPositionDescriptor', 'NonfungiblePositionManager', 'V3Migrator', 'QuoterV2', 'SwapRouter02', 'Permit2', 'UniversalRouter', 'UniswapV3Staker', 'Uni', 'UniswapV3Pool'] objects=['factory', 'multicall', 'multicall2', 'proxy_admin', 'tick_lens', 'nft_descriptor', 'nonfungible_token_position_descriptor', 'transparent_upgradeable_proxy', 'nonfungible_position_manager', 'v3_migrator', 'quoter', 'swap_router', 'permit_2', 'universal_router', 'staker', 'uni', 'pool']>

# attribute access is shorthand for objects
pack.factory
# <UniswapV3Factory 0x1F98431c8aD98523631AE4a59f267346ea31F984>

# subscript access is shorthand for types
pack['UniswapV3Pool']
# <UniswapV3Pool>

# you can apply types with .at(address)
[pack['UniswapV3Pool'].at(log['pool']) for log in pack.factory.PoolCreated[:3]]
# [<UniswapV3Pool 0x1d42064Fc4Beb5F8aAF85F4617AE8b3b5B8Bd801>, <UniswapV3Pool 0x6c6Bc977E13Df9b0de53b251522280BB72383700>, <UniswapV3Pool 0x7BeA39867e4169DBe237d55C8242a8f2fcDcc387>]

使用ape创建dpack

ape还使创建dpack变得更加容易,因为它可以利用其功能从探索器中检索所需的abis。

查看此示例了解如何操作。

项目详情


下载文件

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

源分布

dpack_py-0.2.2.tar.gz (11.8 kB 查看散列)

上传时间

构建分布

dpack_py-0.2.2-py3-none-any.whl (5.2 kB 查看散列)

上传时间 Python 3

由以下机构支持

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