For the complete documentation index, see llms.txt. This page is also available as Markdown.

Architecture

Un code modulaire et résilient

Dans un secteur en constante évolution, s’adapter est essentiel. Il est tout aussi crucial de prendre en compte rapidement les retours des experts et des utilisateurs. Mais par-dessus tout, parce que la flexibilité stimule grandement la créativité et l’innovation dans un projet tel que BANGK, il est primordial de développer un code à la fois robuste et modulable.

BANGK distingue deux niveau de code :

  • Le code fonctionnel (business logic) : c’est le code le plus contextuel, il correspond à une partie extrêmement personnalisée et non réutilisable du code, qui va être énormément lu et modifié mais peu utilisé. Il doit donc être extrêmement résilient et lisible.

  • Le code “framework” : c’est le code outil, de plus bas niveau, ce sont des modules réutilisables bien délimités qui sont destinées à être utilisé par le code fonctionnel. Ce code doit être solide et bien testé, il sera peu modifié mais beaucoup utilisé.

Chacun de ces niveaux a ses propres impératifs, et de manière générale, tout est mis en œuvre pour maximiser la partie “framework” réutilisable et minimiser la partie fonctionnelle.

Liste non exhaustive des autres mesures mises en place pour garantir un maximum de modularité :

  • Construire une architecture modulaire (monorepo) :

    • Favoriser la création de modules et composants réutilisables et délimités.

    • Partager des ressources (constantes, types…) entre tout les projets (backend, dashboard interne, ICO dashboard, site web…).

    • Partager les process d’intégration et livraison continue (test automatisés, génération de traductions / ressources, scripts de déploiement d’applications…).

  • Éviter le code redondant ou à faible valeur ajoutée :

    • Des scripts de générations de code génèrent actuellement une grosse partie du code à faible valeur ajoutée.

    • Des scripts de builds ou preBuilds préparent les ressources afin de les utiliser de manière plus lisible dans le code.

  • Mettre l’utilisation des snippets (fragment de codes générés) et de la puissance de l’éditeur au centre de la stratégie.

  • Opter pour une utilisation extensive de la puissance de typescript pour la documentation dans le code et pour favoriser la découvrabilité et la validation du code “framework”.

  • Les couleurs, tailles, marges, constantes (supported languages, supported currencies…), règles de sécurités… ne sont toujours définies qu’a un seul endroit.

Lutter contre la dette technique

Jusqu’à 75% du budget technologique des entreprises peut être consacré à régler la dette technique d’un projet (McKinsey digital, 2020). À l’image d’un crédit bancaire, plus on en accumule et plus il est difficile de le rembourser le capital initial au profit du remboursement des intérêts. C’est particulièrement vrai dans un environnement start-up ou la productivité du moment prévaut souvent sur une productivité qualitative de long terme. C’est pourquoi BANGK s'attache dès le départ à automatiser, modulariser et adopter les meilleures pratiques afin d’être toujours au plus proche de l’endettement zéro.


Architecture du projet

Dans un univers où les technologies et les méthodes évoluent sans cesse, choisir la meilleure option peut s'avérer compliqué. L'équipe de BANGK soumet ses décisions technologiques à une évaluation rigoureuse, pour s'assurer de faire le choix le plus judicieux.

Voici les principales technologies que utilisées : Typescript, Rust, Solana, NodeJs, React, React Native, Expo (application mobile), PandaCSS / Vite (applications web), MongoDB (base de donnée)

Ci-dessous, une vue d’ensemble de l’architecture technique du projet :

Des applications frontend

Chaque projet frontend a ses propres impératifs, en termes de performances, SEO et surtout de sécurité. Afin de maximiser la qualité des différentes applications et d’éviter le code redondant, les applications frontend partagent une majorité de leur code à travers des modules : un "design system" commun avec des composants partagés, la gestion des traductions, des erreurs, du stockage en mémoire local, du cache, du SDK backend, des types…

L’application mobile

L’application mobile est le seul projet à fonctionner sur des technologies mobiles. Or, dans l’état actuel de la technologie, choisir une technologie avec laquelle travailler sur mobile est un vrai défi. La où les technologies du web sont assez matures, les technologies mobiles, bien que prometteuses sont encore en plein changement. De nouvelles voies s’ouvrent grâce à l’arrivée récente sur le marché de technologies multi-plateformes qui tendent à remplacer les technologies natives.

Après un benchmark approfondi, react-native avec le framework Expo s’est révélé être une combinaison parfaite, en accord avec la philosophie du projet et dont les avantages surpassent grandement les inconvénients. C’est une technologie éprouvée (applications : Instagram, Pinterest, Uber Eats…) qui permet, entre autres, de maximiser la réutilisation de code avec le web et le backend qui sont tous écrit en Typescript.

Les autres projets frontend

Les autres projets sont basés sur des technologies web et utilisent principalement la librairie PandaCss pour implémenter le design system :

  • Site web principal.

  • Dashboard ICO.

  • Dashboard de gestion pour les administrateurs de projets.

  • Dashboard Interne (Business Intelligence, data visualisation, marketing automation, support, gestion financière, validation de projets coté admin…).

Un backend principal

Le backend principal, fait en NodeJs est basé sur une architecture propriétaire et éprouvée sur de nombreux projets. Parmi ses avantages, il y a :

  • Génération d’un SDK

    • Gestion de l’authentification simplifiée et automatisée.

    • Exposition des services backend via un simple service TypeScript en front.

    • Gestion du cache simplifiée et automatisée (intégration de react-query dans le SDK).

    • Exposition directe des méthodes autorisées en base de donnée.

    • Typage strict, autocomplétion, documentation intégrée et partage des types.

  • Gestion de la sécurité simple et concise, sous forme de fichier de configuration.

  • Pour chaque modèle, il est possible de configurer la sécurité pour n’importe quelle combinaison d’utilisateur (rôle et propriétés) et de données (masquage de certains champs, filtrage de données, interdiction / autorisation de faire certaines opérations…).

  • Les données entrantes et sortantes sont automatiquement validées et nettoyées de manière exhaustive.

  • Les modèles ne sont définis qu’une seule fois, de manière simple et leur types et définitions sont accessible dans tout les projets (backend, frontend…).

  • La sécurité est restrictive par défaut.

Des backends des opérations financières et Business Intelligence

Ces 2 backends sont écrits en Rust, un langage strict adapté à la sécurité des flux financiers notamment grâce à sa robustesse et l’absence de problèmes de mémoire qui représentent l’une des sources de vulnérabilité la plus importante.

Backend des opérations financières

C’est une des pièces maîtresse pour la sécurité des opérations financières. Il n’est ouvert à l’extérieur qu’à l’adresse IP du backend principal qui doit s’authentifier avec une clé de sécurité qu’il est le seul à posséder.

Globalement, il se chargera de vérifier l’intégrité des données avant toute opération financière, de communiquer avec le backend principal, de déclencher l’exécution des programmes « on-chain » et de veiller à leur bon déroulement (le cas échéant, il gèrera les cas d’erreurs en notifiant le backend principal).

Backend pour la Business Intelligence

Ce backend est particulièrement adapté à la gestion des flux de données massifs.

Il prépare la donnée pour la business intelligence, la visualisation de données et l'analyse sur les dashboards internes. Il traite les données anonymisées du data lake avec, entre autres, des algorithmes avancés de Machine Learning en concordance avec les objectifs fixés par le pôle de Recherche UX et le pôle Marketing.

Une blockchain et un programme « On-Chain »

L’essentiel de la logique métier des opérations financières est écrite dans un programme Solana « On-Chain » qui s’articule en deux pôles principaux :

  1. Gestion des token de projets d’investissement (création des projets, achat, vente, échange, paiement des dividendes, clôture des projets).

  2. Gestion des stable coins BANGK (proof of reserve, mint & burn, transferts et échanges).


Références

Last updated