État d'avancement

Ce livre décrit le protocole tel qu'il a été décidé. Une partie de ce qu'il décrit n'est pas encore dans le code. Cette page dit précisément quoi.

Décidé et implémenté

  • Le prélèvement, 5 % par défaut, et ses deux barèmes
  • Le TreasuryVault, ses bornes oracle et son absence de retrait
  • Le BuybackBurner et le flywheel $STOCKFUN
  • Le mode urgence, immédiat depuis le 2026-10-05
  • Le rail cross-chain vers Robinhood Chain, préparé et testé en simulation, à sens unique depuis le retrait du trajet retour le 2026-09-28, et parcouru de bout en bout sur deux testnets par LayerZero le 2026-10-06 (plus bas)
  • Le lancement single-sided du token protocole $STOCKFUN
  • Le retrait du buyback créateur, le 2026-09-28
  • La refonte du lancement, le 2026-09-28 : plus de bonding curve ni de graduation ; chaque marché naît avec ses deux positions verrouillées, 700M et 300M par défaut, et l'achat optionnel du créateur dans la même transaction
  • Les frais de création, 0,001 ETH par défaut, un réglage de l'owner depuis le 2026-10-05
  • L'anti-snipe dégressif et la whitelist du créateur, 20 adresses au plus par défaut, exemptées quand elles passent par le routeur officiel ; le routeur officiel reste modifiable par l'owner
  • Les frais du créateur tenus sur le hook, marché par marché, et réclamés par le créateur ; depuis le 2026-10-01, les parts équipe et buyback aussi, payées par des réclamations que n'importe qui peut déclencher
  • La détention enregistrée onchain pour chaque token de marché et pour $STOCKFUN, depuis le 2026-10-02 par l'enregistreur de détention, que chaque token appelle à chaque transfert. Au 2026-10-01, quand l'enregistrement était encore dans les tokens, elle coûtait environ 52 000 à 61 000 gas de plus par transfert entre deux wallets, au-dessus des 20 000 à 40 000 estimés à la décision. Le PoolManager d'Uniswap n'est pas enregistré : un swap paie l'écriture du trader et, depuis le 2026-10-01, une écriture pour la supply enregistrée : 113 529 gas pour un achat via le routeur et 137 250 pour une vente, pour un wallet qui détient déjà le token (125 862 et 150 416 avant les correctifs du 2026-10-01, qui ont aussi retiré deux envois de chaque trade)
  • Aucun frais de LP Uniswap sur les pools StockFun par défaut, depuis le 2026-09-29 : la taxe est tout le coût d'un trade
  • Les correctifs de l'audit de sécurité du 2026-09-29, appliqués les 2026-09-30 et 2026-10-01 : de la liquidité venant du seul lock de liquidité ; des parts équipe et buyback réclamées en dehors de tout trade ; des conversions aux montants fixés par le keeper, avec le cash réservé action par action ; la supply enregistrée, dénominateur de l'airdrop, dans chaque token ; un rail Robinhood Chain où un marché ne bloque plus un batch et où un hub distant en pause applique quand même les changements de rôles. Chaque constat corrigé a ses tests de non-régression
  • Le pipeline de sécurité du 2026-10-01, un second tour d'audit qui a complété plusieurs de ces correctifs : sur Robinhood Chain, une route v3 s'exécute un pool à la fois et un ticket comptable canonique ne paie pas plus d'enregistrements qu'il n'en a mis en file ; une urgence qui fait passer le cash d'un vault sous ses réservations les annule ; le keeper retient n−1 unités sur la dernière action d'un basket. Chaque correctif a ses tests de non-régression
  • La refonte upgradable du 2026-10-02 : tous les modules sauf les tokens, le lock de liquidité et le déployeur des vaults miroirs derrière un proxy, upgradables par l'owner de StockFun avec effet immédiat ; les vaults, un proxy par marché, sur les deux chaînes ; les tokens réduits à un ERC-20 simple avec un seul setter, setRecorder, et, depuis le 2026-10-05, leurs rescues ; l'enregistrement de la détention dans son propre module ; le proxy du hook miné avec les 14 permissions v4 ; le mode fin du lock de liquidité, avec son préavis de 30 jours ; les dispositions du stockage enregistrées et vérifiées par un script. Un swap coûte environ 27 000 gas de plus, mesuré isolément : un achat 237 190 gas au lieu de 210 105, une vente 285 031 au lieu de 258 278
  • Le contrat de l'airdrop, le 2026-10-04 : AirdropDistributor sur Ethereum, upgradable et lié à la factory, alimenté par sendToAirdrop sur les deux vaults, et la route de l'airdrop sur le hub distant. Des cycles quotidiens dont la fenêtre se ferme à 13:00 UTC, des parts calculées à partir de la détention enregistrée, une réclamation par chaque holder à ses frais, sans échéance, plafond ni minimum, une liste d'exclusion par token, des actions mises de côté pour une fenêtre sans détention éligible, le mode urgence. Les 514 tests hors suites de fork passent, invariant à états compris ; LayerZero est simulé dans les tests. Codex a revu la conception, le code et deux fois les correctifs, et sa vérification finale n'a trouvé aucun bug. Pas déployé
  • Les décisions du 2026-10-05 : plus d'allocation d'équipe, toute la supply de $STOCKFUN dans sa position verrouillée ; un transfert d'urgence immédiat et un changement d'adaptateur immédiat ; chaque chiffre du protocole un réglage onchain de l'owner, sur les deux chaînes, les valeurs actuelles étant celles par défaut, chaque pool gardant la commission de LP et le tick spacing avec lesquels il a été créé. Codé et testé, pas déployé
  • La règle de conception du 2026-10-05 et les boucles d'audit 3 à 5 du même jour : une panne ne bloque jamais le reste — des livraisons du pont non bloquantes, des réclamations qui paient ce qu'elles peuvent, chaque jambe d'achat, chaque action envoyée à l'airdrop et chaque marché d'un batch de pont à part, un vault qui refuse l'ETH créancier du hook au lieu d'arrêter son marché, les parts d'un encaissement gardées pour leur destinataire, la Lens qui lit un vault à la fois — et un levier sur chaque contrat qui peut détenir des fonds, les rescues de l'owner du protocole. S'y ajoutent les urgences du hub distant chargées à un seul marché, le ticket de dépôt du rail canonique chiffré au base fee, le routeur Ondo réservé aux vaults, et le lancement de $STOCKFUN qui exclut son opérateur avant la frappe. En fin de journée, 614 tests Foundry passent, trois suites de fork sautées faute de RPC. Pas déployé
  • L'étape de l'airdrop du keeper et l'écran de réclamation de l'app, le 2026-10-05 : une fois par fenêtre, le keeper place les actions mises de côté, ouvre le cycle et envoie les actions, chaque action et chaque marché à part, puis suit chaque livraison jusqu'à Ethereum ; l'écran liste ce que le wallet peut réclamer, fenêtre par fenêtre, et le réclame par lots de dix cycles (cinq depuis le 2026-10-06). Le même jour, le keeper paie ce que le hook et le lock doivent à un destinataire qui l'avait refusé, encaisse une fois par jour les frais de LP d'un pool qui en a, alerte sur ce qui reste bloqué, et garde son état dans un fichier. Voir Le keeper et La dapp. Pas déployé
  • Le passage hors chaîne de la cinquième boucle d'audit, le 2026-10-06 : le keeper convertit l'ETH d'un vault une fois par fenêtre de l'airdrop, comme décidé le 2026-09-27, inscrit chaque transaction avant d'en attendre le reçu et verrouille son dossier d'état, et ne paie plus d'attestation Ondo pour un achat qui ne peut qu'échouer ; un basket compte au plus cinq actions ; la Lens porte l'état de chaque vault et ses dettes ; le script de lancement de $STOCKFUN reprend un passage arrêté ; l'app compte l'ETH dû au vault, laisse aux réclamations la place d'une action encore en route, retient une action que son token a refusée, et n'affiche jamais comme « rien » un chiffre illisible. 619 tests Foundry passent, trois suites de fork sautées faute de RPC. Une répétition sur une chaîne privée, le même jour, a fait tourner le keeper de bout en bout sur deux fenêtres et passer ses six scénarios. Voir Le keeper et La dapp. Pas déployé
  • Les constats de la répétition, corrigés le 2026-10-06 : le keeper place les actions que le contrat de l'airdrop met de côté pour un marché même quand son vault n'a rien de neuf à envoyer, si bien qu'un marché qui a tradé une fois puis plus rien ne garde plus son premier airdrop hors de portée de ses holders ; il garde le constat d'un vault sous le seuil par sa fenêtre, jamais par l'heure de sa machine ; et le fichier de déploiement local est vérifié contre la chaîne avant que le keeper, l'app ou le Worker ne s'en servent. 620 tests Foundry passent, trois suites de fork sautées faute de RPC. Voir Le keeper. Pas déployé
  • La sixième boucle d'audit, corrigée le 2026-10-06 : sur le pont canonique, le keeper suit chaque ticket jusqu'à le savoir exécuté, quel que soit le crédit de son transfert, et ne crédite plus un transfert que par les événements du hub distant ; l'USDC d'un vault part une fois après chaque conversion de son ETH et au plus une fois par fenêtre sinon, comme décidé pour l'ETH le 2026-09-27, les achats sur Robinhood Chain restant à chaque passage ; une recherche d'actions mises de côté qui ne placerait rien, pour un vault qui n'a rien à envoyer, ne part plus chaque jour ; un vault sous le seuil se vérifie sur un solde lu après la fermeture de la fenêtre ; chaque vault se cote sur son propre routeur ; l'app marque le prix de $STOCKFUN « (last read) » tant que la Lens ne sait pas le lire. Voir Le keeper. Pas déployé
  • La septième boucle d'audit, corrigée le 2026-10-06 : le keeper n'envoie à l'airdrop que ce qui vaut ce que son envoi coûte, la poussière que le pont ne transporte pas ne comptant plus comme quelque chose à envoyer ; il lit chaque ticket canonique sur le reçu de sa création d'abord, si bien qu'un dépôt vivant n'est jamais pris pour exécuté ; chaque lecture de journaux s'arrête quelques blocs sous le dernier ; il refuse de démarrer sur un RPC qui sert une autre chaîne que celle de sa configuration ; son webhook d'alerte garde et renvoie ce qu'il n'a pas pris ; un réglage vide prend sa valeur par défaut. Le Worker de l'app lit chaque contrat upgradable à part, dit le volume sur 24 h inconnu tant que ses lectures de trades échouent, et vérifie la chaîne de chaque endpoint ; le graphique de prix place chaque point à son heure. 620 tests Foundry passent (615 hors des fichiers de fork, et les cinq de la suite de fork Robinhood Chain sur son RPC public ; les trois suites de fork Ethereum sautées faute de RPC) ; 277 tests du keeper, 51 du package partagé, 9 du back end et 137 du Worker passent. Voir Le keeper et La dapp. Pas déployé
  • Les protections des prix sur Robinhood Chain, codées le 2026-10-06 : l'oracle retient le prix d'une action tant que son token dit son oracle en pause pour une opération sur titres, contrôle allumé pour chaque action, et tous les prix tant que le feed de disponibilité du séquenceur de Chainlink dit le séquenceur arrêté ou tout juste revenu. Aucun feed de ce type n'existe pour Robinhood Chain : ce second contrôle est éteint au déploiement, par un choix explicite, jusqu'à ce qu'un feed soit publié. Les deux sont des réglages de l'owner, éteints sur Ethereum. Voir Le rail Robinhood. Pas déployé
  • La huitième boucle d'audit, corrigée le 2026-10-06 : le formulaire de lancement de l'app ne propose que les baskets lus sur la chaîne et revérifie celui qui est choisi avant l'envoi ; le keeper suit un batch de pont une fois son bloc enfoncé de quelques blocs, distingue la poussière du pont d'une action dont les frais ne se cotent pas, garde une seule alerte en attente par alerte distincte, garde intact un fichier d'état d'une autre chaîne jusqu'à avoir lu la chaîne de son RPC, exige les deux identifiants de chaîne, lit un ticket quelques blocs sous le dernier et ne compte qu'une fois l'ouverture du rail local ; le keeper, son préflight et son inspecteur, le Worker et l'app connaissent les protections des prix ; la fenêtre des trades du Worker ne recule plus, et le panneau de trade fait payer la taxe normale à un wallet de la whitelist. 640 tests Foundry passent (633 hors des fichiers de fork, et les sept du fichier de fork Robinhood Chain sur son RPC public ; les trois suites de fork Ethereum sautées faute de RPC) ; 306 tests du keeper, 51 du package partagé, 9 du back end et 155 du Worker passent. Voir Le keeper et La dapp. Pas déployé
  • Le gas des livraisons de l'airdrop sous la mise à niveau Glamsterdam d'Ethereum, que Sepolia a activée le 2026-10-06 : la décision du fondateur du même jour, le keeper simulant chaque livraison et choisissant son gas dans des bornes que l'owner de StockFun fixe sur le hub distant, et réexécutant une livraison encore bloquée, avec une alerte au second échec. Codé et testé, appliqué au test sur testnet par upgrade, pas déployé sur mainnet. Voir Le keeper
  • La neuvième boucle d'audit, corrigée le 2026-10-06, avec les constats du test LayerZero sur testnet : le keeper lit pendant une minute au bloc de sa propre dernière transaction et y estime le gas de ce qu'il envoie ensuite, donne à chaque transaction son estimation plus 25 %, livre ses alertes en attente dans l'ordre de leur dernière levée, n'alerte plus un ticket que son propre rejeu a supprimé, et son préflight tourne sur le déploiement du testnet ; le Worker garde ce qu'il a appris de ses RPC quand son objet Cloudflare se met en sommeil, et relève le bloc propre de Robinhood Chain ; l'app donne à chaque écriture sa propre limite de gas, marque un pot qui est une estimation, et ne prend jamais une approbation illisible pour une absence d'approbation. Depuis cette boucle, un second agent relit chaque correctif avant qu'il soit poussé, et ce qu'il trouve est corrigé de la même façon. 653 tests Foundry passent (646 hors des fichiers de fork, et les sept du fichier de fork Robinhood Chain sur son RPC public ; les trois suites de fork Ethereum sautées faute de RPC) ; 370 tests du keeper (372 après le dernier correctif de la porte), 51 du package partagé, 9 du back end et 189 du Worker passent. Voir Tests et vérification. Pas déployé sur mainnet
  • La dixième boucle d'audit, corrigée le 2026-10-06 : chaque diffusion du déploiement prend l'estimation de gas du nœud, le chiffre propre de l'outil de déploiement étant trop court pour chaque création sous Glamsterdam ; la dernière étape d'un batch du pont sur Robinhood Chain reçoit une base plus une part par marché, au plus 17 marchés par batch, le keeper n'en envoyant pas davantage et disant où en est un batch bloqué ; la veille d'urgence du keeper nomme ses contrats par groupes, ses messages d'erreur ne gardent d'une adresse de RPC que l'hôte, et il lit chaque marché par Multicall3 ; l'app ne montre jamais comme faite une transaction annulée dans le wallet, et lit pendant une minute à un bloc au moins égal à celui de sa propre dernière transaction. L'adaptateur du pont du testnet a été mis à jour et a porté son batch suivant. 662 tests Foundry passent (655 hors des fichiers de fork, et les sept du fichier de fork Robinhood Chain sur son RPC public ; les trois suites de fork Ethereum sautées faute de RPC), avec les 2 du projet du test LayerZero ; 400 tests du keeper, 51 du package partagé, 9 du back end et 210 du Worker passent. Voir Tests et vérification. Pas déployé sur mainnet
  • Les reliquats d'un cycle interrompu, terminés aux passages suivants du keeper, au plus tard dans la fenêtre suivante, seuil atteint ou non : l'USDC, l'USDG et les actions qui attendent dans un vault passent à l'étape suivante sans condition de seuil

Un ordre d'implémentation, en étapes qui laissent le dépôt compilable, est consigné dans projet/docs/FUNCTIONAL_AUDIT_2026-09-28.md.

La décision du 2026-09-27

Le buyback créateur et le trajet retour du pont ont été retirés des contrats, du keeper et du back end le 2026-09-28. Le contrat de l'airdrop est dans le code depuis le 2026-10-04, l'étape de l'airdrop du keeper et l'écran de réclamation depuis le 2026-10-05 ; rien n'est déployé. Ce qui reste dépend des adaptateurs d'actions, plus bas. La dapp provisoire de projet/dapp/, qui affichait encore le Treasury Ratio, a été retirée du dépôt le 2026-10-02 ; l'app qui la remplace, cairn-app/, ne l'affiche pas.

Les documents de doc/ et le cahier des charges de la landing ont été alignés sur cette décision le 2026-09-27.

Décidé le 2026-09-28, pas encore implémenté

  • Les adaptateurs d'actions qui portent les actions wrappées vers Ethereum, un par action : l'adaptateur de verrouillage sur Robinhood Chain et son OFT sur Ethereum. Ils demandent le paquet oft-evm de LayerZero et ne sont pas dans le dépôt pour le mainnet ; les tests utilisent des mocks, et le test LayerZero sur testnet du 2026-10-06 a utilisé des adaptateurs de test construits sur ce paquet. La réclamation sur Ethereum est codée depuis le 2026-10-04, et son écran depuis le 2026-10-05
  • La configuration LayerZero des adaptateurs d'actions, tenue par l'owner, sans délai et sans plafond de sortie

Décidé le 2026-09-11, partiellement propagé

Le passage d'Ondo à Robinhood Chain est acté et le code du rail existe. Les documents sources du projet, eux, n'ont pas tous été mis à jour — voir Errata des sources.

Jamais vérifié en conditions réelles

  • Aucun déploiement mainnet n'a eu lieu
  • Aucun transport LayerZero n'a été exercé sur mainnet. Le 2026-10-06, le test LayerZero sur testnet a porté les batches de pont et les livraisons de l'airdrop entre Sepolia et le testnet de Robinhood Chain par les endpoints, le DVN et l'exécuteur réels de LayerZero sur testnet, sept fenêtres horaires et six cycles de l'airdrop, chaque réclamation exactement sa part calculée. Il utilisait des actions, des adaptateurs et un USDG de test et des feeds simulés : il ne prouve ni la paire USDG de Paxos, ni les actions de Robinhood et leurs adaptateurs, ni de vrais feeds et une vraie liquidité, ni le gas, les frais et la finalité du mainnet. Voir Le rail Robinhood
  • Les preuves formelles existantes ne couvrent pas le rail cross-chain actuel
  • Sept règles de la spécification formelle du LiquidityLock restent indécidées sur le prouveur pour une méthode, lockProtocolLiquidity, même avec une limite de temps plus longue ; elles tiennent sur toutes les autres méthodes. La relance du 2026-10-01, sur le code corrigé, n'a trouvé aucune règle violée
  • Les spécifications formelles sont en cours de mise à jour pour la refonte du 2026-10-02 : leur dernier passage complet sur le prouveur, le 2026-10-01, lui est antérieur. Pour l'airdrop du 2026-10-04, les cinq spécifications qui touchent les contrats modifiés passent la vérification de types, sans passage sur le prouveur. Le 2026-10-05, les spécifications ont été mises à jour pour les réglages, puis pour les dettes du hook, les parts que garde le lock et les rescues, et passent la vérification de types, sans passage sur le prouveur ; de même les nouvelles règles de l'oracle pour ses protections des prix, écrites le 2026-10-06
  • Les paiements de dettes, l'encaissement des frais de LP, les alertes et le fichier d'état du keeper, écrits le 2026-10-05, sont couverts par ses tests et, depuis le 2026-10-06, par une répétition sur une chaîne privée : conversions une fois par fenêtre, airdrop, vault qui refuse l'ETH et ses dettes payées, arrêts brutaux en plein envoi avec le fichier d'état et son verrou, frais de LP. Le rail du pont n'y a pas tourné ; il a tourné de bout en bout au test LayerZero sur testnet du 2026-10-06, mené par le keeper, jamais en conditions réelles
  • Aucune revue externe n'a été conduite

Ce qui reste à trancher avant le mainnet

  • Relevé à jour de la couverture des feeds sur Robinhood Chain, et, si Chainlink publie un feed de disponibilité du séquenceur pour cette chaîne, sa pose sur l'oracle (aucun n'existe le 2026-10-06)
  • La limite de taille du chemin LayerZero qu'emprunte l'USDG de Paxos vers Robinhood Chain, lue avant le premier batch, et le plafond de marchés d'un batch du pont ajusté si elle diffère des 10 000 octets par défaut (depuis la dixième boucle d'audit)
  • FDV de départ et borne haute de la position $STOCKFUN
  • Le travail qui reste sur l'airdrop, listé plus haut : les adaptateurs d'actions. Ses paramètres sont fixés depuis le 2026-10-04 : aucun envoi par le keeper, ni plafond, ni minimum, ni échéance, une liste d'exclusion par token
  • La métrique qui remplace le Treasury Ratio, ainsi que le slogan et la tagline, qui décrivent une trésorerie qui s'accumule
  • Les points de l'audit qui attendent la décision de l'owner : L-8, qui dépendait du choix fait sur la rotation de l'adaptateur de pont (M-2), et, du second tour du 2026-10-01, le côté contrat de la marge de la dernière action, qui change la règle d'allocation documentée (R2T-1), et, en option, faire déployer le vault de $STOCKFUN par la factory elle-même (R2F-2)

Tranchés le 2026-10-05 : les attestations Ondo que quiconque en voyait une pouvait dépenser (M-7) et les routeurs qui s'acceptaient eux-mêmes comme destinataires (L-4) sont corrigés. La rotation de l'adaptateur de pont (M-2) et la taxe d'achat prise en claims du PoolManager (R2F-1, option b) restent telles quelles : un adaptateur se change en l'upgradant en place, et un routeur qui règle l'ETH de l'acheteur après le swap peut voir un achat échouer. Une urgence sur le cash enregistré du hub distant, dont les enregistrements étaient ensuite payés avec le cash d'autres marchés (R2H-1), est couverte par les outils de règlement, les urgences chargées à un seul marché et, pour un transfert non attribué sur le rail canonique, la pause du hub avant le transfert. Un token de la jambe cash qui refuse un vault miroir (R2H-2) ne bloque plus que la part de ce marché, qui attend sur le hub distant pendant que les autres passent : la livraison non bloquante.