cic-docs/spec/007_eMoney_integration.md

114 lines
6.8 KiB
Markdown
Raw Normal View History

2020-05-18 15:41:40 +02:00
## Incoming Sarafu ##
2020-06-30 07:59:31 +02:00
When users exchange CIC <> National Currency we have to manually send them Mpesa or CIC.
2020-05-18 15:41:40 +02:00
We would like to automate this.
## Solution ##
2020-06-30 09:28:32 +02:00
Configure - using our own system AfricasTalking API to automatically send CIC / Mpesa based on rules:
2020-06-30 09:11:05 +02:00
- CIC - > Mpesa
- CICs are converted to reserve on-chain and the xDAI is held in a GE account (xDAI Float)
- We send back an equivalent amount of Mpesa to the user from out MPESA float account
- Mpesa -> CIC
- Mpesa are added to our float Mpesa account.
2020-06-30 09:42:57 +02:00
- xDAI from our xDAI float account is added to the reserve of the CIC (Home CIC of the user) and new CICs are minted and sent to the user
2020-06-30 09:11:05 +02:00
### Variables ###
- blockchain_CIC_Supply = the total supply of the CIC on the blockchain
- blockchain_CIC_reserve = the total reserve (xDAI) of the CIC on the blockchain
- trr = the connector weight on blockchain converter between supply and reserve
2020-06-30 09:28:32 +02:00
- FLoat xDAI: THe amount of xDAI we have in our master wallet
2020-06-30 08:41:09 +02:00
- FLoat Mpesa: THe amount of Mpesa supply we have in our PayBill account
- CIC_excahnge_amount = the amount of CIC they user has sent to exhange
- Mpesa_excahnge_amount = the amount of MPesa the user has sent to exhange
- Rate: USD -> KSH
- Rate: KSH -> USD
2020-06-30 09:28:32 +02:00
- Fees: Sarafu to Mpesa FeeCC2M = 2%
- Fees: Sarafu to Mpesa FeeM2CC = 2%
- The account to which CIC are sent should be a Agent account
- The cash-out rules for a chama (minimum and time limit)
- Alert balance levels
2020-05-18 15:41:40 +02:00
2020-06-30 09:11:05 +02:00
### Incoming CIC Rules - MPESA out ###
2020-06-30 09:42:57 +02:00
- *white list* The chama (group accounts only but eventually anyone) can cash out - note the chama limits
- *amount* See KYC_limit max, supply_max
- *mpesa given* The amount of Mpesa given should be calculated as follows:
2020-06-30 09:11:05 +02:00
- CIC_excahnge_amount = the amount of CIC the user wants to excahnge
2020-06-30 07:55:23 +02:00
2020-06-30 09:42:57 +02:00
The Reserve (xDAI) to be pulled out (reported):
2020-06-30 09:28:32 +02:00
- reserveOut_xDAI_reported = the amount of xDAI that would be pulled from the reserve on-chain (by getting a quote on-chain)
- reserveOut_Mpesa = reserveOut_xDAI_reported **USD => KSH** rate
- reserveOut_Mpesa_reported = reserveOut_xDAI_reported **USD => KSH** rate
After the user confirms:
The Reserve (xDAI) actually pulled out
- reserveOut_xDAI = the amount of xDAI actually pulled from the reserve on-chain
2020-06-30 09:42:57 +02:00
- **Mpesa_out** = reserveOut_Mpesa_reported (this is actually given to the user) - **and GE takes on the Mpesa risk**
2020-06-30 09:28:32 +02:00
- reserveOut_Mpesa = reserveOut_xDAI **USD => KSH** rate (this is from our MPESA float account)
- Mpesa_risk = Mpesa_out - reserveOut_Mpesa - this should me monitored and recorded for each transactions
2020-06-30 09:11:05 +02:00
2020-05-18 15:41:40 +02:00
2020-06-30 07:59:53 +02:00
### Outgoing Sarafu Rules - MPESA In ###
2020-06-30 07:55:23 +02:00
- *white list* Only users sending via paybill receive Sarafu. Non users receive a invitation to join Sarafu sms (alert to admins there was a donation).
- *amount* The max sarafu out is 20,000 Sarafu per user, KYC_limit max, supply_max
2020-05-18 15:41:40 +02:00
- *time* No limit
2020-06-30 08:41:09 +02:00
- *Mpesa_excahnge_amount* The amount of CIC given should be calculated as follows:
2020-06-30 09:42:57 +02:00
- reserveIn_xDAI = (Mpesa_excahnge_amount - Mpesa_excahnge_amount* fee) **KSH => USD** rate (this will come out of the xDAI float account)
2020-06-30 09:42:57 +02:00
The CIC to be created (reported for quote):
2020-06-30 09:44:33 +02:00
- CIC_Created_reported = the amount of CIC to be created on chain by adding the reserveIn_xDAI (quote from blockchain)
2020-06-30 09:42:57 +02:00
After the user confirms:
2020-06-30 09:44:33 +02:00
- CIC_Created = the actualy amount of CIC created on chain by adding the reserveIn_xDAI
2020-06-30 09:42:57 +02:00
- **CIC_given** = CIC_Created_reported
- CIC_risk = CIC_given - CIC_Created - this should be monitored and recorded for each transaction
2020-06-30 08:41:09 +02:00
### Exchange Rate ###
When dislaying the SPOT price or excahnge rate to a user we should use the following formula:
2020-06-30 09:45:42 +02:00
> Exchange Price = CIC_reserve / (CIC_supply * trr) -> this is pulled from blockchain and should be sent back as a SMS
2020-06-30 08:41:09 +02:00
### User Interface ###
2020-06-30 09:28:32 +02:00
- When a user chooses to ``Redeem get Quote```:
2020-06-30 08:41:09 +02:00
- They should enter the amount (limited to the max in their balance)
2020-06-30 09:11:05 +02:00
- They should get a confirmation Based on a quote from the blockchain in a SMS:
2020-06-30 09:28:32 +02:00
- You will recieve **Mpesa_given** for **CIC_excahnge_amount** please confirm this quote in the USSD menue to proceed: (note this is from blockchain and will change second by second)
- The user will return to the USSD menu
- They navigate back to exchange in less than 1 minute and 'confirm exchange quote' (new USSD excahnge menu needed) (the 'confirm Redeem excahnge quote')
- 'confirm Redeem quote' will only show up for a minute - otherwise they have to ask for another quote
2020-06-30 09:11:05 +02:00
- Please type your PIN to confirm
2020-06-30 09:28:32 +02:00
- The user should get a Mpesa responce for recieving the **Mpesa_given**
2020-06-30 08:41:09 +02:00
2020-06-30 09:28:32 +02:00
- When a user chooses to ``Contribute get Quote```:
2020-06-30 08:41:09 +02:00
- They should enter the amount of Mpesa they wish to contribute
2020-06-30 09:28:32 +02:00
- They should get a confirmation Based on a quote from the blockchain in a SMS:
- You will recieve **CIC_given** for **Mpesa_excahnge_amount** please confirm this quote in the USSD menu to proceed: (note this is from blockchain and will change second by second)
- The user will return to the USSD menu
- They navigate back to exchange in less than 1 minute and 'confirm exchange quote' (new USSD excahnge menu needed) (the 'confirm Contribute excahnge quote')
- 'confirm Contribute exchange quote' will only show up for a minute - otherwise they have to ask for another quote
- Please type your PIN to confirm
- The user should get a SMS responce from GE for recieving the **CIC_given**
2020-06-30 08:41:09 +02:00
2020-06-30 09:11:05 +02:00
### Credit Clearing ###
2020-06-30 09:28:32 +02:00
Weekly or after alterts we will rebalance our xDAI and Mpesa float accounts.
As our float account gets more and more full of xDAI (and mpesa float shrinks) - we will convert the xDAI to Mpesa
via xdai.io to get ETH - then using localcryptos or BitCoinSuisse to get Kenyan Shilllings / Mpesa (note there are MANY fees along this path)
If we get a large amount of Mpesa and want to convert to xDAI -> CIC ... then we send the Mpesa eitheir to localCryptos or bitcoinSwuiss to get ETH
then we use xdai.io to convert that ETH to xDAI ... then we add that to our xDAI float
2020-06-30 09:11:05 +02:00
2020-06-30 08:41:09 +02:00
2020-05-18 15:41:40 +02:00
### Security ###
2020-06-30 07:55:23 +02:00
- Balance alerts: On both Mpesa and CIC balances: The paybill from which Sarafu is sent needs to send a sms and email alert when low
2020-05-18 15:41:40 +02:00
- Failure alerts: If the API session fails an sms and email alert should be sent
- Reject on not enough Mpesa balance: If there is not enough Mpesa (on incoming Sarafu) the transaction should be rejected and an email sent to admin along with a SMS to admin and user (Sarafu should not be taken from user). (message should be visible also on mgmt platform txn view and user view and admin view).
- Reject on not enough Sarafu balance: If there is not enough Sarafu (on incoming Mpesa) the transaction should be rejected and an email sent to admin along with a SMS to admin and user (Mpesa should not be taken from user). (message should be visible also on mgmt platform txn view and user view and admin view).