Launch of $PUSO, the Philippines’ first community-led stablecoin

Dear all,

Together with the newly-approved Celo Philippines DAO, the help of Mento Labs, and the whole community we would like to propose a stablecoin for the Philippines.

Why the Philippines and Why $PUSO?

We want to propose PUSO, a Philippine Peso-pegged decentralized stablecoin on the Mento Platform on the Celo blockchain. The name “PUSO’’ means “heart” in Filipino, and will have the ticker symbol $PUSO. It is by a very fortunate coincidence that the Philippine currency PESO and the word PUSO look similar, and we think that the choice of name will emphasize how we are doing out of love for our country.

We envision $PUSO as a community-led, grassroots token governed by the Celo Philippines DAO. Unlike fiat-backed (or credit-backed) centralized stablecoins, $PUSO will have no banking footprint and no central custodian. Like the other Mento decentralized stablecoins (cUSD, cEUR, cREAL, eXOF and cKES), $PUSO should be fully smart-contract based, with no central entity controlling its supply.

The $PUSO stablecoin will act as a universal entry point for users in the Philippines to access the Web3 and crypto world.

It is estimated that there are nearly 10M Filipino crypto-holders. The Philippines’ cryptocurrency trading volume was estimated at $80B by Chainalysis in 2023. However, centralized exchange fees remain high due to low liquidity. The average PHP-to-ETH fee at licensed local exchanges is over 1.5%.

We believe that a universally-available PUSO stablecoin that is integrated at the Mento broker could compress these fees. Users would be able to swap PUSO to other currencies on the Mento platform.

A recent CoinGecko study highlighted the Philippines as the third most active country in the world in terms of small-cap crypto trading, which reinforces the notion that a low-cost stablecoin would be very welcome, given that small-cap coins are generally not available on local CEXs.

Also noteworthy is the annual inbound Philippines remittance volume, which is over $30B every year – about 10% of the country’s GDP.

As you know, the Celo Philippines DAO is a new initiative supporting the growth of the Celo Ecosystem in the Philippines.

Mento Labs will support this initiative by building out the code and infrastructure necessary for the $PUSO stablecoin on the Mento Platform. The team is working on infrastructure for other countries as well, and has experience with supporting the community in building out the platform that hosts decentralized stablecoins such as cKES, cREAL, eXOF, cEUR and cUSD.

All these stablecoins can also be used to pay for gas fees for stablecoin transactions on the Celo blockchain, a feature very relevant for $PUSO and its anticipated users. The Mento Asset Exchange allows users to trade Mento stablecoins and prime non-Mento stablecoins (like USDT & USDC) at the respective FX rates. The Mento Asset Exchange operates as a virtual AMM with the Mento Reserve as liquidity provider:

  • Liquidity does not need to be provided in advance for Mento decentralized stablecoins - they get minted/burned during swaps.
  • This allows for highly efficient trading and for setting slippage and throughput directly as a parameter choice - no need to attract liquidity from liquidity providers.

A whole suite of safety features like on-chain circuit breakers and trading limits can be set for each trading pair individually. Users can find more information on these features here: docs.mento.org.

We’d love to hear the community’s thoughts on this idea and can provide more details on the Philippines landscape and the stablecoin strategy in the comments as we discuss the possibilities.

12 Likes

Excited to see more local currency stablecoins on Celo!
I’d be curious to learn more about initial use cases and potential partners for this.
Nice touch on the naming :slight_smile:

7 Likes

Same here, really excited for more local currency stablecoins on Celo. The Philippines is one of the countries in the world where high crypto adoption meets high remittances volumes, so a stablecoin for the Philippines totally makes sense.
The Mento Labs team is happy to support this initiative of the Celo Philippines DAO and will directly go to work on the necessary infrastructure for $PUSO. We will follow up here with more details on how the implementation could look like ASAP!!

8 Likes

Have been thinking about the need for this for ages. Looking forward to this launch!

6 Likes

It’s great to see the announcement of another local stablecoin being launched on the Mento Protocol.

Here’s how the Mento Labs engineering team is supporting this launch:

To ensure accurate pricing and stability for Mento stables, we rely on oracle rates provided by both Mento Labs and the wider community. With the launch of Chainlink on Celo, we will be integrating Chainlink data feeds to support a wider range of stablecoins.

The team is currently developing off-chain components to bridge Chainlink’s data with the Mento Protocol. Notably, PUSO will be the first stablecoin built on Mento to be supported by Chainlink oracles—a big milestone and a step forward in enhancing the reliability and decentralization of price feeds.

As with previous stablecoins, we’ll also help create the vAMM pools and configure the circuit breaker and trading limits to enable full integration with the Mento assets exchange, while adding extra layers of security.

The engineering team is hard at work testing and updating the protocol to support this integration. As we approach the launch, we’ll post more updates and details.

6 Likes

I love this so much! Oh and the name – soo good!

:heart::philippines:

5 Likes

Exciting to see $PUSO being proposed! The Philippines :philippines: is a great fit for a local stablecoin, and the name resonates beautifully. :smiling_face_with_three_hearts:

I previously put forward a similar initiative for a Colombian Peso-pegged stablecoin, $cCOP. While the contexts differ, our goals are aligned in providing stable, community-driven financial tools. I’m keen to see how the development of $PUSO progresses and how we might apply similar strategies to $cCOP. :handshake:

For those interested in read our previous $cCOP proposal, you can find the details here.

Looking forward to collaborating and learning from each other to make both initiatives successful. :yellow_heart:

5 Likes

The introduction of $PUSO as a Philippine Peso-pegged decentralized stablecoin is a brilliant initiative that aligns perfectly with the needs of the growing crypto community in the Philippines. The emphasis on making $PUSO community-led and smart contract-based, without central custodians, reflects the true spirit of decentralization and innovation.

Given the high transaction fees and the immense remittance market, $PUSO could indeed be a game-changer by providing a low-cost, accessible entry point for Filipinos into the Web3 space. The potential to reduce trading fees and enhance liquidity through the Mento platform is particularly promising.

I’m excited to see how this will unfold and fully support this initiative. Looking forward to more discussions and to contributing to the growth of $PUSO!

:philippines: :rocket:

3 Likes

Hey everyone!
CGP-146 has been submitted on chain today to enable the relay of Chainlink rates to the SortedOracles contract, which is a requirement for the launch of $PUSO and the creation of the cUSD/PUSO pool on Mento.
A follow-up proposal will soon be submitted with the actual $PUSO launch transactions by the Celo Philippines DAO.

Follow the links below to see the proposal:

or

celocli governance:show --proposalID 187

3 Likes

Hi folks,

As announced, the team at Mento Labs will be supporting the launch of $PUSO proposed by the Celo Philippines DAO.

This post outlines the transactions that will be part of the activation of $PUSO and the creation of a new Mento pair cUSD/PUSO, to be proposed by Celo Philippines DAO. As with previous proposals, the Celo community will have the opportunity to verify these transactions. In preparation for the upcoming CGP, we have done the following:

  • Tested the proposal on Baklava and Alfajores
  • Simulated the proposal on a fork of Celo Mainnet, in addition to running tests against the fork

The prerequisite work for $PUSO activation has been done in a recent proposal:

  • Addition of PHP/USD and CELO/PHP oracles (CGP 146)

The transactions that will be in the upcoming CGP will be broken down into the following sections, noted here with transaction indices in brackets:

  1. Initialization of the PUSO stable token (0-6)
  2. Configure the new exchange (7)
  3. Configure trading limits (8-9)
  4. Configure BreakerBox (10-11)
  5. Configure the MedianDeltaBreaker (12-14)

Before we dive deep into each section and transaction, we recommend you have celocli set up to follow along. For the tech savvy, you can find everything we are describing here in our deployment tooling repository as code. For verifying that addresses included in the proposal are correct, please refer to the Appendix at the bottom for some handy tips.

1. Initialization of the PUSO stable token

This includes all the transactions related to registering PUSO as an official mento stable token: initializing the token contract, configuring its constitution parameters, adding it to the reserve, and whitelisting it as a gas currency.

TX#0 - initialize the PUSO proxy token contract and set its implementation address
This proxy contract was deployed and verified on Celo’s mainnet and points to the new StableTokenV2 implementation contract. Immediately after, ownership of the proxy contract was transferred to governance.

  • Verify the StableTokenPHPProxy address
  • Verify the StableTokenV2 implementation address
  • Verify the initialization parameters for the new stable token:
    • name: PUSO
    • symbol: PUSO
    • initialBalanceAddresses: [] (no pre-mint)
    • initialBalanceValues: [] (no pre-mint)

TX#1 - Call StableTokenV2 initializer

  • Verify the StableTokenPHPProxy address
  • Verify the StableTokenV2 implementation address
  • Verify the initialization parameters:
    • broker: - Verify the broker proxy address
    • validators: - Verify the validators address
    • exchange: address(0) - Exchanges have been deprecated and replaced by the broker

TX#2 - set constitution parameters for transfer(address,uint256)

  • Verify the GovernanceProxy address
  • Verify the StableTokenPHPProxy address
  • Verify the function selector: bytes4(keccak256(bytes("transfer(address,uint256)")))
  • Verify the threshold: 0.9 * 1e24 (same as existing stables)

TX#3 - set constitution parameters for transferWithComment(address,uint256,string)

  • Verify the GovernanceProxy address
  • Verify the StableTokenPHPProxy address
  • Verify the function selector: bytes4(keccak256(bytes("transferWithComment(address,uint256,string)")))
  • Verify the threshold: 0.6 * 1e24 (same as existing stables)

TX#4 - set constitution parameters for approve(address,uint256)

  • Verify the GovernanceProxy address
  • Verify the StableTokenPHPProxy address
  • Verify the function selector: bytes4(keccak256(bytes("approve(address,uint256)")))
  • Verify the threshold: 0.6 * 1e24 (same as existing stables)

TX#5 - add PUSO as a stable token to the Reserve

  • Verify the ReserveProxy address
  • Verify the StableTokenPHPProxy address

TX#6 - whitelist PUSO as a gas currency

  • Verify the FeeCurrencyWhitelistProxy address
  • Verify the StableTokenPHPProxy address

2. Configure the new exchange

:warning: Verification tip: As in previous proposals, we recommend ignoring the args field from celocli and focusing on params, as well as ignoring the numbered fields and instead focusing only on the named fields. This is due to how nested structs are serialized by celocli, which might make the payload look confusing.

The pool configuration structures are documented here: https://docs.mento.org/mento/developers/smart-contracts/bipoolmanager

TX#7 - create the cUSD/PUSO exchange

  • Verify the BiPoolManagerProxy address
  • Verify the exchange configuration

3. Configure trading limits

Similar to the previous section, the output of celocli is too verbose when dealing with arguments and structs, so it’s recommended to ignore args and numbered fields and to focus instead on params and named fields.

The TradingLimit.Config structure is documented here: TradingLimits | Mento Protocol

TX#8 - configure trading limits on cUSD for the cUSD/PUSO exchange

  • Verify BrokerProxy address
  • Verify the arguments:
    • exchangeId: the deterministic id of the cUSD/PUSO exchange
    • token: which asset in the pair to target, in this case, the cUSD token address
    • config: the trading limit configuration

TX#9 - Configure trading limits on PUSO for the cUSD/PUSO exchange

  • Verify Broker address
  • Verify the arguments:
    • exchangeId: the deterministic id of the cUSD/PUSO exchange
    • token: which asset in the pair to target, in this case, the PUSO token address
    • config: the trading limit configuration

4. Configure BreakerBox

Here we configure the BreakerBox to ensure it monitors changes to the new PHP/USD rate.

TX#10 - adding rate feeds to the BreakerBox:

  • Verify the BreakerBox address
  • Verify the arguments:
    • newRateFeedIDs an array of oracle feed ids. In this case, the array only contains the id of PHP/USD
      • PHP/USD - address(uint160(uint256(keccak256("relayed:PHPUSD"))))

TX#11 - enable the MedianDeltaBreaker on the PHP/USD rate feed

  • Verify the BreakerBox address
  • Verify the arguments:
    • breakerAddress should be the MedianDeltaBreaker
    • rateFeedID should be the identifier for the PHP/USD rate, i.e. address(uint160(uint256(keccak256("relayed:PHPUSD"))))
    • enable true

5. Configure the MedianDeltaBreaker

These transactions configure the MedianDeltaBreaker with the appropriate values needed to determine when the breaker should trip for the PHP/USD rate feed and how much time should pass before the breakers can be reset.

TX#12 - set the cooldown time on the MedianDeltaBreaker for the PHP/USD rate feed

  • Verify the MedianDeltaBreaker address
  • Verify the arguments:
    • rateFeedIDs: the array of rate feeds to configure:
      • PHP/USD: address(uint160(uint256(keccak256("relayed:PHPUSD"))))
    • cooldownTimes: the array of cooldown times to be configured per rate feed. The values are in seconds.
      • PHP/USD: 15 minutes = 900s

TX#13 - set the rate change thresholds on the MedianDeltaBreaker for the PHP/USD rate feed

  • Verify the MedianDeltaBreaker address
  • Verify the arguments:
    • rateFeedIDs: the array of rate feeds to configure:
      • PHP/USD: address(uint160(uint256(keccak256("relayed:PHPUSD"))))
    • rateChangeThresholds: The array of rate change thresholds to be configured per rate feed. The values are fixed-point numbers – a number with 24 decimals, i.e. 1 is written as 1e24.
      • PHP/USD: 4e22 = 4%

TX#14 - set the smoothing factor on the MedianDeltaBreaker for the PHP/USD rate feed

  • Verify the MedianDeltaBreaker address
  • Verify the arguments:
    • rateFeedID: The id of the rate feed to be updated
      • PHP/USD: address(uint160(uint256(keccak256("relayedPHPUSD"))))
    • newSmoothingFactor: The new smoothing factor value. The value is a fixed point number, similar to the rate change threshold.
      • PHP/USD: 5e21 = 0.5%

Appendix: Verifying an address

Verifying that an address in the CGP is correct requires a few different strategies depending on what that address is (see the mento docs for some additional information). Here are common situations:

  • Is it a rate feed identifier like: address(uint160(keccack256(”relayed:PHPUSD”)))
    • Use Keccak-256 Online 2 to compute the keccak
    • Take the last 40 characters (20 bytes) of the keccak and compare with the value
  • Is it a Mento contract?
  • Is it a Core Celo contract?
    • Yes:
      • It’s probably GoldToken or FeeCurrencyWhiteList which can be both verified in the Celo Registry

We are very excited to have partnered with Celo Philippines DAO and look forward to the use cases that $PUSO will enable. If you would like to deploy a stable token on top of the Mento Platform we would love to hear from you as well. Please join our discord and reach out.

4 Likes