ethPM & Etherscan Verified Contracts
Interact with the top 20 erc20 tokens right from your terminal.
Last updated
Was this helpful?
Interact with the top 20 erc20 tokens right from your terminal.
Last updated
Was this helpful?
In this guide, we'll use & to instantly interact with any of the tokens with a couple lines of code from your terminal, without copy/pasting a single ABI!! In this example we'll be using the , but all top 20 tokens are available as ethPM packages on the . All you will need for this tutorial is an Infura API key, if you don't already have one, you can get one .
For this tutorial, you must have Python 3.6+ installed on your machine. Check out for more info.
Virtual environments are best practice in Python world, so let's follow suit.
Some setup is required in web3.py
before we can play with our Dai. The enable_unstable_package_management_api
flag is a temporary security measure. While web3.pm
is in alpha, we want to be extra sure that users understand the API might change in the future. This precaution will be removed once the web3.pm
API stabilizes in the next web3.py
release.
Now we have a contract instance representing the Dai contract. We can interact with any of its available functions. Of course, to send Dai, you must first own Dai!
You can follow these steps to interact with any of the erc20 token packages available in the connected registry.
export ETHPM_CLI_ETHERSCAN_API_KEY="YOUR_ETHERSCAN_KEY_HERE"
etherscan://[CONTRACT_ADDRESS]:[CHAIN_ID]
i.e.
etherscan://0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359:1
Then, all you need to do is execute the following command, and the CLI will package up the verified contract, and write it to your local _ethpm_packages/
directory. You can use any package name or package version that makes sense.
ethpm install etherscan://0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359:1 --package-name my-package --package-version 1.0.0
By default, this command will write the generated manifest to an _ethpm_packages/
directory in the current working directory. If no such directory is found, it will automatically generate one. You can also pass the command an --ethpm-dir
flag to target a specific directory.
You can check out your newly created package by exploring the _ethpm_packages/
directory, and you will also see it listed by calling ethpm list
.
We'll be using the erc20 registry located on the Ethereum mainnet at under the ENS name erc20.snakecharmers.eth
which resolves to the address 0x16763EaE3709e47eE6140507Ff84A61c23B0098A
. You can explore the various erc20 tokens available on this registry on the . Since our w3
instance is already connected to mainnet, all we have to do is set the registry.
Since the contract instance data is contained within the dai-dai
package, it's quite simple to grab a representing the Dai token contract. We will use the contract type DSToken
to grab the Dai instance.
Sidenote: dai_package
is an instance of py-ethpm
's . This class automatically filters available deployments that live on the connected w3
instance. To access a package's deployments that live on a different blockchain, you can pass a new w3
instance to Package.update_w3()
.
Each package in the above erc20 registry was created using the command in combination with its corresponding . If you're the curious type, and want to re-generate the package locally, these steps can be used to package up any of Etherscan's verified contracts on any blockchain.
To generate an Etherscan verified contract package, we'll use ethPM CLI. So you'll need to have that installed on your machine. Steps for how to get setup can be found .
Next, you'll need an Etherscan API key. If you don't already have an Etherscan API key, you can grab one . Then set it as the following environment variable.
ethPM CLI uses to identify the target verified contract. Once you have the address and chain ID of your verified contract, the URI simply follows this scheme.