Bittensor SN25

Оплата через Gamma

Покупайте UR Pro и пакеты данных за gamma SN25 полностью через API URnetwork. Единственный шаг вне API — выпуск gamma, который вы подписываете своим coldkey.

Что такое Gamma

Gamma — это функция блокчейна Bittensor, а не приложение и не кошелёк, который нужно устанавливать. У каждой подсети своя gamma, и одна gamma стоит один доллар США. Вы выпускаете gamma SN25 своим coldkey на депозит, привязанный к hotkey, и URnetwork списывает с этого депозита цену того, что вы покупаете.

При выпуске на ваши TAO покупается alpha SN25, которая затем сжигается. URnetwork принимает только gamma SN25.

Все остальные шаги — вызовы API, поэтому всё может сделать скрипт или агент: прочитать условия, начать покупку, проверить её статус и выбрать автоматические списания.

Что понадобится

  • Аккаунт URnetwork и bearer-токен для него (шаг 1).
  • Coldkey Bittensor, на котором достаточно TAO для цены и комиссии за транзакцию.
  • btcli, который входит в Python-пакет bittensor начиная с версии 11.3.2:
    pip install "bittensor>=11.3.2"

Шаг за шагом

Все вызовы идут на https://api.bringyour.com. Все поля и ошибки описаны здесь: Справочник API.

  1. Получите bearer-токен

    Вызовы, которым нужен токен, передают его как Authorization: Bearer <token>. Токен — это JWT сети или API-ключ.

    При входе вы получаете JWT сети в network.by_jwt. Например, с паролем:

    curl -X POST https://api.bringyour.com/auth/login-with-password \
      -H "Content-Type: application/json" \
      -d '{"user_auth":"me@example.com","password":"<password>"}'

    API-ключ действует, пока вы его не удалите. Создайте его с помощью JWT: он начинается с urn_, и этот ответ — единственный раз, когда вы его видите.

    curl -X POST https://api.bringyour.com/account/api-key \
      -H "Authorization: Bearer <network_jwt>" \
      -H "Content-Type: application/json" \
      -d '{"name":"gamma"}'
    { "id": "…", "api_key": "urn_…", "name": "gamma" }

    Настройки на шаге 6 принимают JWT сети или API-ключ и отклоняют JWT клиента из POST /network/auth-client.

  2. Прочитайте условия

    Для условий токен не нужен. В них указаны подсеть, сервисный hotkey и расходный аккаунт URnetwork, каждый тариф и пакет данных с ценой в gamma и дневным лимитом, который для него нужен депозиту, а также работает ли выпуск прямо сейчас.

    curl https://api.bringyour.com/pay/gamma/terms
    {
      "available": true,
      "mint_available": true,
      "netuid": 25,
      "service_hotkey": "5CyQFykVpfa9xgZVGgBsiNUpjbo1EihBTSkPvDC1FZbL1wxG",
      "spender": "5EUQU938kFzJsVBjn9ch5RNNG4191j7mSz5Djf5vghrmWgUC",
      "max_price_age_blocks": 300,
      "min_mint_gamma": "0.1",
      "items": [
        { "plan": "monthly", "price_gamma": "5", "min_daily_cap_gamma": "5",
          "renews": true, "indicative_tao": "0.023645" },
        { "plan": "yearly", "price_gamma": "40", "min_daily_cap_gamma": "40",
          "renews": true, "indicative_tao": "0.189165" },
        { "item_id": "data_1tib", "price_gamma": "3", "min_daily_cap_gamma": "3",
          "renews": false, "indicative_tao": "0.014187" },
        { "item_id": "data_10tib", "price_gamma": "20", "min_daily_cap_gamma": "20",
          "renews": false, "indicative_tao": "0.094583" },
        { "item_id": "data_256gib", "price_gamma": "0.75", "min_daily_cap_gamma": "0.75",
          "renews": false, "indicative_tao": "0.003547" }
      ],
      "auto_min_daily_cap_gamma": "40",
      …
    }
    • available равно false, пока покупки выключены, а unavailable_reason объясняет почему.
    • mint_available равно false, пока выпуск выключен, а mint_unavailable_reason объясняет почему: gamma_disabled, subnet_gamma_disabled или price_stale. Депозит, на котором уже есть сумма цены, всё равно может оплатить.
    • indicative_tao — примерно столько TAO нужно для выпуска на сумму цены: собственная симуляция выпуска в блокчейне плюс 3%.
  3. Начните покупку

    Отправьте нужный plan: monthly, yearly или yearly_onboarding для приветственного предложения, пока его можно активировать. Для пакета данных вместо этого отправьте item_id: data_1tib, data_10tib или data_256gib (256 GiB за $0.75, продаётся только за Gamma и через x402).

    curl -X POST https://api.bringyour.com/pay/gamma/intent \
      -H "Authorization: Bearer urn_..." \
      -H "Content-Type: application/json" \
      -d '{"plan":"yearly"}'

    Чтобы получить пакет данных в виде кода баланса, добавьте "delivery":"code". С email мы также отправим код на почту.

    curl -X POST https://api.bringyour.com/pay/gamma/intent \
      -H "Authorization: Bearer urn_..." \
      -H "Content-Type: application/json" \
      -d '{"item_id":"data_1tib","delivery":"code","email":"me@example.com"}'

    Ответ, например:

    {
      "intent_id": "0b6f2f7e-4f1c-4a8e-9d1a-1f6a2b3c4d5e",
      "status_token": "<status_token>",
      "plan": "yearly",
      "amount_gamma": "40",
      "reference": "0x5d0c6b9e3e3c5c0a5b8f2a0f1d4a3e9b7c6d5e4f3a2b1c0d9e8f7a6b5c4d3e2f",
      "netuid": 25,
      "deposit_hotkey": "<deposit_hotkey>",
      "service_hotkey": "5CyQFykVpfa9xgZVGgBsiNUpjbo1EihBTSkPvDC1FZbL1wxG",
      "min_daily_cap_gamma": "40",
      "auto_min_daily_cap_gamma": "40",
      "min_mint_gamma": "0.1",
      "indicative_tao": "0.189165",
      "mint_available": true,
      "mint_dry_run_command": "btcli tx mint-gamma --netuid 25 --hotkey <deposit_hotkey> … --dry-run",
      "mint_command": "btcli tx mint-gamma --netuid 25 --hotkey <deposit_hotkey> … -w <your_coldkey>",
      "expires_at": "2026-11-12T12:00:00Z",
      …
    }
    • deposit_hotkey — hotkey, который URnetwork назначил вашему аккаунту в подсети 25. Вы выпускаете gamma на него, и он служит и для всех последующих покупок. Это не адрес для оплаты: никогда не отправляйте на него TAO.
    • amount_gamma — цена в gamma, ровно столько забирает наше списание. reference — собственный 32-байтовый идентификатор этой покупки, который наше списание несёт в блокчейне.
    • min_daily_cap_gamma — наименьший дневной лимит расходов, при котором проходит списание за эту покупку, а auto_min_daily_cap_gamma — наименьший, при котором проходит любое автоматическое списание.
    • status_token позволяет читать статус этой покупки. Храните его в секрете, не передавайте в URL и не пишите в логи.
    • Если выпуск завершается ошибкой NonAssociatedColdKey, депозит на этом hotkey уже принадлежит другому coldkey. Запросите снова с coldkey — SS58-адресом coldkey, которым вы выпускаете, — и получите hotkey, который он может использовать.
    • Покупка остаётся открытой до expires_at. Повторный запрос того же товара возвращает открытую покупку с новым status_token.
  4. Выпустите gamma на депозит

    Перед выпуском прочитайте предупреждения ниже.

    Это единственный шаг вне API и единственная подпись. Сначала посмотрите выпуск заранее: с --dry-run btcli показывает, что вы получите, и ничего не отправляет.

    btcli tx mint-gamma --netuid 25 --hotkey <deposit_hotkey> --amount-tao <TAO> \
      --service-hotkey 5CyQFykVpfa9xgZVGgBsiNUpjbo1EihBTSkPvDC1FZbL1wxG --dry-run

    Затем выпустите gamma, подписав своим coldkey: та же команда с -w <your_coldkey> вместо --dry-run. Покупка даёт обе команды с вашим hotkey и уже подставленной суммой — mint_dry_run_command и mint_command.

    btcli tx mint-gamma --netuid 25 --hotkey <deposit_hotkey> --amount-tao <TAO> \
      --service-hotkey 5CyQFykVpfa9xgZVGgBsiNUpjbo1EihBTSkPvDC1FZbL1wxG -w <your_coldkey>

    С --service-hotkey новый депозит указывает расходный аккаунт URnetwork, а депозит, где указан другой, отклоняется. Выпустите не меньше цены, примерно indicative_tao TAO; выпуск меньше min_mint_gamma gamma не пройдёт.

    Можно также открыть депозит с дневным лимитом расходов — --daily-spend-cap-gamma <gamma>. Сделайте его не меньше min_daily_cap_gamma и не меньше auto_min_daily_cap_gamma, если оставляете автоматические списания. Чтобы позже изменить лимит:

    btcli gamma set-cap --netuid 25 --hotkey <deposit_hotkey> \
      --daily-spend-cap-gamma <gamma> -w <your_coldkey>

    Из Python SDK bittensor заранее показывает тот же выпуск и выполняет его:

    import asyncio
    import bittensor as bt
    
    async def main():
        wallet = bt.Wallet(name="<your_coldkey>")
        mint = bt.MintGamma(
            netuid=25,
            hotkey_ss58="<deposit_hotkey>",
            amount_tao="<TAO>",
            service_hotkey_ss58="5CyQFykVpfa9xgZVGgBsiNUpjbo1EihBTSkPvDC1FZbL1wxG",
        )
        async with bt.Subtensor() as client:
            plan = await client.plan(mint, wallet)  # the dry run: submits nothing
            print(plan.preview)
            await client.execute(mint, wallet)
    
    asyncio.run(main())
  5. Проверьте статус

    Запрашивайте статус покупки по её status_token; этому вызову bearer-токен не нужен. Мы зачисляем покупку только тогда, когда наше собственное списание с её reference финализировано в блокчейне, и никогда — только по выпуску.

    curl -X POST https://api.bringyour.com/pay/gamma/status \
      -H "Content-Type: application/json" \
      -d '{"intent_id":"<intent_id>","status_token":"<status_token>"}'
    {
      "intent_id": "0b6f2f7e-4f1c-4a8e-9d1a-1f6a2b3c4d5e",
      "status": "paid",
      "amount_gamma": "40",
      "deposit_balance_gamma": "10",
      "remaining_gamma": "0",
      "spent_block": 9479641,
      "credited_at": "2026-11-11T12:01:12Z",
      …
    }
    pending
    На deposit_hotkey пока нет gamma.
    seen
    На депозите есть gamma, но оплатить пока нельзя: remaining_gamma — сколько ещё нужно выпустить, или error.code объясняет, что мешает списанию.
    confirming
    Депозит покрывает цену. Наше списание в пути или уже прошло, и зачисление записывается.
    paid
    Зачислено по нашему финализированному списанию в блоке spent_block. Код баланса — в balance_code.
    expired
    До expires_at ничего не было списано. Неизрасходованная gamma остаётся на депозите для следующей покупки.
    review
    Этим занимается кто-то из нашей команды; review_reason объясняет почему.
    unknown
    Такой покупки нет, или токен не совпадает.

    Когда депозит не может оплатить или блокчейн пропускает наше списание, error.code объясняет почему:

    insufficient_gamma
    На депозите было меньше цены. Выпустите ещё.
    daily_cap_too_low
    Дневной лимит депозита ниже цены. Поднимите его хотя бы до min_daily_cap_gamma.
    daily_cap_exceeded
    Сегодняшние списания превысили бы дневной лимит депозита. Поднимите лимит.
    wrong_spender
    В депозите указан другой расходный аккаунт. Верните аккаунт URnetwork командой ниже.
    btcli gamma set-spender --netuid 25 --hotkey <deposit_hotkey> \
      --service-hotkey 5CyQFykVpfa9xgZVGgBsiNUpjbo1EihBTSkPvDC1FZbL1wxG \
      -w <your_coldkey>
    no_deposit
    На этом hotkey нет депозита. Выпустите gamma на deposit_hotkey.

    Пропущенное списание ничего не забирает и ничего не покупает. Мы повторяем его только после того, как ваш депозит изменится: когда вы выпустите ещё, поднимете лимит или исправите расходный аккаунт.

  6. Выберите автоматические списания

    Оплата через Gamma включает для вашего аккаунта автоматическое продление и пополнение. Читайте и меняйте их с JWT сети или API-ключом; поле, которое вы не указали, остаётся как есть.

    curl https://api.bringyour.com/pay/gamma/settings \
      -H "Authorization: Bearer urn_..."
    
    curl -X POST https://api.bringyour.com/pay/gamma/settings \
      -H "Authorization: Bearer urn_..." \
      -H "Content-Type: application/json" \
      -d '{"auto_renew":false,"monthly_limit_gamma":"20"}'
    auto_renew
    В конце каждого срока тарифа, оплаченного Gamma, списывать цену тарифа с депозита, если только вы не оплачиваете Pro другим способом после этого срока. Год по приветственному предложению продлевается по годовой цене. Включено по умолчанию.
    auto_topup
    Когда у вас заканчиваются данные, покупать topup_item_id, не чаще раза в час. Когда бесплатный аккаунт достигает лимита клиентов, покупать Pro, не чаще раза в день; автоматическое повышение тарифа никогда не меняет то, как ваша сеть предоставляет пропускную способность. Включено по умолчанию.
    topup_item_id
    data_1tib (по умолчанию), data_10tib или data_256gib.
    monthly_limit_gamma
    Максимум, который автоматические списания забирают за календарный месяц, по UTC. "" или "0" снимает лимит.

    У каждого автоматического списания свой идентификатор, и по каждому приходит квитанция на почту. Если блокчейн его пропускает, вы получаете одно уведомление, а повтор будет только после изменения депозита.

Перед выпуском

Gamma нельзя вернуть или перевести. Мы взимаем только цену того, что вы покупаете. Неизрасходованная Gamma остаётся на вашем депозите и работает только в SN25.

Ликвидация подсети уничтожает её gamma.

Если вы их не отключите, мы автоматически списываем с того же депозита: тарифы, оплаченные Gamma, продлеваются в конце каждого срока, когда у вас заканчиваются данные, добавляется пакет данных (1 TiB, если вы не выберете другой), а бесплатный аккаунт, достигший лимита клиентов, переводится на Pro.

  • Выпуск не проходит, пока цена TAO/USD в блокчейне старше 300 блоков, это около часа. Тогда в условиях mint_available равно false, с причиной price_stale. А пока платите криптовалютой или через x402.
  • Hotkey депозита — не адрес для оплаты. Никогда не отправляйте на него TAO. Если отправили, напишите на support@ur.io, чтобы вам их вернули.
  • Списание забирает всю сумму или ничего, поэтому дневной лимит должен быть не меньше цены, а для автоматических списаний — не меньше auto_min_daily_cap_gamma. У депозита нет лимита, пока вы его не установите.
  • Депозит и coldkey, который выпустил на него gamma, публично видны в блокчейне.
  • Проверьте, что платите URnetwork: btcli query services --netuid 25 показывает сервисы SN25, и наш отмечен как owner.
  • Выпуск сжигает alpha SN25. URnetwork не получает TAO.