Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,14 @@
- [ ] This is a **bridged** token
- Bridge Address: `0x...`

### Registry Verification

- [ ] **Issuer verified** — submitted or approved by the issuer's official organization
- [ ] **Community verified** — community asset accepted after maintainer review
- [ ] **Infrastructure verified** — official MegaETH protocol infrastructure
- **Method**: `source-submission | maintainer-review | official-infrastructure`
- **Evidence**: <!-- Link to the official source, discussion, or documentation when applicable -->

### Checklist

- [ ] Created folder `data/<SYMBOL>/`
Expand Down
7 changes: 7 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,13 @@ Each chain entry may include:
- `bridge`
- `isOFT`

Each root token record must also include:

- `verification.status` — `issuer`, `community`, or `infrastructure`
- `verification.method` — `source-submission`, `maintainer-review`, or `official-infrastructure`

Do not claim `issuer` verification without evidence that the issuer or its official organization supplied or approved the relationship. The PR submitter proposes the level; merging is the registry maintainer's attestation.

### Mechanism meanings

- `native` — originated on this chain
Expand Down
27 changes: 20 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,14 @@ The generated tokenlists follow the [Uniswap Token List](https://github.com/Unis

### Root Fields

| Field | Type | Required | Description |
| ------------- | ------ | -------- | ---------------------------------- |
| `name` | string | ✓ | Full token name |
| `symbol` | string | ✓ | Token ticker symbol |
| `decimals` | number | ✓ | Token decimal places |
| `description` | string | | Token description (max 1000 chars) |
| `website` | string | | Project website URL |
| Field | Type | Required | Description |
| -------------- | ------ | -------- | ---------------------------------- |
| `name` | string | ✓ | Full token name |
| `symbol` | string | ✓ | Token ticker symbol |
| `decimals` | number | ✓ | Token decimal places |
| `verification` | object | ✓ | Registry-approved trust level |
| `description` | string | | Token description (max 1000 chars) |
| `website` | string | | Project website URL |

### Per-Chain Fields

Expand All @@ -66,6 +67,18 @@ Each chain entry in `tokens` supports:
| `bridge` | string | Bridge contract address (lockbox if lock, endpoint if mint/burn) |
| `isOFT` | boolean | `true` if token is a LayerZero OFT |

### Verification

Every merged token declares the trust level approved by a registry maintainer:

| Status | Meaning | Method |
| ---------------- | ----------------------------------------------------------------------- | ------------------------- |
| `issuer` | The token issuer or its official organization supplied the relationship | `source-submission` |
| `community` | A community asset was reviewed and accepted by registry maintainers | `maintainer-review` |
| `infrastructure` | The relationship is part of official MegaETH protocol infrastructure | `official-infrastructure` |

The submitter proposes this value. Merging the pull request is the maintainer's attestation that the selected level satisfies registry policy. Consumers should use the generated `extensions.sourceChain` and `extensions.sourceAddress` fields for exact relationship matching rather than inferring a relationship from token metadata.

### Mechanism Types

| Mechanism | Description | `bridge` field contains |
Expand Down
1 change: 1 addition & 0 deletions data/BTC.b/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "Bitcoin",
"symbol": "BTC.b",
"decimals": 8,
"verification": { "status": "issuer", "method": "source-submission" },
"tokens": {
"megaeth": {
"address": "0xB0F70C0bD6FD87dbEb7C10dC692a2a6106817072",
Expand Down
1 change: 1 addition & 0 deletions data/CROWN/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "Crown Credits",
"symbol": "CROWN",
"decimals": 18,
"verification": { "status": "community", "method": "maintainer-review" },
"tokens": {
"megaeth": {
"address": "0xf7d2F0d0b0517CBDbf87C86910ce10FaAab3589D",
Expand Down
1 change: 1 addition & 0 deletions data/CUSD/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "Cap USD",
"symbol": "CUSD",
"decimals": 18,
"verification": { "status": "issuer", "method": "source-submission" },
"description": "Cap Stablecoin on MegaETH",
"tokens": {
"ethereum": {
Expand Down
1 change: 1 addition & 0 deletions data/DCASH/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "Dirty Cash",
"symbol": "DCASH",
"decimals": 18,
"verification": { "status": "issuer", "method": "source-submission" },
"description": "Game token of Offshore Protocol; earned by committing crimes inside the on-chain idle RPG, burned to purchase businesses that launder money and earn you passive USDM yield every 8 hours. Traded against USDM in the Kumbaya 1% pool.",
"website": "https://app.offshoreprotocol.fun",
"tokens": {
Expand Down
1 change: 1 addition & 0 deletions data/DIRTY/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "Dirty Money",
"symbol": "DIRTY",
"decimals": 18,
"verification": { "status": "issuer", "method": "source-submission" },
"description": "Game token of Offshore Protocol; earned by committing crimes inside the on-chain idle RPG, burned to purchase businesses that launder money and earn you passive USDM yield every 8 hours. Traded against USDM in the Kumbaya 1% pool.",
"website": "https://app.offshoreprotocol.fun",
"tokens": {
Expand Down
4 changes: 4 additions & 0 deletions data/ETH/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
"name": "Ether",
"symbol": "ETH",
"decimals": 18,
"verification": {
"status": "infrastructure",
"method": "official-infrastructure"
},
"tokens": {
"ethereum": {
"address": "0x0000000000000000000000000000000000000000",
Expand Down
1 change: 1 addition & 0 deletions data/HOUSE/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "HOUSE",
"symbol": "HOUSE",
"decimals": 18,
"verification": { "status": "issuer", "method": "source-submission" },
"description": "Yield-sharing token of the Chisino protocol.",
"website": "https://chisino.io",
"tokens": {
Expand Down
1 change: 1 addition & 0 deletions data/LBTC/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "Lombard Staked BTC",
"symbol": "LBTC",
"decimals": 8,
"verification": { "status": "issuer", "method": "source-submission" },
"tokens": {
"megaeth": {
"address": "0xecAc9C5F704e954931349Da37F60E39f515c11c1",
Expand Down
4 changes: 4 additions & 0 deletions data/MEGA/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
"name": "MEGA",
"symbol": "MEGA",
"decimals": 18,
"verification": {
"status": "infrastructure",
"method": "official-infrastructure"
},
"description": "Ecosystem token of MegaETH",
"tokens": {
"megaeth": {
Expand Down
1 change: 1 addition & 0 deletions data/MegaSIR/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "Synthetics Implemented Right",
"symbol": "MegaSIR",
"decimals": 12,
"verification": { "status": "issuer", "method": "source-submission" },
"description": "Sir Trading is a decentralized derivatives protocol for leveraged crypto trading. It offers constant leverage without liquidations or funding rates, using a one-time fee model. Users can trade, provide liquidity, or stake tokens to earn protocol revenue.",
"tokens": {
"megaeth": {
Expand Down
1 change: 1 addition & 0 deletions data/NXT/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "NX Terminal Token",
"symbol": "NXT",
"decimals": 18,
"verification": { "status": "issuer", "method": "source-submission" },
"description": "Native utility token of NX Terminal: Protocol Wars — a blockchain simulation game on MegaETH featuring PvP corp wars, prediction markets, and 35,000 autonomous developers competing in the AI Protocol Wars.",
"website": "https://nxterminal.xyz",
"tokens": {
Expand Down
1 change: 1 addition & 0 deletions data/STCUSD/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "Staked Cap USD",
"symbol": "STCUSD",
"decimals": 18,
"verification": { "status": "issuer", "method": "source-submission" },
"description": "Staked Cap Stablecoin on MegaETH",
"tokens": {
"ethereum": {
Expand Down
1 change: 1 addition & 0 deletions data/SUSDE/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "Staked USDe",
"symbol": "sUSDe",
"decimals": 18,
"verification": { "status": "issuer", "method": "source-submission" },
"description": "Ethena Staked USDe on MegaETH",
"tokens": {
"ethereum": {
Expand Down
1 change: 1 addition & 0 deletions data/USDE/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "USDe",
"symbol": "USDe",
"decimals": 18,
"verification": { "status": "issuer", "method": "source-submission" },
"description": "Ethena USDe on MegaETH",
"tokens": {
"ethereum": {
Expand Down
1 change: 1 addition & 0 deletions data/USDM/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "MegaUSD",
"symbol": "USDM",
"decimals": 18,
"verification": { "status": "issuer", "method": "source-submission" },
"description": "Native stablecoin of MegaETH",
"tokens": {
"ethereum": {
Expand Down
1 change: 1 addition & 0 deletions data/USDT0/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "USDT0",
"symbol": "USDT0",
"decimals": 6,
"verification": { "status": "issuer", "method": "source-submission" },
"description": "Tether Stablecoin on MegaETH",
"tokens": {
"megaeth": {
Expand Down
1 change: 1 addition & 0 deletions data/USDmY/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "USDm Yield",
"symbol": "USDmY",
"decimals": 18,
"verification": { "status": "issuer", "method": "source-submission" },
"description": "Earn yield across the MegaETH ecosystem with MegaVault. Deposit USDm to access diversified onchain opportunities through dynamic allocation and real-time coordination powered by Avon.",
"tokens": {
"megaeth": {
Expand Down
1 change: 1 addition & 0 deletions data/WBTC/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "Wrapped Bitcoin",
"symbol": "WBTC",
"decimals": 8,
"verification": { "status": "issuer", "method": "source-submission" },
"description": "Wrapped Bitcoin bridged from Ethereum via Wormhole",
"tokens": {
"ethereum": {
Expand Down
4 changes: 4 additions & 0 deletions data/WETH/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
"name": "Wrapped Ether",
"symbol": "WETH",
"decimals": 18,
"verification": {
"status": "infrastructure",
"method": "official-infrastructure"
},
"description": "Wrapped Ether on MegaETH",
"tokens": {
"ethereum": {
Expand Down
1 change: 1 addition & 0 deletions data/WSOL/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "Wrapped SOL",
"symbol": "WSOL",
"decimals": 9,
"verification": { "status": "issuer", "method": "source-submission" },
"description": "Wrapped SOL bridged from Solana via Wormhole",
"tokens": {
"solana": {
Expand Down
1 change: 1 addition & 0 deletions data/ezETH/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "Renzo Restaked ETH",
"symbol": "ezETH",
"decimals": 18,
"verification": { "status": "issuer", "method": "source-submission" },
"description": "Renzo Restaked ETH on MegaETH",
"tokens": {
"ethereum": {
Expand Down
1 change: 1 addition & 0 deletions data/iTRY/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "iTRY",
"symbol": "iTRY",
"decimals": 18,
"verification": { "status": "issuer", "method": "source-submission" },
"tokens": {
"ethereum": {
"address": "0xb492B4aFD9658093694CF9452D5C272e8230F3B0",
Expand Down
1 change: 1 addition & 0 deletions data/pUSD/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "Chisino pUSD",
"symbol": "pUSD",
"decimals": 18,
"verification": { "status": "issuer", "method": "source-submission" },
"description": "Yield-bearing wrapper for USDm issued by the Chisino protocol.",
"website": "https://chisino.io",
"tokens": {
Expand Down
1 change: 1 addition & 0 deletions data/pufETH/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "pufETH",
"symbol": "pufETH",
"decimals": 18,
"verification": { "status": "issuer", "method": "source-submission" },
"description": "Puffer liquid restaking token on MegaETH",
"website": "https://www.puffer.fi",
"tokens": {
Expand Down
1 change: 1 addition & 0 deletions data/rsETH/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "KelpDao Restaked ETH",
"symbol": "rsETH",
"decimals": 18,
"verification": { "status": "issuer", "method": "source-submission" },
"description": "Kelp rsETH on MegaETH",
"tokens": {
"ethereum": {
Expand Down
1 change: 1 addition & 0 deletions data/wiTRY/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "wiTRY",
"symbol": "wiTRY",
"decimals": 18,
"verification": { "status": "issuer", "method": "source-submission" },
"tokens": {
"ethereum": {
"address": "0xE346C29b5B60Ef870b9724c57ccfbBc631e47DEE",
Expand Down
1 change: 1 addition & 0 deletions data/wrsETH/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "rsETHWrapper",
"symbol": "wrsETH",
"decimals": 18,
"verification": { "status": "issuer", "method": "source-submission" },
"description": "Kelp wrsETH on MegaETH",
"tokens": {
"megaeth": {
Expand Down
1 change: 1 addition & 0 deletions data/wstETH/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "Wrapped liquid staked Ether 2.0",
"symbol": "wstETH",
"decimals": 18,
"verification": { "status": "issuer", "method": "source-submission" },
"description": "Wrapped liquid staked Ether 2.0",
"website": "https://lido.fi",
"tokens": {
Expand Down
40 changes: 37 additions & 3 deletions src/__tests__/generate.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,17 @@ describe('Token List Generation', () => {
})

test('version has correct structure', () => {
expect(tokenList.version).toHaveProperty('major')
expect(tokenList.version).toHaveProperty('minor')
expect(tokenList.version).toHaveProperty('patch')
for (const list of [tokenList, testnetTokenList]) {
expect(list.version).toEqual({
major: expect.any(Number),
minor: expect.any(Number),
patch: expect.any(Number),
})
for (const part of Object.values(list.version)) {
expect(Number.isSafeInteger(part)).toBe(true)
expect(part).toBeGreaterThanOrEqual(0)
}
}
})

test('tokens have required fields', () => {
Expand All @@ -64,6 +72,17 @@ describe('Token List Generation', () => {
expect(token).toHaveProperty('symbol')
expect(token).toHaveProperty('decimals')
expect(token).toHaveProperty('extensions')
expect(token.extensions).toHaveProperty('verification')
expect(['issuer', 'community', 'infrastructure']).toContain(
token.extensions.verification.status
)
expect(
{
issuer: 'source-submission',
community: 'maintainer-review',
infrastructure: 'official-infrastructure',
}[token.extensions.verification.status]
).toBe(token.extensions.verification.method)
}
})

Expand Down Expand Up @@ -112,6 +131,21 @@ describe('Token List Generation', () => {
expect(wethTokens.some((t) => t.chainId === 4326)).toBe(true)
})

test('cross-chain entries include an explicit source relationship', () => {
const wsteth = tokenList.tokens.find(
(token) => token.chainId === 4326 && token.symbol === 'wstETH'
)

expect(wsteth?.extensions.sourceChain).toBe('ethereum')
expect(wsteth?.extensions.sourceAddress).toBe(
'0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'
)
expect(wsteth?.extensions.verification).toEqual({
status: 'issuer',
method: 'source-submission',
})
})

test('mainnet token list excludes testnet chain ids', () => {
expect(tokenList.tokens.every((t) => t.chainId !== 6343)).toBe(true)
})
Expand Down
Loading
Loading