МожливостіСутності
Документація
    Ring Platform

    Децентралізоване самобудівне майбутнє

    Увійти
    Сутності
    Можливості
    Магазин
    Документація
    Концепції
    RING ЕкономікаSonoratek LLCГлобальний впливAI зустрічає Web3
    Розпочати
    Швидкий стартКалькуляторДорожня карта
    Конфіденційність|Контакти
    v1.104.23|Sonoratek LLC

    Documentation

    Концепції, цінність і типові сценарії

    Ласкаво просимо до Ring
    Швидкий довідник
    Початок роботи
    Передумови
    Встановлення
    Валідація першого успіху
    Наступні кроки
    Функції
    Магазин
    Склад і залишки
    Керування вендорами
    Комісії та розрахунки
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Інтеграція платежів
    Публічні пули та DAO-банки
    Інтеграція WayForPay
    Web3 Гаманець
    WalletConductor
    Кредитні винагороди
    Партнерська та реферальна підтримка
    Реферальні коди (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Система Стейкінга Токенів
    Лабораторія проєкту власника (Owner Project Lab)
    Сутності
    Можливості
    AI Matcher
    Повідомлення
    Завдання Ring
    WebRTC-дзвінки та STUNner TURN
    Ігри з друзями
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Сторінки публічного профілю
    Віджети профілю облікового запису
    Ring File Cabinet
    Система Резервування Імен Користувачів
    Науковий редактор
    Notifications
    Push-сповіщення через FCM (Ring)
    Email AI-CRM
    Ring Mailer і RingdomX Mail
    Протокол Tunnel
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Безпека та відповідність
    Консоль адміністратора
    Адмінська Wiki
    Керування через Telegram
    Система локалей
    Мобільний Досвід
    Паттерни Оптимізації Продуктивності
    Приклади
    Швидкий старт
    Базове налаштування
    Білий лейбл
    Користувацьке брендування
    Інтеграція Web3
    Реальні приклади
    Розширені функції
    Кастомізація
    Швидкий старт — ваш перший клон Ring
    Повний посібник налаштування
    Вертикальні пресети (SSOT)
    Ringization playbook
    Брендування
    Теми
    Функції
    Локалізація
    Налаштування токеноміки
    Інтеграція платіжних шлюзів
    Еталонні деплої Ring
    Конфігурація
    Публічні змінні середовища
    Секрети Order Lab
    Project ID WalletConnect (Reown Cloud)
    Підтримувані сервіси
    Вікі NODUS (знання проєкту)
    Плейбук конфігурації
    Web3
    Token launch jurisdictions
    Гаманець
    Поради з безпеки гаманця
    Інтеграції
    Ethereum гаманці (Wagmi v3)
    RingFileBase (API об’єктного сховища)
    Ring CDN (edge RingFileBase)
    Розгортання
    Self-hosted розгортання
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та Аналітика
    Оптимізація продуктивності
    Резервне копіювання і відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Синхронізація discovery після мутацій
    Архітектура PaymentConductor
    Архітектура WalletConductor
    Бекенд Сервіси
    Інтеграція Firebase
    Розробка
    Ring MCP Server

    Швидкий вхід (CTO · аудитори · агенти)

    Вітаємо — місія та аудиторії
    Швидкий довідник
    Початок роботи
    Архітектура та Auth.js
    Режими бекенду та БД (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Деплой (Docker · k8s)
    Безпека та відповідність
    ringdom.org — база LegioX
    Код — ліцензія MIT (GitHub)

    Documentation

    Концепції, цінність і типові сценарії

    Ласкаво просимо до Ring
    Швидкий довідник
    Початок роботи
    Передумови
    Встановлення
    Валідація першого успіху
    Наступні кроки
    Функції
    Магазин
    Склад і залишки
    Керування вендорами
    Комісії та розрахунки
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Інтеграція платежів
    Публічні пули та DAO-банки
    Інтеграція WayForPay
    Web3 Гаманець
    WalletConductor
    Кредитні винагороди
    Партнерська та реферальна підтримка
    Реферальні коди (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Система Стейкінга Токенів
    Лабораторія проєкту власника (Owner Project Lab)
    Сутності
    Можливості
    AI Matcher
    Повідомлення
    Завдання Ring
    WebRTC-дзвінки та STUNner TURN
    Ігри з друзями
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Сторінки публічного профілю
    Віджети профілю облікового запису
    Ring File Cabinet
    Система Резервування Імен Користувачів
    Науковий редактор
    Notifications
    Push-сповіщення через FCM (Ring)
    Email AI-CRM
    Ring Mailer і RingdomX Mail
    Протокол Tunnel
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Безпека та відповідність
    Консоль адміністратора
    Адмінська Wiki
    Керування через Telegram
    Система локалей
    Мобільний Досвід
    Паттерни Оптимізації Продуктивності
    Приклади
    Швидкий старт
    Базове налаштування
    Білий лейбл
    Користувацьке брендування
    Інтеграція Web3
    Реальні приклади
    Розширені функції
    Кастомізація
    Швидкий старт — ваш перший клон Ring
    Повний посібник налаштування
    Вертикальні пресети (SSOT)
    Ringization playbook
    Брендування
    Теми
    Функції
    Локалізація
    Налаштування токеноміки
    Інтеграція платіжних шлюзів
    Еталонні деплої Ring
    Конфігурація
    Публічні змінні середовища
    Секрети Order Lab
    Project ID WalletConnect (Reown Cloud)
    Підтримувані сервіси
    Вікі NODUS (знання проєкту)
    Плейбук конфігурації
    Web3
    Token launch jurisdictions
    Гаманець
    Поради з безпеки гаманця
    Інтеграції
    Ethereum гаманці (Wagmi v3)
    RingFileBase (API об’єктного сховища)
    Ring CDN (edge RingFileBase)
    Розгортання
    Self-hosted розгортання
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та Аналітика
    Оптимізація продуктивності
    Резервне копіювання і відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Синхронізація discovery після мутацій
    Архітектура PaymentConductor
    Архітектура WalletConductor
    Бекенд Сервіси
    Інтеграція Firebase
    Розробка
    Ring MCP Server

    Швидкий вхід (CTO · аудитори · агенти)

    Вітаємо — місія та аудиторії
    Швидкий довідник
    Початок роботи
    Архітектура та Auth.js
    Режими бекенду та БД (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Деплой (Docker · k8s)
    Безпека та відповідність
    ringdom.org — база LegioX
    Код — ліцензія MIT (GitHub)

    Documentation

    Концепції, цінність і типові сценарії

    Ласкаво просимо до Ring
    Швидкий довідник
    Початок роботи
    Передумови
    Встановлення
    Валідація першого успіху
    Наступні кроки
    Функції
    Магазин
    Склад і залишки
    Керування вендорами
    Комісії та розрахунки
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Інтеграція платежів
    Публічні пули та DAO-банки
    Інтеграція WayForPay
    Web3 Гаманець
    WalletConductor
    Кредитні винагороди
    Партнерська та реферальна підтримка
    Реферальні коди (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Система Стейкінга Токенів
    Лабораторія проєкту власника (Owner Project Lab)
    Сутності
    Можливості
    AI Matcher
    Повідомлення
    Завдання Ring
    WebRTC-дзвінки та STUNner TURN
    Ігри з друзями
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Сторінки публічного профілю
    Віджети профілю облікового запису
    Ring File Cabinet
    Система Резервування Імен Користувачів
    Науковий редактор
    Notifications
    Push-сповіщення через FCM (Ring)
    Email AI-CRM
    Ring Mailer і RingdomX Mail
    Протокол Tunnel
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Безпека та відповідність
    Консоль адміністратора
    Адмінська Wiki
    Керування через Telegram
    Система локалей
    Мобільний Досвід
    Паттерни Оптимізації Продуктивності
    Приклади
    Швидкий старт
    Базове налаштування
    Білий лейбл
    Користувацьке брендування
    Інтеграція Web3
    Реальні приклади
    Розширені функції
    Кастомізація
    Швидкий старт — ваш перший клон Ring
    Повний посібник налаштування
    Вертикальні пресети (SSOT)
    Ringization playbook
    Брендування
    Теми
    Функції
    Локалізація
    Налаштування токеноміки
    Інтеграція платіжних шлюзів
    Еталонні деплої Ring
    Конфігурація
    Публічні змінні середовища
    Секрети Order Lab
    Project ID WalletConnect (Reown Cloud)
    Підтримувані сервіси
    Вікі NODUS (знання проєкту)
    Плейбук конфігурації
    Web3
    Token launch jurisdictions
    Гаманець
    Поради з безпеки гаманця
    Інтеграції
    Ethereum гаманці (Wagmi v3)
    RingFileBase (API об’єктного сховища)
    Ring CDN (edge RingFileBase)
    Розгортання
    Self-hosted розгортання
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та Аналітика
    Оптимізація продуктивності
    Резервне копіювання і відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Синхронізація discovery після мутацій
    Архітектура PaymentConductor
    Архітектура WalletConductor
    Бекенд Сервіси
    Інтеграція Firebase
    Розробка
    Ring MCP Server

    Швидкий вхід (CTO · аудитори · агенти)

    Вітаємо — місія та аудиторії
    Швидкий довідник
    Початок роботи
    Архітектура та Auth.js
    Режими бекенду та БД (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Деплой (Docker · k8s)
    Безпека та відповідність
    ringdom.org — база LegioX
    Код — ліцензія MIT (GitHub)
    Ring Logo

    Loading documentation...

    Preparing Ring content

    Ring Logo

    Loading documentation...

    Preparing Ring content

    Ring Logo

    Loading documentation...

    Preparing Ring content

    Ring Oracle

    Ring Oracle — це server-only фасад курсів за адресою @/lib/ring-oracle. Він дає платіжному, wallet-, membership-, public-pool- і store-коду єдину лексику для вартості проєкту замість жорстко заданих символів токенів або фіатних валют.

    Використовуйте Founder / Developer на бічній панелі документації, щоб відфільтрувати цю сторінку. Засновники бачать операторський шлях і поведінку checkout; розробники — перевірені модулі, маршрути, payload-и та smoke-команди.

    Три номінали, без псевдонімів символів

    НоміналЗначенняНалаштована ідентичність
    credit_balanceОдиниця ledger, якою володіє проєктcredit.creditBalanceUnitLabel і credit.creditBalanceUnitToMainCurrency
    native_tokenНативний токен клонуtokens.nativeToken.symbol
    main_currencyФіат розрахунків проєктуstore.mainCurrency

    ValueDenomination містить рівно ці три значення. Символи валют на кшталт RING, USD або UAH — це значення для display/config, а не ідентифікатори номіналів.

    API конвертації навмисно вужчий

    GET і POST /api/prices/conversion приймають лише native_token і main_currency. credit_balance використовує поверхню обліку кредитів, а застарілі псевдоніми запитів RING / USD повертають HTTP 400.

    Чому це важливо для вашого клону

    Послідовна грошова мова

    Wallet, checkout, membership і фінансування спільноти визначають вартість проєкту через ту саму модель номіналів.

    Операційний FX-потік

    ProcessConductor оновлює фіатні курси presentment, а ручні перевизначення залишаються доступними в конфігурації клону.

    Правдивий checkout

    Store відокремлює те, що бачить покупець, від фіатної валюти, яку стягує картковий або PayPal-шлюз.

    Шлях оператора

    1. Виберіть грошові ідентичності клону

    Задайте основну валюту проєкту, підтримувані фіатні валюти presentment, підтримувані crypto-символи, native token і курс обліку кредитів у ring-config.json. Ring Oracle читає ці ідентичності проєкту; продуктовому коду не потрібен спеціальний випадок .

    Архітектура

    ПоверхняПеревірений шляхВідповідальність
    Фасадlib/ring-oracle/index.tsServer-only export surface для кожного сімейства курсів
    Номіналиlib/value-denomination.tsТочна трійка ValueDenomination і валідація
    Desk oraclefeatures/wallet/services/native-token-oracle.tsКурс native ↔ main, підписані котирування, audit log
    Міст Chainlinkfeatures/wallet/services/native-token-chainlink-oracle.tsAllowlist зовнішніх EVM token feeds
    Фіатний FXlib/fx/fx-feed-service.ts, lib/fx/fx-rates-overlay.tsВизначення провайдера, постійний кеш, live overlay

    Пов’язана документація

    Related documentation

    PaymentConductor

    Залежність: PaymentConductor використовує курси Oracle, коли рейка перетинає номінали.

    Multi-Vendor Store

    Той самий процес: display каталогу, presentment checkout і серверне створення charge.

    Wallet & Credit System

    Поглиблення: котирування Token Desk, облік кредитів і баланси native token.

    1. Документація
    2. /Функції
    3. /Ring Oracle

    Оновлено 6 вер. 2026 р.6 хв прослуховування

    Ring Oracle

    Ring Oracle — це server-only фасад курсів за адресою @/lib/ring-oracle. Він дає платіжному, wallet-, membership-, public-pool- і store-коду єдину лексику для вартості проєкту замість жорстко заданих символів токенів або фіатних валют.

    Використовуйте Founder / Developer на бічній панелі документації, щоб відфільтрувати цю сторінку. Засновники бачать операторський шлях і поведінку checkout; розробники — перевірені модулі, маршрути, payload-и та smoke-команди.

    Три номінали, без псевдонімів символів

    НоміналЗначенняНалаштована ідентичність
    credit_balanceОдиниця ledger, якою володіє проєктcredit.creditBalanceUnitLabel і credit.creditBalanceUnitToMainCurrency
    native_tokenНативний токен клонуtokens.nativeToken.symbol
    main_currencyФіат розрахунків проєктуstore.mainCurrency

    ValueDenomination містить рівно ці три значення. Символи валют на кшталт RING, USD або UAH — це значення для display/config, а не ідентифікатори номіналів.

    API конвертації навмисно вужчий

    GET і POST /api/prices/conversion приймають лише native_token і main_currency. credit_balance використовує поверхню обліку кредитів, а застарілі псевдоніми запитів RING / USD повертають HTTP 400.

    Чому це важливо для вашого клону

    Послідовна грошова мова

    Wallet, checkout, membership і фінансування спільноти визначають вартість проєкту через ту саму модель номіналів.

    Операційний FX-потік

    ProcessConductor оновлює фіатні курси presentment, а ручні перевизначення залишаються доступними в конфігурації клону.

    Правдивий checkout

    Store відокремлює те, що бачить покупець, від фіатної валюти, яку стягує картковий або PayPal-шлюз.

    Шлях оператора

    1. Виберіть грошові ідентичності клону

    Задайте основну валюту проєкту, підтримувані фіатні валюти presentment, підтримувані crypto-символи, native token і курс обліку кредитів у ring-config.json. Ring Oracle читає ці ідентичності проєкту; продуктовому коду не потрібен спеціальний випадок .

    Архітектура

    ПоверхняПеревірений шляхВідповідальність
    Фасадlib/ring-oracle/index.tsServer-only export surface для кожного сімейства курсів
    Номіналиlib/value-denomination.tsТочна трійка ValueDenomination і валідація
    Desk oraclefeatures/wallet/services/native-token-oracle.tsКурс native ↔ main, підписані котирування, audit log
    Міст Chainlinkfeatures/wallet/services/native-token-chainlink-oracle.tsAllowlist зовнішніх EVM token feeds
    Фіатний FXlib/fx/fx-feed-service.ts, lib/fx/fx-rates-overlay.tsВизначення провайдера, постійний кеш, live overlay

    Пов’язана документація

    Related documentation

    PaymentConductor

    Залежність: PaymentConductor використовує курси Oracle, коли рейка перетинає номінали.

    Multi-Vendor Store

    Той самий процес: display каталогу, presentment checkout і серверне створення charge.

    Wallet & Credit System

    Поглиблення: котирування Token Desk, облік кредитів і баланси native token.

    1. Документація
    2. /Функції
    3. /Ring Oracle

    Оновлено 6 вер. 2026 р.6 хв прослуховування

    Ring Oracle

    Ring Oracle — це server-only фасад курсів за адресою @/lib/ring-oracle. Він дає платіжному, wallet-, membership-, public-pool- і store-коду єдину лексику для вартості проєкту замість жорстко заданих символів токенів або фіатних валют.

    Використовуйте Founder / Developer на бічній панелі документації, щоб відфільтрувати цю сторінку. Засновники бачать операторський шлях і поведінку checkout; розробники — перевірені модулі, маршрути, payload-и та smoke-команди.

    Три номінали, без псевдонімів символів

    НоміналЗначенняНалаштована ідентичність
    credit_balanceОдиниця ledger, якою володіє проєктcredit.creditBalanceUnitLabel і credit.creditBalanceUnitToMainCurrency
    native_tokenНативний токен клонуtokens.nativeToken.symbol
    main_currencyФіат розрахунків проєктуstore.mainCurrency

    ValueDenomination містить рівно ці три значення. Символи валют на кшталт RING, USD або UAH — це значення для display/config, а не ідентифікатори номіналів.

    API конвертації навмисно вужчий

    GET і POST /api/prices/conversion приймають лише native_token і main_currency. credit_balance використовує поверхню обліку кредитів, а застарілі псевдоніми запитів RING / USD повертають HTTP 400.

    Чому це важливо для вашого клону

    Послідовна грошова мова

    Wallet, checkout, membership і фінансування спільноти визначають вартість проєкту через ту саму модель номіналів.

    Операційний FX-потік

    ProcessConductor оновлює фіатні курси presentment, а ручні перевизначення залишаються доступними в конфігурації клону.

    Правдивий checkout

    Store відокремлює те, що бачить покупець, від фіатної валюти, яку стягує картковий або PayPal-шлюз.

    Шлях оператора

    1. Виберіть грошові ідентичності клону

    Задайте основну валюту проєкту, підтримувані фіатні валюти presentment, підтримувані crypto-символи, native token і курс обліку кредитів у ring-config.json. Ring Oracle читає ці ідентичності проєкту; продуктовому коду не потрібен спеціальний випадок .

    Архітектура

    ПоверхняПеревірений шляхВідповідальність
    Фасадlib/ring-oracle/index.tsServer-only export surface для кожного сімейства курсів
    Номіналиlib/value-denomination.tsТочна трійка ValueDenomination і валідація
    Desk oraclefeatures/wallet/services/native-token-oracle.tsКурс native ↔ main, підписані котирування, audit log
    Міст Chainlinkfeatures/wallet/services/native-token-chainlink-oracle.tsAllowlist зовнішніх EVM token feeds
    Фіатний FXlib/fx/fx-feed-service.ts, lib/fx/fx-rates-overlay.tsВизначення провайдера, постійний кеш, live overlay

    Пов’язана документація

    Related documentation

    PaymentConductor

    Залежність: PaymentConductor використовує курси Oracle, коли рейка перетинає номінали.

    Multi-Vendor Store

    Той самий процес: display каталогу, presentment checkout і серверне створення charge.

    Wallet & Credit System

    Поглиблення: котирування Token Desk, облік кредитів і баланси native token.

    1. Документація
    2. /Функції
    3. /Ring Oracle

    Оновлено 6 вер. 2026 р.6 хв прослуховування

    RING/USD

    2. Виберіть FX-потік

    ring-config.fx визначає провайдерів у такому порядку:

    1. fx.byMainCurrency[store.mainCurrency]
    2. NBU, коли основна валюта — UAH
    3. fx.default для інших основних валют

    Поставлений за замовчуванням конфіг використовує NBU для UAH, а в інших випадках open_er_api. fx.manualOverrides має пріоритет над статичними курсами та live overlay.

    3. Керуйте desk- і FX-курсами

    Відкрийте /admin/web3/settings як superadmin, щоб оновити desk-курс native token, переглянути визначеного провайдера фіатного FX і час останнього отримання або примусово оновити FX. UI читає GET /api/admin/web3/settings і GET /api/admin/fx; запис відбувається відповідними POST-маршрутами.

    4. Заплануйте маршрут потоку

    Продакшен-планувальники викликають GET /api/cron/fx-feed-refresh. Встановіть CRON_SECRET і надішліть його як Bearer-токен. Маршрут записує запуск через ProcessConductor з ID pipeline fx-feed-refresh; застарілість потоку й надалі визначається налаштованим refreshHours.

    5. Зрозумійте presentment покупця

    Ліва навігаційна панель перемикається лише між main_currency (остання фіатна перевага покупця) і native_token. Droplist checkout дотримується цього режиму: фіат перелічує налаштовані SupportedCurrencies, native — налаштовані SupportedCrypto.

    На кроці review рядки продуктів і підсумки конвертуються через convertPrice / displayPrice. Card і PayPal залишаються фіатними платежами: checkout передає фіатний paymentCurrency, а сервер повторно обчислює платіж із підсумку замовлення в основній валюті перед викликом PaymentConductor.

    Crypto-сума в review checkout — це presentment, а не доказ того, що картковий шлюз стягне crypto. Платіжна рейка та paymentCurrency визначають settlement.

    Облік кредитівlib/payments/credit-balance.tsХелпери обліку credit unit ↔ main
    FX pipelinelib/processes/fx/fx-feed-refresh.ts, lib/processes/registry.tsОбробник, ID і cron-шлях ProcessConductor
    API конвертаціїapp/api/prices/conversion/route.tsПублічний контракт курсу й конвертації native ↔ main
    SSR hydrateapp/layout.tsxAuthenticatedAppShell прогріває й читає курси
    Client providercomponents/providers/app-client-shell.tsxПередає initialExchangeRates у контекст валюти store
    Контекст валюти storefeatures/store/currency-context.tsxРежим display, конвертація, форматування, переваги
    Presentment checkoutfeatures/store/components/checkout/prebilling-page.tsxDroplist fiat/crypto і фіатний paymentCurrency
    Charge checkoutapp/_actions/store-checkout-payment.tsСерверний перерахунок фіату для card/PayPal

    Правило фасаду

    Серверний код імпортує курси з фасаду, а не з модулів реалізації:

    @/lib/ring-oracle імпортує server-only. Клієнтські компоненти отримують серіалізовані дані курсів через AuthenticatedAppShell, AppClientShell або безпечну для клієнта server action getLiveExchangeRates.

    Потік оновлення FX

    1. 1

      Налаштуйте визначення провайдера

      ID провайдерів: nbu, open_er_api і frankfurter. Жорстка перевірка замінює NBU на open_er_api, коли основна валюта не UAH.

    2. 2

      Захистіть і викличте cron-маршрут

      Перевірка авторизації є умовною щодо CRON_SECRET, тому продакшен-розгортання мають його налаштувати. Відповідь містить runId ProcessConductor і метадані оновлення; вимкнений потік повертає успішний пропущений запуск. Курси зберігаються в platform_settings з id fx_feed (той самий гібридний шаблон JSONB, що й у desk oracle). Для погодинного оновлення кластера додайте k8s/cronjob-fx-feed-refresh.yaml.

    3. 3

      Перевірте або примусово оновіть як адміністратор

      GET /api/admin/fx повертає конфігурацію визначеного потоку, перевизначення, час отримання, зразок курсів і визначені курси для адміністраторів платформи. POST /api/admin/fx приймає { "force": true } і оновлює потік. Читання та запис desk-курсу залишаються на доступному лише superadmin маршруті /api/admin/web3/settings.

    Контракт API конвертації

    Прочитайте підтримувані пари

    GET /api/prices/conversion повертає denominations: ["native_token", "main_currency"], обидві пари напрямків, курси та обернені курси, метадані джерела й ліміти від 0.000001 до 1000000.

    Конвертуйте суму

    amount має бути додатним десятковим рядком, а from має відрізнятися від to. Відповідь містить ідентифікатори номіналів, налаштовані display-валюти, вихідну суму, конвертовану суму, обмінний курс, timestamp, confidence, нульову комісію конвертації та метадані джерела.

    Псевдонімів зворотної сумісності немає

    { "from": "RING", "to": "USD" } недійсний, навіть якщо це налаштовані символи клону. Надсилайте ідентифікатори номіналів, а не символи.

    Межі SSR і checkout

    1. 1

      Гідратуйте курси на сервері

      AuthenticatedAppShell викликає ensureFxFeedFresh(), потім getExchangeRates(). Якщо оновлення не вдається, оболонка залишає initialExchangeRates рівним null, а клієнтський код переходить до статичних курсів ring-config.

    2. 2

      Заповніть і оновлюйте client provider

      AppClientShell передає серіалізовані курси до StorePaymentMethodsProvider. Провайдер починає з цього SSR seed, потім після hydration викликає getLiveExchangeRates(), щоб конвертація в браузері залишалася узгодженою із серверним checkout.

    3. 3

      Розділяйте валюти display і charge

      StorePaymentMethodsProvider.displayMode — лише main_currency | native_token. PrebillingPage формує droplist із getSupportedCurrencies() або getSupportedCrypto(), зберігаючи фіатний paymentCurrency для card і PayPal. submitStoreCheckoutPayment перевіряє цей фіат щодо підтримуваного пулу presentment і перераховує суму на сервері.

    Smoke-перевірка

    Запустіть поставлений smoke smk46_ з ring-platform.org:

    Smoke перевіряє реєстрацію pipeline, визначення й оновлення провайдера, round-trip сервісу native ↔ main, необов’язкові контракти conversion GET / POST, HTTP 400 для застарілих RING / USD і поведінку cron-відповіді.

    RING/USD

    2. Виберіть FX-потік

    ring-config.fx визначає провайдерів у такому порядку:

    1. fx.byMainCurrency[store.mainCurrency]
    2. NBU, коли основна валюта — UAH
    3. fx.default для інших основних валют

    Поставлений за замовчуванням конфіг використовує NBU для UAH, а в інших випадках open_er_api. fx.manualOverrides має пріоритет над статичними курсами та live overlay.

    3. Керуйте desk- і FX-курсами

    Відкрийте /admin/web3/settings як superadmin, щоб оновити desk-курс native token, переглянути визначеного провайдера фіатного FX і час останнього отримання або примусово оновити FX. UI читає GET /api/admin/web3/settings і GET /api/admin/fx; запис відбувається відповідними POST-маршрутами.

    4. Заплануйте маршрут потоку

    Продакшен-планувальники викликають GET /api/cron/fx-feed-refresh. Встановіть CRON_SECRET і надішліть його як Bearer-токен. Маршрут записує запуск через ProcessConductor з ID pipeline fx-feed-refresh; застарілість потоку й надалі визначається налаштованим refreshHours.

    5. Зрозумійте presentment покупця

    Ліва навігаційна панель перемикається лише між main_currency (остання фіатна перевага покупця) і native_token. Droplist checkout дотримується цього режиму: фіат перелічує налаштовані SupportedCurrencies, native — налаштовані SupportedCrypto.

    На кроці review рядки продуктів і підсумки конвертуються через convertPrice / displayPrice. Card і PayPal залишаються фіатними платежами: checkout передає фіатний paymentCurrency, а сервер повторно обчислює платіж із підсумку замовлення в основній валюті перед викликом PaymentConductor.

    Crypto-сума в review checkout — це presentment, а не доказ того, що картковий шлюз стягне crypto. Платіжна рейка та paymentCurrency визначають settlement.

    Облік кредитівlib/payments/credit-balance.tsХелпери обліку credit unit ↔ main
    FX pipelinelib/processes/fx/fx-feed-refresh.ts, lib/processes/registry.tsОбробник, ID і cron-шлях ProcessConductor
    API конвертаціїapp/api/prices/conversion/route.tsПублічний контракт курсу й конвертації native ↔ main
    SSR hydrateapp/layout.tsxAuthenticatedAppShell прогріває й читає курси
    Client providercomponents/providers/app-client-shell.tsxПередає initialExchangeRates у контекст валюти store
    Контекст валюти storefeatures/store/currency-context.tsxРежим display, конвертація, форматування, переваги
    Presentment checkoutfeatures/store/components/checkout/prebilling-page.tsxDroplist fiat/crypto і фіатний paymentCurrency
    Charge checkoutapp/_actions/store-checkout-payment.tsСерверний перерахунок фіату для card/PayPal

    Правило фасаду

    Серверний код імпортує курси з фасаду, а не з модулів реалізації:

    @/lib/ring-oracle імпортує server-only. Клієнтські компоненти отримують серіалізовані дані курсів через AuthenticatedAppShell, AppClientShell або безпечну для клієнта server action getLiveExchangeRates.

    Потік оновлення FX

    1. 1

      Налаштуйте визначення провайдера

      ID провайдерів: nbu, open_er_api і frankfurter. Жорстка перевірка замінює NBU на open_er_api, коли основна валюта не UAH.

    2. 2

      Захистіть і викличте cron-маршрут

      Перевірка авторизації є умовною щодо CRON_SECRET, тому продакшен-розгортання мають його налаштувати. Відповідь містить runId ProcessConductor і метадані оновлення; вимкнений потік повертає успішний пропущений запуск. Курси зберігаються в platform_settings з id fx_feed (той самий гібридний шаблон JSONB, що й у desk oracle). Для погодинного оновлення кластера додайте k8s/cronjob-fx-feed-refresh.yaml.

    3. 3

      Перевірте або примусово оновіть як адміністратор

      GET /api/admin/fx повертає конфігурацію визначеного потоку, перевизначення, час отримання, зразок курсів і визначені курси для адміністраторів платформи. POST /api/admin/fx приймає { "force": true } і оновлює потік. Читання та запис desk-курсу залишаються на доступному лише superadmin маршруті /api/admin/web3/settings.

    Контракт API конвертації

    Прочитайте підтримувані пари

    GET /api/prices/conversion повертає denominations: ["native_token", "main_currency"], обидві пари напрямків, курси та обернені курси, метадані джерела й ліміти від 0.000001 до 1000000.

    Конвертуйте суму

    amount має бути додатним десятковим рядком, а from має відрізнятися від to. Відповідь містить ідентифікатори номіналів, налаштовані display-валюти, вихідну суму, конвертовану суму, обмінний курс, timestamp, confidence, нульову комісію конвертації та метадані джерела.

    Псевдонімів зворотної сумісності немає

    { "from": "RING", "to": "USD" } недійсний, навіть якщо це налаштовані символи клону. Надсилайте ідентифікатори номіналів, а не символи.

    Межі SSR і checkout

    1. 1

      Гідратуйте курси на сервері

      AuthenticatedAppShell викликає ensureFxFeedFresh(), потім getExchangeRates(). Якщо оновлення не вдається, оболонка залишає initialExchangeRates рівним null, а клієнтський код переходить до статичних курсів ring-config.

    2. 2

      Заповніть і оновлюйте client provider

      AppClientShell передає серіалізовані курси до StorePaymentMethodsProvider. Провайдер починає з цього SSR seed, потім після hydration викликає getLiveExchangeRates(), щоб конвертація в браузері залишалася узгодженою із серверним checkout.

    3. 3

      Розділяйте валюти display і charge

      StorePaymentMethodsProvider.displayMode — лише main_currency | native_token. PrebillingPage формує droplist із getSupportedCurrencies() або getSupportedCrypto(), зберігаючи фіатний paymentCurrency для card і PayPal. submitStoreCheckoutPayment перевіряє цей фіат щодо підтримуваного пулу presentment і перераховує суму на сервері.

    Smoke-перевірка

    Запустіть поставлений smoke smk46_ з ring-platform.org:

    Smoke перевіряє реєстрацію pipeline, визначення й оновлення провайдера, round-trip сервісу native ↔ main, необов’язкові контракти conversion GET / POST, HTTP 400 для застарілих RING / USD і поведінку cron-відповіді.

    RING/USD

    2. Виберіть FX-потік

    ring-config.fx визначає провайдерів у такому порядку:

    1. fx.byMainCurrency[store.mainCurrency]
    2. NBU, коли основна валюта — UAH
    3. fx.default для інших основних валют

    Поставлений за замовчуванням конфіг використовує NBU для UAH, а в інших випадках open_er_api. fx.manualOverrides має пріоритет над статичними курсами та live overlay.

    3. Керуйте desk- і FX-курсами

    Відкрийте /admin/web3/settings як superadmin, щоб оновити desk-курс native token, переглянути визначеного провайдера фіатного FX і час останнього отримання або примусово оновити FX. UI читає GET /api/admin/web3/settings і GET /api/admin/fx; запис відбувається відповідними POST-маршрутами.

    4. Заплануйте маршрут потоку

    Продакшен-планувальники викликають GET /api/cron/fx-feed-refresh. Встановіть CRON_SECRET і надішліть його як Bearer-токен. Маршрут записує запуск через ProcessConductor з ID pipeline fx-feed-refresh; застарілість потоку й надалі визначається налаштованим refreshHours.

    5. Зрозумійте presentment покупця

    Ліва навігаційна панель перемикається лише між main_currency (остання фіатна перевага покупця) і native_token. Droplist checkout дотримується цього режиму: фіат перелічує налаштовані SupportedCurrencies, native — налаштовані SupportedCrypto.

    На кроці review рядки продуктів і підсумки конвертуються через convertPrice / displayPrice. Card і PayPal залишаються фіатними платежами: checkout передає фіатний paymentCurrency, а сервер повторно обчислює платіж із підсумку замовлення в основній валюті перед викликом PaymentConductor.

    Crypto-сума в review checkout — це presentment, а не доказ того, що картковий шлюз стягне crypto. Платіжна рейка та paymentCurrency визначають settlement.

    Облік кредитівlib/payments/credit-balance.tsХелпери обліку credit unit ↔ main
    FX pipelinelib/processes/fx/fx-feed-refresh.ts, lib/processes/registry.tsОбробник, ID і cron-шлях ProcessConductor
    API конвертаціїapp/api/prices/conversion/route.tsПублічний контракт курсу й конвертації native ↔ main
    SSR hydrateapp/layout.tsxAuthenticatedAppShell прогріває й читає курси
    Client providercomponents/providers/app-client-shell.tsxПередає initialExchangeRates у контекст валюти store
    Контекст валюти storefeatures/store/currency-context.tsxРежим display, конвертація, форматування, переваги
    Presentment checkoutfeatures/store/components/checkout/prebilling-page.tsxDroplist fiat/crypto і фіатний paymentCurrency
    Charge checkoutapp/_actions/store-checkout-payment.tsСерверний перерахунок фіату для card/PayPal

    Правило фасаду

    Серверний код імпортує курси з фасаду, а не з модулів реалізації:

    @/lib/ring-oracle імпортує server-only. Клієнтські компоненти отримують серіалізовані дані курсів через AuthenticatedAppShell, AppClientShell або безпечну для клієнта server action getLiveExchangeRates.

    Потік оновлення FX

    1. 1

      Налаштуйте визначення провайдера

      ID провайдерів: nbu, open_er_api і frankfurter. Жорстка перевірка замінює NBU на open_er_api, коли основна валюта не UAH.

    2. 2

      Захистіть і викличте cron-маршрут

      Перевірка авторизації є умовною щодо CRON_SECRET, тому продакшен-розгортання мають його налаштувати. Відповідь містить runId ProcessConductor і метадані оновлення; вимкнений потік повертає успішний пропущений запуск. Курси зберігаються в platform_settings з id fx_feed (той самий гібридний шаблон JSONB, що й у desk oracle). Для погодинного оновлення кластера додайте k8s/cronjob-fx-feed-refresh.yaml.

    3. 3

      Перевірте або примусово оновіть як адміністратор

      GET /api/admin/fx повертає конфігурацію визначеного потоку, перевизначення, час отримання, зразок курсів і визначені курси для адміністраторів платформи. POST /api/admin/fx приймає { "force": true } і оновлює потік. Читання та запис desk-курсу залишаються на доступному лише superadmin маршруті /api/admin/web3/settings.

    Контракт API конвертації

    Прочитайте підтримувані пари

    GET /api/prices/conversion повертає denominations: ["native_token", "main_currency"], обидві пари напрямків, курси та обернені курси, метадані джерела й ліміти від 0.000001 до 1000000.

    Конвертуйте суму

    amount має бути додатним десятковим рядком, а from має відрізнятися від to. Відповідь містить ідентифікатори номіналів, налаштовані display-валюти, вихідну суму, конвертовану суму, обмінний курс, timestamp, confidence, нульову комісію конвертації та метадані джерела.

    Псевдонімів зворотної сумісності немає

    { "from": "RING", "to": "USD" } недійсний, навіть якщо це налаштовані символи клону. Надсилайте ідентифікатори номіналів, а не символи.

    Межі SSR і checkout

    1. 1

      Гідратуйте курси на сервері

      AuthenticatedAppShell викликає ensureFxFeedFresh(), потім getExchangeRates(). Якщо оновлення не вдається, оболонка залишає initialExchangeRates рівним null, а клієнтський код переходить до статичних курсів ring-config.

    2. 2

      Заповніть і оновлюйте client provider

      AppClientShell передає серіалізовані курси до StorePaymentMethodsProvider. Провайдер починає з цього SSR seed, потім після hydration викликає getLiveExchangeRates(), щоб конвертація в браузері залишалася узгодженою із серверним checkout.

    3. 3

      Розділяйте валюти display і charge

      StorePaymentMethodsProvider.displayMode — лише main_currency | native_token. PrebillingPage формує droplist із getSupportedCurrencies() або getSupportedCrypto(), зберігаючи фіатний paymentCurrency для card і PayPal. submitStoreCheckoutPayment перевіряє цей фіат щодо підтримуваного пулу presentment і перераховує суму на сервері.

    Smoke-перевірка

    Запустіть поставлений smoke smk46_ з ring-platform.org:

    Smoke перевіряє реєстрацію pipeline, визначення й оновлення провайдера, round-trip сервісу native ↔ main, необов’язкові контракти conversion GET / POST, HTTP 400 для застарілих RING / USD і поведінку cron-відповіді.