# 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 :

  1. 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.
  2. La plateforme prend en charge des contrÎles de liquidité disponible par transfert, lorsque ceux-ci sont requis en soutien au premier objectif.
  3. Le hub est optimisé pour le chemin critique.
  4. 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 :

  1. « 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.
  2. 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.
  3. 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 :

  1. 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Ă©).
  2. 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.
  3. 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.
  4. 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 :

  1. 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.
  2. 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.
  3. 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.
  4. 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 :

  1. 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.
  2. 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 :

  1. 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.
  2. 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 :

  1. 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.
    1. Services tels que rĂ©solution d’adresse, accord de transaction entre participants, soumission de transferts prĂ©parĂ©s, soumission d’avis d’exĂ©cution.
  2. 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.
  3. 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 :

  1. Pour maximiser le débit du systÚme.
  2. Pour isoler les problĂšmes de connectivitĂ© en feuille afin qu’ils n’impactent pas les autres utilisateurs finaux.
  3. Pour permettre au hub de traiter les requĂȘtes selon sa propre prioritĂ© sans maintenir une connexion active par transfert.
  4. Pour gérer de nombreux processus longs concurrents via le traitement par lots interne et la répartition de charge.
  5. 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).
  6. 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 :

  1. Les requĂȘtes dupliquĂ©es peuvent ĂȘtre Ă©mises en toute sĂ©curitĂ© par l’émetteur en cas de rĂ©seau dĂ©gradĂ©.
    1. 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 :

  1. 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 :

  1. 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 :

  1. 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 :

  1. La confidentialité est requise pour protéger la vie privée des participants et de leurs clients.
    1. 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.
  2. Des mĂ©canismes d’intĂ©gritĂ© anti-falsification garantissent que les messages ne peuvent ĂȘtre altĂ©rĂ©s en transit.
    1. 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Ă©.
    2. La cryptographie asymĂ©trique (signature numĂ©rique) est aujourd’hui le mĂ©canisme le plus courant pour une messagerie Ă  intĂ©gritĂ© vĂ©rifiable.
      1. La sĂ©curitĂ© de la clĂ© privĂ©e de l’émetteur est critique.
      2. 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.
  3. 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.
    1. 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 :

  1. L’authentification donne un niveau de confiance sur l’émetteur prĂ©sumĂ© du message.
  2. 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 :

  1. L’API Mojaloop attache une signification mĂ©tier importante liĂ©e au schĂ©ma Ă  certains codes HTTP Ă  diffĂ©rentes Ă©tapes des flux :
    1. 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 :
      1. La reprise systĂšme vers un Ă©tat cohĂ©rent aprĂšs dĂ©faillance d’un ou plusieurs composants distribuĂ©s.
      2. Des processus de rĂšglement exacts.
      3. L’audit et le rùglement des litiges.
    2. 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.
  2. 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 :

  1. Connexions sécurisées : mTLS obligatoire pour toutes les communications entre le schéma et les participants autorisés.
    1. Garantit la confidentialité des communications, leur échange entre correspondants identifiés, et leur protection contre la falsification.
  2. Messages sécurisés : contenu JSON signé cryptographiquement selon JWS.
    1. Garantit aux destinataires l’origine des messages et la non-rĂ©pudiation par l’émetteur.
  3. Conditions de transfert sécurisées : protocole Interledger (ILP) entre participants payeur et bénéficiaire.
    1. ProtĂšge l’intĂ©gritĂ© de la condition de paiement et de son exĂ©cution.
    2. 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 :

  1. Les calculs en virgule flottante peuvent perdre en précision et ne doivent servir à aucun calcul financier.
  2. Voir la représentation Level One Decimal Type (opens new window) et ses formes.
    1. 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 :

  1. La mesure inclut tous les composants matériels et logiciels nécessaires, avec sécurité et persistance de niveau production.
  2. Elle inclut les trois étapes de transfert : découverte, accord et transfert.
  3. Elle n’inclut pas la latence introduite par les participants.
  4. Une pĂ©riode d’une heure approxime un pic de charge pour un systĂšme national de paiement.
  5. 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.
  6. 1 000 transferts (compensation) par seconde est un point de départ raisonnable pour un systÚme national.
  7. 1 % des transferts dépassant 1 seconde est un point de départ raisonnable.
  8. 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 :

  1. Définition de « haute disponibilité » :
    1. Ici, « hautement disponible » signifie « la capacité à fournir et maintenir un niveau de service acceptable face aux pannes et perturbations du fonctionnement normal ».
    2. Les schémas peuvent définir leur propre « niveau de service acceptable » ; Mojaloop fait certains arbitrages :
      1. 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.
  2. 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.
    1. Plusieurs instances actives de chaque composant sont déployées de façon distribuée derriÚre des répartiteurs de charge.
    2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. Voir aussi les points sur la résistance à la perte de données.
  7. 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.
  8. 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.
  9. Les arbitrages privilĂ©gient la disponibilitĂ© globale du service et la cohĂ©rence d’état plutĂŽt que la performance. C’est-Ă -dire :
    1. 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.
    2. 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Ă©.
  10. 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.
    1. 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 :

  1. 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.
    1. Les moteurs de base fournis par les mécanismes de déploiement Mojaloop prennent en charge notamment :
      1. Réplication asynchrone primaire:secondaire.
      2. Réplication synchrone primaire:primaire.
      3. Réplication par quorum / consensus synchrone.
    2. Les mécanismes disponibles dépendent de la couche de stockage et des technologies de base de données.
  2. En cas de dĂ©faillances multiples non couvertes, l’API Mojaloop permet de retrouver un Ă©tat cohĂ©rent avec une exposition financiĂšre minimale.
    1. 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.
    2. 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.
  3. Les schémas Mojaloop visent une infrastructure nationale : il faut autant que possible, compte tenu des coûts, éviter la perte de données.
  4. Les pannes sont attendues ; la conception du hub doit les anticiper pour limiter la perte de données.
  5. 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

  1. NodeJS est l’environnement d’exĂ©cution principal ; TypeScript est le langage prĂ©fĂ©rĂ© pour le dĂ©veloppement.

    1. Plateforme libre et open source.
    2. TrÚs répandue et soutenue par les plus grandes institutions web.
    3. Écosystùme mondial massif de bibliothùques.
    4. Utilise uniquement la famille ECMAScript, connue de millions de développeurs web.
  2. Architecture distribuée microservices.

    1. Loi de Déméter (opens new window) ou principe de moindre connaissance.
    2. Séparation des responsabilités (opens new window) (Separation of Concerns), garantie par des contrats inter-modules.
    3. Architecture modulaire (opens new window) : dĂ©veloppement distribuĂ© en communautĂ© et Ă©volution des composants avec peu d’impact sur les voisins.
  3. 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.

  4. Apache Kafka (opens new window) pour la persistance des messages API des participants.

  5. Mojaloop utilise des API basées sur Open API 3.0.

    1. Expose des ressources mappĂ©es aux fonctionnalitĂ©s des cas d’usage dĂ©finis.
    2. 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.