Skip to content

v0.2.0 — Unichain, Monad, X Layer, World Chain and Zora

Choose a tag to compare

@Conrad-sudo Conrad-sudo released this 12 Aug 13:38
· 3 commits to main since this release

Five chains join the wrapped-native registry, taking it from 8 entries to 13. This is purely
additive: no signature changes, and a caller who never touches these chain ids sees nothing
different.

Added

ERC20Toolkit.for_chain() — and with it wrap_native / unwrap_native — now works on:

chain id name wrapped ticker
130 Unichain WETH ETH
143 Monad WMON MON
196 X Layer WOKB OKB
480 World Chain WETH ETH
7777777 Zora WETH ETH

Every address was verified against the live chain before it landed, using the package's own
criteria: contract bytecode present, symbol() matches the expected wrapped ticker, decimals()
is 18, and both deposit() and withdraw(uint256) are present in the deployed code. None is a
proxy. Nothing was copied from a token list or a block explorer.

EOA callers (tx_mode="eoa") and smart-account callers (tx_mode="calls" — ERC-4337, Safe,
ERC-7579) gain these equally.

Changed

The bundled RPC endpoints are now documented for what they are. They are free public gateways,
shared by every user of this package, offered with no availability guarantee. They exist so
for_chain(1) works in one line while you are trying the library out. Anything beyond that should
pass its own endpoint and treat the bundled value as a fallback:

ERC20Toolkit.for_chain(1, rpc_url="https://your-node")
ERC20Toolkit(rpc_url="https://your-node")

for_chain() now says so when a bundled endpoint is down. Falling back to an unreachable
bundled gateway raises a ToolException naming the endpoint and the fix, instead of a bare
ConnectionError that identified neither. A caller who passed their own rpc_url is unaffected
and still receives the original error.

scripts/verify_networks.py now fails an entry that carries no wrapped-native address, and retries
an endpoint before reporting it unreachable — a single-attempt probe produced two false negatives
during this work, on endpoints that were healthy and recovered on their own.

Notes

Unichain, World Chain and Zora share 0x4200000000000000000000000000000000000006 with Base and
Optimism. That is not a copy-paste error: all five are OP Stack chains using the same
deterministic predeploy, and each was verified independently at a different block height and total
supply.

Celo (42220) remains deliberately absent. CELO is natively an ERC-20 with no wrapping step, so
wrap_native has no meaning there and for_chain(42220) fails loudly rather than inventing an
address. This package still ships no general token registry, for the same reason it never has: a
wrong address in one is a silent, unrecoverable loss of funds. Pass your own via tokens={...}.

Full changelog: v0.1.0...v0.2.0