Skip to content

feat: add Bali 82 and 85 token lists - #162

Merged
miguelmota merged 3 commits into
0xsequence:masterfrom
arnaubennassar:bali-token-lists
Oct 21, 2026
Merged

miguelmota merged 3 commits into
0xsequence:masterfrom
arnaubennassar:bali-token-lists

Conversation

@arnaubennassar

@arnaubennassar arnaubennassar commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

The Bali pilot chains (EVM chain IDs 828282/858585) have no public token dataset, and SDK/widget token visibility on these chains depends on one existing. This PR adds the bali-82 and bali-85 ERC-20 lists with the native-ETH sentinels only — the same two-sentinel convention sepolia and katana ship. Tracking agglayer/issues#46:

  • index/bali-82/erc20.json — EVM chain ID 828282 (Bali PP; AggLayer rollup/network ID 82)
  • index/bali-85/erc20.json — EVM chain ID 858585 (Bali FEP; AggLayer rollup/network ID 85)
  • index/index.json — regenerated via pnpm reindex

Note on IDs: 82 / 85 are the AggLayer rollup/network IDs; the EVM chain IDs used in the lists (and in the asset CDN paths) are 828282 / 858585.

Both lists follow the existing list schema (index/katana/erc20.json, index/sepolia/erc20.json; Uniswap token-list shape) and contain only the native gas-token sentinel entries (0x0000…0000 and 0xeeee…eeee, ETH / 18 decimals) per the repo's native-token convention. The native-ETH sentinel logoURI points at the shared mainnet ETH asset (/1/0x0000…0000.webp) — same convention already used by mainnet, robinhood and soneium — because the per-chain asset-CDN paths (/828282/, /858585/) return 403 until icons are uploaded. Next step: the Bali team uploads the per-chain icons, and a follow-up commit switches both sentinels to their per-chain asset paths. No ERC-20 contract addresses are invented: the pilot ERC-20 set for Bali (addresses, decimals, symbols) is pending confirmation from the Bali team and will be appended to these lists in follow-up commits once confirmed. The wrapped-token set (5 tokens on 828282, 2 on 858585, verified on-chain) is queued as follow-up data.

Note on the two token surfaces: these lists are the public token dataset; the SDK's chain registry and demo scenarios (0xsequence/trails) reference the verified on-chain pilot contracts directly, so demo flows can route ERC-20s (the USDC wrapper, JTT, E2E) before those tokens appear in these public lists — the two surfaces are independent.

Notes for reviewers:

  • Directory names bali-82 / bali-85 are suffixed with the AggLayer rollup/network IDs (82 / 85), not the EVM chain IDs; happy to rename if the Bali network naming (e.g. in agglayer/networks) settles on official names.
  • Widget/SDK visibility of tokens on these chains depends on trails-api ingesting the published lists; that backend ingestion is being enabled by the parallel trails-api AGGLAYER provider work (0xsequence/trails-api#1186, tracking agglayer/issues#42).
  • Naming may need to stay in sync with the parallel SDK registry entries for these chains (EVM chain IDs 828282 / 858585; the rollup IDs 82 / 85 appear only in the bali82 / bali85 variable names in the 0xsequence/trails chain registry).

Validation: pnpm reindex (idempotent after regeneration), pnpm exec prettier --check on all changed files, and jsonlint on the new/changed JSON files.

Refs agglayer/issues#46

@arnaubennassar

Copy link
Copy Markdown
Contributor Author

@claude

… 828282/858585)

The Bali pilot networks' rollup IDs are 82 (PP) and 85 (FEP); their EVM
chain IDs are 828282 and 858585 respectively. Verified on-chain via
eth_chainId RPC reads (sources: agglayer/issues#39 measurements,
gke-shared-dev-configs l2_chain_id, live RPC). Directory names keep the
bali-82/bali-85 rollup labels. Refs agglayer/issues#46.
@arnaubennassar

Copy link
Copy Markdown
Contributor Author

Chain-ID fix-up pushed (f78a6c1): the lists now declare chainId: 828282 (bali-82) and chainId: 858585 (bali-85). Clarification: 82/85 are the Bali networks' rollup IDs, not EVM chain IDs — verified on-chain via eth_chainId RPC reads (sources: agglayer/issues#39 measurements, gke-shared-dev-configs l2_chain_id, live RPC). Directory names keep the bali-82/bali-85 rollup labels. index/index.json regenerated (pnpm reindex, prettier clean). Refs agglayer/issues#46.

@arnaubennassar arnaubennassar left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review summary

Verdict: NEEDS WORK (one small blocking fix, otherwise good to go)

I checked the two new lists against index/katana/erc20.json and index/sepolia/erc20.json. I also re-ran pnpm reindex and prettier --check on a scratch copy of the branch at f78a6c1.

What checks out

  • Schema fidelity: The top-level fields, token fields, types and key order match sepolia/erc20.json: name, chainId, tokenStandard, logoURI, keywords, timestamp, tokens[], version. The token entries use the same field names, decimals is a number, and the lowercase 0xeeee… and 0x0000… sentinels match the existing lists. Adding the native sentinels to an erc20.json follows repo convention. sepolia and katana do the same.
  • chainId: Top-level and per-token chainId are 828282 (bali-82) and 858585 (bali-85) in both files, consistent with the fix-up commit f78a6c1. There are no duplicate chain IDs in index.json.
  • index.json:
    • pnpm reindex on the branch is idempotent (no diff afterwards).
    • The two new entries are alphabetically placed between avalanche-testnet and base.
    • The chainId values in index.json match the list files.
    • The SHA-256 hashes (2d8c51e6…, 128a6acf…) match sha256sum of the committed files.
    • prettier --check is clean.
  • Scope: Native ETH only is intentional. The wrapped/bridged tokens already on-chain (USDC wrapped from Sepolia, JTT, the E2E test tokens) are deliberately not listed yet. They will be appended as follow-up data once confirmed. This is not an omission.

Findings

1. [blocking] logoURI still uses the rollup IDs (82/85) in the asset path

  • index/bali-82/erc20.json lines 15 and 23 point to …/tokens/large/82/0x0000…0000.webp.
  • index/bali-85/erc20.json lines 15 and 23 point to …/tokens/large/85/0x0000…0000.webp.
  • The asset CDN path is keyed by EVM chain ID (sepolia uses /11155111/, katana uses /747474/). f78a6c1 fixed the chainId fields but missed these four URLs.
  • I checked the CDN. /82/… and /85/… return 403. So do /828282/… and /858585/…, because no assets have been uploaded under the new IDs yet.
  • Options, in order of preference:
    • (a) Point to /828282/… and /858585/… and upload the ETH icon under those paths.
    • (b) Reuse the existing mainnet ETH asset …/large/1/0x0000…0000.webp, which returns 200. mainnet, robinhood and soneium already do this.
  • Option (b) works today with no upload. Either way, re-run pnpm reindex afterwards, because the file hashes will change.

2. [nit] PR description is stale after the chain-ID fix

  • The body still says "chain 82 (Bali PP)" and "chain 85 (Bali FEP)". It also says "chains 82/85 in 0xsequence/trails chain registry".
  • The lists now use 828282 and 858585. 82 and 85 are the rollup/network IDs. Please update the body so the PR record isn't contradictory. The clarification in the later comment is good, but the description is what lands in history.

3. [nit] timestamp is 2026-10-14T22:18:35.000Z and predates the fix-up commit

  • This is harmless. katana and sepolia also carry fixed historical timestamps. Bump it if you want the field to reflect the last edit.

4. [question] Directory naming bali-82 / bali-85

  • Other directories use network names (arbitrum-sepolia, base-sepolia). These two use rollup-ID suffixes, while the EVM chain IDs are 828282 and 858585. The PR description already offers to rename.
  • It is fine for now, but renaming later changes the published paths. If official network names exist, it's cheaper to settle on them before merge. If you keep the names, a one-line note in the description explaining that 82/85 are rollup labels would help future readers.

5. [info] Scope and follow-up

  • The lists intentionally contain only native-ETH sentinels at this point. The wrapped tokens on-chain (five on 828282, including USDC wrapped from Sepolia, JTT and the E2E tokens; two on 858585) are queued as follow-up data. Please consider saying so in the description so the empty-looking lists don't read as an oversight.
  • Context: the auto-reindex check fails on fork PRs because it checks out github.head_ref from the base repo. That is a known limitation of the workflow and not specific to this change. I ran the reindex locally and it produces no diff, so the committed index.json is up to date.

Once the logoURI paths are fixed and the index is regenerated, this is good to merge from my side.

@arnaubennassar

Copy link
Copy Markdown
Contributor Author

Thanks — fixed in 234fb57: the native-ETH sentinel now points at the shared mainnet ETH asset (/1/0x0000…0000.webp) on both lists and index.json has been regenerated. I've also updated the description to use the EVM chain IDs 828282/858585 (82/85 are the AggLayer rollup IDs) and to note the wrapped-token set as follow-up data.

@arnaubennassar

Copy link
Copy Markdown
Contributor Author

Follow-up polish pass on the description — no list-file changes, branch stays at 234fb57:

  • SDK-registry wording clarified: the parallel 0xsequence/trails chain registry keys these chains by EVM chain ID 828282 / 858585; the rollup IDs 82 / 85 appear only in the bali82 / bali85 variable names. The sentence can no longer be misread as using rollup IDs as chain identifiers.
  • Backend-ingestion dependency named concretely: widget/SDK token visibility depends on the trails-api AGGLAYER provider work (0xsequence/trails-api#1186, tracking agglayer/issues#42) ingesting these published lists — replacing the vague "tracked separately".
  • Sentinel-icon follow-up now has an owner and next step: the Bali team uploads the per-chain icons to the asset CDN, then a follow-up commit switches both logoURIs to the /828282/ and /858585/ paths (the shared /1/ ETH asset stays until then — the per-chain paths currently return 403).
  • Two-surfaces note added: these lists are the public token dataset; the SDK registry and demo scenarios reference the verified on-chain pilot contracts (USDC wrapper, JTT, E2E) directly, so demo flows can route ERC-20s before they appear in these public lists — the two surfaces are independent.
  • List timestamp field left as-is on purpose: sepolia (2021) and katana (2025) carry fixed historical timestamps, so repo precedent is a static timestamp rather than bump-on-edit.
  • Closes agglayer/issues#46 wording left unchanged here — it is shared with the sibling issue-46 PRs (0xsequence/trails#1297, docs: add AGGLAYER provider, Bali chains and ETA behaviour (agglayer/issues#46) trails-docs#124) and will be aligned across all of them in one pass.

Gates re-verified after the description update: pnpm reindex idempotent (zero diff), prettier --check and jsonlint clean.

@miguelmota miguelmota left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Verified: the sha256 of both lists matches index/index.json, the index stays alphabetically ordered, both lists follow the sepolia/katana two-sentinel shape, and the mainnet-asset logo fallback is documented with a follow-up. The auto-reindex job failed during checkout before any repository code ran, so it just needs a rerun.

🤖 Generated with Claude Code (Claude Fable 5.1)

@arnaubennassar

Copy link
Copy Markdown
Contributor Author

Re-ran auto-reindex on 234fb57 and it failed again at the same step, so this is not a flake.

Run actions/checkout@v4 fails three times in under a second each with The process '/usr/bin/git' failed with exit code 1, before any repo code runs. The workflow sets ref: ${{ github.head_ref }} — bali-token-lists — and checks it out from 0xsequence/token-directory, but on a cross-repository PR that branch only exists in the fork, so the fetch has no ref to resolve. Verified: git ls-remote --heads https://github.com/0xsequence/token-directory bali-token-lists returns nothing, every in-repo PR run of this workflow passes, and all three runs from this fork branch fail the same way. The job's git push also uses the base repository's GITHUB_TOKEN, which cannot write to the fork, so it could not commit a reindex even if checkout succeeded.

verify-json is green, so the lists themselves pass validation. To land this: merge on the strength of verify-json (the reindex output can be confirmed locally with pnpm run reindex), or push the branch into the base repository as a maintainer and re-run the workflow.

@miguelmota
miguelmota merged commit aa2f70c into 0xsequence:master Oct 21, 2026
2 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants