[FINAL] Launch of a Kenyan Shilling Stablecoin

Dear all,

Together with the Celo Africa DAO, the help of Mento Labs and the whole community we would like to propose a Kenya Shilling stablecoin.

Why Kenya now?
After the West African Franc (eXOF), with the success of the roll out of mobile wallets and partners such as Hurupay, Kotani Pay, MiniPay, and Valora in Africa, and a fast growing number of Celo community partners in Kenya, it makes sense to take a deeper look at the country.

With a 32.7% internet penetration rate and an expected increase of 14.5 million internet users by 2029, Kenya’s digital connectivity is growing fast. As access to technology becomes more widespread, this digital surge lays the groundwork for crypto adoption.

Kenya’s diaspora sent over $300 million home in 2022, with the majority originating from America ($192.5 million), supporting cUSD-cKES, followed by Europe ($55.8 million), supporting cEUR-cKES, and Asia ($42.5 million). This influx of remittances highlights the need for efficient cross-border payment solutions.

Kenya’s youthful population, with over 80% under 35, represents a demographic potential to explore innovative financial avenues. Cryptocurrencies offer an accessible and inclusive platform for financial participation, aligning perfectly with the aspirations of Kenya’s tech-savvy youth.

Kenya’s crypto journey mirrors that of other African nations experiencing rapid adoption. 47% of consumers own cryptocurrencies, fueled by factors like high mobile penetration and a growing interest in digital assets.

Celo Africa DAO
The Celo Africa DAO is currently supporting the growth of the Celo Ecosystem in Africa having received funding from the Celo Public Goods Fund of the Celo Community treasury.The DAO is currently focused on incubating products that enable more engaged usage of the Celo network across wallets such as MiniPay, Valora and others. Many of these projects will find the cKES relevant to the use cases they support. The DAO is also involved in attracting the best Web3 developers in Africa as well as increasing the awareness and usage of Celo Ecosystem products.

Mento Labs
Mento Labs helps with building out code and infrastructure for the cKES on the Mento Platform. The team is working on infrastructure for other countries as well.

Sources:

8 Likes

Big thanks to Charles and the Celo Africa DAO for spearheading such an impactful initiative. The commitment to driving positive change on the ground in Kenya and across Africa is great. As part of the Mento Labs team, we highly appreciate these efforts.

We’re particularly excited about the traction we’re seeing in Kenya and beyond, and we’re very happy to see Mento stables in several ecosystem projects there. The increasing adoption of Celo in the country makes the introduction of a local stablecoin a timely and strategic move.

For the Mento platform the vision is to facilitate the creation of local currency stablecoins worldwide, and we see the cKES as a pivotal component of this mission. As such, Mento Labs is fully committed to supporting the development of infrastructure for the cKES and has already taken first steps by initiating a governance proposal for the necessary Oracle rates (viewable here: Link to proposal).

In summary, Mento Labs stands in full support of this initiative and we are eager to contribute to the development of the essential infrastructure for the cKES. Together, we can drive positive change and foster financial inclusion across Africa and beyond.

4 Likes

I am very excited about this @CeloAfricaDAO! The first governance proposal which creates KES/USD and KES/CELO oracles is in voting stage already (Celo Governance by Staking Fund). @Everyone, please consider voting if you have not done so yet. A second governance proposal which creates cUSD/cKES pair on Mento (building on the oracles of the first proposal) is expected to go out today.

4 Likes

Здравствуйте я как голосовать не панимаю не получилось

Hi folks,

As announced, the team at Mento Labs will be supporting the launch of cKES(Celo Kenyan Shilling) proposed by the Celo Africa DAO.

This post outlines the transactions that will be part of the activation of cKES and the creation of a new Mento pair cKES/cUSD, to be proposed by Celo Africa 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 cKES activation has been done in a recent proposal:

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 cKES stable token (0-6)
  2. Configure the new exchanges (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 cKES stable token

This includes all the transactions related to registering cKES 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 cKES proxy token contract and sets 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 StableTokenKESProxy address
  • Verify the StableTokenV2 implementation address
  • Verify the initialization parameters for the new stable token:
    • name: Celo Kenyan Shilling
    • symbol:cKES
    • initialBalanceAddresses: [] (no pre-mint)
    • initialBalanceValues: [] (no pre-mint)

TX#1 - Call StableTokenV2 initializer

  • Verify the StableTokenKESProxy 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 StableTokenKES proxy 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 StableTokenKES proxy 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 StableTokenKES proxy address
  • Verify the function selector: bytes4(keccak256(bytes("approve(address,uint256)")))
  • Verify the threshold: 0.6 * 1e24 (same as existing stables)

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

  • Verify the ReserveProxy address
  • Verify the cKES proxy address

TX#6 - whitelist cKES as a gas currency

  • Verify the FeeCurrencyWhitelistProxy address
  • Verify the cKES proxy 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 cKES/cUSD 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 cKES/cUSD exchange

  • Verify BrokerProxy address
  • Verify the arguments:
    • exchangeId: the deterministic id of the cKES/cUSD 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 cKES for the cKES/cUSD exchange

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

4. Configure BreakerBox

Here we configure the BreakerBox to ensure it monitors changes to the new KES/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 KES/USD
      • KES/USD - address(uint160(uint256(keccak256("KESUSD"))))

TX#11 - enable the MedianDeltaBreaker on the cKES/cUSD rate feed

  • Verify the BreakerBox address
  • Verify the arguments:
    • breakerAddress should be the MedianDeltaBreaker
    • rateFeedID should be the identifier for the KES/USD rate, i.e. address(uint160(uint256(keccak256("KESUSD"))))
    • 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 KES/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 KES/USD rate feed

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

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

  • Verify the MedianDeltaBreaker address
  • Verify the arguments:
    • rateFeedIDs: the array of rate feeds to configure:
      • KES/USD: address(uint160(uint256(keccak256("KESUSD"))))
    • 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.
      • KES/USD: 4e22 = 4%

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

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

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(”KESUSD”)))
    • 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 Africa DAO and look forward to the use cases that cKES will enable. If you would like to deploy a stable token on the Mento Platform we would love to hear from you as well. Please join our discord and reach out.

4 Likes

Hello everyone,

The Governance post for cKES is up: Celo Governance by Staking Fund

Just wanted to chime in and say how excited I am to see this forum post go up. I think Kenya is a great market for the launch of the cKES given the robust Celo ecosystem and Kenya’s history as a leader in tech adoption.

We’d love to see a successful launch, as a cKES would be extremely helpful for our project Haraka to issue onchain microloans.

3 Likes

Kenya has been ready for this proposal for some time now. Given the rate of crypto adoption, there is already a significant number of people and platforms that would benefit from this. Having a Kenya shilling stable coin would facilitate CELO partners by giving them a currency that is familiar to the locals. This would greatly reduce the complexity for less tech savy users and allow a direct flow of cash as opposed to working with conversions from different currencies which adds a layer of complexity to these users.

This stablecoin would be crucial in facilitating our platform Haraka which empowers financially marginalized groups.

4 Likes

Huge Kudos to Celo Africa DAO for leading the way on this initiative.

I’m absolutely thrilled about this initiative and the opportunity for users to interact with a local stablecoin. It will be a complete game-changer for adoption in Kenya, particularly in enhancing the user experience across projects on Celo, such as Haraka with micro-lending.

3 Likes

So excited. Any idea when it will be available for use?

3 Likes

It’s already available and can be minted with cUSD on app.mento.org!

2 Likes

amazing! Next question is when we can on and off ramp via Mpesa? Kotani - bitMama - via Valora? etc. :pray: we can use this asap.

@kamikazechaser

3 Likes

Hi @WillRuddick,
I will let each team provide additional details here, but we at Haraka are already leveraging cKES to issue micro-loans in partnership with ClixPesa, and we will be using KotaniPay as on/off ramp providers. After talking with the team, it seems it’s just a matter of days before it’s live.

5 Likes

Just fyi @WillRuddick: There is also a decently sized USDT<->cKES pool on uniswap (Uniswap Interface) already that allows 24/7 swapping. Since KES/USD does not trade on the weekend on FX markets and oracle rates are needed for allowing cUSD/cKES at the official FX rates, cKES/cUSD cannot be swapped on Mento itself while FX markets are closed on the weekend.

2 Likes

Off Ramping via Valora: All our users are currently using Valora (for signing) to exchange their on-chain vouchers for cUSD then (off ramping) turning this into Mpesa (Via Kotani or BitMama). Whenever that is possible (or alternative wallets) we can fully move all our pools and everyone to cKES.

I know the Valora and Kotani Folks are getting it ready.
Can’t wait! it will help a lot. :pray:

2 Likes