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:
- XAUt0 (Tether Gold) — whitelists a
ChainlinkRelayercontract that transmits a derived CELO/XAUt rate (Chainlink CELO/USD × inverse of Redstone XAUt/USDT) toSortedOracles, then maps the XAUt0 FeeWrapper to that rate feed. - 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 onSortedOracles.
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:
- Source code: Compare the verified source on CeloScan for
0xEd2e6f192aD96B1676C6167aB27949179e08CBD1withmento-corev2.5.0ChainlinkRelayerV1.sol. - Bytecode equivalence to WETH: The runtime bytecode is byte-identical to the WETH relayer (
0xd5bAF8D2072B2dB54Bed9c4763D591a44C408A98) except for the 80 bytes occupied by constructor immutables. - Live rate computation: Calling
relay()(viacast call --trace) shows the contract correctly computes CELO/XAUt asCELO/USD × inverse(XAUt/USDT)and would submit it toSortedOracles.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-monoreporepository,relayer-manifests-multi-feed/celoMultiFeed.json