Как строится референсная цена
API CantonCap пересчитывает референсную цену каждого актива примерно раз в минуту в каждой публикуемой валюте. Исходные данные — цены, которые публичные площадки Canton котируют для актива: тикер каждого рынка или, если рынок не публикует тикер, состояние его пула. Цена, выраженная в другом активе, например в стейблкоине или Canton Coin, пересчитывается по собственной референсной цене этого актива, поэтому ни один стейблкоин не считается равным ровно одному доллару.
Референсная цена строится только из наблюдений, которые свежи, достаточно ликвидны, чтобы быть значимыми, и доступны в запрошенной валюте. Прямым компонентом может быть состояние пула площадки, исполнимые уровни стакана или завершённые сделки на площадке. Внешние референсные котировки с указанием валюты могут пересчитывать эти наблюдения в целевую валюту, но, как правило, сами не становятся самостоятельными компонентами цены.
Котировка учитывается только в пределах, заданных оператором: за ней должна стоять достаточная ликвидность, её отклонение от других котировок не должно превышать порог выбросов, спред и влияние на цену должны оставаться в допустимых пределах; кроме того, ограничены влияние одной площадки на результат, число шагов конвертации и максимальный возраст котировки. Прошедшие отбор котировки взвешиваются в один показатель. Каждый актив рассчитывается отдельно, поэтому сбой по одному никогда не задерживает другой.
Цена Canton Coin в USD — медиана трёх независимых референсных котировок централизованных бирж: Bybit CC/USDT, OKX CC/USDT и Kraken CC/USD; котировки в USDT пересчитываются по курсу USDT/USD на Kraken как точное десятичное число. Она публикуется как один помеченный агрегат с тремя источниками и служит одновременно звеном конвертации и прямым компонентом.
Основа рядом с каждой ценой
На странице каждого актива видно, что котируют площадки: последняя цена каждой площадки для актива, спред между самой низкой и самой высокой и их медиана. Используются только рынки, где актив является базовым, в том активе котировки, у которого больше всего рынков, потому что цены в разных активах котировки нельзя показать на одной оси.
При чётном числе площадок медианой считается меньшая из двух средних котировок, а не их среднее, поэтому это всегда цена, которую площадка действительно котировала. Основа — это публичная проверка референсной цены, а не сам расчёт, веса и исключения которого являются административными записями.
Происхождение цен
- Пул AMMvenue_pool
- Рассчитано по ончейн-резервам пула на площадке Canton.
- Стакан заявокvenue_book
- Рассчитано по исполнимым уровням стакана заявок на площадке Canton.
- Сделка на площадкеvenue_trade
- Взято из сделок с завершёнными расчётами в журнале сделок площадки.
- Внешний ориентирexternal_reference
- Ориентир с указанием валюты; служит для пересчёта, а не для прямого установления цены.
- Производныйderived
- Рассчитано на основе других допущенных наблюдений, а не наблюдается напрямую.
Какие проверки проходит каждое наблюдение
Прежде чем наблюдение сможет лечь в основу опубликованного показателя, оно оценивается по набору проверок (всего: 15). Сбой фиксируется как инцидент качества с указанием этапа и проверки.
Эти записи административные, а не публичные: публичный API публикует итоговое значение и время его последнего обновления, а не журнал аудита. Публичный потребитель может напрямую изучить спред между площадками, см. страницу любого актива.
- Десятичный форматdecimal_validity
- Сообщённое значение не удалось разобрать как точное десятичное число.
- Корректность времениtimestamp_validity
- У наблюдения не было времени или оно было неправдоподобным.
- Идентификацияidentity_resolution
- Запись не удалось связать с известным активом или рынком.
- Корректность ценыprice_validity
- Цена была неположительной или выходила за границы, допустимые для инструмента.
- Корректность резервовreserve_validity
- Резервы пула не согласовывались с кривой, которой они якобы следуют.
- Пересечённый стаканbook_crossed
- Лучшая цена покупки превышала лучшую цену продажи, поэтому стакан был внутренне противоречив.
- Пустой стаканbook_empty
- На одной или обеих сторонах стакана не было уровней для определения цены.
- Разрыв последовательностиsequence_gap
- Порядковые номера источника шли с пропуском, значит, как минимум одно обновление потеряно.
- Устареваниеstaleness
- Наблюдение оказалось старше окна актуальности для этого расчёта.
- Ценовой выбросprice_outlier
- Цена вышла за допустимую полосу разброса относительно аналогов.
- Скачок предложенияsupply_jump
- Сообщённое предложение токена изменилось между наблюдениями сильнее, чем допускает эмиссия.
- Инвариант OHLCohlc_invariant
- Свеча нарушила собственные инварианты: максимум ниже открытия, минимум выше закрытия и т. п.
- Дубликат событияduplicate_event
- Одно и то же событие источника пришло дважды и было учтено один раз.
- Сверка объёмаvolume_reconciliation
- Сообщённый объём не совпал со сделками, наблюдаемыми за то же окно.
- Зависимость недоступнаdependency_availability
- Входные данные, от которых зависит этот показатель, были недоступны в момент расчёта.
Ликвидность и оценка ликвидности
Ликвидность пула AMM — это стоимость его резервов в USD: каждый резерв по референсной цене его актива, сопоставленного по идентификатору в Canton. Если у актива резерва нет цены, показатель остаётся пустым, а не оценивается наугад; пустой пул равен нулю. Стакан заявок, напротив, измеряется глубиной, поэтому у рынка со стаканом нет единого показателя ликвидности.
Глубина в пределах 2% — это стоимость в USD, которую можно купить или продать, прежде чем цена отклонится на 2% от референсной: для стакана она считывается с его собственных уровней, для AMM моделируется по сохранённому состоянию пула с учётом комиссии. Смоделированная глубина описывает кривую; это не котировка и не обещание исполнения.
Оценка ликвидности ставит рынку балл от 0 до 100 в зависимости от того, во что обойдётся торговля на нём. API моделирует покупки и продажи объёмом $100, $500, $1 000, $5 000 и $10 000 по текущему состоянию рынка без учёта комиссий и сводит их влияние на цену, а также возможность исполнить каждую из них, в одну оценку. У рынка без достаточных исходных данных оценки нет, и это никогда не равнозначно оценке ноль.
Оценка актива — это среднее трёх наивысших оценок его рынков, с любой стороны пары, или всех его оценённых рынков, если их меньше; у актива с одним оценённым рынком оценка совпадает с оценкой этого рынка. Оценка площадки — среднее по её рынкам. По оценке актива ранжируются активы в представлении «Самые ликвидные».
Объём за 24 часа
У объёма одно определение на всём сайте, поэтому таблица и итог не могут расходиться. Объём рынка за 24 часа в USD — это измерение активности API для этого рынка, если оно есть; иначе — объём в USD, который площадка сообщает в своём тикере; иначе — его объём в активе котировки по референсной цене этого актива. Объём актива — сумма по всем рынкам, на которых он торгуется, с любой стороны пары; объём площадки — сумма по её рынкам; объём сети учитывает каждый рынок один раз.
Измерение активности выбирает одну номинальную стоимость для каждого периода, отдавая предпочтение USD, рассчитанному по биржевым ценам не старше трёх минут, и никогда не складывает объём, сообщённый площадкой, с объёмом, наблюдаемым по её сделкам. Оно агрегируется из часовых интервалов, а новый снимок формируется каждые пять минут.
Показатель объёма сопровождается оговорками. Если при обновлении нет пригодного значения, API сохраняет последнее вместе с его временем; если это время старше часа, показатель отображается приглушённым с указанием времени, к которому он относится, и никогда — как текущий. Частичный показатель охватывает только часть 24 часов и сообщает об этом, а оценочное значение помечается как оценка. Неизвестное никогда не показывается как ноль, а итог, включающий устаревшие, частичные или оценочные значения, указывает, сколько их.
Объём, который сообщает Rocky, показывается на её собственных рынках, приглушённым и с указанием причины, и не входит ни в какие итоги, пока не будет сверен с её сделками: первые её значения в несколько раз превышали предложение перечисленных на ней активов.
Полностью разводнённая оценка
FDV — точное десятичное произведение допущенной референсной цены на последнее совместимое с политикой наблюдение общего предложения от одобренного регистратора. Если наблюдение предложения старше максимального срока, допустимого методологией, или ни один одобренный регистратор его не опубликовал, FDV не рассчитывается, а вместо числа указывается причина.
Общее предложение — это значение, которое одобренный регистратор публикует для инструмента, в точности как оно сообщено: без округления, масштабирования и интерполяции. Если предложение между двумя наблюдениями меняется сильнее, чем допускает эмиссия, его помечает проверка скачков предложения. Циркулирующее и максимальное предложение не публикуются.
Рыночная капитализация
Рыночная капитализация не публикуется. Для неё нужен показатель циркулирующего предложения, а проверенной методологии циркулирующего предложения для инструментов Canton нет: отделить циркулирующее предложение от заблокированного, казначейского и ограниченного договорами — вопрос управления, а не данных.
API сообщает об этом в ответе, а не возвращает пустое поле: ответ с глобальными метриками содержит market_cap.semantics = "unavailable_circulating_supply". Пока такой методологии нет, рыночная капитализация актива Canton — это догадка, а этот продукт догадок не публикует.
Рейтинг и соотношения
Рейтинг упорядочивает все активы в листинге по FDV, ликвидности в их пулах и скользящему объёму за 24 часа. Он рассчитывается один раз по всему листингу, поэтому у актива одно и то же место на каждой странице, в любой валюте и при любой сортировке.
Ликвидность / FDV — это ликвидность пулов AMM актива в USD, делённая на его FDV; каждый подходящий пул учитывается один раз. Глубина стаканов не учитывается. Значение не ограничено сверху: при небольшой оценке и глубоких пулах оно может превышать 100%.
Объём / FDV — это лучший доступный скользящий объём актива за 24 часа в USD (по сообщённым или наблюдаемым сделкам, но никогда не их сумма), делённый на его FDV: доля оценки, перешедшая из рук в руки за день.
Соотношение не показывается, если FDV отсутствует, устарел или равен нулю, или если делить нечего: у актива без пула нет соотношения ликвидности. У каждого соотношения указан охват, поэтому показатель, построенный по части рынков, сообщает об этом.
Оба соотношения читаются по одной шкале из четырёх диапазонов, которые отмечены полосками рядом с каждым показателем.
| Диапазон | Значения | Ликвидность / FDV | Объём / FDV |
|---|---|---|---|
| Тонкая, Низкий | Менее 1% | Тонкая | Низкий |
| Неглубокая, Небольшой | От 1% до 5% | Неглубокая | Небольшой |
| Умеренная, Активный | От 5% до 10% | Умеренная | Активный |
| Глубокая, Высокий | 10% и выше | Глубокая | Высокий |
Графики: свечи и линия
Свечи показывают цену открытия, максимум, минимум и цену закрытия актива в USD, агрегированные API по рынкам, по которым он оценивает актив, с объёмом внизу, если он опубликован. Переключатели задают период одной свечи: 15m, 1h, 4h, 24h, 1W или 1M. Для трёх самых коротких загружается около двухсот свечей назад, для 24h — год, для 1W и 1M — вся история.
API отдаёт свечи длиной до недели, поэтому месячная свеча строится из дневных по календарным месяцам в UTC: она открывается по первому открытию месяца, закрывается по последнему закрытию, охватывает наивысший максимум и наинизший минимум и суммирует объём, опубликованный за дни месяца.
Свечи объединяются в непрерывный ряд: каждая открывается там, где закрылась предыдущая, а интервал без сделок отображается плоской свечой по предыдущей цене закрытия, без объёма, а не пропуском. Максимум и минимум свечи расширяются, чтобы вместить цену открытия, поэтому тело свечи никогда не выходит за пределы её тени.
Линия показывает саму референсную цену за 24h, 1W, 1M, 1Y или «Всё», по одной точке на интервал — последней цене в нём: каждые 15 минут за 24 часа, ежечасно за неделю, каждые 4 часа за месяц и ежедневно за год и более. Она зелёная выше первой точки периода и красная ниже.
График уходит в прошлое лишь настолько, насколько позволяют история, хранящаяся в API, и доступ сайта, и загружается окнами не длиннее 31 дня. Если история источника начинается с момента, когда CantonCap начал его наблюдать, более ранних периодов не существует. Маленькая линия в каждой строке таблицы — это референсные цены актива за последние 24 часа, по часам.
Частота обновлений и метки времени
Площадки опрашиваются с интервалом от 30 секунд до 5 минут, в зависимости от того, что допускает каждая, а референсные цены пересчитываются примерно раз в минуту. Сайт повторно использует каждый ответ в течение короткого интервала: 30 секунд для статуса источников, минуту для цен, листингов и рынков и пять минут для объёма, площадок, графиков и мини-графиков. Открытая таблица рынков проверяет новые цены каждые 45 секунд.
Все значения времени, которые публикует API, указаны в UTC, и сайт тоже показывает время в UTC. Рассчитанная цена несёт время расчёта; измерение за окно несёт время окончания охватываемого окна, а не время считывания. Окна включают своё начало и исключают конец. Давность каждого показателя указана рядом с ним, а приложение помечает цены как поступающие с задержкой, когда самой свежей из них уже полчаса. На графике в приложении ось времени показана по местному времени телефона.
Демонстрационные и актуальные данные
Каждый показатель считывается из API CantonCap при формировании страницы, и при каждом чтении фиксируется, получены ли актуальные данные. В рабочей среде недоступный API приводит к ошибке или к честно обозначенному отсутствию данных, но никогда — к странице с выдуманными показателями.
Сборки для разработки и предпросмотра могут показывать фиксированный набор демонстрационных данных, когда API недоступен. Страница, построенная на них, всегда содержит баннер о демонстрационных данных с указанием причины, а её показатели носят иллюстративный характер и не являются рыночными данными. Демонстрационные данные никогда не выдаются за реальные.
Избранное, настрой и публикации эмитентов
«В избранном: N» — это число участников, у которых актив сейчас в избранном; учитываются только списки участников, вошедших в аккаунт. Это итоговое число; сами списки никогда не показываются. Сайт обновляет его не чаще раза в минуту.
Индикатор настроя считает участников, каждого один раз для каждого актива. Бычий или медвежий голос участника на странице актива учитывается в течение семи дней с момента голосования; участник, который не голосовал, учитывается по настрою своей последней исходной публикации об активе за последние семь дней, без учёта ответов, скрытых и удалённых публикаций. Доля бычьих среди участников, указавших настрой, отмечается на шкале из пяти равных зон — от сильно медвежьего до сильно бычьего. Это подсчёт мнений, а не сигнал, и он остаётся пустым, если никто не указал настрой.
Лента эмитента показывает публикации эмитента или поставщика актива в X, только если API указывает одобренную связь между этим эмитентом и активом; лента никогда не подбирается по совпадению символа. Публикации отображаются в том виде, в каком были опубликованы, с временем в UTC и ссылкой на оригинал. Для отредактированной публикации показывается последняя версия, а удержанные, защищённые и удалённые публикации убираются. Открытая страница проверяет обновления каждые 30 секунд и никогда не показывает публикацию из ответа старше 90 секунд. CantonCap не одобряет содержание публикаций эмитентов.
Охват и видимость
Canton обеспечивает конфиденциальность на уровне частей транзакции: сторона получает только те части транзакции, которые к ней относятся. Площадка, видимая через ключ интегратора, не видна публично, а запись об исполнении, видимая стороне, не видна больше никому. Поэтому каждый показатель несёт область видимости, в которой он наблюдался.