Transactions

serve-prometheus

Publish this hotkey's prometheus metrics endpoint (ip:port) for a subnet.

View as Markdown

Advertises where this neuron's prometheus metrics can be scraped, separate from the axon endpoint used for inter-neuron traffic. Signed by the hotkey, which must be registered on the subnet, and subject to the same serving rate limit as serve_axon. Like the axon calls, this only writes chain data — running the metrics server is up to the caller.

SignerOriginPalletWraps
hotkeysigned account (pallet role may apply)SubtensorModuleSubtensorModule.serve_prometheus

Parameters

ParameterTypeRequiredDescription
netuidintegeryesSubnet on which to publish the endpoint.
ipstringyesPublic IPv4 or IPv6 address of the endpoint, in standard dotted or colon notation.
portintegeryesTCP port the endpoint listens on.
versionintegernoVersion number of the serving neuron's software, stored with the endpoint.

Address parameters (--hotkey, --coldkey, --dest, ...) accept a raw ss58 address, an address-book or proxy-book name, or a local wallet/hotkey name.

CLI

Preview with --dry-run (shows fee, effects, and policy result without submitting), then submit:

btcli tx serve-prometheus \
  --netuid <int> \
  --ip <value> \
  --port <int> --dry-run
btcli tx serve-prometheus \
  --netuid <int> \
  --ip <value> \
  --port <int> -w my_coldkey

Python

import bittensor as bt
from bittensor.wallet import Wallet

wallet = Wallet(name="my_coldkey", hotkey="my_hotkey")
intent = bt.ServePrometheus(netuid=1, ip="...", port=0)

sub = bt.Subtensor()
plan = sub.plan(intent, wallet)   # fee, effects, policy — no submission
result = sub.execute(intent, wallet)
if not result.success:
    print(result.error.code, result.error.remediation)

(bt.Subtensor is also the async client — async with bt.Subtensor() as client: — see The client.) Or build the intent by op name, as an agent would:

result = sub.execute_tool("serve_prometheus", {...}, wallet)

On-chain implementation

SubtensorModule.serve_prometheuspallets/subtensor/src/macros/dispatches.rs#L750:

#[pallet::call_index(5)]
#[pallet::weight((<T as crate::pallet::Config>::WeightInfo::serve_prometheus(), DispatchClass::Normal, Pays::No))]
pub fn serve_prometheus(
    origin: OriginFor<T>,
    netuid: NetUid,
    version: u32,
    ip: u128,
    port: u16,
    ip_type: u8,
) -> DispatchResult {
    Self::do_serve_prometheus(origin, netuid, version, ip, port, ip_type)
}

Delegates to do_serve_prometheus.

Every file is browsable under /code exactly as built into the runtime, or as plain text under /code/raw/<path> (index: /code/index.json).