Skip to main content

Quick Start

Ape plugin for ENS argument conversion and contracts

Dependencies

Installation

via pip

You can install the latest release via pip:

pip install ape-ens

via setuptools

You can clone the repository and use setuptools for the most up-to-date version:

git clone https://github.com/ApeWorX/ape-ens.git
cd ape-ens
python3 setup.py install

Quick Usage

Ensure you are satisfied with your Ethereum mainnet setup in Ape, as this plugin requires a connection to Ethereum to resolve ENS domains. More information on networks can be found in Ape's network guide.

If using Ape and not connected to mainnet, ape-ens will temporarily connect to Ethereum mainnet to resolve addresses, using your default mainnet provider.

To configure a default mainnet provider, do:

ethereum:
  mainnet:
    default_provider: alchemy  # Example, you can use any mainnet provider

Otherwise, the plugin should still work with Ape's defaults, using an RPC from the evmchains library.

This plugin contains two primary features:

  • A conversion API implementation: this allows you to use ENS values in contract calls and transaction kwargs.
  • a CLI for interacting with ENS from the command line.

Conversion API

When this plugin is installed, you can use ENS names in contract-calls, and they resolve to the addresses automatically:

from ape import accounts, Contract

ens_name = "vitalik.eth"  # Going to use this later...
contract = Contract("0x123...")
me = accounts.load("me")

# Ape resolves "me" to my account's address and "vitalik.eth" to Vitalik's Ethereum address.
# It is thanks to the ape-ens plugin that "vitalik.eth" works as a transaction input.
contract.transferFrom(me, ens_name, 100, sender=me)

You can use Ape's conversion utility directly:

from ape import convert
from ape.types import AddressType

convert("vitalik.eth", AddressType)
# returns: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'

Additionally, you can get the Ethereum Name Service (ENS) namehash using the namehash function:

from ape_ens.utils import namehash

namehash("foo.eth")
# HexBytes("0xde9b09fd7c5f901e23a3f19fecc54828e9c848539801e86591bd9801b019f84f")

CLI

ape-ens comes with a CLI for using ENS.

Resolve ENS domains from the command line:

ape ens resolve vitalik.eth
# outputs: 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045

Reverse-lookup an ENS domain:

ape ens name 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045
# outputs: vitalik.eth

Get the owner of an ENS domain:

ape ens owner vitalik.eth
# outputs: 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045

Get the namehash of an ENS name:

ape ens namehash foo.eth
# outputs: 0xde9b09fd7c5f901e23a3f19fecc54828e9c848539801e86591bd9801b019f84f

Using ape-ens as a library.

You can also use the ape_ens.ENS class directly for programmatically referring to ENS.

from ape_ens import ENS

ens = ENS()
vitalik = ens.resolve("vitalik.eth")
print(vitalik)

Local registry

WARNING: By default, ape-ens caches results during each Python session for faster name resolution in scripts and testing. Be careful using ENS names in long-running scripts where it would be bad if the name resolved differently in the future. To disable caching, configure ape-ens to always read from Ethereum by adding to your pyproject.toml:

[tool.ape.ens]
use_cache = false

or using ape-config.yaml:

ens:
  use_cache: false

To manually add entries to the cache, you can include them under the registry: key in the config:

[tool.ape.ens]
registry = { vitalik.eth = "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045" }

or using ape-config.yaml:

ens:
  registry:
    vitalik.eth: "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"

Configuring entries is useful for:

  1. Testing in the local network.
  2. Attaining faster performance (no Ethereum call).
  3. Avoiding connecting to Ethereum mainnet.

Change Registry

Change the registry contract address by configuring it in your pyproject.toml:

[tool.ape.ens]
registry_address = "0x123..."

or using ape-config.yaml:

ens:
  registry_address: "0x123..."

You can also switch the registry adhoc during CLI commands:

ape ens resolve vitalik.eth --registry-address 0x123...311

Metadata

Release files for ape-ens 0.8.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ape-ens 0.8.2
File Size Uploaded
ape_ens-0.8.2.tar.gz 24.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ape-ens 0.8.2
File Interpreter ABI Platform
ape_ens-0.8.2-py3-none-any.whl Python 3 none any Details

Total release size: 39.4 kB

Release files / ape_ens-0.8.2.tar.gz

Download URL ape_ens-0.8.2.tar.gz
Size 24.7 kB
Tags Source
SHA-256 checksum
How to use checksums
766ef3a244c90070f6f170530d0197cc7c8f33bc4997953e45b9367a2ed3923c
BLAKE2b-256 checksum
How to use checksums
c328b1992c60788e74578eb81835d610f38e50bed35e32c61abc1d3797fddfe8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.10.16

Release files / ape_ens-0.8.2-py3-none-any.whl

Download URL ape_ens-0.8.2-py3-none-any.whl
Size 14.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cb36f3a2c10e0d348c7a116cbd666aad8d88f5bc2a149edbc42b20956b0df34b
BLAKE2b-256 checksum
How to use checksums
451917a43e564196af76dedcfea6fdf07ab55b3da656a543a20ef71207879b80
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.10.16
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page