MGP-17: Adding a CELO/XAUt feed and CELO/USA₮ equivalent mapping

MGP-17: Adding a CELO/XAUt feed and CELO/USA₮ equivalent mapping to support XAUt0 and USA₮ as gas currencies

Authors: Pavel Hornak (@pahor167)

Overview

This proposal performs the Mento-governance steps needed to support two new gas currencies on Celo:

  1. XAUt0 (Tether Gold) — whitelists a ChainlinkRelayer contract that transmits a derived CELO/XAUt rate (Chainlink CELO/USD × inverse of Redstone XAUt/USDT) to SortedOracles, then maps the XAUt0 FeeWrapper to that rate feed.
  2. USA₮ (Tether’s regulated USD stablecoin) — maps the USA₮ FeeCurrencyWrapper to the existing CELO/cUSD rate via setEquivalentToken, identical to the historical CELO/cUSD mapping used by USDT (CGP-128). No new relayer is needed because USA₮ is a USD-pegged stablecoin and the CELO/cUSD rate is already published on SortedOracles.

The rate feed involved for XAUt0 is CELO/XAUt, with a relayer contract already deployed. Details of the rate feed and corresponding relayer contract are provided below:

RateFeed: relayed:CELOXAUt

RateFeedId: 0xb1C735FFd1b8F01316382E72bcc17D19493eB009

Relayer Contract: 0xEd2e6f192aD96B1676C6167aB27949179e08CBD1

The USA₮ FeeCurrencyWrapper involved is:

USA₮ FeeCurrencyWrapper: 0x0357EE22278c922e1D36cFe6b899269b161880C4 (implementation 0xACc6EFBE554397b741baadecf0120780b858f5f4, deployed by Tether)

This proposal is a requirement, and must pass before executing, CGP-239 Adding XAUt0 as gas currency and CGP-240 Enable USA₮ as gas currency. Historically the SortedOracles contract was owned by Celo Governance, but since CGP-156 passed, it is owned by Mento Governance.

Background — Why XAUt0?

XAUt0 is Tether’s omnichain version of Tether Gold (XAUT), where each token represents ownership of one troy fine ounce of London Good Delivery gold held in Swiss vaults. It launched on Celo via USDT0 in September 2025. The XAUt0 Token Adapter (FeeWrapper) is deployed at 0x857BF24e29da0773687E804a743c2E421a394C16.

Enabling XAUt0 as a gas currency lets holders pay transaction fees directly in XAUt0, removing onboarding friction for the growing community of gold-backed asset holders on Celo. This follows the precedent set by WETH (CGP-203 / MGP-9), which introduced the first non-stablecoin volatile asset as a gas currency.

Background — Why USA₮?

USA₮ is Tether’s US-regulated digital dollar, deployed on Celo via the same FeeCurrencyWrapper infrastructure used by USDT0 and XAUt0. Enabling USA₮ as a gas currency lets holders pay transaction fees directly in USA₮ — the same UX that already exists for USDT (CGP-128) and USDC (CGP-127) — without acquiring a separate gas token.

Because USA₮ is a USD-pegged stablecoin trading at ≈ $1, no new oracle relayer is needed. Mapping the USA₮ FeeCurrencyWrapper to cUSD via SortedOracles.setEquivalentToken makes the protocol reuse the existing CELO/cUSD median rate as the CELO/USA₮ rate — identical to the configuration USDT has had since CGP-128 (April 2024).

Relayer Design

The deployed relayer is byte-identical to the WETH relayer (which has been live in production since March 2025) — same mento-core v2.5.0 source, same Solc 0.8.18, same optimizer settings (enabled, 10,000 runs). The only differences are the constructor immutables (rate feed ID, aggregator addresses, description):

Property Value
Source code mento-core v2.5.0 — contracts/oracles/ChainlinkRelayerV1.sol (commit 56f9f94f)
Compiler Solc 0.8.18+commit.87f61d96, optimizer enabled, 10,000 runs
EVM version paris
Verified on CeloScan and Blockscout (address 0xEd2e6f192aD96B1676C6167aB27949179e08CBD1)

Price Path

# Feed Address Invert Provider Deviation Heartbeat
0 CELO/USD 0x0568fD19986748cEfF3301e55c0eb1E729E0Ab7e No Chainlink 0.5% 240s
1 XAUt/USDT 0x98DC6E90D4c2f212ed9d124aD2aFBa4833268633 Yes Redstone 0.1% 86,400s

Derivation: CELO/USD × inverse(XAUt/USDT) ≈ CELO/XAUt

This is the same 2-feed structure used by the existing WETH relayer (CELO/USD × inverse(ETH/USD)).

Proposed Changes

1. Add CELO/XAUt relayer as oracle

  • Destination: SortedOracles.addOracle
  • Data: address token = 0xb1C735FFd1b8F01316382E72bcc17D19493eB009, address oracleAddress = 0xEd2e6f192aD96B1676C6167aB27949179e08CBD1
  • Value: 0

2. Set token report expiry for CELO/XAUt

  • Destination: SortedOracles.setTokenReportExpiry
  • Data: address token = 0xb1C735FFd1b8F01316382E72bcc17D19493eB009, uint256 _reportExpirySeconds = 360
  • Value: 0

3. Set equivalent token for XAUt0 FeeWrapper

  • Destination: SortedOracles.setEquivalentToken
  • Data: address token = 0x857BF24e29da0773687E804a743c2E421a394C16 (XAUt0 FeeWrapper), address equivalentToken = 0xb1C735FFd1b8F01316382E72bcc17D19493eB009
  • Value: 0

4. Set equivalent token for USA₮ FeeCurrencyWrapper

  • Destination: SortedOracles.setEquivalentToken
  • Data: address token = 0x0357EE22278c922e1D36cFe6b899269b161880C4 (USA₮ FeeCurrencyWrapper), address equivalentToken = 0x765DE816845861e75A25fCA122bb6898B8B1282a (cUSD)
  • Value: 0

Governance Vote

The Mento community is asked to vote on the following proposal:

“Do you approve adding a CELO/XAUt feed and a CELO/USA₮ equivalent-token mapping to support XAUt0 and USA₮ as gas currencies?”

YES – Enable the oracle and the equivalent-token mapping.

NO – Do not enable them.

Risks

The data relayed by the ChainlinkRelayer contract is only as secure as the underlying price feeds it relies on:

  • Chainlink CELO/USD — well-established feed used in production for WETH and other Mento-related rate paths.
  • Redstone XAUt/USDT — Redstone push feed maintained via their multi-feed adapter (0x65d0F14f7809CdC4f90c3978c753C4671b6B815b) on Celo mainnet, updated with a 0.1% deviation trigger.

If either feed is compromised, the data relayed could be manipulated, leading to incorrect rate reports. This risk is present with all oracle solutions and is not specific to these feeds.

This particular feed is considered low risk as the data will only be used as a reference price for gas price calculations. Gold (XAU) is also less volatile than ETH — comparable or lower magnitude risk than the existing WETH gas currency precedent.

The relayer contract is byte-identical to the WETH relayer that has been live in production for over a year without incident.

Encoded Calldata

To be posted on-chain via the Mento governance UI:

[
  {
    "address": "0xefB84935239dAcdecF7c5bA76d8dE40b077B7b33",
    "value": 0,
    "data": "0xf0ca4adb000000000000000000000000b1c735ffd1b8f01316382e72bcc17d19493eb009000000000000000000000000ed2e6f192ad96b1676c6167ab27949179e08cbd1"
  },
  {
    "address": "0xefB84935239dAcdecF7c5bA76d8dE40b077B7b33",
    "value": 0,
    "data": "0xfc20935d000000000000000000000000b1c735ffd1b8f01316382e72bcc17d19493eb0090000000000000000000000000000000000000000000000000000000000000168"
  },
  {
    "address": "0xefB84935239dAcdecF7c5bA76d8dE40b077B7b33",
    "value": 0,
    "data": "0x145d8d18000000000000000000000000857bf24e29da0773687e804a743c2e421a394c16000000000000000000000000b1c735ffd1b8f01316382e72bcc17d19493eb009"
  },
  {
    "address": "0xefB84935239dAcdecF7c5bA76d8dE40b077B7b33",
    "value": 0,
    "data": "0x145d8d180000000000000000000000000357ee22278c922e1d36cfe6b899269b161880c4000000000000000000000000765de816845861e75a25fca122bb6898b8b1282a"
  }
]

Calldata decoded:

# Function Selector Decoded args
1 addOracle(address,address) 0xf0ca4adb rateFeedId=0xb1C7...b009, oracle=0xEd2e...CBD1
2 setTokenReportExpiry(address,uint256) 0xfc20935d rateFeedId=0xb1C7...b009, expiry=360 (0x168)
3 setEquivalentToken(address,address) 0x145d8d18 token=0x857B...4C16 (XAUt0 FeeWrapper), equivalent=0xb1C7...b009
4 setEquivalentToken(address,address) 0x145d8d18 token=0x0357...80C4 (USA₮ FeeCurrencyWrapper), equivalent=0x765D...282a (cUSD)

Verification

Anyone can independently verify the relayer’s correctness:

  1. Source code: Compare the verified source on CeloScan for 0xEd2e6f192aD96B1676C6167aB27949179e08CBD1 with mento-core v2.5.0 ChainlinkRelayerV1.sol.
  2. Bytecode equivalence to WETH: The runtime bytecode is byte-identical to the WETH relayer (0xd5bAF8D2072B2dB54Bed9c4763D591a44C408A98) except for the 80 bytes occupied by constructor immutables.
  3. Live rate computation: Calling relay() (via cast call --trace) shows the contract correctly computes CELO/XAUt as CELO/USD × inverse(XAUt/USDT) and would submit it to SortedOracles.report() with the expected Fixidity-scaled value.

References

  • MGP-9 on the Mento forum: Adding a CELO/ETH feed to support WETH as gas currency — the precedent / template
  • CGP-203 in the Celo governance repo: Adding WETH as gas currency — the precedent for adding volatile assets as gas currency
  • CGP-128 in the Celo governance repo: Enable USDT as Gas Currency — the precedent for using setEquivalentToken(<wrapper>, cUSD) for a USD stablecoin
  • Celo documentation: Adding Gas Currencies to Celo and Paying for Gas with Tokens
  • Tether Gold (XAUT) — see Tether’s official Gold product page
  • Redstone Celo multi-feed configuration — see the redstone-oracles-monorepo repository, relayer-manifests-multi-feed/celoMultiFeed.json
1 Like

Thanks for the update. Note that MGP-17 is already taken on Mento Governance.