From 03afff12be97fba41a40acd989ff9147a971affd Mon Sep 17 00:00:00 2001 From: jlwllmr <95916148+jlwllmr@users.noreply.github.com> Date: Tue, 11 Feb 2025 11:46:13 +0000 Subject: [PATCH 1/9] Copy adjustments --- README.md | 61 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 34 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index ef4e8a3..0810373 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,20 @@ # Linea Token List -This repository maintains a list of ERC20 tokens available on Linea. The list is kept updated by the community. For comprehensive details and additional context, visit our [Linea Token List](https://consensys.github.io/linea-token-list/). +This repository maintains lists of ERC20 tokens available on Linea. There are two main lists each for Linea Mainnet and Linea Sepolia: + +- A full list, automatically updated whenever a new token is bridged to Linea using the canonical bridge, and; +- A shortlist, which is manually curated by our team, and updated based on submitted PRs. + +The information in this repository is also available in a [frontend app](https://consensys.github.io/linea-token-list/). If you want to add a token or validate an addition, please follow the procedures outlined below. -## How to add a Token (for community) +## Add a token to the shortlist -IMPORTANT: Before adding a new token, it is mandatory to verify the token's smart contract. This ensures the authenticity and security of the token. Contract verification should be done through [LineaScan's](https://lineascan.build/) or [Etherscan's](https://etherscan.io/) contract verification tools. +> [!IMPORTANT] +> Before adding a new token, you must verify the token's smart contract. This ensures the authenticity and security of the token. Contract verification should be done through [LineaScan's](https://lineascan.build/) or [Etherscan's](https://etherscan.io/) contract verification tools. -To add a new Token, +To add a new token: 1. `Fork` this repository to your own GitHub account, then `clone` your fork and create a new branch. @@ -20,7 +26,7 @@ cd linea-token-list git checkout -b feat/ ``` -2. Fill out the [./json/linea-goerli-token-shortlist.json](./json/linea-goerli-token-shortlist.json) with your token's information. +2. Fill out the [./json/linea-goerli-token-shortlist.json](./json/linea-goerli-token-shortlist.json) with your token's information. Make sure you adhere to the [guidelines](#guidelines). Example: @@ -49,14 +55,14 @@ Example: ] ``` -Description of the fields: +Fields: | Name | Description | type | Required? | | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----------------------------------------------------------- | | chainId | The typically used number identifier for the chain on which the token was issued | number | Mandatory | | chainURI | A resolvable URI to the genesis block of the chain on which the token was issued following the RFC 3986 standard | string | Mandatory | | tokenId | A resolvable URI of the token following the RFC 3986 standard to for example the deployment transaction of the token, or a DID identifying the token and its issuer | string | Mandatory | -| tokenType | Describes the type of token (eg: `canonical-bridge`, `bridge-reserved`, `external-bridge`, `native`), see details bellow. | string | Mandatory | +| tokenType | Describes the type of token (eg: `canonical-bridge`, `bridge-reserved`, `external-bridge`, `native`), see details below. | string | Mandatory | | address | Address of the token smart contract | string | Mandatory | | name | Token name | string | Mandatory | | symbol | Token symbol e.g. UNI | string | Mandatory | @@ -71,45 +77,36 @@ Description of the fields: Token types: -- `canonical-bridge`: token originally on Ethereum, which has been bridged to Linea with Linea Canonical Bridge. +- `canonical-bridge`: token originally on Ethereum, which has been bridged to Linea with the [Linea canonical bridge](https://bridge.linea.build/) (also known as the native bridge). - These tokens are automatically discovered. + These tokens are automatically added to the full list when bridged. - Example: DAI on Ethereum Mainnet has this address `0x6b175474e89094c44da98b954eedeac495271d0f`, after being bridged on Linea it has this address `0x4AF15ec2A0BD43Db75dd04E62FAA3B8EF36b00d5` + **Example**: DAI on Ethereum Mainnet has this address `0x6b175474e89094c44da98b954eedeac495271d0f`, after being bridged on Linea it has this address `0x4AF15ec2A0BD43Db75dd04E62FAA3B8EF36b00d5` -- `bridge-reserved`: token reserved in the canonical bridge smart contract to prevent any bridged Linea Canonical Bridge. +- `bridge-reserved`: token reserved in the canonical bridge smart contract to prevent any bridged **Linea Canonical Bridge**. This type needs to be added manually. - Example: USDC, WETH. + **Example**: USDC, WETH. - `external-bridge`: token bridged on another layer (Ethereum in general) and Linea using a custom protocol bridge. This type needs to be added manually. - Example: PEEL, USDC. + **Example**: PEEL, USDC. - `native`: Token first created on Linea. This type needs to be added manually. - Example: WETH. - -Additional guidelines: - -- Please ensure the completed JSON follows the schema outlined in [./json/schema/l2-token-list-schema.json](./json/schema/l2-token-list-schema.json). -- Make sure to add the token following alphabetical order of the `symbol` field. -- Update the `updatedAt` (and potentially `createdAt`) fields for the file and the token -- Update the file version: - - Increase `patch` when modifying information of an existing token. - - Increase `minor` when modifying adding a new token. - - Increase `major` when changing the structure of the file. + **Example**: WETH. 3. Commit your changes and push your branch. -Note: Only commit the list file. Do not modify the schema or the templates. +> [!NOTE] +> Only commit the list file. Do not modify the schema or the templates. -4. Go to https://github.com/ConsenSys/linea-token-list/pulls and create a new PR. Make sure to set the base branch as `main`. +4. Go to the [pull requests page](https://github.com/ConsenSys/linea-token-list/pulls) and create a new PR. Make sure to set the base branch as `main`. A GitHub Actions workflow will automatically verify the integrity of your JSON. If the check passes, validators will review the new list. If all the information are correct, they will approve the token addition. @@ -117,7 +114,17 @@ In case of a failing check, refer to the error message in the [Actions](https:// Happy contributing! -## Technical Resources (for Maintainers) +## Guidelines + +- Please ensure the completed JSON follows the schema outlined in [./json/schema/l2-token-list-schema.json](./json/schema/l2-token-list-schema.json). +- Make sure to add the token following alphabetical order of the `symbol` field. +- Update the `updatedAt` (and potentially `createdAt`) fields for the file and the token +- Update the file version: + - Increase `patch` when modifying information of an existing token. + - Increase `minor` when modifying adding a new token. + - Increase `major` when changing the structure of the file. + +## Technical resources (for maintainers) - [Development Guide](./docs/development.md). - [Technical Processes](./docs/technical-processes.md). From b24b5d320ae1bf3c71764daf3284bf616440323a Mon Sep 17 00:00:00 2001 From: jlwllmr <95916148+jlwllmr@users.noreply.github.com> Date: Tue, 11 Feb 2025 11:50:26 +0000 Subject: [PATCH 2/9] Copy update --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 0810373..e061cf1 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,8 @@ If you want to add a token or validate an addition, please follow the procedures ## Add a token to the shortlist +If you represent a project with a token on Linea, it's beneficial to add it to the shortlist. Tokens on this list are reflected in the UI of the Linea canonical bridge. + > [!IMPORTANT] > Before adding a new token, you must verify the token's smart contract. This ensures the authenticity and security of the token. Contract verification should be done through [LineaScan's](https://lineascan.build/) or [Etherscan's](https://etherscan.io/) contract verification tools. From 759f43bbb2abba6dfe5783a2c563baf23198f75d Mon Sep 17 00:00:00 2001 From: jlwllmr <95916148+jlwllmr@users.noreply.github.com> Date: Tue, 11 Feb 2025 11:54:12 +0000 Subject: [PATCH 3/9] Amend typo --- PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index 84358f4..bfd66de 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -1,5 +1,5 @@ Action: add / update / remove token (keep those that applies) -Context / rational: +Context / rationale: PR checklist: - [ ] I've verified and published the contract source From 716c46a68bb34896c98a08b542467586829c40b1 Mon Sep 17 00:00:00 2001 From: jlwllmr <95916148+jlwllmr@users.noreply.github.com> Date: Tue, 11 Feb 2025 13:09:49 +0000 Subject: [PATCH 4/9] Amend linked JSON to mainnet --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e061cf1..53fe247 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ cd linea-token-list git checkout -b feat/ ``` -2. Fill out the [./json/linea-goerli-token-shortlist.json](./json/linea-goerli-token-shortlist.json) with your token's information. Make sure you adhere to the [guidelines](#guidelines). +2. Fill out the [./json/linea-goerli-token-shortlist.json](./json/linea-mainnet-token-shortlist.json) with your token's information. Make sure you adhere to the [guidelines](#guidelines). Example: From f2fd047f47b8e9b580ab15fca148dcc776003a11 Mon Sep 17 00:00:00 2001 From: jlwllmr <95916148+jlwllmr@users.noreply.github.com> Date: Tue, 11 Feb 2025 13:16:01 +0000 Subject: [PATCH 5/9] Fix --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 53fe247..52100a6 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ cd linea-token-list git checkout -b feat/ ``` -2. Fill out the [./json/linea-goerli-token-shortlist.json](./json/linea-mainnet-token-shortlist.json) with your token's information. Make sure you adhere to the [guidelines](#guidelines). +2. Fill out the [linea-mainnet-token-shortlist.json](./json/linea-mainnet-token-shortlist.json) with your token's information. Make sure you adhere to the [guidelines](#guidelines). Example: From ea9840db383c5bc69ccd4e8932dce71bea5b236f Mon Sep 17 00:00:00 2001 From: jlwllmr <95916148+jlwllmr@users.noreply.github.com> Date: Tue, 11 Feb 2025 13:18:57 +0000 Subject: [PATCH 6/9] Another adjustment --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 52100a6..60d583a 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,8 @@ If you want to add a token or validate an addition, please follow the procedures If you represent a project with a token on Linea, it's beneficial to add it to the shortlist. Tokens on this list are reflected in the UI of the Linea canonical bridge. > [!IMPORTANT] -> Before adding a new token, you must verify the token's smart contract. This ensures the authenticity and security of the token. Contract verification should be done through [LineaScan's](https://lineascan.build/) or [Etherscan's](https://etherscan.io/) contract verification tools. +> Before adding a new token, you must verify the token's smart contract on an explorer. This ensures the authenticity and security of the token. Contract verification should be done through [LineaScan's](https://lineascan.build/verifyContract) or via Hardhat's plugin ([`hardhat-verify`](https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-verify)). +> The same verification should be done on Ethereum L1 and Linea if necessary. To add a new token: From 62c0618f4e5718ce8f3e40d04cd77e5777f7bbbe Mon Sep 17 00:00:00 2001 From: jlwllmr <95916148+jlwllmr@users.noreply.github.com> Date: Tue, 11 Feb 2025 13:22:25 +0000 Subject: [PATCH 7/9] Remove Goerli list --- json/linea-goerli-token-shortlist.json | 202 ------------------------- 1 file changed, 202 deletions(-) delete mode 100644 json/linea-goerli-token-shortlist.json diff --git a/json/linea-goerli-token-shortlist.json b/json/linea-goerli-token-shortlist.json deleted file mode 100644 index a0fe32d..0000000 --- a/json/linea-goerli-token-shortlist.json +++ /dev/null @@ -1,202 +0,0 @@ -{ - "type": "LineaTokenList", - "tokenListId": "https://raw.githubusercontent.com/Consensys/linea-token-list/main/json/linea-goerli-token-shortlist.json", - "name": "Linea Goerli Token List", - "createdAt": "2023-06-23", - "updatedAt": "2023-09-29", - "versions": [ - { - "major": 1, - "minor": 2, - "patch": 5 - } - ], - "tokens": [ - { - "chainId": 59140, - "chainURI": "https://goerli.lineascan.build/block/0", - "tokenId": "https://goerli.lineascan.build/token/0xD2340c4ec834bf43c05B9EcCd60EeD3a20892Dcc", - "tokenType": ["native"], - "address": "0xD2340c4ec834bf43c05B9EcCd60EeD3a20892Dcc", - "name": "APE", - "symbol": "APE", - "decimals": 18, - "createdAt": "2023-04-10", - "updatedAt": "2023-04-10", - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/18876.png" - }, - { - "chainId": 59140, - "chainURI": "https://goerli.lineascan.build/block/0", - "tokenId": "https://goerli.lineascan.build/token/0x5471ea8f739dd37E9B81Be9c5c77754D8AA953E4", - "tokenType": ["native"], - "address": "0x5471ea8f739dd37E9B81Be9c5c77754D8AA953E4", - "name": "BNB", - "symbol": "BNB", - "decimals": 18, - "createdAt": "2023-06-23", - "updatedAt": "2023-06-23", - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/1839.png" - }, - { - "chainId": 59140, - "chainURI": "https://goerli.lineascan.build/block/0", - "tokenId": "https://goerli.lineascan.build/token/0xeEfF322f4590A1A84BB3486d4BA0038669A811aD", - "tokenType": ["native"], - "address": "0xeEfF322f4590A1A84BB3486d4BA0038669A811aD", - "name": "DOGE", - "symbol": "DOGE", - "decimals": 18, - "createdAt": "2023-06-27", - "updatedAt": "2023-06-27", - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/74.png" - }, - { - "chainId": 59140, - "chainURI": "https://goerli.lineascan.build/block/0", - "tokenId": "https://goerli.lineascan.build/token/0x76292f4799f692C4d3C3a09F44982D4229A0d04B", - "tokenType": ["canonical-bridge"], - "address": "0x76292f4799f692C4d3C3a09F44982D4229A0d04B", - "name": "HOP", - "symbol": "HOP", - "decimals": 18, - "createdAt": "2023-04-27", - "updatedAt": "2023-04-27", - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/20547.png", - "extension": { - "rootChainId": 5, - "rootChainURI": "https://goerli.etherscan.io/block/0", - "rootAddress": "0x38aF6928BF1Fd6B3c768752e716C49eb8206e20c" - } - }, - { - "chainId": 59140, - "chainURI": "https://goerli.lineascan.build/block/0", - "tokenId": "https://goerli.lineascan.build/token/0xcAA61BCAe7D37Fe9C33c0D8671448254eef44D63", - "tokenType": ["native"], - "address": "0xcAA61BCAe7D37Fe9C33c0D8671448254eef44D63", - "name": "Matic", - "symbol": "MATIC", - "decimals": 18, - "createdAt": "2023-06-23", - "updatedAt": "2023-06-23", - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/3890.png" - }, - { - "chainId": 59140, - "chainURI": "https://goerli.lineascan.build/block/0", - "tokenId": "https://goerli.lineascan.build/token/0xD14754f4db08D19b5def26D33B94bdb5c3084c8a", - "tokenType": ["canonical-bridge"], - "address": "0xD14754f4db08D19b5def26D33B94bdb5c3084c8a", - "name": "Meta Apes Peel", - "symbol": "PEEL", - "decimals": 18, - "createdAt": "2023-08-24", - "updatedAt": "2023-08-30", - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/21013.png", - "extension": { - "rootChainId": 1, - "rootChainURI": "https://etherscan.io/block/0", - "rootAddress": "0xd707E82E79660B7576CCd4319595C80C0e303e4A" - } - }, - { - "chainId": 59144, - "chainURI": "https://lineascan.build/block/0", - "tokenId": "https://lineascan.build/address/0xE2a6e74118E708f7652FC4c74D2F9Ee5Fa210563", - "tokenType": ["native"], - "address": "0xE2a6e74118E708f7652FC4c74D2F9Ee5Fa210563", - "name": "$NotWifGary", - "symbol": "NWG", - "decimals": 18, - "createdAt": "2024-05-24", - "updatedAt": "2024-05-24", - "logoURI": "https://notwifgary.xyz/logo512.png" - }, - { - "chainId": 59140, - "chainURI": "https://goerli.lineascan.build/block/0", - "tokenId": "https://goerli.lineascan.build/token/0x0a981c2EBE4395562B4EE29FeBd137F2f843b115", - "tokenType": ["canonical-bridge"], - "address": "0x0a981c2EBE4395562B4EE29FeBd137F2f843b115", - "name": "Uniswap", - "symbol": "UNI", - "decimals": 18, - "createdAt": "2023-06-26", - "updatedAt": "2023-06-26", - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/7083.png", - "extension": { - "rootChainId": 5, - "rootChainURI": "https://goerli.etherscan.io/block/0", - "rootAddress": "0x41E5E6045f91B61AACC99edca0967D518fB44CFB" - } - }, - { - "chainId": 59140, - "chainURI": "https://goerli.lineascan.build/block/0", - "tokenId": "https://goerli.lineascan.build/token/0xB4257F31750961C8e536f5cfCBb3079437700416", - "tokenType": ["bridge-reserved", "external-bridge"], - "address": "0xB4257F31750961C8e536f5cfCBb3079437700416", - "name": "USD Coin", - "symbol": "USDC", - "decimals": 6, - "createdAt": "2023-06-23", - "updatedAt": "2023-09-11", - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/3408.png", - "extension": { - "rootChainId": 5, - "rootChainURI": "https://goerli.etherscan.io/block/0", - "rootAddress": "0x07865c6e87b9f70255377e024ace6630c1eaa37f" - } - }, - { - "chainId": 59140, - "chainURI": "https://goerli.lineascan.build/block/0", - "tokenId": "https://goerli.lineascan.build/token/0x43a4f69Fa1d2d69397393F6A4Deca9fA05714Af9", - "tokenType": ["canonical-bridge"], - "address": "0x43a4f69Fa1d2d69397393F6A4Deca9fA05714Af9", - "name": "USD Tether", - "symbol": "USDT", - "decimals": 6, - "createdAt": "2023-06-27", - "updatedAt": "2023-06-27", - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/825.png", - "extension": { - "rootChainId": 5, - "rootChainURI": "https://goerli.etherscan.io/block/0", - "rootAddress": "0xfad6367E97217cC51b4cd838Cc086831f81d38C2" - } - }, - { - "chainId": 59140, - "chainURI": "https://goerli.lineascan.build/block/0", - "tokenId": "https://goerli.lineascan.build/token/0xDbcd5BafBAA8c1B326f14EC0c8B125DB57A5cC4c", - "tokenType": ["native"], - "address": "0xDbcd5BafBAA8c1B326f14EC0c8B125DB57A5cC4c", - "name": "Wrapped Bitcoin", - "symbol": "WBTC", - "decimals": 18, - "createdAt": "2023-06-23", - "updatedAt": "2023-06-23", - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/3717.png" - }, - { - "chainId": 59140, - "chainURI": "https://goerli.lineascan.build/block/0", - "tokenId": "https://goerli.lineascan.build/token/0x2C1b868d6596a18e32E61B901E4060C872647b6C", - "tokenType": ["canonical-bridge"], - "address": "0x2C1b868d6596a18e32E61B901E4060C872647b6C", - "name": "Wrapped Ethereum", - "symbol": "WETH", - "decimals": 18, - "createdAt": "2023-06-26", - "updatedAt": "2023-09-15", - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/2396.png", - "extension": { - "rootChainId": 5, - "rootChainURI": "https://goerli.etherscan.io/block/0", - "rootAddress": "0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6" - } - } - ] -} From 98a3743ca4a683db25f6d68edf441bd918b9e24c Mon Sep 17 00:00:00 2001 From: jlwllmr <95916148+jlwllmr@users.noreply.github.com> Date: Wed, 12 Feb 2025 14:56:13 +0000 Subject: [PATCH 8/9] Amend workflow --- .github/workflows/verify-and-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/verify-and-test.yml b/.github/workflows/verify-and-test.yml index a909364..0822810 100644 --- a/.github/workflows/verify-and-test.yml +++ b/.github/workflows/verify-and-test.yml @@ -40,7 +40,7 @@ jobs: - name: Validate JSON run: | - jsonschema -i ./json/linea-goerli-token-shortlist.json ./json/schema/l2-token-list-schema.json + jsonschema -i ./json/linea-sepolia-token-shortlist.json ./json/schema/l2-token-list-schema.json verify_mainnet_shortlist: runs-on: ubuntu-latest From 404521ae48c27c11dbd404a9d923ec0b7b8b4794 Mon Sep 17 00:00:00 2001 From: jlwllmr <95916148+jlwllmr@users.noreply.github.com> Date: Thu, 13 Feb 2025 10:17:16 +0000 Subject: [PATCH 9/9] Amend to broaden verification options --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 60d583a..a9019f8 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ If you want to add a token or validate an addition, please follow the procedures If you represent a project with a token on Linea, it's beneficial to add it to the shortlist. Tokens on this list are reflected in the UI of the Linea canonical bridge. > [!IMPORTANT] -> Before adding a new token, you must verify the token's smart contract on an explorer. This ensures the authenticity and security of the token. Contract verification should be done through [LineaScan's](https://lineascan.build/verifyContract) or via Hardhat's plugin ([`hardhat-verify`](https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-verify)). +> Before adding a new token, you must verify the token's smart contract on an explorer. This ensures the authenticity and security of the token. You can verify the smart contract through [LineaScan](https://lineascan.build/verifyContract) or [other tools](https://docs.linea.build/get-started/how-to/verify-smart-contract). > The same verification should be done on Ethereum L1 and Linea if necessary. To add a new token: