Bittensor SN25

Paga con Gamma

Compra UR Pro y paquetes de datos con gamma de SN25, todo a través de la API de URnetwork. El único paso fuera de ella es la acuñación que firmas con tu propia coldkey.

Qué es Gamma

Gamma es una función de la cadena de Bittensor, no una app ni una billetera que instalar. Cada subred tiene su propio gamma, y un gamma vale un dólar estadounidense. Acuñas el gamma de SN25 con tu coldkey en un depósito asociado a una hotkey, y URnetwork cobra de ese depósito el precio de lo que compras.

Al acuñar se compra alpha de SN25 con tu TAO y se quema. URnetwork solo acepta gamma de SN25.

Todos los demás pasos son llamadas a la API, así que un script o un agente puede hacerlo todo: leer los términos, iniciar una compra, consultar su estado y elegir los cobros automáticos.

Qué necesitas

  • Una cuenta de URnetwork y un token bearer para ella (paso 1).
  • Una coldkey de Bittensor con suficiente TAO para el precio y la comisión de la transacción.
  • btcli, que viene con el paquete de Python bittensor desde la versión 11.3.2:
    pip install "bittensor>=11.3.2"

Paso a paso

Todas las llamadas van a https://api.bringyour.com. Cada campo y cada error están en la Referencia de la API.

  1. Consigue un token bearer

    Las llamadas que necesitan un token lo envían como Authorization: Bearer <token>. El token es un JWT de red o una clave de API.

    Al iniciar sesión obtienes un JWT de red, en network.by_jwt. Por ejemplo, con una contraseña:

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

    Una clave de API funciona hasta que la eliminas. Crea una con el JWT: empieza por urn_, y esta respuesta es la única vez que la ves.

    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" }

    Los ajustes del paso 6 aceptan un JWT de red o una clave de API, y rechazan un JWT de cliente de POST /network/auth-client.

  2. Lee los términos

    Los términos no necesitan token. Indican la subred, la hotkey de servicio y la cuenta de gasto de URnetwork, cada plan y paquete de datos con su precio en gamma y el límite diario que un depósito necesita para él, y si la acuñación funciona ahora mismo.

    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 es false mientras las compras están desactivadas, y unavailable_reason dice por qué.
    • mint_available es false mientras la acuñación está desactivada, y mint_unavailable_reason dice por qué: gamma_disabled, subnet_gamma_disabled o price_stale. Un depósito que ya contiene el precio puede pagar igualmente.
    • indicative_tao es aproximadamente cuánto TAO necesita una acuñación por el precio: la propia simulación de la cadena, más un 3 %.
  3. Inicia una compra

    Envía el plan que quieras: monthly, yearly o yearly_onboarding para la oferta de bienvenida mientras puedas canjearla. Para un paquete de datos, envía item_id en su lugar: data_1tib, data_10tib o data_256gib (256 GiB por $0.75, que solo se vende con Gamma y por x402).

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

    Para recibir un paquete de datos como código de saldo, añade "delivery":"code". Con email, también te enviamos el código por correo.

    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"}'

    La respuesta, por ejemplo:

    {
      "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 es la hotkey que URnetwork asignó a tu cuenta, en la subred 25. Acuñas en ella, y también sirve para cada compra posterior. No es una dirección de pago: nunca le envíes TAO.
    • amount_gamma es el precio en gamma, exactamente lo que toma nuestro cobro. reference es la referencia propia de 32 bytes de esta compra, que nuestro cobro lleva en la cadena.
    • min_daily_cap_gamma es el límite diario de gasto más pequeño con el que se puede cobrar esta compra, y auto_min_daily_cap_gamma el más pequeño con el que se puede cobrar cada cargo automático.
    • status_token consulta el estado de esta compra. Mantenlo en secreto, fuera de URLs y registros.
    • Si la acuñación falla con NonAssociatedColdKey, otra coldkey ya es dueña del depósito de esa hotkey. Pide de nuevo con coldkey, la dirección SS58 de la coldkey con la que acuñas, para obtener una hotkey que pueda usar.
    • Una compra sigue abierta hasta expires_at. Si vuelves a pedir el mismo artículo, recibes la compra abierta con un status_token nuevo.
  4. Acuña gamma en tu depósito

    Antes de acuñar, lee las advertencias de abajo.

    Es el único paso fuera de la API y la única firma. Primero previsualiza la acuñación: con --dry-run, btcli muestra lo que obtendrías y no envía nada.

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

    Después acuña, firmando con tu coldkey: el mismo comando con -w <your_coldkey> en lugar de --dry-run. La compra te da ambos comandos con tu hotkey y un importe ya puestos, como mint_dry_run_command y mint_command.

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

    --service-hotkey hace que un depósito nuevo indique la cuenta de gasto de URnetwork, y rechaza un depósito que indique otra. Acuña al menos el precio, unos indicative_tao TAO; una acuñación menor que min_mint_gamma gamma falla.

    También puedes abrir el depósito con un límite diario de gasto, --daily-spend-cap-gamma <gamma>. Que sea al menos min_daily_cap_gamma, y al menos auto_min_daily_cap_gamma si mantienes los cobros automáticos. Para cambiar el límite más tarde:

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

    Desde Python, el SDK de bittensor previsualiza y hace la misma acuñación:

    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. Consulta el estado

    Consulta la compra con su status_token; esta llamada no lleva token bearer. Solo acreditamos una compra cuando nuestro propio cobro con su reference está finalizado en la cadena, nunca solo por la acuñación.

    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
    Todavía no hay gamma en deposit_hotkey.
    seen
    El depósito tiene gamma pero aún no puede pagar: remaining_gamma es cuánto más hay que acuñar, o error.code dice qué impide el cobro.
    confirming
    El depósito cubre el precio. Nuestro cobro está en camino, o ya llegó y se está registrando el abono.
    paid
    Acreditado, por nuestro cobro finalizado en el bloque spent_block. Un código de saldo está en balance_code.
    expired
    No se cobró nada antes de expires_at. El gamma no gastado se queda en el depósito para tu próxima compra.
    review
    Alguien de nuestro equipo lo está revisando; review_reason dice por qué.
    unknown
    No existe esa compra, o el token no coincide.

    Cuando el depósito no puede pagar, o la cadena omite nuestro cobro, error.code dice por qué:

    insufficient_gamma
    El depósito tenía menos que el precio. Acuña más.
    daily_cap_too_low
    El límite diario del depósito está por debajo del precio. Súbelo al menos a min_daily_cap_gamma.
    daily_cap_exceeded
    Los cobros de hoy superarían el límite diario del depósito. Sube el límite.
    wrong_spender
    El depósito indica otra cuenta de gasto. Vuelve a apuntarlo a la de URnetwork con el comando de abajo.
    btcli gamma set-spender --netuid 25 --hotkey <deposit_hotkey> \
      --service-hotkey 5CyQFykVpfa9xgZVGgBsiNUpjbo1EihBTSkPvDC1FZbL1wxG \
      -w <your_coldkey>
    no_deposit
    No hay ningún depósito en la hotkey. Acuña en deposit_hotkey.

    Un cobro omitido no toma nada ni compra nada. Solo lo reintentamos cuando tu depósito cambia: cuando acuñas más, subes el límite o corriges la cuenta de gasto.

  6. Elige los cobros automáticos

    Pagar con Gamma activa la renovación y la recarga automáticas en tu cuenta. Consúltalas y cámbialas con un JWT de red o una clave de API; un campo que omitas se queda como está.

    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
    Al final de cada periodo de un plan pagado con Gamma, cobrar el precio del plan del depósito, salvo que pagues Pro de otra forma más allá de ese periodo. Un año de la oferta de bienvenida se renueva al precio anual. Activado por defecto.
    auto_topup
    Cuando se te acaben los datos, comprar topup_item_id, como mucho una vez por hora. Cuando una cuenta gratuita alcance su límite de clientes, comprar Pro, como mucho una vez al día; una mejora automática nunca cambia cómo tu red provee ancho de banda. Activado por defecto.
    topup_item_id
    data_1tib, el valor por defecto, data_10tib o data_256gib.
    monthly_limit_gamma
    Lo máximo que toman los cobros automáticos en un mes natural, en UTC. "" o "0" quita el límite.

    Cada cobro automático tiene su propia referencia y envía un recibo por correo. Si la cadena lo omite, recibes un aviso, y solo se reintenta cuando cambia el depósito.

Antes de acuñar

Gamma no se puede reembolsar ni transferir. Solo cobramos el precio de lo que compras. El Gamma no gastado se queda en tu depósito y solo funciona en SN25.

Disolver una subred destruye su gamma.

Salvo que los desactives, cobramos automáticamente del mismo depósito: los planes pagados con Gamma se renuevan al final de cada periodo, se añade un paquete de datos (1 TiB salvo que elijas otro) cuando se te acaban los datos, y una cuenta gratuita que alcanza su límite de clientes se mejora a Pro.

  • La acuñación falla mientras el precio TAO/USD de la cadena tenga más de 300 bloques de antigüedad, alrededor de una hora. Entonces los términos muestran mint_available como false, con price_stale. Mientras tanto, paga con una criptomoneda o con x402.
  • La hotkey del depósito no es una dirección de pago. Nunca le envíes TAO. Si lo hiciste, escribe a support@ur.io para que te lo devolvamos.
  • Un cobro toma su importe completo o nada, así que un límite diario debe ser al menos el precio, y al menos auto_min_daily_cap_gamma para los cobros automáticos. Un depósito no tiene límite salvo que pongas uno.
  • Un depósito y la coldkey que acuñó en él son públicos en la cadena.
  • Comprueba que pagas a URnetwork: btcli query services --netuid 25 lista los servicios de SN25, y el nuestro es el marcado como owner.
  • La acuñación quema alpha de SN25. URnetwork no recibe TAO.