# Invariants Mojaloop
Les invariants suivants ont Ă©tĂ© Ă©tablis au fil du dĂ©veloppement de la plateforme, sur la base des exigences techniques dĂ©duites des principes du Level One Project (opens new window) et des bonnes pratiques applicables du secteur. Ils doivent guider toute discussion produit et technique sur lâarchitecture de la plateforme.
# Principes généraux
# 1. La fonction principale de la plateforme est de compenser en temps réel les paiements en poussée de crédit et de faciliter le rÚglement régulier, avant la fin du jour de valeur.
# Notes :
- La plateforme permet aux participants de compenser des fonds immédiatement en faveur de leurs clients, tout en minimisant les risques et coûts associés.
- La plateforme prend en charge des contrÎles de liquidité disponible par transfert, lorsque ceux-ci sont requis en soutien au premier objectif.
- Le hub est optimisé pour le chemin critique.
- RĂšglement automatisĂ© intrajournalier ; configurĂ© par le schĂ©ma et lâimplĂ©mentation selon les modĂšles de rĂšglement recommandĂ©s pour lâinfrastructure des marchĂ©s financiers.
# 2. Le hub prend en charge un traitement entiĂšrement automatique de bout en bout (straight-through).
# Notes :
- « Straight-through processing » signifie quâaucune intervention manuelle sur lâexĂ©cution des paiements ou des rĂšglements nâest requise, sauf lorsque lâacceptation des conditions dâun paiement par lâutilisateur final est exigĂ©e conformĂ©ment aux principes Level One.
- Le traitement de bout en bout contribue à réduire les erreurs humaines dans le processus de transfert, ce qui réduit in fine les coûts.
- Le caractÚre automatisé accélÚre les transferts de valeur entre clients finaux.
Plus dâinformations : Straight Through Processing (Investopedia) (opens new window)
# 3. Le hub ne nĂ©cessite pas de rapprochement manuel : le protocole dâinteraction avec le hub garantit des rĂ©sultats dĂ©terministes.
# Notes :
- Lorsquâun transfert est finalisĂ©, le statut de ce transfert ne peut faire lâobjet dâaucun doute (dans le cas contraire, il nâest pas finalisĂ© et un avis actif est communiquĂ© aux participants). Lâavis est Ă la demande : en cas de demande, ils sont informĂ©s que le statut est indĂ©terminĂ©).
- Le hub garantit des résultats déterministes pour les transferts et est accepté par tous les participants comme autorité finale sur le statut des transferts.
- Le déterminisme signifie que chaque transfert est traçable, auditable (selon les limites et les contraintes applicables), avec un résultat final fourni dans un délai garanti.
- Pour lever toute ambiguïté, les transferts par lots sont traités ligne par ligne avec des résultats déterministes potentiellement différents pour chaque ligne.
# 4. La logique de mise en place des transactions, propre aux cas dâusage, est sĂ©parĂ©e du transfert dâargent sans politique mĂ©tier.
# Notes :
- Les dĂ©tails de transaction et les rĂšgles mĂ©tier doivent ĂȘtre saisis et appliquĂ©s entre contreparties avant la phase dâaccord sur les conditions ; cela hors pĂ©rimĂštre Mojaloop.
- La phase dâaccord Ă©tablit un objet de transaction signĂ© et spĂ©cifique au cas dâusage, intĂ©grant tous les dĂ©tails propres Ă la transaction.
- La phase de transfert orchestre le transfert de valeur de détail entre institutions au profit des contreparties (seuls des contrÎles de limites systÚme sont appliqués), sans référence aux détails de transaction.
- Aucun traitement supplémentaire propre à la transaction pendant la phase de transfert.
# 5. Le hub nâanalyse pas et nâagit pas sur les dĂ©tails de transaction de bout en bout ; les messages de transfert ne contiennent que les valeurs nĂ©cessaires Ă la compensation et au rĂšglement.
# Notes :
- Les contrĂŽles et validations Ă lâĂ©tape de transfert portent uniquement sur la conformitĂ© aux rĂšgles du systĂšme, les limites, lâauthentification par signature, et la validation de la condition et de lâexĂ©cution du paiement.
- Les transferts engagĂ©s pour le rĂšglement sont dĂ©finitifs et garantis pour sâexĂ©cuter selon les rĂšgles du systĂšme.
# 6. La sémantique des transferts en poussée de crédit est réduite à sa forme la plus simple et standardisée pour tous les types de transaction.
# Notes :
- Simplifie lâimplĂ©mentation et lâintĂ©gration des participants car de nombreux types de transaction et cas dâusage peuvent rĂ©utiliser le mĂȘme flux de message de transfert de valeur sous-jacent.
- Abstrait la complexitĂ© des cas dâusage hors du chemin critique.
# 7. Le hub de services API sur Internet nâest pas un « commutateur de messages ».
# Notes :
- Le hub de services fournit des services API en temps réel aux participants pour les transferts instantanés de détail en poussée de crédit.
- Services tels que rĂ©solution dâadresse, accord de transaction entre participants, soumission de transferts prĂ©parĂ©s, soumission dâavis dâexĂ©cution.
- Des services API auxiliaires sont fournis aux participants pour faciliter lâintĂ©gration, la gestion de position, le reporting de rapprochement et dâautres fonctions non temps rĂ©el nâentrant pas dans le traitement des transferts.
- Tous les messages sont validés par rapport à la spécification API ; les messages non conformes sont rejetés avec un code de motif interprétable par machine.
# 8. Le hub expose des interfaces asynchrones aux participants
# Notes :
- Pour maximiser le débit du systÚme.
- Pour isoler les problĂšmes de connectivitĂ© en feuille afin quâils nâimpactent pas les autres utilisateurs finaux.
- Pour permettre au hub de traiter les requĂȘtes selon sa propre prioritĂ© sans maintenir une connexion active par transfert.
- Pour gérer de nombreux processus longs concurrents via le traitement par lots interne et la répartition de charge.
- Pour disposer dâun mĂ©canisme unique pour le traitement des requĂȘtes (par exemple : transactions en masse, requĂȘtes nĂ©cessitant une saisie de lâutilisateur final, ou encore requĂȘtes couvrant plusieurs sauts).
- Pour mieux prendre en charge les contraintes des réseaux réels : les problÚmes de vitesse ou de fiabilité d'un participant devraient avoir un impact minimal sur les autres participants ou sur la disponibilité globale du systÚme.
# 9. LâAPI de transfert est idempotente (opens new window)
# Notes :
- Les requĂȘtes dupliquĂ©es peuvent ĂȘtre Ă©mises en toute sĂ©curitĂ© par lâĂ©metteur en cas de rĂ©seau dĂ©gradĂ©.
- Les doublons sont reconnus et produisent le mĂȘme rĂ©sultat (doublons valides) ou sont rejetĂ©s en tant que doublons, avec rĂ©fĂ©rence Ă la requĂȘte originale (lorsque la spĂ©cification ne lâautorise pas).
# 10. Les enregistrements de transfert finalisés sont conservés pendant une période configurable par le schéma pour les processus du schéma (rapprochement, facturation, forensics)
# Notes :
- Il nâest pas possible dâinterroger le « sous-statut » dâun transfert en cours ; lâAPI fournit un rĂ©sultat dĂ©terministe avec avis actif dans le dĂ©lai de service garanti.
# 11. Les enregistrements de transfert des transferts finalisĂ©s sont conservĂ©s indĂ©finiment dans un stockage long terme pour lâanalyse mĂ©tier par lâopĂ©rateur du schĂ©ma et les participants (via les interfaces appropriĂ©es)
# Notes :
- La disponibilitĂ© des enregistrements peut ĂȘtre en retard sur la finalitĂ© du traitement en ligne, afin de permettre la sĂ©paration entre la conservation des donnĂ©es et le traitement temps rĂ©el des requĂȘtes de transfert.
# 12. Le hub doit effectuer le minimum dâanalyse, de stockage et de traitement des messages nĂ©cessaire pour exĂ©cuter les services quâil fournit au schĂ©ma dans son ensemble.
# Notes :
- Dans certains flux de messagerie (p. ex. recherche de partie), les participants peuvent souhaiter un point de contact unique pour le routage des messages liĂ©s au schĂ©ma, mĂȘme lorsque les messages ne sont pas destinĂ©s au hub et ne nĂ©cessitent pas dâinspection.
# Sécurité et sûreté des API
# 13. Les messages API sont confidentiels, à intégrité vérifiable (anti-falsification) et non répudiables.
# Notes :
- La confidentialité est requise pour protéger la vie privée des participants et de leurs clients.
- De nombreux domaines rĂ©glementaires oĂč Mojaloop doit opĂ©rer imposent des obligations lĂ©gales ; le hub doit appliquer les bonnes pratiques pour garantir la protection de la vie privĂ©e des participants et de leurs clients.
- Des mĂ©canismes dâintĂ©gritĂ© anti-falsification garantissent que les messages ne peuvent ĂȘtre altĂ©rĂ©s en transit.
- Pour lâintĂ©gritĂ© du systĂšme, chaque destinataire doit pouvoir vĂ©rifier de façon fiable que le message nâa pas Ă©tĂ© modifiĂ©.
- La cryptographie asymĂ©trique (signature numĂ©rique) est aujourdâhui le mĂ©canisme le plus courant pour une messagerie Ă intĂ©gritĂ© vĂ©rifiable.
- La sĂ©curitĂ© de la clĂ© privĂ©e de lâĂ©metteur est critique.
- Les rĂšgles du systĂšme doivent prĂ©ciser les responsabilitĂ©s en matiĂšre de gestion des clĂ©s et lâexposition financiĂšre en cas de compromission dâune clĂ© privĂ©e.
- La non-rĂ©pudiation garantit que le message a bien Ă©tĂ© envoyĂ© par lâĂ©metteur prĂ©sumĂ© et que celui-ci ne peut rĂ©pudier la provenance.
- Cela est essentiel pour identifier la partie responsable lors des processus d'audit et de résolution des litiges.
# 14. Les messages API sont authentifiés à réception avant acceptation ou traitement ultérieur
# Notes :
- Lâauthentification donne un niveau de confiance sur lâĂ©metteur prĂ©sumĂ© du message.
- Elle donne un niveau de confiance que le message nâa pas Ă©tĂ© envoyĂ© par une partie non autorisĂ©e.
# 15. Les messages authentifiĂ©s ne sont pas acquittĂ©s comme acceptĂ©s tant quâils ne sont pas enregistrĂ©s de façon sĂ»re sur un stockage permanent.
# Notes :
- LâAPI Mojaloop attache une signification mĂ©tier importante liĂ©e au schĂ©ma Ă certains codes HTTP Ă diffĂ©rentes Ă©tapes des flux :
- Certaines rĂ©ponses HTTP, p. ex. « 202 Accepted », sont destinĂ©es Ă fournir des garanties financiĂšres aux participants et ne doivent ĂȘtre envoyĂ©es quâune fois lâentitĂ© rĂ©ceptrice assurĂ©e dâavoir enregistrĂ© de façon sĂ»re et permanente ce qui permet :
- La reprise systĂšme vers un Ă©tat cohĂ©rent aprĂšs dĂ©faillance dâun ou plusieurs composants distribuĂ©s.
- Des processus de rĂšglement exacts.
- Lâaudit et le rĂšglement des litiges.
- Par exemple un « 200 OK » du hub vers le participant bĂ©nĂ©ficiaire Ă rĂ©ception dâun message dâexĂ©cution de transfert indique une garantie de rĂšglement de la transaction pour le bĂ©nĂ©ficiaire, sous rĂ©serve des contrĂŽles de validation.
- Certaines rĂ©ponses HTTP, p. ex. « 202 Accepted », sont destinĂ©es Ă fournir des garanties financiĂšres aux participants et ne doivent ĂȘtre envoyĂ©es quâune fois lâentitĂ© rĂ©ceptrice assurĂ©e dâavoir enregistrĂ© de façon sĂ»re et permanente ce qui permet :
- LâAPI Mojaloop est conçue pour fonctionner en sĂ©curitĂ© sous rĂ©seau imparfait, avec reprises et synchronisation dâĂ©tat entre participants.
# 16. Trois niveaux de sĂ©curitĂ© des communications pour lâintĂ©gritĂ©, la confidentialitĂ© et la non-rĂ©pudiation des messages entre serveur API et client API.
# Notes :
- Connexions sécurisées : mTLS obligatoire pour toutes les communications entre le schéma et les participants autorisés.
- Garantit la confidentialité des communications, leur échange entre correspondants identifiés, et leur protection contre la falsification.
- Messages sécurisés : contenu JSON signé cryptographiquement selon JWS.
- Garantit aux destinataires lâorigine des messages et la non-rĂ©pudiation par lâĂ©metteur.
- Conditions de transfert sécurisées : protocole Interledger (ILP) entre participants payeur et bénéficiaire.
- ProtĂšge lâintĂ©gritĂ© de la condition de paiement et de son exĂ©cution.
- Limite la durĂ©e de validitĂ© dâune instruction de transfert.
# 17. Pour garantir la cohĂ©rence arithmĂ©tique du systĂšme, seule lâarithmĂ©tique en virgule fixe est utilisĂ©e.
# Notes :
- Les calculs en virgule flottante peuvent perdre en précision et ne doivent servir à aucun calcul financier.
- Voir la représentation Level One Decimal Type (opens new window) et ses formes.
- Cette spĂ©cification permet un Ă©change transparent avec les systĂšmes financiers basĂ©s sur XML, sans perte de prĂ©cision ni dâexactitude.
# Caractéristiques opérationnelles
Mojaloop est conçu pour sâintĂ©grer Ă un systĂšme de paiements instantanĂ©s au niveau dâune juridiction. Il doit donc dĂ©montrablement respecter les normes de performance et de rĂ©silience requises pour de tels systĂšmes.
# 1. Sur une configuration matĂ©rielle minimale de rĂ©fĂ©rence, le systĂšme permet de compenser 1 000 transferts par seconde, de façon soutenue pendant une heure, avec au plus 1 % (Ă lâĂ©tape de transfert) dĂ©passant 1 seconde Ă travers le hub.
# Notes :
- La mesure inclut tous les composants matériels et logiciels nécessaires, avec sécurité et persistance de niveau production.
- Elle inclut les trois étapes de transfert : découverte, accord et transfert.
- Elle nâinclut pas la latence introduite par les participants.
- Une pĂ©riode dâune heure approxime un pic de charge pour un systĂšme national de paiement.
- Le coĂ»t de la montĂ©e en capacitĂ© (scale-up) par unitĂ© de capacitĂ© devrait ĂȘtre infĂ©rieur au coĂ»t du provisionnement initial.
- 1 000 transferts (compensation) par seconde est un point de départ raisonnable pour un systÚme national.
- 1 % des transferts dépassant 1 seconde est un point de départ raisonnable.
- Les schémas Mojaloop doivent pouvoir démarrer à un coût raisonnable pour une infrastructure financiÚre nationale et évoluer économiquement avec la demande.
# 2. Le hub est hautement disponible et résilient aux défaillances.
# Notes :
- Définition de « haute disponibilité » :
- Ici, « hautement disponible » signifie « la capacité à fournir et maintenir un niveau de service acceptable face aux pannes et perturbations du fonctionnement normal ».
- Les schémas peuvent définir leur propre « niveau de service acceptable » ; Mojaloop fait certains arbitrages :
- Lorsque les modes de panne le permettent, le service est dĂ©gradĂ© pour lâensemble des participants plutĂŽt que certains participants individuels subissent une panne totale pendant que dâautres restent opĂ©rationnels.
- Le hub nâa pas de point de dĂ©faillance unique : il continue dâopĂ©rer avec une dĂ©gradation minimale si un composant unique tombe en panne.
- Plusieurs instances actives de chaque composant sont déployées de façon distribuée derriÚre des répartiteurs de charge.
- Chaque instance peut traiter les requĂȘtes de nâimporte quel client/participant : aucun participant ne perd la capacitĂ© de transacter Ă cause dâun seul composant.
- Avec une infrastructure adaptĂ©e, le logiciel Mojaloop peut ĂȘtre dĂ©ployĂ© en configurations actif:actif et/ou actif:passif sur plusieurs centres de donnĂ©es gĂ©ographiquement distincts, avec services et donnĂ©es rĂ©pliquĂ©s sur des nĆuds physiques susceptibles de tomber en panne indĂ©pendamment.
- Les nĆuds des groupes de rĂ©plication (et/ou grappes) doivent ĂȘtre dans des emplacements physiques divers (baies et/ou centres de donnĂ©es), alimentations et interconnexions rĂ©seau indĂ©pendantes.
- En cas de dĂ©faillances multiples non couvertes par le logiciel, le dĂ©ploiement ou lâinfrastructure, lâAPI Mojaloop permet Ă chaque entitĂ© du schĂ©ma de retrouver un Ă©tat cohĂ©rent, le hub faisant autoritĂ© aprĂšs restauration complĂšte.
- Voir aussi les points sur la résistance à la perte de données.
- Les schĂ©mas Mojaloop visent une infrastructure financiĂšre nationale : le temps dâindisponibilitĂ© doit ĂȘtre aussi proche de zĂ©ro que raisonnable compte tenu des coĂ»ts.
- Les pannes matĂ©rielles et logicielles sont attendues mĂȘme avec du matĂ©riel de haute qualitĂ© ; elles doivent ĂȘtre anticipĂ©es et planifiĂ©es pour minimiser la perte ou la dĂ©gradation de service et/ou de donnĂ©es.
- Les arbitrages privilĂ©gient la disponibilitĂ© globale du service et la cohĂ©rence dâĂ©tat plutĂŽt que la performance. Câest-Ă -dire :
- Tous les participants peuvent continuer à effectuer des transactions à un débit réduit plutÎt que certains se trouvent dans l'incapacité totale d'en traiter.
- Les incohĂ©rences dâĂ©tat entre entitĂ©s du schĂ©ma sont rĂ©solubles aprĂšs restauration via lâAPI Mojaloop, avec un rapprochement manuel minimal ; le hub fait autoritĂ©.
- Si le dĂ©bit ne suffit pas Ă traiter toutes les requĂȘtes Ă temps, le hub priorise les transferts en cours plutĂŽt que les nouvelles requĂȘtes.
- Les transferts que le hub ne peut traiter avant expiration des délais sont expirés proprement.
# 3. Le hub résiste à la perte de données en cas de défaillances.
# Notes :
- Avec une infrastructure adaptĂ©e, Mojaloop peut ĂȘtre dĂ©ployĂ© de façon Ă rĂ©pliquer les donnĂ©es de maniĂšre fiable sur plusieurs nĆuds de stockage redondants avant traitement.
- Les moteurs de base fournis par les mécanismes de déploiement Mojaloop prennent en charge notamment :
- Réplication asynchrone primaire:secondaire.
- Réplication synchrone primaire:primaire.
- Réplication par quorum / consensus synchrone.
- Les mécanismes disponibles dépendent de la couche de stockage et des technologies de base de données.
- Les moteurs de base fournis par les mécanismes de déploiement Mojaloop prennent en charge notamment :
- En cas de dĂ©faillances multiples non couvertes, lâAPI Mojaloop permet de retrouver un Ă©tat cohĂ©rent avec une exposition financiĂšre minimale.
- Les transferts ne deviennent juridiquement contraignants que lorsque le hub a rĂ©pondu avec succĂšs au message dâexĂ©cution du participant bĂ©nĂ©ficiaire. Cette rĂ©ponse nâest envoyĂ©e quâaprĂšs persistance du message dâexĂ©cution et de son rĂ©sultat dans la base du grand livre.
- Les horodatages dâexpiration sur les messages financiĂšrement significatifs permettent des Ă©checs dĂ©terministes et opportuns pour tous les participants via mĂ©canismes de nouvelle tentative automatisĂ©s.
- Les schémas Mojaloop visent une infrastructure nationale : il faut autant que possible, compte tenu des coûts, éviter la perte de données.
- Les pannes sont attendues ; la conception du hub doit les anticiper pour limiter la perte de données.
- Les participants ont besoin dâune information rapide et fiable sur le statut des opĂ©rations financiĂšres dans le schĂ©ma, afin de minimiser leur exposition au risque et dâoffrir une excellente expĂ©rience Ă leurs clients.
# Décisions de conception
NodeJS est lâenvironnement dâexĂ©cution principal ; TypeScript est le langage prĂ©fĂ©rĂ© pour le dĂ©veloppement.
- Plateforme libre et open source.
- TrÚs répandue et soutenue par les plus grandes institutions web.
- ĂcosystĂšme mondial massif de bibliothĂšques.
- Utilise uniquement la famille ECMAScript, connue de millions de développeurs web.
Architecture distribuée microservices.
- Loi de Déméter (opens new window) ou principe de moindre connaissance.
- Séparation des responsabilités (opens new window) (Separation of Concerns), garantie par des contrats inter-modules.
- Architecture modulaire (opens new window) : dĂ©veloppement distribuĂ© en communautĂ© et Ă©volution des composants avec peu dâimpact sur les voisins.
Apache Kafka (opens new window) en pub/sub (opens new window) distribuĂ© pour la sĂ©paration commande / requĂȘte (CQS) (opens new window) entre modules.
Apache Kafka (opens new window) pour la persistance des messages API des participants.
Mojaloop utilise des API basées sur Open API 3.0.
- Expose des ressources mappĂ©es aux fonctionnalitĂ©s des cas dâusage dĂ©finis.
- Pratique courante pour les spĂ©cifications dâAPI web.
# Annexe A : aperçu des principes Level One
Le Level One Project (opens new window) propose un systÚme de paiements à faible coût pour des paiements numériques inclusifs et interopérables. Le guide Level One Project (opens new window) décrit une vision de systÚme de services financiers numériques inclusifs au service des populations à faible revenu. Les principes de conception incluent notamment :
- ModĂšle de paiement en poussĂ©e de crĂ©dit avec transfert immĂ©diat des fonds et rĂšglement le jour mĂȘme
- Interopérabilité en boucle ouverte entre fournisseurs
- Respect de normes internationales bien définies et adoptées
- Protection partagĂ©e contre la fraude et la sĂ©curitĂ© Ă lâĂ©chelle du systĂšme
- Exigences dâidentitĂ© et KYC efficaces et proportionnĂ©es
- Convenance, coĂ»t et utilitĂ© au moins Ă©quivalents Ă lâespĂšce
En sâappuyant sur une approche numĂ©rique ouverte des transactions et en sâassociant Ă des acteurs des secteurs public et privĂ©, le Level One Project vise Ă fournir lâaccĂšs Ă une infrastructure partagĂ©e de services financiers numĂ©riques, robuste et peu coĂ»teuse, stimulant lâinnovation chez les nouveaux acteurs comme chez les acteurs existants, rĂ©duisant les risques et crĂ©ant une valeur considĂ©rable pour les prestataires, les particuliers et les Ă©conomies des marchĂ©s en dĂ©veloppement. Des ressources complĂ©mentaires aident gouvernements, ONG et fournisseurs de services financiers Ă mettre en Ćuvre ces changements.
â Normes Versionnement â
