Bittensor SN25

使用 Gamma 支付

用 SN25 gamma 购买 UR Pro 和数据包,全程通过 URnetwork API 完成。唯一不经过 API 的一步,是您用自己的 coldkey 签名的铸造。

Gamma 是什么

Gamma 是 Bittensor 链的一项功能,不是需要安装的应用或钱包。每个子网都有自己的 gamma,一个 gamma 价值一美元。您用自己的 coldkey 将 SN25 的 gamma 铸造到某个 hotkey 下的存款中,URnetwork 从这笔存款中扣除您所购买内容的价格。

铸造会用您的 TAO 买入 SN25 alpha 并将其销毁。URnetwork 只接受 SN25 gamma。

其余每一步都是 API 调用,因此脚本或智能体可以完成全部流程:读取条款、发起购买、查询状态以及选择自动扣费。

您需要准备

  • 一个 URnetwork 账户,以及该账户的 bearer 令牌(第 1 步)。
  • 一个 Bittensor coldkey,其中的 TAO 足以支付价格和交易手续费。
  • btcli,自 11.3.2 版起随 bittensor Python 包一同提供:
    pip install "bittensor>=11.3.2"

分步操作

所有调用都发送到 https://api.bringyour.com。每个字段和错误的说明见 API 参考。

  1. 获取 bearer 令牌

    需要令牌的调用以 Authorization: Bearer <token> 的形式发送令牌。令牌可以是网络 JWT,也可以是 API key。

    登录后,您会在 network.by_jwt 中获得网络 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 key 在您删除之前一直有效。用 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 key,会拒绝来自 POST /network/auth-client 的客户端 JWT。

  2. 读取条款

    读取条款不需要令牌。条款列出子网、URnetwork 的服务 hotkey 和支出账户、每个套餐和数据包以 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 是铸造等值于价格的 gamma 大约需要的 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 是 URnetwork 在子网 25 上为您的账户分配的 hotkey。您向它铸造,之后的每次购买也都使用它。它不是收款地址:切勿向它发送 TAO。
    • amount_gamma 是以 gamma 计的价格,正是我们的扣款所取的金额。reference 是此次购买专属的 32 字节引用标识,我们的扣款会在链上携带它。
    • min_daily_cap_gamma 是能让此次购买成功扣款的最小每日支出上限,auto_min_daily_cap_gamma 是能让每笔自动扣费成功扣款的最小上限。
    • status_token 用于读取此次购买的状态。请妥善保密,不要放进 URL 或日志。
    • 如果铸造因 NonAssociatedColdKey 失败,说明该 hotkey 下的存款已归另一个 coldkey 所有。请附上 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

    然后用您的 coldkey 签名完成铸造:命令相同,只是用 -w <your_coldkey> 替换 --dry-run。购买响应会以 mint_dry_run_command 和 mint_command 给出这两条命令,并已填好您的 hotkey 和金额。

    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 中,bittensor SDK 可以预览并完成同样的铸造:

    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 下没有存款。请向 deposit_hotkey 铸造。

    被跳过的扣款不会扣走任何东西,也不会买到任何东西。只有在您的存款发生变化后我们才会重试:例如您铸造了更多、提高了上限或修正了支出账户。

  6. 选择自动扣费

    使用 Gamma 支付会为您的账户开启自动续订和自动充值。请用网络 JWT 或 API key 读取和修改它们;未提供的字段保持不变。

    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 在链上都是公开的。
  • 请确认您是在向 URnetwork 付款:btcli query services --netuid 25 会列出 SN25 的服务,我们的服务标记为 owner。
  • 铸造会销毁 SN25 alpha。URnetwork 不会收到 TAO。