Skip to content

Conversation

johnletey
Copy link
Contributor

@johnletey johnletey commented Sep 15, 2025

Description

Add nobledevnet metadata and addresses.

Backward compatibility

Yes

Testing

N/A

Summary by CodeRabbit

  • New Features

    • Added support for the Noble Devnet network: chain identifiers, RPC/REST/gRPC endpoints, native USDC token config, gas and block settings, and core on-chain component addresses (mailbox, ISM, gas paymaster, merkle hook, validator announce) to enable interaction via the registry.
  • Chores

    • Added a minor release changeset for the registry package to publish Noble Devnet support.

Copy link

changeset-bot bot commented Sep 15, 2025

🦋 Changeset detected

Latest commit: 7c43cab

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@hyperlane-xyz/registry Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Copy link
Contributor

coderabbitai bot commented Sep 15, 2025

📝 Walkthrough

Walkthrough

Adds Noble Devnet to the registry by adding chain metadata and address files, plus a minor release changeset entry for @hyperlane-xyz/registry.

Changes

Cohort / File(s) Summary
Changeset entry
.changeset/three-knives-repair.md
Adds a minor release note documenting the addition of Noble Devnet metadata and addresses to the registry.
Noble Devnet metadata
chains/nobledevnet/metadata.yaml
Adds a new chain configuration for Noble Devnet: name "nobledevnet", chainId "duke-1", domainId 1146440517, canonicalAsset "uusdc"; native token USDC (decimals 6); endpoints (rpc/rest/grpc), gas and block settings, index config, protocol and explorer info.
Noble Devnet addresses
chains/nobledevnet/addresses.yaml
Adds address mappings for mailbox, interchainGasPaymaster, interchainSecurityModule, merkleTreeHook, and validatorAnnounce for the nobledevnet chain.

Sequence Diagram(s)

sequenceDiagram
    autonumber
    actor Client
    participant Registry
    participant ConfigLoader
    participant NobleEndpoints

    Client->>Registry: request chain "nobledevnet"
    Registry->>ConfigLoader: load metadata.yaml & addresses.yaml
    Note right of ConfigLoader #d5f5e3: parse identifiers, endpoints, token, addresses
    ConfigLoader-->>Registry: return chain config object
    Registry-->>Client: provide config
    Client->>NobleEndpoints: interact via RPC/REST/gRPC per config
    Note over Client,NobleEndpoints #fef5e6: transactions and indexing follow configured params
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Suggested reviewers

  • yjamin
  • paulbalaji

Poem

A new path's mapped where mud once lay,
Noble devnet dawns to light the way.
Files placed neat, addresses aligned,
Registry hums — everything's defined.
Now off ye go, make networks play. 🐸

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
Title Check ✅ Passed The title "feat: nobledevnet metadata and addresses" succinctly and accurately summarizes the primary change of adding nobledevnet metadata and addresses to the registry; it is concise and follows conventional commit style. It clearly highlights the main intent for reviewers who skim history. There is a minor inconsistency where PR objectives mention "nobletestnet" which looks like a small typo but doesn't invalidate the title.
Description Check ✅ Passed The PR description follows the repository template and includes the required Description, Backward compatibility, and Testing sections with clear entries stating the addition of nobledevnet metadata and addresses, backward compatibility as Yes, and testing as N/A. That satisfies the template's structure and required information for a small metadata addition. There is a minor discrepancy where PR objectives reference "nobletestnet" which should be confirmed to ensure consistency.
✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (4)
chains/nobledevnet/addresses.yaml (2)

1-5: Addresses format LGTM; confirm zero IGP is intentional.

All entries are 32‑byte, lowercase hex—nice. Is interchainGasPaymaster set to the zero value to indicate “absent”? If that’s the convention in this repo for Cosmos chains, all good; otherwise consider null or a comment to make intent clear.

Apply this small doc tweak if helpful:

+ # Zeroed to indicate no IGP on nobledevnet
 interchainGasPaymaster: "0x0000000000000000000000000000000000000000000000000000000000000000"

2-5: Tiny clarity boost: note these are module IDs (ASCII‑padded).

Mailboxes/ISM values look like padded ASCII (e.g., “hyperlane”, “router_ism”). A brief hint helps future readers avoid head‑scratching.

You could sprinkle comments like:

- mailbox: "0x68797065726c616e650000000000000000000000000000000000000000000000"
+ # bytes32("hyperlane") padded
+ mailbox: "0x68797065726c616e650000000000000000000000000000000000000000000000"
chains/nobledevnet/metadata.yaml (2)

25-25: gRPC endpoint uses http:// on port 443—verify TLS.

Port 443 usually implies TLS. If the endpoint expects TLS, switch to https://; if it’s plaintext, consider using 80 or keep as‑is knowingly. Let’s avoid a soggy footgun.

Proposed tweak (if TLS):

-  - http: http://grpc.core.devnet.noble.xyz:443
+  - http: https://grpc.core.devnet.noble.xyz:443

21-23: Gas price typing: keep it consistent.

gasPrice.amount is a string, while transactionOverrides.gasPrice is a number. Aligning types can save a muddy parse later.

Proposed tweak:

-transactionOverrides:
-  gasPrice: 0.1
+transactionOverrides:
+  gasPrice: "0.1"

If the schema requires a number, flip the top‑level amount to numeric instead.

Also applies to: 42-43

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5023cc5 and d4543ab.

⛔ Files ignored due to path filters (1)
  • chains/nobledevnet/logo.svg is excluded by !**/*.svg
📒 Files selected for processing (3)
  • .changeset/three-knives-repair.md (1 hunks)
  • chains/nobledevnet/addresses.yaml (1 hunks)
  • chains/nobledevnet/metadata.yaml (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-07-23T21:28:47.407Z
Learnt from: xeno097
PR: hyperlane-xyz/hyperlane-registry#788
File: chains/unichain/metadata.yaml:3-4
Timestamp: 2025-07-23T21:28:47.407Z
Learning: In the hyperlane-registry repository, API keys in chain metadata YAML files (like in chains/*/metadata.yaml) are intended for public usage and are not sensitive credentials that need to be hidden.

Applied to files:

  • .changeset/three-knives-repair.md
🔇 Additional comments (5)
.changeset/three-knives-repair.md (2)

1-3: Changeset scope looks right.

Package bump and type are sensible for adding a new chain.


5-5: Name mismatch between PR text and changeset.

PR description says “nobletestnet”, but the changeset (and files) use “nobledevnet”. Let’s pick one so folks don’t wander the swamp. I’d align everything to “nobledevnet.”

chains/nobledevnet/metadata.yaml (3)

26-28: Indexing start height—sanity check.

Starting from 5215 is fine if that’s where relevant events begin. Just confirm we’re not skipping anything important.


35-41: Schema nits: technicalStack and explorer family.

  • technicalStack: other—should this be a Cosmos‑specific value if allowed?
  • blockExplorers[*].family: other—if there’s a “cosmos” or similar family in schema, use it.

12-20: Core identifiers look solid.

bech32 prefix, chainId “duke-1”, domainId derived from “DUKE”, and native token (uusdc, 6 decimals) all line up nicely for Noble Devnet.

Also applies to: 30-35

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (4)
chains/nobledevnet/metadata.yaml (4)

42-43: Drop transactionOverrides.gasPrice for cosmosnative (or justify).

Overrides are usually for EVM senders; Cosmos SDK chains read the gasPrice/denom above. Keeping both risks confusion.

Apply this diff:

 transactionOverrides:
-  gasPrice: 0.1
+  # Intentionally omitted for cosmosnative chains; uses gasPrice above.

4-7: Ping.Pub apiUrl likely points to UI, not the API.

If Ping.Pub exposes an /api route, wire apiUrl to that; otherwise drop apiUrl and keep url.

Possible tweak:

-  - apiUrl: https://explorer.core.devnet.noble.xyz/noble
+  - apiUrl: https://explorer.core.devnet.noble.xyz/api
     family: other
     name: Ping.Pub
     url: https://explorer.core.devnet.noble.xyz/noble

5-5: Use explorer family "cosmos" if schema allows.

It’s a Cosmos explorer; “other” works but is a wee vague.

-    family: other
+    family: cosmos

41-41: technicalStack: consider aligning with existing cosmos entries.

If peers use “cosmos” or “cosmos-sdk”, mirror that for tidy filtering.

-technicalStack: other
+technicalStack: cosmos

(Adjust to whatever the schema enum supports.)

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d4543ab and 7b80aa8.

📒 Files selected for processing (1)
  • chains/nobledevnet/metadata.yaml (1 hunks)
🔇 Additional comments (7)
chains/nobledevnet/metadata.yaml (7)

29-35: Native token details LGTM.

USDC, 6 decimals, denom uusdc — fits Noble’s model.


36-39: REST/RPC endpoints look tidy.

Using https on 443 is what we like to see. Match this on gRPC and we’re golden.


19-21: Domain ID math looks good — uniqueness confirmed.
Nice touch documenting DUKE→0x44554b45→1146440517; only instance found at chains/nobledevnet/metadata.yaml:20.


26-28: Index allocation: verify uniqueness of from: 138

Automated search returned no matches; cannot confirm collisions. File: chains/nobledevnet/metadata.yaml (lines 26–28):

index:
  chunk: 10
  from: 138 # E83D9FC876D91063509E5D91B3FAAC7F6D388B4F6E81F4F30C2C33FBC0ABCE62
  • Check other chains/*/metadata.yaml for index.from values to ensure this start (138) doesn't overlap neighboring ranges — don't want chunks bumping into each other.

21-23: Min gas price confirmed — no change required

0.1 uusdc per gas is the recommended minimum; keep the gasPrice block in chains/nobledevnet/metadata.yaml (lines 21–23) as-is.


14-14: Confirm contractAddressBytes for cosmosnative chains

Most cosmosnative entries are 32; found an outlier: chains/metadata.yaml:3725 -> contractAddressBytes: 20. chains/nobledevnet/metadata.yaml:14 -> contractAddressBytes: 32 — confirm nobledevnet should stay 32 or be changed to 20.


9-11: Sanity-check 1s block time & reorgPeriod against explorer

chains/nobledevnet/metadata.yaml (lines 9–11) set confirmations: 1, estimateBlockTime: 1, reorgPeriod: 1 — verify the average block time on Noble devnet (duke-1) via the explorer; if actual block time is higher, increase these values so confirmations/timeouts don't get swampy.

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