diff --git a/README.md b/README.md
index 9efdc3b66..af8c0f361 100644
--- a/README.md
+++ b/README.md
@@ -24,6 +24,7 @@ For right now, each OP Chain has their own review process. So, if you are adding
- If you're adding a token to `Base` (e.g. `base` [mainnet] or `base-sepolia` [testnet]), instead of using the predeploy token factory on Base, we recommend you use the token factory [listed here](https://docs.base.org/base-contracts/#l2-contract-addresses) to avoid having a token address that may conflict with a different token on Optimism.
- If you are adding a token to `Zora`: please use the [`zora` label](https://github.com/ethereum-optimism/ethereum-optimism.github.io/labels/zora) and add [@tbtstl](https://github.com/tbtstl) as a reviewer.
- If you are adding a token to `Mode`: please use the [`mode` label](https://github.com/ethereum-optimism/ethereum-optimism.github.io/labels/mode).
+- If you are adding a token to `Lisk` (e.g. `lisk` [mainnet] or `lisk-sepolia` [testnet]): please use the [`lisk` label](https://github.com/ethereum-optimism/ethereum-optimism.github.io/labels/lisk) and add [@shuse2](https://github.com/shuse2) as a reviewer.
### Automated checks
@@ -115,6 +116,8 @@ We currently accept tokens on the following chains:
- `optimism-sepolia`
- `mode`
- `pgn`
+- `lisk`
+- `lisk-sepolia`
#### Non-bridgable tokens
diff --git a/bin/cli.ts b/bin/cli.ts
index 8cea0a5e3..8106a648d 100644
--- a/bin/cli.ts
+++ b/bin/cli.ts
@@ -32,8 +32,8 @@ program
fs.writeFileSync(
validationResultsFilePath,
`Below are the results from running validation for the token changes. To ` +
- `re-run the validation locally run: ` +
- `pnpm validate --datadir ./data --tokens ${options.tokens}\n\n`
+ `re-run the validation locally run: ` +
+ `pnpm validate --datadir ./data --tokens ${options.tokens}\n\n`
)
}
diff --git a/data/AURA/data.json b/data/AURA/data.json
new file mode 100644
index 000000000..0c986b379
--- /dev/null
+++ b/data/AURA/data.json
@@ -0,0 +1,20 @@
+{
+ "name": "Aura",
+ "symbol": "AURA",
+ "description": "AURA is a governance and utility token used on Aura Finance. This token is an OFT bridged with LayerZero.",
+ "decimals": 18,
+ "website": "https://app.aura.finance/",
+ "twitter": "@AuraFinance",
+ "tokens": {
+ "ethereum": {
+ "address": "0xC0c293ce456fF0ED870ADd98a0828Dd4d2903DBF"
+ },
+ "optimism": {
+ "address": "0x1509706a6c66CA549ff0cB464de88231DDBe213B"
+ },
+ "base": {
+ "address": "0x1509706a6c66CA549ff0cB464de88231DDBe213B"
+ }
+ },
+ "nobridge": true
+}
\ No newline at end of file
diff --git a/data/AURA/logo.svg b/data/AURA/logo.svg
new file mode 100644
index 000000000..e5b454036
--- /dev/null
+++ b/data/AURA/logo.svg
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/data/CENT/data.json b/data/CENT/data.json
new file mode 100644
index 000000000..b1981fe96
--- /dev/null
+++ b/data/CENT/data.json
@@ -0,0 +1,15 @@
+{
+ "name": "One Cent Coin",
+ "symbol": "CENT",
+ "decimals": 18,
+ "description": "A $0.01 stable meme coin.",
+ "nobridge": true,
+ "tokens": {
+ "base": {
+ "address": "0x2fa824bb2e06d6cac7dbab00be37dc0f3d440e8b",
+ "overrides": {
+ "symbol": "🇺🇸"
+ }
+ }
+ }
+}
diff --git a/data/CENT/logo.svg b/data/CENT/logo.svg
new file mode 100644
index 000000000..a697c8977
--- /dev/null
+++ b/data/CENT/logo.svg
@@ -0,0 +1,145 @@
+
+
+
diff --git a/data/LSK/data.json b/data/LSK/data.json
new file mode 100644
index 000000000..588299a31
--- /dev/null
+++ b/data/LSK/data.json
@@ -0,0 +1,37 @@
+{
+ "name": "Lisk",
+ "symbol": "LSK",
+ "decimals": 18,
+ "website": "https://lisk.com",
+ "twitter": "@LiskHQ",
+ "tokens": {
+ "ethereum": {
+ "address": "0x6033F7f88332B8db6ad452B7C6D5bB643990aE3f",
+ "overrides": {
+ "bridge": {
+ "lisk": "0x2658723Bf70c7667De6B25F99fcce13A16D25d08"
+ }
+ }
+ },
+ "lisk": {
+ "address": "0xac485391EB2d7D88253a7F1eF18C37f4242D1A24",
+ "overrides": {
+ "bridge": "0x4200000000000000000000000000000000000010"
+ }
+ },
+ "sepolia": {
+ "address": "0x16B840bA01e2b05fc2268eAf6d18892a11EC29D6",
+ "overrides": {
+ "bridge": {
+ "lisk-sepolia": "0x1Fb30e446eA791cd1f011675E5F3f5311b70faF5"
+ }
+ }
+ },
+ "lisk-sepolia": {
+ "address": "0x8a21CF9Ba08Ae709D64Cb25AfAA951183EC9FF6D",
+ "overrides": {
+ "bridge": "0x4200000000000000000000000000000000000010"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/data/LSK/logo.svg b/data/LSK/logo.svg
new file mode 100644
index 000000000..40a5cae74
--- /dev/null
+++ b/data/LSK/logo.svg
@@ -0,0 +1,33 @@
+
+
\ No newline at end of file
diff --git a/data/POPO/data.json b/data/POPO/data.json
new file mode 100644
index 000000000..d437ea531
--- /dev/null
+++ b/data/POPO/data.json
@@ -0,0 +1,14 @@
+{
+ "name": "Pepe's Dog",
+ "symbol": "POPO",
+ "decimals": 18,
+ "description": "Popo, Pepe's loyal dog, is a meme coin on the Base network that merges the playful and beloved concepts of Pepe and Doge. Designed to unite the masses through fun and community-driven engagement, Popo aims to bring joy and excitement to the crypto space.",
+ "website": "https://basedpopo.xyz",
+ "twitter": "https://x.com/BasedPopoCTO",
+ "nobridge": true,
+ "tokens": {
+ "base": {
+ "address": "0x7422f030958Edf9884cE9c46a211029E03eF6da7"
+ }
+ }
+}
diff --git a/data/POPO/logo.svg b/data/POPO/logo.svg
new file mode 100644
index 000000000..e34f75194
--- /dev/null
+++ b/data/POPO/logo.svg
@@ -0,0 +1,393 @@
+
+
diff --git a/optimism.tokenlist.json b/optimism.tokenlist.json
index 0b14b50a6..736957bfb 100644
--- a/optimism.tokenlist.json
+++ b/optimism.tokenlist.json
@@ -6,7 +6,7 @@
"layer2",
"infrastructure"
],
- "timestamp": "2024-07-12T11:26:19.539Z",
+ "timestamp": "2024-07-22T16:27:32.477Z",
"tokens": [
{
"chainId": 1,
@@ -450,6 +450,42 @@
"opTokenId": "ATH"
}
},
+ {
+ "chainId": 1,
+ "address": "0xC0c293ce456fF0ED870ADd98a0828Dd4d2903DBF",
+ "name": "Aura",
+ "symbol": "AURA",
+ "decimals": 18,
+ "logoURI": "https://ethereum-optimism.github.io/data/AURA/logo.svg",
+ "extensions": {
+ "opListId": "extended",
+ "opTokenId": "AURA"
+ }
+ },
+ {
+ "chainId": 10,
+ "address": "0x1509706a6c66CA549ff0cB464de88231DDBe213B",
+ "name": "Aura",
+ "symbol": "AURA",
+ "decimals": 18,
+ "logoURI": "https://ethereum-optimism.github.io/data/AURA/logo.svg",
+ "extensions": {
+ "opListId": "extended",
+ "opTokenId": "AURA"
+ }
+ },
+ {
+ "chainId": 8453,
+ "address": "0x1509706a6c66CA549ff0cB464de88231DDBe213B",
+ "name": "Aura",
+ "symbol": "AURA",
+ "decimals": 18,
+ "logoURI": "https://ethereum-optimism.github.io/data/AURA/logo.svg",
+ "extensions": {
+ "opListId": "extended",
+ "opTokenId": "AURA"
+ }
+ },
{
"chainId": 1,
"address": "0x616e8BfA43F920657B3497DBf40D6b1A02D4608d",
@@ -1128,6 +1164,18 @@
"opTokenId": "cbETH"
}
},
+ {
+ "chainId": 8453,
+ "address": "0x2fa824bb2e06d6cac7dbab00be37dc0f3d440e8b",
+ "name": "One Cent Coin",
+ "symbol": "🇺🇸",
+ "decimals": 18,
+ "logoURI": "https://ethereum-optimism.github.io/data/CENT/logo.svg",
+ "extensions": {
+ "opListId": "extended",
+ "opTokenId": "CENT"
+ }
+ },
{
"chainId": 1,
"address": "0xC4C2614E694cF534D407Ee49F8E44D125E4681c4",
@@ -3947,6 +3995,58 @@
"opTokenId": "LRC"
}
},
+ {
+ "chainId": 1,
+ "address": "0x6033F7f88332B8db6ad452B7C6D5bB643990aE3f",
+ "name": "Lisk",
+ "symbol": "LSK",
+ "decimals": 18,
+ "logoURI": "https://ethereum-optimism.github.io/data/LSK/logo.svg",
+ "extensions": {
+ "liskBridgeAddress": "0x2658723Bf70c7667De6B25F99fcce13A16D25d08",
+ "opListId": "extended",
+ "opTokenId": "LSK"
+ }
+ },
+ {
+ "chainId": 1135,
+ "address": "0xac485391EB2d7D88253a7F1eF18C37f4242D1A24",
+ "name": "Lisk",
+ "symbol": "LSK",
+ "decimals": 18,
+ "logoURI": "https://ethereum-optimism.github.io/data/LSK/logo.svg",
+ "extensions": {
+ "liskBridgeAddress": "0x4200000000000000000000000000000000000010",
+ "opListId": "extended",
+ "opTokenId": "LSK"
+ }
+ },
+ {
+ "chainId": 11155111,
+ "address": "0x16B840bA01e2b05fc2268eAf6d18892a11EC29D6",
+ "name": "Lisk",
+ "symbol": "LSK",
+ "decimals": 18,
+ "logoURI": "https://ethereum-optimism.github.io/data/LSK/logo.svg",
+ "extensions": {
+ "liskBridgeAddress": "0x1Fb30e446eA791cd1f011675E5F3f5311b70faF5",
+ "opListId": "extended",
+ "opTokenId": "LSK"
+ }
+ },
+ {
+ "chainId": 4202,
+ "address": "0x8a21CF9Ba08Ae709D64Cb25AfAA951183EC9FF6D",
+ "name": "Lisk",
+ "symbol": "LSK",
+ "decimals": 18,
+ "logoURI": "https://ethereum-optimism.github.io/data/LSK/logo.svg",
+ "extensions": {
+ "liskBridgeAddress": "0x4200000000000000000000000000000000000010",
+ "opListId": "extended",
+ "opTokenId": "LSK"
+ }
+ },
{
"chainId": 1,
"address": "0x5f98805a4e8be255a32880fdec7f6728c6568ba0",
@@ -5115,6 +5215,18 @@
"opTokenId": "POP"
}
},
+ {
+ "chainId": 8453,
+ "address": "0x7422f030958Edf9884cE9c46a211029E03eF6da7",
+ "name": "Pepe's Dog",
+ "symbol": "POPO",
+ "decimals": 18,
+ "logoURI": "https://ethereum-optimism.github.io/data/POPO/logo.svg",
+ "extensions": {
+ "opListId": "extended",
+ "opTokenId": "POPO"
+ }
+ },
{
"chainId": 1,
"address": "0xEC213F83defB583af3A000B1c0ada660b1902A0F",
@@ -8753,6 +8865,6 @@
"version": {
"major": 10,
"minor": 0,
- "patch": 96
+ "patch": 100
}
}
\ No newline at end of file
diff --git a/package.json b/package.json
index 2671ee08e..c03c547c5 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "@eth-optimism/tokenlist",
"description": "[Optimism] token list",
- "version": "10.0.96",
+ "version": "10.0.100",
"main": "dist/index.js",
"module": "dist/index.mjs",
"exports": {
diff --git a/src/chains.ts b/src/chains.ts
index 1162ad19b..ebb94cf51 100644
--- a/src/chains.ts
+++ b/src/chains.ts
@@ -23,7 +23,7 @@ export const NETWORK_DATA: Record = {
id: 8453,
name: 'Base',
provider: new ethers.providers.StaticJsonRpcProvider(
- 'https://mainnet.base.org',
+ 'https://mainnet.base.org'
),
layer: 2,
},
@@ -39,14 +39,25 @@ export const NETWORK_DATA: Record = {
id: 34443,
name: 'Mode',
provider: new ethers.providers.StaticJsonRpcProvider(
- 'https://mainnet.mode.network',
+ 'https://mainnet.mode.network'
+ ),
+ layer: 2,
+ },
+ lisk: {
+ id: 1135,
+ name: 'Lisk',
+ provider: new ethers.providers.StaticJsonRpcProvider(
+ 'https://rpc.api.lisk.com'
),
layer: 2,
},
sepolia: {
id: 11155111,
name: 'Sepolia',
- provider: new ethers.providers.StaticJsonRpcProvider(`https://sepolia.infura.io/v3/${DEFAULT_INFURA_KEY}`, 11155111),
+ provider: new ethers.providers.StaticJsonRpcProvider(
+ `https://sepolia.infura.io/v3/${DEFAULT_INFURA_KEY}`,
+ 11155111
+ ),
layer: 1,
},
'optimism-sepolia': {
@@ -74,6 +85,14 @@ export const NETWORK_DATA: Record = {
),
layer: 2,
},
+ 'lisk-sepolia': {
+ id: 4202,
+ name: 'Lisk Sepolia',
+ provider: new ethers.providers.StaticJsonRpcProvider(
+ 'https://rpc.sepolia-api.lisk.com'
+ ),
+ layer: 2,
+ },
}
interface L2BridgeInformation {
@@ -101,6 +120,9 @@ export const L2_STANDARD_BRIDGE_INFORMATION: Record<
mode: {
l2StandardBridgeAddress: '0x4200000000000000000000000000000000000010',
},
+ lisk: {
+ l2StandardBridgeAddress: '0x4200000000000000000000000000000000000010',
+ },
'optimism-sepolia': {
l2StandardBridgeAddress: '0x4200000000000000000000000000000000000010',
},
@@ -110,6 +132,9 @@ export const L2_STANDARD_BRIDGE_INFORMATION: Record<
'pgn-sepolia': {
l2StandardBridgeAddress: '0x4200000000000000000000000000000000000010',
},
+ 'lisk-sepolia': {
+ l2StandardBridgeAddress: '0x4200000000000000000000000000000000000010',
+ },
}
export const L2_TO_L1_PAIR: Partial> = {
@@ -117,9 +142,11 @@ export const L2_TO_L1_PAIR: Partial> = {
base: 'ethereum',
pgn: 'ethereum',
mode: 'ethereum',
+ lisk: 'ethereum',
'optimism-sepolia': 'sepolia',
'base-sepolia': 'sepolia',
- 'pgn-sepolia': 'sepolia'
+ 'pgn-sepolia': 'sepolia',
+ 'lisk-sepolia': 'sepolia',
}
export const L1_STANDARD_BRIDGE_INFORMATION: Record<
@@ -143,6 +170,10 @@ export const L1_STANDARD_BRIDGE_INFORMATION: Record<
l2Chain: 'mode',
l1StandardBridgeAddress: '0x735aDBbE72226BD52e818E7181953f42E3b0FF21',
},
+ {
+ l2Chain: 'lisk',
+ l1StandardBridgeAddress: '0x2658723Bf70c7667De6B25F99fcce13A16D25d08',
+ },
],
sepolia: [
{
@@ -157,5 +188,9 @@ export const L1_STANDARD_BRIDGE_INFORMATION: Record<
l2Chain: 'base-sepolia',
l1StandardBridgeAddress: '0xfd0Bf71F60660E2f608ed56e1659C450eB113120',
},
- ]
+ {
+ l2Chain: 'lisk-sepolia',
+ l1StandardBridgeAddress: '0x1Fb30e446eA791cd1f011675E5F3f5311b70faF5',
+ },
+ ],
}
diff --git a/src/generate.ts b/src/generate.ts
index 8fea6afd4..757fc1acf 100644
--- a/src/generate.ts
+++ b/src/generate.ts
@@ -119,7 +119,8 @@ const getBridges = (tokenData: TokenData, chain: string, token: Token) => {
)
}
const networkSep = l2Chain.indexOf('-')
- const chainName = networkSep === -1 ? l2Chain : l2Chain.slice(0, networkSep)
+ const chainName =
+ networkSep === -1 ? l2Chain : l2Chain.slice(0, networkSep)
const bridgeKey = `${chainName}BridgeAddress`
return {
[bridgeKey]:
diff --git a/src/schemas.ts b/src/schemas.ts
index 23dd9c2d1..3e056cb69 100644
--- a/src/schemas.ts
+++ b/src/schemas.ts
@@ -15,7 +15,7 @@ export const TOKEN_SCHEMA = {
},
symbol: {
type: 'string',
- pattern: '^\\S+$' // allow unicode
+ pattern: '^\\S+$', // allow unicode
},
decimals: {
type: 'integer',
@@ -62,11 +62,13 @@ export const TOKEN_DATA_SCHEMA = {
ethereum: TOKEN_SCHEMA,
optimism: TOKEN_SCHEMA,
base: TOKEN_SCHEMA,
+ lisk: TOKEN_SCHEMA,
mode: TOKEN_SCHEMA,
pgn: TOKEN_SCHEMA,
sepolia: TOKEN_SCHEMA,
'base-sepolia': TOKEN_SCHEMA,
'optimism-sepolia': TOKEN_SCHEMA,
+ 'lisk-sepolia': TOKEN_SCHEMA,
},
additionalProperties: false,
anyOf: [
@@ -75,9 +77,11 @@ export const TOKEN_DATA_SCHEMA = {
{ required: ['base'] },
{ required: ['mode'] },
{ required: ['pgn'] },
+ { required: ['lisk'] },
{ required: ['sepolia'] },
{ required: ['base-sepolia'] },
{ required: ['optimism-sepolia'] },
+ { required: ['lisk-sepolia'] },
],
},
},
diff --git a/src/types.ts b/src/types.ts
index eedfc374c..b04942aad 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -29,8 +29,20 @@ export type Chain =
| 'pgn-sepolia'
| 'sepolia'
| 'mode'
+ | 'lisk'
+ | 'lisk-sepolia'
-const l2Chains = ['optimism', 'optimism-sepolia', 'base', 'base-sepolia', 'pgn-sepolia', 'pgn', 'mode'] as const
+const l2Chains = [
+ 'optimism',
+ 'optimism-sepolia',
+ 'base',
+ 'base-sepolia',
+ 'pgn-sepolia',
+ 'pgn',
+ 'mode',
+ 'lisk',
+ 'lisk-sepolia',
+] as const
export type L2Chain = typeof l2Chains[number]
export const isL2Chain = (chain: string): chain is L2Chain => {