Skip to content

Add USDX stablecoin adapter#754

Open
gumdropsteve wants to merge 5 commits into
DefiLlama:masterfrom
gumdropsteve:add-stable-usdx
Open

Add USDX stablecoin adapter#754
gumdropsteve wants to merge 5 commits into
DefiLlama:masterfrom
gumdropsteve:add-stable-usdx

Conversation

@gumdropsteve

@gumdropsteve gumdropsteve commented Apr 13, 2026

Copy link
Copy Markdown

Summary

Adds USDX (by Stable — trystable.co) as a new pegged asset listing. USDX is a fully-collateralized stablecoin backed by tokenized real estate mortgage debt NFTs plus on-chain yield reserves (idle USDC, Jupiter Lend, Kamino). Active on Solana today, with token contracts also deployed on Ethereum and Monad.

Naming: There are two existing entries using USDX — Kava's USDX (id 42) and usdx.money's USDX Money USDX (id 214). This PR does not touch either. This adapter uses the folder/module name stable-usdx to avoid collision with the existing folders. The display name is USDX.

Files changed

  • New: src/adapters/peggedAssets/stable-usdx/index.ts — 14-line adapter using addChainExports to read totalSupply() on each issuing chain
  • Modified: src/peggedData/peggedData.ts — appends entry id 374 for USDX

Test results

--- solana ---     minted: 1,137,063   circulating: 1.14 M
--- ethereum ---   minted: 8.49        circulating: 8.49
--- monad ---      minted: 170.45      circulating: 170.45
Total Circulating: 1.14 M

All three chains return real-time on-chain data, no extrapolation.


(Template answers)

Name (to be shown on DefiLlama):

USDX

Website Link:

https://trystable.co

Logo (High resolution, will be shown with rounded borders):

Brand kit: https://www.trystable.co/brand

usdx-icon-black (1)

Chain:

Solana (primary), Ethereum, Monad

Coingecko ID (leave empty if not listed):
Coinmarketcap ID (leave empty if not listed):
Short Description:

USDX is a fully-collateralized stablecoin issued by Stable, backed by tokenized real estate mortgage debt NFTs plus on-chain yield reserves (idle USDC, Jupiter Lend, Kamino). It is pegged 1:1 to the US dollar.

mintRedeemDescription:

USDX is minted against tokenized real estate mortgage NFTs through an admin mint flow: a debt position is created on-chain recording the loan terms, a debt NFT is minted as proof of the underlying collateral, and an equivalent amount of USDX is issued to the recipient. Holders can also swap into and out of USDX on Raydium (Solana) and Uniswap (Monad) liquidity pools.

Token address and ticker:

USDX —

  • Solana mint: 9Gst2E7KovZ9jwecyGqnnhpG1mhHKdyLpJQnZonkCFhA
  • Ethereum: 0xfea577f08d1984e6654813be0acee3140e5d7d42
  • Monad: 0xd0a4BDb0422DB3fA77dC46189b6d043D2cd5A7B9
pegType:

peggedUSD

pegMechanism:

crypto-backed

priceSource:

defillama

wiki:

https://docs.trystable.co

Twitter Link:

https://x.com/stable_tweets

List of audit links if any:

Related

Companion PR for protocol TVL listing: DefiLlama/DefiLlama-Adapters#18730

Summary by CodeRabbit

  • New Features
    • Added USDX, a new USD-pegged asset to the platform. Users can now track USDX token supply and pricing information across Solana, Ethereum, and Monad blockchains. Pricing is sourced from decentralized finance data providers.

@coderabbitai

coderabbitai Bot commented Apr 13, 2026

Copy link
Copy Markdown
Contributor

Warning

Rate limit exceeded

@gumdropsteve has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 35 minutes and 17 seconds before requesting another review.

To keep reviews running without waiting, you can enable usage-based add-on for your organization. This allows additional reviews beyond the hourly cap. Account admins can enable it under billing.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 1afea8e6-64c7-4322-9e8c-d979b8ccf0e8

📥 Commits

Reviewing files that changed from the base of the PR and between 04e77bb and a968fb2.

📒 Files selected for processing (1)
  • src/peggedData/peggedData.ts
📝 Walkthrough

Walkthrough

Adds a new USDX pegged-asset adapter and registry entry: a per-chain issued contract mapping for Solana, Ethereum, and Monad, plus a new PeggedAsset record referencing the stable-usdx module and Solana address.

Changes

Cohort / File(s) Summary
USDX Adapter Module
src/adapters/peggedAssets/stable-usdx/index.ts
New file introducing chainContracts with issued identifiers for solana, ethereum, and monad; uses addChainExports from ../helper/getSupply and exports the resulting adapter as default.
Pegged Assets Registry
src/peggedData/peggedData.ts
Appended a new PeggedAsset entry (id: "376") for USDX referencing module: "stable-usdx", address: "solana:9Gst2E7KovZ9jwecyGqnnhpG1mhHKdyLpJQnZonkCFhA", pegging metadata (peggedUSD / crypto-backed), pricing: "defillama", onCoinGecko: "false", empty auditLinks, and a multiline mintRedeemDescription. Also preserved nearby Phoenix USD and Monet USDmo entries.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐇 I hopped across chains, nose to the byte,
Solana to Monad, shining and bright—
USDX tucked in the registry nest,
A rabbit’s small cheer for this new asset quest.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately and clearly summarizes the main change: adding a new USDX stablecoin adapter. It is concise, specific, and directly reflects the primary objective of the pull request.
Description check ✅ Passed The pull request description is comprehensive and well-structured. It includes all required template sections with detailed information: project name, website, logo, chains, descriptions, token addresses, peg type/mechanism, price source, and audit links. The description goes beyond minimum requirements with test results, naming clarification, and referenced documentation.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/peggedData/peggedData.ts`:
- Around line 7668-7670: The entry sets gecko_id to null which can collide in
the price map keyspace; update the asset object so gecko_id is a unique non-null
string (e.g., a stable slug or fallback id) even if onCoinGecko is "false" and
priceSource is "defillama", ensuring you do not change the intent of onCoinGecko
or cmcId; locate the object with properties onCoinGecko, gecko_id, cmcId in
peggedData (the asset record) and replace gecko_id: null with a unique string
identifier for that asset.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 11d7cd59-d12e-40f8-a423-58836b652ad9

📥 Commits

Reviewing files that changed from the base of the PR and between b585e1e and 7946203.

📒 Files selected for processing (2)
  • src/adapters/peggedAssets/stable-usdx/index.ts
  • src/peggedData/peggedData.ts

Comment thread src/peggedData/peggedData.ts Outdated
Comment on lines +7668 to +7670
onCoinGecko: "false",
gecko_id: null,
cmcId: null,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Set a unique non-null gecko_id for this asset.

gecko_id: null at Line 7669 can collide in the price map keyspace and break/overwrite pricing entries.

💡 Proposed fix
     onCoinGecko: "false",
-    gecko_id: null,
+    gecko_id: "stable-usdx",
     cmcId: null,

Based on learnings: In this codebase, gecko_id is used as a unique dictionary key in the price pipeline, so it must be a unique non-null string even when priceSource: "defillama".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/peggedData/peggedData.ts` around lines 7668 - 7670, The entry sets
gecko_id to null which can collide in the price map keyspace; update the asset
object so gecko_id is a unique non-null string (e.g., a stable slug or fallback
id) even if onCoinGecko is "false" and priceSource is "defillama", ensuring you
do not change the intent of onCoinGecko or cmcId; locate the object with
properties onCoinGecko, gecko_id, cmcId in peggedData (the asset record) and
replace gecko_id: null with a unique string identifier for that asset.

@realdealshaman

Copy link
Copy Markdown
Contributor

hey @gumdropsteve, do you have more detail on what currently backs USDX?

Mostly trying to understand:
• what the backing mix looks like today between liquid reserves like USDC/PYUSD and mortgage-based collateral
• whether the mortgages can be independently verified
• how that collateral is valued

If there’s already a page or reserve report that covers this, would be great to take a look

@gumdropsteve

gumdropsteve commented Apr 28, 2026

Copy link
Copy Markdown
Author

hey @realdealshaman thanks for the comment. can't believe i didn't catch it sooner. please find responses inline below

hey @gumdropsteve, do you have more detail on what currently backs USDX?

Mostly trying to understand:
• what the backing mix looks like today between liquid reserves like USDC/PYUSD and mortgage-based collateral

A real time breakdown between Reserves (USDC, lending pools) and Mortgages can be found on the mint page https://app.trystable.co/mint.

• whether the mortgages can be independently verified

Those mortgages are represented onchain as NFTs, which can be found from the Official Accounts and USDX Contract Addresses sections in the docs.

Collection AQ5V6TFPGCJpoVJVEQzNTJQYHsf8y1AJHxj94cSWLY93 on Solana

• how that collateral is valued

Properties are valued through 3rd party appraisals and 3rd party Automated Valuation Models (AVMs).
Mortgages are valued based on principal, interest rate, and expected cash flows adjusted for prepayment and credit performance.

We discuss risks, transparency, and hedging in these sections of the docs:

If there’s already a page or reserve report that covers this, would be great to take a look

Currently there is no central page for this. There will be, and I can prioritize a simple one if that helps with our submission.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (1)
src/peggedData/peggedData.ts (1)

7770-7771: ⚠️ Potential issue | 🔴 Critical

Set a unique non-null gecko_id for USDX.

gecko_id: null will collide with other non-CoinGecko assets in the pricing map, so this needs a stable unique string instead.

Suggested fix
-      gecko_id: null,
+      gecko_id: "stable-usdx",

Based on learnings: gecko_id in src/peggedData/peggedData.ts is a unique dictionary key throughout the price pipeline.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/peggedData/peggedData.ts` around lines 7770 - 7771, The USDX asset entry
currently has gecko_id: null which collides with other non-CoinGecko assets;
update the USDX entry in peggedData (the USDX object where onCoinGecko is
"false") to use a stable, unique non-null string (e.g., "usdx" or another
canonical identifier) for gecko_id so it can serve as a distinct dictionary key
throughout the price pipeline; ensure the chosen string is unique across the
file and replace the null value with that identifier.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/peggedData/peggedData.ts`:
- Around line 7767-7770: The mintRedeemDescription property currently uses
double quotes across multiple lines which breaks parsing; update the
mintRedeemDescription value to a template literal (backticks) so the multiline
text is valid (keep the same content and the trailing comma), e.g. modify the
mintRedeemDescription assignment inside the object where mintRedeemDescription
is defined so it uses backticks instead of double quotes; no other logic changes
required.

---

Duplicate comments:
In `@src/peggedData/peggedData.ts`:
- Around line 7770-7771: The USDX asset entry currently has gecko_id: null which
collides with other non-CoinGecko assets; update the USDX entry in peggedData
(the USDX object where onCoinGecko is "false") to use a stable, unique non-null
string (e.g., "usdx" or another canonical identifier) for gecko_id so it can
serve as a distinct dictionary key throughout the price pipeline; ensure the
chosen string is unique across the file and replace the null value with that
identifier.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: e6ffbed9-399f-4a94-b8c0-a33f78162329

📥 Commits

Reviewing files that changed from the base of the PR and between 7946203 and 04e77bb.

📒 Files selected for processing (1)
  • src/peggedData/peggedData.ts

Comment thread src/peggedData/peggedData.ts
Updated mintRedeemDescription to use backticks for formatting and clarified liquidity pools.
Updated mintRedeemDescription to include additional minting options for USDX.
@gumdropsteve

Copy link
Copy Markdown
Author

If there’s already a page or reserve report that covers this, would be great to take a look

Currently there is no central page for this. There will be, and I can prioritize a simple one if that helps with our submission.

Reserves & Transparency page has been spun up at trystable.co/reserves

Cc @realdealshaman, @RohanNero (DefiLlama/DefiLlama-Adapters#18730)

@realdealshaman

Copy link
Copy Markdown
Contributor

@gumdropsteve can we see the properties anywhere, other than via the nfts?

@gumdropsteve

Copy link
Copy Markdown
Author

@gumdropsteve can we see the properties anywhere, other than via the nfts?

No that would be a huge privacy concern as it would completely dox our users

@realdealshaman

realdealshaman commented May 4, 2026

Copy link
Copy Markdown
Contributor

@gumdropsteve this still leaves the concern of how can we verify the backing. Maybe it would be a good idea to move forward with this:
image

@gumdropsteve

Copy link
Copy Markdown
Author

@gumdropsteve this still leaves the concern of how can we verify the backing. Maybe it would be a good idea to move forward with this: image

hey @realdealshaman! yes, agreed, went ahead and we pushed this about a week ago to https://trystable.co/reserves ! please see my above comment #754 (comment) :)

we were also recently listed on RWAxyz as a company/platform and stablecoin (USDX).

do these updates help? thanks

@gumdropsteve

Copy link
Copy Markdown
Author

gm gm @realdealshaman kindly following up :) we have launched the reserves page a few weeks ago as requested and unified docs including listings on rwa.xyz :) are we able to proceed here? It would be awesome to get listed!

@realdealshaman

Copy link
Copy Markdown
Contributor

@gumdropsteve unfortunately there is still no way to confirm that houses exist or merit the valuations

@gumdropsteve

Copy link
Copy Markdown
Author

@gumdropsteve unfortunately there is still no way to confirm that houses exist or merit the valuations

We can work on this but that same issue exists for all onchain credit as far as I know, so I am not sure where to start. For example, there is no information about the loans, borrowers, or collateral in ACRED.

Do you have any thoughts on how we can address your concerns?

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