Historique de trading entériné
Service de programmecalcul sur fenêtre, hors du bloclit la table des frais en direct
Changé depuis l’application ?
Rien n’est écrit
Transaction
État de la chaîne
Lu pendant l’exécutionen temps constant
Comparaison sur les taux, pas les positionsUn seuil qui bouge, ou un palier retarifé, modifie ce qu’un compte paie sans modifier son index de palier.
La chaîne résout le taux finalUne période n’est réputée appliquée qu’une fois tous les lots entérinés ; un crash rejoue la période entière, sans danger puisque le calcul est idempotent.
Ce qui tourne aujourd’hui
Paliers de frais par volume. Le service consomme l’historique de trading diffusé par un nœud, accumule le volume par compte et en prend un instantané à intervalles réguliers. À la clôture d’une période, il calcule le volume de chaque compte sur la fenêtre glissante, le fait passer par la configuration des frais lue en direct sur la chaîne, et réinscrit par lots les comptes dont la valeur a changé. Plusieurs détails de cette phrase sont structurants :- La table des paliers est lue sur la chaîne, jamais codée en dur. Un service qui garderait sa propre copie continuerait d’appliquer la grille d’hier après que le réseau l’a changée.
- La comparaison porte sur les taux, pas sur les indices de palier. Comparer les indices de palier laisse passer deux cas bien réels : un seuil qui bouge, de sorte qu’un compte inchangé se retrouve dans un autre palier, et un palier dont le tarif change alors que son indice reste le même. Les deux modifient ce qu’un compte paie ; ni l’un ni l’autre ne modifie son indice.
- La chaîne résout le taux final. La transaction porte un indice de palier ; l’exécution le résout à partir de la configuration des frais en vigueur. Un indice de palier hors de la plage valide fait échouer le lot entier plutôt que de s’appliquer partiellement.
- Une période n’est enregistrée comme appliquée qu’une fois tous les lots entérinés. Un crash en milieu de période rejoue la période entière, ce qui est sans danger puisque le calcul est idempotent — la même fenêtre produit le même résultat.
Le modèle de défaillance
Ces services se situent entre deux systèmes qui seront chacun indisponibles de temps à autre. La conception le suppose plutôt que de le traiter comme exceptionnel. Les défaillances de dépendances — la base de données, le flux du nœud, l’API du nœud — font l’objet de nouvelles tentatives avec temporisation croissante. Elles ne mettent pas fin au processus, parce qu’un redémarrage ne répare pas une dépendance injoignable ; il ajoute simplement un démarrage à froid à la panne. Ce qui reste fatal, c’est ce qu’un redémarrage peut réparer ou ce qu’un opérateur doit voir : une configuration invalide au démarrage, l’impossibilité d’ouvrir l’endpoint de santé, et les panics. Pendant une panne, le processus reste actif, se déclare non prêt et compte les erreurs. Le signal opérationnel est donc « ce service est-il non prêt depuis N minutes » plutôt que « le processus est-il vivant » — ce qui est la question utile, puisque l’incident réel, c’est un processus vivant qui n’ingère plus rien depuis une heure. L’arrêt est gracieux sur les signaux qu’envoie un orchestrateur : le travail s’arrête, les points de reprise sont écrits, et le processus se termine proprement. Sans cela, chaque déploiement de routine coûterait une fenêtre non écrite et un rejeu.Une période calculée mais pas encore appliquée n’est pas une période perdue. Comme le calcul est idempotent et que la période appliquée n’est enregistrée qu’après la réussite de l’écriture, une exécution interrompue reprend en refaisant la fenêtre plutôt qu’en la sautant.
Pourquoi le motif se généralise
Le chemin de réinscription est générique. Des transactions de protocole existent pour définir la configuration au niveau d’un compte et pour définir la configuration globale, et un service de programme est n’importe quel processus qui calcule une valeur pour l’une d’elles à partir de l’historique entériné. Les paliers de frais sont le seul service en fonctionnement. Les programmes d’incitation, l’attribution de parrainage et l’éligibilité aux campagnes auraient la même forme : un calcul sur fenêtre au-dessus de l’historique de trading, une comparaison avec ce qui est actuellement appliqué, et une réinscription par lots. Ils auraient leur place ici plutôt que dans le noyau, pour la même raison que les paliers de frais — le calcul est périodique et historique, alors que l’exécution a besoin que la réponse soit une consultation en temps constant. Aucun n’est construit ; ce qui se généralise, c’est le motif, pas l’engagement qu’ils l’utiliseront. Les conditions commerciales de ces programmes se trouvent dans Frais et programmes. Cette page porte sur la façon dont le résultat arrive sur la chaîne.Pour aller plus loin
Indexeur
Le flux que ces services consomment.
Frais
Le versant commercial : quels sont les paliers et ce qu’ils coûtent.
IntentionKernel
Comment la configuration réinscrite est lue pendant l’exécution.
Modèle d’état
Pourquoi les clés de configuration sont versionnées, et pourquoi les clients devraient les résoudre en direct.