@metamask/contract-metadata
A mapping of checksummed Ethereum contract addresses to metadata, like names, and images of their logos.
All address keys follow the EIP 55 address checksum format.
This repository is effectively frozen. We recommend that developers of new tokens use EIP 747 to ask the user's permission to display your tokens in their wallet. This reduces the dangers of airdrop-based phishing, and reduces administrative overhead from managing this list.
Usage
You can install from npm with npm install @metamask/contract-metadata
and use it in your code like this:
import contractMap from '@metamask/contract-metadata'
import ethJSUtil from 'ethereumjs-util'
const { toChecksumAddress } = ethJSUtil
function imageElFor (address) {
const metadata = contractMap[toChecksumAddress(address)]
if (metadata?.logo) {
const fileName = metadata.logo
const path = `${__dirname}/images/contract/${fileName}`
const img = document.createElement('img')
img.src = path
img.style.width = '100%'
return img
}
}
imageElFor ("0x06012c8cf97BEaD5deAe237070F9587f8E7A266d")
Submission Process
Maintaining this list is a considerable chore, and it is not our highest priority. We do not guarantee inclusion in this list on any urgent timeline. We are actively looking for fair and safe ways to maintain a list like this in a decentralized way, because maintaining it is a large and security-delicate task.
- Fork this repository.
- Add your logo image in a web-safe format to the
images
folder. - Add an entry to the
contract-map.json
file with the specified address as the key, and the image file's name as the value.
Criteria:
- The icon should be small, square, but high resolution, ideally a vector/svg.
- The address should be in checksum format or it will not be accepted.
- Do not add your entry to the end of the JSON map, messing with the trailing comma. Your pull request should only be an addition of lines, and any line removals should be deliberate deprecations of those logos.
- PR should include link to official project website referencing the suggested address.
- Project website should include explanation of project.
- Project should have clear signs of activity, either traffic on the network, activity on GitHub, or community buzz.
- Nice to have a verified source code on a block explorer like Etherscan.
- Must have a 'NEUTRAL' reputation or 'OK' reputation on Etherscan.
A sample submission:
{
"0x6090A6e47849629b7245Dfa1Ca21D94cd15878Ef": {
"name": "ENS Registrar",
"logo": "ens.svg"
}
}
Tokens should include a field "erc20": true
, and can include additional fields:
- symbol (a five-character or less ticker symbol)
- decimals (precision of the tokens stored)
A full list of permitted fields can be found in the permitted-fields.json file.
Release & Publishing
The project follows the same release process as the other libraries in the MetaMask organization. The GitHub Actions action-create-release-pr
and action-publish-release
are used to automate the release process; see those repositories for more information about how they work.
-
Choose a release version.
- The release version should be chosen according to SemVer. Analyze the changes to see whether they include any breaking changes, new features, or deprecations, then choose the appropriate SemVer version. See the SemVer specification for more information.
-
If this release is backporting changes onto a previous release, then ensure there is a major version branch for that version (e.g.
1.x
for av1
backport release).- The major version branch should be set to the most recent release with that major version. For example, when backporting a
v1.0.2
release, you'd want to ensure there was a1.x
branch that was set to thev1.0.1
tag.
- The major version branch should be set to the most recent release with that major version. For example, when backporting a
-
Trigger the
workflow_dispatch
event manually for theCreate Release Pull Request
action to create the release PR.- For a backport release, the base branch should be the major version branch that you ensured existed in step 2. For a normal release, the base branch should be the main branch for that repository (which should be the default value).
- This should trigger the
action-create-release-pr
workflow to create the release PR.
-
Update the changelog to move each change entry into the appropriate change category (See here for the full list of change categories, and the correct ordering), and edit them to be more easily understood by users of the package.
- Generally any changes that don't affect consumers of the package (e.g. lockfile changes or development environment changes) are omitted. Exceptions may be made for changes that might be of interest despite not having an effect upon the published package (e.g. major test improvements, security improvements, improved documentation, etc.).
- Try to explain each change in terms that users of the package would understand (e.g. avoid referencing internal variables/concepts).
- Consolidate related changes into one change entry if it makes it easier to explain.
- Run
yarn auto-changelog validate --rc
to check that the changelog is correctly formatted.
-
Review and QA the release.
- If changes are made to the base branch, the release branch will need to be updated with these changes and review/QA will need to restart again. As such, it's probably best to avoid merging other PRs into the base branch while review is underway.
-
Squash & Merge the release.
- This should trigger the
action-publish-release
workflow to tag the final release commit and publish the release on GitHub.
- This should trigger the
-
Publish the release on npm.
- Wait for the
publish-release
GitHub Action workflow to finish. This should trigger a second job (publish-npm
), which will wait for a run approval by thenpm publishers
team. - Approve the
publish-npm
job (or ask somebody on the npm publishers team to approve it for you). - Once the
publish-npm
job has finished, check npm to verify that it has been published.
- Wait for the