eth_abi_lite is a lite fork of `eth_abi`, aiming to support EVM abi encode/decode functionality without external dependencies on `eth_utils`, `eth_typing`, `toolz`, or `cytoolz`
Project description
eth_abi_lite
eth_abi_lite
is a lite fork of eth_abi
, aiming to support EVM abi encode/decode functionality without external dependencies on eth_utils
, eth_typing
, toolz
, or cytoolz
.
eth_abi_lite
can be used as a drop-in replacement for eth_abi==3.0.0
.
Install with pip install eth_abi_lite
Motivation
- Many packages in the ethereum ecosystem have conflicting version requirements for dependencies such as
eth_utils
,eth_typing
,toolz
, orcytoolz
. Removing these dependencies allows a package to be used in more environments. - These dependencies are rather heavy if all you want is basic abi encoding/decoding functionality.
Does eth_abi_lite
work the same as eth_abi
?
eth_abi_lite
can be used as a drop-in replacement for eth_abi==3.0.0
. The one functional difference is that eth_abi
's low level pad functions are no longer curry-able. In most cases this difference will not be noticed.
eth_abi_lite
passes eth_abi
's standard test suite when running tox
:
...
======================== 751 passed, 3 skipped in 18.45s ========================
____________________________________ summary ____________________________________
py37-core: commands succeeded
py38-core: commands succeeded
py39-core: commands succeeded
py310-core: commands succeeded
congratulations :)
(tests for linting and docs removed)
Is eth_abi_lite
faster?
According to testing with tuna on a good laptop:
eth_abi_lite
takes about 18 ms to importeth_abi
takes about 180 ms to import
eth_abi_lite
is faster to import because it loads fewer dependencies. This is useful in the context of cli tools where startup times matter.
Survey of imported items
eth_abi_lite
imports the following items from its dependencies:
Items Imported From eth_utils
big_endian_to_int
compose_if_tuple
int_to_big_endian
is_address
is_boolean
is_bytes
is_integer
is_list_like
is_number
is_text
to_canonical_address
to_checksum_address
to_normalized_address
to_tuple
Items Imported From eth_typing
TypeStr
Decodable
Items Imported From eth_utils.toolz
toolz.functoolz.curry
The Changes
The changes from eth_abi
to eth_abi_lite
consist mostly of copying portions of eth_utils
and eth_typing
.
The basic idea is that every time something is imported from eth_utils
or eth_typing
, that thing is instead imported from a lite version of that package.
Step 1. Create eth_utils_lite
Copy these items from eth_utils
to eth_utils_lite
eth_utils/abi.py
eth_utils/address.py
eth_utils/conversions.py
eth_utils/crypto.py
eth_utils/decorators.py
eth_utils/encoding.py
eth_utils/functional.py
eth_utils/hexadecimal.py
eth_utils/types.py
The only non-mutual dependency in these modules is eth_hash.keccak()
in eth_utils/crypto.py
. Replace this function with pycryptodome
's keccak implementation directly.
Also in eth_utils/functional.py
, remove the functions that are decorated by toolz.compose
.
It is possible to prune these files more aggressively, but leaving the files unchanged minimizes the chances of introducing bugs.
Step 2. Create eth_typing_lite
Copy these items from eth_typing
to eth_typing_lite
:
Address
AnyAddress
ChecksumAddress
Decodable
HexAddress
HexStr
Primitives
TypeStr
These are all of the eth_typing
types used by eth_abi_lite
and eth_utils_lite
.
Step 3. Create eth_abi_lite
- Copy all files from
eth_abi
intoeth_abi_lite
- Replace all instances of
eth_utils
witheth_utils
eth_typing
witheth_typing_lite
eth_abi
witheth_abi_lite
- Replace the
toolz.curry
decoration oneth_abi.zpad
andeth_abi.fpad
withfunctools.partial
decoration.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file eth_abi_lite-3.0.3.tar.gz
.
File metadata
- Download URL: eth_abi_lite-3.0.3.tar.gz
- Upload date:
- Size: 161.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.7 tqdm/4.64.0 importlib-metadata/4.10.1 keyring/22.2.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | af9e97302c225756bb7ace9a67fef58755c72890a4b39d6fd4f071d05b215ef5 |
|
MD5 | 9166c94fe7461c5e7c2c3ef55b34b179 |
|
BLAKE2b-256 | 87baf16b082f7251fcf0a2186e870b7f06c5f468be2226b5d504cf06dcca175e |