Comment un prix de référence est construit
L'API CantonCap recalcule le prix de référence de chaque actif environ une fois par minute, dans chacune des devises qu'elle publie. Ses données d'entrée sont les prix que les plateformes publiques de Canton cotent pour l'actif : le ticker de chaque marché, ou l'état de son pool lorsqu'un marché ne publie pas de ticker. Un prix coté dans un autre actif, comme un stablecoin ou Canton Coin, est converti au moyen du prix de référence propre à cet actif, de sorte qu'aucun stablecoin n'est supposé valoir exactement un dollar.
Un prix de référence est construit uniquement à partir d'observations récentes, suffisamment liquides pour être significatives et accessibles dans la devise demandée. L'état des pools d'une plateforme, les niveaux exécutables d'un carnet d'ordres et les transactions réglées sur une plateforme peuvent chacun servir de constituant direct. Des références externes libellées dans une devise peuvent convertir ces observations dans une devise cible, mais ne deviennent normalement pas elles-mêmes des constituants de prix autonomes.
Une cotation n'est prise en compte que dans les limites fixées par l'opérateur : une liquidité suffisante derrière elle, un écart par rapport aux autres cotations qui ne dépasse pas le seuil des valeurs aberrantes, un spread et un impact sur le prix dans les limites, un plafond à l'influence qu'une seule plateforme peut exercer sur le résultat, un nombre limité d'étapes de conversion et une ancienneté maximale. Les cotations retenues sont pondérées en un seul chiffre. Chaque actif est calculé séparément, si bien qu'un échec sur l'un ne retarde jamais un autre.
Le prix en USD de Canton Coin est la médiane de trois références indépendantes issues de bourses centralisées, Bybit CC/USDT, OKX CC/USDT et Kraken CC/USD, les jambes en USDT étant converties au taux USDT/USD de Kraken sous forme de décimal exact. Il est publié comme un agrégat balisé unique portant ses trois sources, et il constitue à la fois un maillon de conversion et un constituant direct.
La base à côté de chaque prix
Chaque page d'actif montre ce que cotent les plateformes : le dernier prix de chaque plateforme pour l'actif, l'écart entre le plus bas et le plus haut, et leur médiane. Seuls les marchés où l'actif est la base sont utilisés, dans l'actif de cotation qui compte le plus de marchés, car des prix exprimés dans des actifs de cotation différents ne peuvent pas partager un même axe.
Avec un nombre pair de plateformes, la médiane est la plus basse des deux cotations centrales plutôt que leur moyenne : c'est donc toujours un prix qu'une plateforme a réellement coté. La base est un contrôle public du prix de référence, pas le calcul lui-même, dont les pondérations et les exclusions sont des enregistrements administratifs.
Origines des prix
- Pool AMMvenue_pool
- Dérivé des réserves on-chain d'un pool sur une plateforme Canton.
- Carnet d'ordresvenue_book
- Dérivé des niveaux exécutables du carnet d'ordres d'une plateforme Canton.
- Transaction de plateformevenue_trade
- Tiré des transactions réglées du journal des transactions de la plateforme.
- Référence externeexternal_reference
- Une référence libellée dans une devise, utilisée pour la conversion et non pour fixer directement le prix.
- Dérivéderived
- Calculé à partir d'autres observations admises plutôt qu'observé directement.
Les contrôles appliqués à chaque observation
Avant de pouvoir étayer un chiffre publié, une observation est évaluée au regard de 15 contrôles. Un échec est enregistré comme incident de qualité, avec l'étape et le contrôle concernés.
Ces enregistrements sont administratifs et non publics : l'API publique publie la valeur retenue et l'heure de sa dernière mise à jour, pas la piste d'audit. Ce qu'un utilisateur public peut examiner directement, c'est l'écart entre les plateformes, voir n'importe quelle page d'actif.
- Validité décimaledecimal_validity
- La valeur déclarée n'a pas pu être lue comme un décimal exact.
- Validité de l'horodatagetimestamp_validity
- L'observation comportait une heure manquante ou invraisemblable.
- Résolution d'identitéidentity_resolution
- L'enregistrement n'a pu être rattaché à aucun actif ni marché connu.
- Validité du prixprice_validity
- Le prix était nul ou négatif, ou hors des limites que l'instrument peut prendre.
- Validité des réservesreserve_validity
- Les réserves du pool étaient incohérentes avec la courbe qu'elles sont censées suivre.
- Carnet croisébook_crossed
- Le meilleur cours acheteur dépassait le meilleur cours vendeur : le carnet n'était donc pas cohérent en lui-même.
- Carnet videbook_empty
- Un côté du carnet, ou les deux, ne comportait aucun niveau sur lequel établir un prix.
- Rupture de séquencesequence_gap
- Les numéros de séquence de la source ont sauté : au moins une mise à jour a donc été manquée.
- Obsolescencestaleness
- L'observation était plus ancienne que la fenêtre de fraîcheur de ce calcul.
- Prix aberrantprice_outlier
- Le prix se situait hors de la bande de dispersion admise par rapport aux autres cotations.
- Saut d'offresupply_jump
- L'offre de tokens déclarée a varié entre deux observations plus que l'émission ne le permet.
- Invariant OHLCohlc_invariant
- Une bougie a enfreint ses propres invariants — plus haut sous l'ouverture, plus bas au-dessus de la clôture, ou autre.
- Événement en doubleduplicate_event
- Le même événement source est arrivé deux fois et n'a été compté qu'une fois.
- Rapprochement du volumevolume_reconciliation
- Le volume déclaré ne concordait pas avec les transactions observées sur la même fenêtre.
- Dépendance indisponibledependency_availability
- Une donnée d'entrée dont dépend ce chiffre n'était pas disponible lors de son calcul.
Liquidité et score de liquidité
La liquidité d'un pool AMM est la valeur en USD de ses réserves : chaque réserve au prix de référence de son actif, rapprochée par son identité Canton. Si l'actif d'une réserve n'a pas de prix, le chiffre reste vide plutôt que d'être estimé ; un pool vide vaut zéro. Un carnet d'ordres se mesure plutôt par sa profondeur, de sorte qu'un marché à carnet d'ordres n'a pas de chiffre de liquidité unique.
La profondeur à 2 % est la valeur en USD qui peut être achetée ou vendue avant que le prix ne s'écarte de 2 % de la référence : lue dans les niveaux mêmes du carnet pour un carnet d'ordres, et modélisée à partir de l'état enregistré du pool, frais compris, pour un AMM. Une profondeur modélisée mesure la courbe ; ce n'est ni une cotation ni une promesse d'exécution.
Le score de liquidité note un marché de 0 à 100 selon ce que coûterait une transaction sur ce marché. L'API simule des achats et des ventes de $100, $500, $1'000, $5'000 et $10'000 sur l'état actuel du marché, hors frais, et convertit leur impact sur le prix, ainsi que la possibilité d'exécuter chacun d'eux, en un score unique. Un marché sans données d'entrée suffisantes n'a pas de score, ce qui n'équivaut jamais à un score de zéro.
Le score d'un actif est la moyenne de ses trois meilleurs scores de marché, d'un côté ou de l'autre de la paire, ou de tous ses marchés notés s'il en a moins, si bien qu'un actif n'ayant qu'un marché noté prend le score de ce marché. Celui d'une plateforme est la moyenne sur ses marchés. La vue « Plus liquides » classe les actifs selon le score d'actif.
Volume sur 24 heures
Le volume a une seule définition sur l'ensemble du site, de sorte qu'un tableau et un total ne peuvent pas se contredire. Le volume sur 24 heures d'un marché en USD est la mesure d'activité de l'API pour ce marché lorsqu'elle existe ; à défaut, le volume en USD que la plateforme déclare dans son ticker ; à défaut, son volume dans l'actif de cotation au prix de référence de cet actif. Le volume d'un actif est la somme sur tous les marchés où il se négocie, d'un côté ou de l'autre de la paire ; celui d'une plateforme est la somme sur ses marchés ; celui du réseau compte chaque marché une fois.
La mesure d'activité choisit un notionnel pour chaque période, en privilégiant l'USD dérivé de prix ancrés sur des bourses et datant de trois minutes au plus, et n'additionne jamais le volume déclaré par une plateforme au volume observé dans ses transactions. Elle est agrégée à partir de tranches horaires, avec un nouvel instantané toutes les cinq minutes.
Un chiffre de volume est assorti de ses réserves. Lorsqu'une actualisation ne fournit aucune valeur exploitable, l'API conserve la dernière avec son propre horodatage ; dès que celui-ci date de plus d'une heure, le chiffre est affiché atténué avec l'heure à laquelle il se rapporte, jamais comme actuel. Un chiffre partiel ne couvre qu'une partie des 24 heures et l'indique, et une estimation est signalée comme telle. Une valeur inconnue n'est jamais affichée comme zéro, et un total qui contient des chiffres anciens, partiels ou estimés indique combien.
Le volume déclaré par Rocky est affiché sur ses propres marchés, atténué et accompagné du motif, et exclu de tous les totaux jusqu'à ce qu'il concorde avec ses transactions : ses premiers chiffres atteignaient plusieurs fois l'offre des actifs qu'il liste.
Valorisation entièrement diluée
La FDV est le produit décimal exact du prix de référence admis et de la dernière observation de l'offre totale conforme à la politique, publiée par un teneur de registre agréé. Lorsque l'observation de l'offre est plus ancienne que la limite maximale acceptée par la méthodologie, ou qu'aucun teneur de registre agréé n'en a publié, la FDV n'est pas calculée et le motif est indiqué à la place du chiffre.
L'offre totale est le chiffre qu'un teneur de registre agréé publie pour l'instrument, conservé exactement tel que déclaré : jamais arrondi, remis à l'échelle ni interpolé. Une offre qui varie davantage entre deux observations que l'émission ne le permet est signalée par le contrôle des sauts d'offre. L'offre en circulation et l'offre maximale ne sont pas publiées.
Capitalisation de marché
La capitalisation de marché n'est pas publiée. Elle exige un chiffre d'offre en circulation, et aucune méthodologie revue de l'offre en circulation n'existe pour les instruments Canton : distinguer l'offre en circulation de l'offre bloquée, détenue en trésorerie ou soumise à des restrictions contractuelles est une question de gouvernance plutôt que de données.
L'API l'indique dans la réponse plutôt que de renvoyer un champ vide : la réponse des métriques globales contient market_cap.semantics = "unavailable_circulating_supply". Tant que cette méthodologie n'existe pas, une capitalisation de marché pour un actif Canton est une supposition, et ce produit ne publie pas de suppositions.
Rang et ratios
Le rang ordonne tous les actifs listés à partir de leur FDV, de la liquidité de leurs pools et de leur volume glissant sur 24 heures. Il est calculé une seule fois sur l'ensemble de la liste, si bien qu'un actif conserve le même rang sur chaque page, dans chaque devise et pour chaque tri.
Liquidité / FDV divise la liquidité en USD des pools AMM d'un actif par sa FDV, chaque pool éligible étant compté une seule fois. La profondeur des carnets d'ordres n'y est pas incluse. Le ratio n'est pas plafonné : une petite valorisation avec des pools profonds peut dépasser 100 %.
Volume / FDV divise le meilleur volume glissant sur 24 heures disponible pour l'actif, en USD (transactions déclarées ou observées, mais jamais leur somme), par sa FDV : la part de la valorisation qui a changé de mains en une journée.
L'un ou l'autre ratio est omis lorsque la FDV est manquante, obsolète ou nulle, ou lorsqu'il n'y a rien à diviser : un actif sans pool n'a pas de ratio de liquidité. Chacun porte sa couverture : un chiffre construit sur une partie des marchés l'indique.
Les deux se lisent sur une même échelle de quatre tranches, signalées par les barres à côté de chaque chiffre.
| Tranche | Plage | Liquidité / FDV | Volume / FDV |
|---|---|---|---|
| Mince, Calme | Moins de 1% | Mince | Calme |
| Peu profonde, Faible | De 1% à 5% | Peu profonde | Faible |
| Modérée, Actif | De 5% à 10% | Modérée | Actif |
| Profonde, Soutenu | 10% et plus | Profonde | Soutenu |
Graphiques : bougies et ligne
Les bougies montrent l'ouverture, le plus haut, le plus bas et la clôture de l'actif en USD, agrégés par l'API sur les marchés à partir desquels elle établit le prix de l'actif, avec le volume en dessous lorsqu'il a été publié. Les boutons déterminent la durée couverte par une bougie : 15m, 1h, 4h, 24h, 1W ou 1M. Les trois plus courtes remontent environ deux cents bougies en arrière, 24h remonte un an, et 1W et 1M couvrent tout l'historique.
L'API fournit des bougies d'une semaine au plus ; une bougie mensuelle est donc construite à partir de bougies journalières, par mois civil en UTC : elle ouvre à la première ouverture du mois, clôture à sa dernière clôture, s'étend du plus haut au plus bas du mois et additionne le volume publié par ses jours.
Les bougies sont reliées en une série continue : chacune ouvre là où la précédente a clôturé, et un intervalle sans transaction est une bougie plate au niveau de la clôture précédente, sans volume, plutôt qu'un trou. Le plus haut et le plus bas d'une bougie s'élargissent pour inclure son ouverture, afin que le corps ne sorte jamais de la mèche.
La ligne trace le prix de référence lui-même, sur 24h, 1W, 1M, 1Y ou Tout, à raison d'un point par intervalle, le dernier prix de celui-ci : toutes les 15 minutes sur 24 heures, toutes les heures sur une semaine, toutes les 4 heures sur un mois et chaque jour sur un an ou plus. Elle est verte au-dessus du premier point de la période et rouge en dessous.
Un graphique ne remonte qu'aussi loin que le permettent l'historique détenu par l'API et l'accès du site, et il est lu par fenêtres de 31 jours au plus. Lorsque l'historique d'une source commence au moment où CantonCap a commencé à l'observer, les périodes antérieures n'existent pas. La petite ligne de chaque rangée du tableau montre les prix de référence de l'actif sur les dernières 24 heures, heure par heure.
Fréquence de mise à jour et horodatages
Les plateformes sont lues toutes les 30 secondes à 5 minutes, selon ce que chacune permet, et les prix de référence sont recalculés environ une fois par minute. Le site réutilise chaque réponse pendant une courte durée : 30 secondes pour l'état des sources, une minute pour les prix, les actifs listés et les marchés, et cinq minutes pour le volume, les plateformes, les graphiques et les sparklines. Un tableau de marchés ouvert vérifie l'arrivée de nouveaux prix toutes les 45 secondes.
Toutes les heures publiées par l'API sont en UTC, et le site affiche ses heures en UTC. Un prix calculé porte l'heure de son calcul ; une mesure sur une fenêtre porte la fin de la fenêtre qu'elle couvre, et non l'heure de sa lecture. Les fenêtres incluent leur début et excluent leur fin. L'ancienneté de chaque chiffre est affichée à côté, et l'application signale les prix comme différés dès que le plus récent date d'une demi-heure. Le graphique de l'application affiche son axe dans l'heure locale du téléphone.
Données d'exemple et données en direct
Chaque chiffre est lu dans l'API CantonCap lors de la construction de la page, et chaque lecture enregistre si la réponse est arrivée en direct. En production, une API injoignable entraîne une erreur ou une absence clairement signalée, jamais une page de chiffres inventés.
Les builds de développement et de prévisualisation peuvent afficher un jeu de données d'exemple fixe lorsque l'API est hors de portée. Une page qui en est issue porte toujours une bannière de données d'exemple qui en indique la raison, et ses chiffres sont illustratifs, et non un flux de marché. Les données d'exemple ne sont jamais présentées comme réelles.
Observateurs, sentiment et publications des émetteurs
« N observateurs » compte les membres qui ont actuellement un actif dans leur liste de suivi, uniquement d'après les listes des membres connectés. C'est un total ; aucune liste n'est jamais affichée. Le site l'actualise au plus une fois par minute.
La jauge de sentiment compte des membres, chacun une fois par actif. Le vote haussier ou baissier d'un membre sur la page de l'actif compte pendant sept jours à partir du moment où il a été exprimé ; un membre qui n'a pas voté est compté selon la tendance de sa dernière publication initiale sur l'actif au cours des sept derniers jours, sans les réponses ni les publications masquées ou supprimées. La part haussière des membres qui ont pris position est placée sur un cadran de cinq zones égales, de fortement baissier à fortement haussier. C'est un décompte d'opinions, pas un signal, et elle reste vide lorsque personne n'a pris position.
Un fil d'émetteur montre les publications qu'un émetteur ou un fournisseur d'actif publie sur X, uniquement lorsque l'API répertorie une association approuvée entre cet émetteur et l'actif ; aucun fil n'est choisi par correspondance de symbole. Les publications apparaissent telles que publiées, avec leur heure en UTC et un lien vers l'original. Une publication modifiée montre sa dernière version, et les publications retenues, protégées et supprimées sont retirées. Une page ouverte vérifie à nouveau toutes les 30 secondes et n'affiche jamais une publication issue d'une réponse datant de plus de 90 secondes. CantonCap ne cautionne pas ce que publient les émetteurs.
Couverture et périmètre
Canton applique la confidentialité au niveau des sous-transactions : une partie ne reçoit que les éléments d'une transaction qui la concernent. Une plateforme visible pour une clé d'intégrateur n'est pas visible publiquement, et un enregistrement d'exécution limité à une partie n'est visible par personne d'autre. Chaque chiffre porte donc le périmètre sous lequel il a été observé.
Fonctionnement des périmètres de couverture et de visibilité