bittensor-cli 9.5.0__tar.gz → 9.5.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. bittensor_cli-9.5.1/MANIFEST.in +1 -0
  2. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/PKG-INFO +1 -1
  3. bittensor_cli-9.5.1/bittensor_cli/src/bittensor/templates/main-filters.j2 +24 -0
  4. bittensor_cli-9.5.1/bittensor_cli/src/bittensor/templates/main-header.j2 +36 -0
  5. bittensor_cli-9.5.1/bittensor_cli/src/bittensor/templates/neuron-details.j2 +111 -0
  6. bittensor_cli-9.5.1/bittensor_cli/src/bittensor/templates/price-multi.j2 +113 -0
  7. bittensor_cli-9.5.1/bittensor_cli/src/bittensor/templates/price-single.j2 +99 -0
  8. bittensor_cli-9.5.1/bittensor_cli/src/bittensor/templates/subnet-details-header.j2 +49 -0
  9. bittensor_cli-9.5.1/bittensor_cli/src/bittensor/templates/subnet-details.j2 +32 -0
  10. bittensor_cli-9.5.1/bittensor_cli/src/bittensor/templates/subnet-metrics.j2 +57 -0
  11. bittensor_cli-9.5.1/bittensor_cli/src/bittensor/templates/subnets-table.j2 +28 -0
  12. bittensor_cli-9.5.1/bittensor_cli/src/bittensor/templates/table.j2 +267 -0
  13. bittensor_cli-9.5.1/bittensor_cli/src/bittensor/templates/view.css +1058 -0
  14. bittensor_cli-9.5.1/bittensor_cli/src/bittensor/templates/view.j2 +43 -0
  15. bittensor_cli-9.5.1/bittensor_cli/src/bittensor/templates/view.js +1053 -0
  16. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli.egg-info/PKG-INFO +1 -1
  17. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli.egg-info/SOURCES.txt +14 -0
  18. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/pyproject.toml +3 -2
  19. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/README.md +0 -0
  20. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/__init__.py +0 -0
  21. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/cli.py +0 -0
  22. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/doc_generation_helper.py +0 -0
  23. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/__init__.py +0 -0
  24. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/bittensor/__init__.py +0 -0
  25. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/bittensor/balances.py +0 -0
  26. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/bittensor/chain_data.py +0 -0
  27. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/bittensor/extrinsics/__init__.py +0 -0
  28. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/bittensor/extrinsics/registration.py +0 -0
  29. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/bittensor/extrinsics/root.py +0 -0
  30. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/bittensor/extrinsics/transfer.py +0 -0
  31. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/bittensor/minigraph.py +0 -0
  32. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/bittensor/networking.py +0 -0
  33. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/bittensor/subtensor_interface.py +0 -0
  34. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/bittensor/utils.py +0 -0
  35. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/commands/__init__.py +0 -0
  36. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/commands/stake/__init__.py +0 -0
  37. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/commands/stake/add.py +0 -0
  38. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/commands/stake/children_hotkeys.py +0 -0
  39. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/commands/stake/list.py +0 -0
  40. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/commands/stake/move.py +0 -0
  41. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/commands/stake/remove.py +0 -0
  42. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/commands/subnets/__init__.py +0 -0
  43. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/commands/subnets/price.py +0 -0
  44. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/commands/subnets/subnets.py +0 -0
  45. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/commands/sudo.py +0 -0
  46. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/commands/view.py +0 -0
  47. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/commands/wallets.py +0 -0
  48. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/src/commands/weights.py +0 -0
  49. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli/version.py +0 -0
  50. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli.egg-info/dependency_links.txt +0 -0
  51. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli.egg-info/entry_points.txt +0 -0
  52. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli.egg-info/requires.txt +0 -0
  53. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/bittensor_cli.egg-info/top_level.txt +0 -0
  54. {bittensor_cli-9.5.0 → bittensor_cli-9.5.1}/setup.cfg +0 -0
@@ -0,0 +1 @@
1
+ recursive-include bittensor_cli/src/bittensor/templates *
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bittensor-cli
3
- Version: 9.5.0
3
+ Version: 9.5.1
4
4
  Summary: Bittensor CLI
5
5
  Author: bittensor.com
6
6
  Project-URL: homepage, https://github.com/opentensor/btcli
@@ -0,0 +1,24 @@
1
+ <div class="filters-section">
2
+ <div class="search-box">
3
+ <input type="text" id="subnet-search" placeholder="search for name, or netuid..." onkeyup="filterSubnets()">
4
+ </div>
5
+ <div class="filter-toggles">
6
+ <label>
7
+ <input type="checkbox" id="show-verbose" onchange="toggleVerboseNumbers()">
8
+ Precise Numbers
9
+ </label>
10
+ <label>
11
+ <input type="checkbox" id="show-staked" onchange="filterSubnets()">
12
+ Show Only Staked
13
+ </label>
14
+ <label>
15
+ <input type="checkbox" id="show-tiles" onchange="toggleTileView()" checked>
16
+ Tile View
17
+ </label>
18
+ <label class="disabled-label" title="Coming soon">
19
+ <input type="checkbox" id="live-mode" disabled>
20
+ Live Mode (coming soon)
21
+ </label>
22
+ </div>
23
+ </div>
24
+ <div id="subnet-tiles-container" class="subnet-tiles-container"></div>
@@ -0,0 +1,36 @@
1
+ {#
2
+ vars:
3
+ wallet_info.coldkey, truncated_coldkey, wallet_info.balance, root_symbol_html, wallet_info.total_ideal_stake_value,
4
+ slippage_percentage, wallet_info.total_slippage_value, block_number
5
+ #}
6
+
7
+ <div class="header">
8
+ <meta charset="UTF-8">
9
+ <div class="wallet-info">
10
+ <span class="wallet-name">{{ wallet_info.name }}</span>
11
+ <div class="wallet-address-container" onclick="copyToClipboard('{{ coldkey }}', this)">
12
+ <span class="wallet-address" title="Click to copy">{{ truncated_coldkey }}}</span>
13
+ <span class="copy-indicator">Copy</span>
14
+ </div>
15
+ </div>
16
+ <div class="stake-metrics">
17
+ <div class="stake-metric">
18
+ <span class="metric-label">Block</span>
19
+ <span class="metric-value" style="color: #FF9900;">{{ block_number }}</span>
20
+ </div>
21
+ <div class="stake-metric">
22
+ <span class="metric-label">Balance</span>
23
+ <span class="metric-value">{{ "%.4f"|format(wallet_info.balance) }} {{ root_symbol_html }}</span>
24
+ </div>
25
+ <div class="stake-metric">
26
+ <span class="metric-label">Total Stake Value</span>
27
+ <span class="metric-value">{{ "%.4f"|format(wallet_info.total_ideal_stake_value) }} {{ root_symbol_html }}</span>
28
+ </div>
29
+ <div class="stake-metric">
30
+ <span class="metric-label">Slippage Impact</span>
31
+ <span class="metric-value slippage-value">
32
+ {{ "%.2f"|format(slippage_percentage) }}% <span class="slippage-detail">({{ "%.4f"|format(wallet_info.total_slippage_value) }} {{ root_symbol_html }})</span>
33
+ </span>
34
+ </div>
35
+ </div>
36
+ </div>
@@ -0,0 +1,111 @@
1
+ <div id="neuron-detail-container" style="display: none;">
2
+ <div class="neuron-detail-header">
3
+ <button class="back-button neuron-detail-back" onclick="closeNeuronDetails()">&larr; Back</button>
4
+ </div>
5
+ <div class="neuron-detail-content">
6
+ <div class="neuron-info-top">
7
+ <h2 class="neuron-name" id="neuron-name"></h2>
8
+ <div class="neuron-keys">
9
+ <div class="hotkey-label">
10
+ <span style="color: #FF9900;">Hotkey:</span>
11
+ <span id="neuron-hotkey" class="truncated-address"></span>
12
+ </div>
13
+ <div class="coldkey-label">
14
+ <span style="color: #FF9900;">Coldkey:</span>
15
+ <span id="neuron-coldkey" class="truncated-address"></span>
16
+ </div>
17
+ </div>
18
+ </div>
19
+ <div class="neuron-cards-container">
20
+ <!-- First row: Stakes, Dividends, Incentive, Emissions -->
21
+ <div class="neuron-metrics-row">
22
+ <div class="metric-card">
23
+ <div class="metric-label">Stake Weight</div>
24
+ <div id="neuron-stake-total" class="metric-value formatted-number"
25
+ data-value="0" data-symbol=""></div>
26
+ </div>
27
+
28
+ <div class="metric-card">
29
+ <div class="metric-label">Stake (Alpha)</div>
30
+ <div id="neuron-stake-token" class="metric-value formatted-number"
31
+ data-value="0" data-symbol=""></div>
32
+ </div>
33
+
34
+ <div class="metric-card">
35
+ <div class="metric-label">Stake (Root)</div>
36
+ <div id="neuron-stake-root" class="metric-value formatted-number"
37
+ data-value="0" data-symbol="&#x03C4;"></div>
38
+ </div>
39
+
40
+ <div class="metric-card">
41
+ <div class="metric-label">Dividends</div>
42
+ <div id="neuron-dividends" class="metric-value formatted-number"
43
+ data-value="0" data-symbol=""></div>
44
+ </div>
45
+
46
+ <div class="metric-card">
47
+ <div class="metric-label">Incentive</div>
48
+ <div id="neuron-incentive" class="metric-value formatted-number"
49
+ data-value="0" data-symbol=""></div>
50
+ </div>
51
+
52
+ <div class="metric-card">
53
+ <div class="metric-label">Emissions</div>
54
+ <div id="neuron-emissions" class="metric-value formatted-number"
55
+ data-value="0" data-symbol=""></div>
56
+ </div>
57
+ </div>
58
+
59
+ <!-- Second row: Rank, Trust, Pruning Score, Validator Permit, Consensus, Last Update -->
60
+ <div class="neuron-metrics-row">
61
+ <div class="metric-card">
62
+ <div class="metric-label">Rank</div>
63
+ <div id="neuron-rank" class="metric-value"></div>
64
+ </div>
65
+
66
+ <div class="metric-card">
67
+ <div class="metric-label">Trust</div>
68
+ <div id="neuron-trust" class="metric-value"></div>
69
+ </div>
70
+
71
+ <div class="metric-card">
72
+ <div class="metric-label">Pruning Score</div>
73
+ <div id="neuron-pruning-score" class="metric-value"></div>
74
+ </div>
75
+
76
+ <div class="metric-card">
77
+ <div class="metric-label">Validator Permit</div>
78
+ <div id="neuron-validator-permit" class="metric-value"></div>
79
+ </div>
80
+
81
+ <div class="metric-card">
82
+ <div class="metric-label">Consensus</div>
83
+ <div id="neuron-consensus" class="metric-value"></div>
84
+ </div>
85
+
86
+ <div class="metric-card">
87
+ <div class="metric-label">Last Update</div>
88
+ <div id="neuron-last-update" class="metric-value"></div>
89
+ </div>
90
+ </div>
91
+
92
+ <!-- Third row: Reg Block, IP Info, Active -->
93
+ <div class="neuron-metrics-row last-row">
94
+ <div class="metric-card">
95
+ <div class="metric-label">Reg Block</div>
96
+ <div id="neuron-reg-block" class="metric-value"></div>
97
+ </div>
98
+
99
+ <div class="metric-card">
100
+ <div class="metric-label">IP Info</div>
101
+ <div id="neuron-ipinfo" class="metric-value"></div>
102
+ </div>
103
+
104
+ <div class="metric-card">
105
+ <div class="metric-label">Active</div>
106
+ <div id="neuron-active" class="metric-value"></div>
107
+ </div>
108
+ </div>
109
+ </div>
110
+ </div>
111
+ </div>
@@ -0,0 +1,113 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>{{ title }}</title>
5
+ <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
6
+ <style>
7
+ body {
8
+ background-color: #000;
9
+ color: #fff;
10
+ font-family: Arial, sans-serif;
11
+ margin: 0;
12
+ padding: 20px;
13
+ }
14
+ .container {
15
+ display: flex;
16
+ flex-direction: column;
17
+ gap: 60px;
18
+ }
19
+ #multi-subnet-chart {
20
+ width: 90vw;
21
+ height: 70vh;
22
+ margin-bottom: 40px;
23
+ }
24
+ .subnet-buttons {
25
+ display: grid;
26
+ grid-template-columns: repeat(auto-fill, minmax(80px, 1fr));
27
+ gap: 8px;
28
+ max-height: 120px;
29
+ overflow-y: auto;
30
+ padding-right: 10px;
31
+ margin-top: 50px;
32
+ border-top: 1px solid rgba(255,255,255,0.1);
33
+ padding-top: 50px;
34
+ position: relative;
35
+ bottom: 0;
36
+ }
37
+ .subnet-buttons::-webkit-scrollbar {
38
+ width: 8px;
39
+ }
40
+ .subnet-buttons::-webkit-scrollbar-track {
41
+ background: rgba(50,50,50,0.3);
42
+ border-radius: 4px;
43
+ }
44
+ .subnet-buttons::-webkit-scrollbar-thumb {
45
+ background: rgba(100,100,100,0.8);
46
+ border-radius: 4px;
47
+ }
48
+ .subnet-button {
49
+ background-color: rgba(50,50,50,0.8);
50
+ border: 1px solid rgba(70,70,70,0.9);
51
+ color: white;
52
+ padding: 8px 16px;
53
+ cursor: pointer;
54
+ border-radius: 4px;
55
+ font-size: 14px;
56
+ transition: background-color 0.2s;
57
+ white-space: nowrap;
58
+ overflow: hidden;
59
+ text-overflow: ellipsis;
60
+ }
61
+ .subnet-button:hover {
62
+ background-color: rgba(70,70,70,0.9);
63
+ }
64
+ .subnet-button.active {
65
+ background-color: rgba(100,100,100,0.9);
66
+ border-color: rgba(120,120,120,1);
67
+ }
68
+ </style>
69
+ </head>
70
+ <body>
71
+ <div class="container">
72
+ <div id="multi-subnet-chart"></div>
73
+ <div class="subnet-buttons">
74
+ <button class="subnet-button active" onclick="setAll()">All</button>
75
+ {% for netuid in sorted_subnet_keys %}
76
+ <button class="subnet-button" onclick="setSubnet({{ netuid }})">S{{ netuid }}</button>
77
+ {% endfor %}
78
+ </div>
79
+ </div>
80
+ <script>
81
+ const figData = {{ fig_json|safe }};
82
+ const allVisibility = {{ all_visibility|tojson|safe }};
83
+ const allAnnotations = {{ all_annotations|tojson|safe }};
84
+
85
+ const subnetModes = {{ subnet_modes|tojson|safe }};
86
+
87
+ Plotly.newPlot('multi-subnet-chart', figData.data, figData.layout);
88
+
89
+ function clearActiveButtons() {
90
+ document.querySelectorAll('.subnet-button').forEach(btn => btn.classList.remove('active'));
91
+ }
92
+
93
+ function setAll() {
94
+ clearActiveButtons();
95
+ event.currentTarget.classList.add('active');
96
+ Plotly.update('multi-subnet-chart',
97
+ {visible: allVisibility},
98
+ {annotations: allAnnotations}
99
+ );
100
+ }
101
+
102
+ function setSubnet(netuid) {
103
+ clearActiveButtons();
104
+ event.currentTarget.classList.add('active');
105
+ const mode = subnetModes[netuid];
106
+ Plotly.update('multi-subnet-chart',
107
+ {visible: mode.visible},
108
+ {annotations: mode.annotations}
109
+ );
110
+ }
111
+ </script>
112
+ </body>
113
+ </html>
@@ -0,0 +1,99 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>{{ title }}</title>
6
+ <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
7
+ <style>
8
+ body {
9
+ background-color: #000;
10
+ color: #fff;
11
+ font-family: Arial, sans-serif;
12
+ margin: 0;
13
+ padding: 20px;
14
+ }
15
+ .header-container {
16
+ display: flex;
17
+ align-items: flex-start;
18
+ justify-content: space-between;
19
+ margin-bottom: 20px;
20
+ }
21
+ .price-info {
22
+ max-width: 60%;
23
+ }
24
+ .main-price {
25
+ font-size: 36px;
26
+ font-weight: 600;
27
+ margin-bottom: 5px;
28
+ }
29
+ .price-change {
30
+ font-size: 18px;
31
+ margin-left: 8px;
32
+ font-weight: 500;
33
+ }
34
+ .text-green { color: #00FF00; }
35
+ .text-red { color: #FF5555; }
36
+ .text-blue { color: #87CEEB; }
37
+ .text-steel { color: #4682B4; }
38
+ .text-purple{ color: #DDA0DD; }
39
+ .text-gold { color: #FFD700; }
40
+
41
+ .sub-stats-row {
42
+ display: flex;
43
+ flex-wrap: wrap;
44
+ margin-top: 10px;
45
+ }
46
+ .stat-item {
47
+ margin-right: 20px;
48
+ margin-bottom: 6px;
49
+ font-size: 14px;
50
+ }
51
+ .side-stats {
52
+ min-width: 220px;
53
+ display: flex;
54
+ flex-direction: column;
55
+ align-items: flex-start;
56
+ }
57
+ .side-stats div {
58
+ margin-bottom: 6px;
59
+ font-size: 14px;
60
+ }
61
+ #chart-container {
62
+ margin-top: 20px;
63
+ width: 100%;
64
+ height: 600px;
65
+ }
66
+ </style>
67
+ </head>
68
+ <body>
69
+ <div class="header-container">
70
+ <div class="price-info">
71
+ <div class="main-price">
72
+ {{ "%.6f"|format(stats.current_price) }} {{ stats.symbol }}
73
+ <span class="price-change {{ "text-green" if stats.change_pct > 0 else "text-red" }}">
74
+ {{ "▲" if stats.change_pct > 0 else "▼" }} {{ "%.2f"|format(change_pct) }}%
75
+ </span>
76
+ </div>
77
+ <div class="sub-stats-row">
78
+ <div class="stat-item">
79
+ {{ interval_hours }}h High: <span class="text-green">{{ "%.6f"|format(stats.high) }} {{ stats.symbol }}</span>
80
+ </div>
81
+ <div class="stat-item">
82
+ {{ interval_hours }}h Low: <span class="text-red">{{ "%.6f"|format(stats.low) }} {{ stats.symbol }}</span>
83
+ </div>
84
+ </div>
85
+ </div>
86
+ <div class="side-stats">
87
+ <div>Supply: <span class="text-blue">{{ "%.2f"|format(stats.supply) }} {{ stats.symbol }}</span></div>
88
+ <div>Market Cap: <span class="text-steel">{{ "%.2f"|format(stats.market_cap) }} τ</span></div>
89
+ <div>Emission: <span class="text-purple">{{ "%.2f"|format(stats.emission) }} {{ stats.symbol }}</span></div>
90
+ <div>Stake: <span class="text-gold">{{ "%.2f"|format(stats.stake) }} {{ stats.symbol }}</span></div>
91
+ </div>
92
+ </div>
93
+ <div id="chart-container"></div>
94
+ <script>
95
+ var figData = {{ fig_json|safe }};
96
+ Plotly.newPlot('chart-container', figData.data, figData.layout);
97
+ </script>
98
+ </body>
99
+ </html>
@@ -0,0 +1,49 @@
1
+ <div class="subnet-header">
2
+ <div class="header-row">
3
+ <button class="back-button">&larr; Back</button>
4
+ <div class="toggle-group">
5
+ <label class="toggle-label">
6
+ <input type="checkbox" id="stake-toggle" onchange="toggleStakeView()">
7
+ Show Stakes
8
+ </label>
9
+ <label class="toggle-label">
10
+ <input type="checkbox" id="verbose-toggle" onchange="toggleVerboseNumbers()">
11
+ Precise Numbers
12
+ </label>
13
+ </div>
14
+ </div>
15
+
16
+ <div class="subnet-title-row">
17
+ <div class="title-price">
18
+ <h2 id="subnet-title"></h2>
19
+ <div class="subnet-price" id="subnet-price"></div>
20
+ </div>
21
+ <div class="network-visualization-container">
22
+ <div class="network-visualization">
23
+ <canvas id="network-canvas" width="700" height="80"></canvas>
24
+ </div>
25
+ </div>
26
+ </div>
27
+ <div class="network-metrics">
28
+ <div class="metric-card network-card">
29
+ <div class="metric-label">Moving Price</div>
30
+ <div id="network-moving-price" class="metric-value"></div>
31
+ </div>
32
+ <div class="metric-card network-card">
33
+ <div class="metric-label">Registration</div>
34
+ <div id="network-registration" class="metric-value registration-status"></div>
35
+ </div>
36
+ <div class="metric-card network-card">
37
+ <div class="metric-label">CR Weights</div>
38
+ <div id="network-cr" class="metric-value cr-status"></div>
39
+ </div>
40
+ <div class="metric-card network-card">
41
+ <div class="metric-label">Neurons</div>
42
+ <div id="network-neurons" class="metric-value"></div>
43
+ </div>
44
+ <div class="metric-card network-card">
45
+ <div class="metric-label">Blocks Since Step</div>
46
+ <div id="network-blocks-since-step" class="metric-value"></div>
47
+ </div>
48
+ </div>
49
+ </div>
@@ -0,0 +1,32 @@
1
+ {# TODO: This may be unused. #}
2
+
3
+ <div id="subnet-modal" class="modal hidden">
4
+ <div class="modal-content">
5
+ <div class="modal-header">
6
+ <h2 class="subnet-title"></h2>
7
+ <button class="close-button" onclick="closeSubnetModal()">&times;</button>
8
+ </div>
9
+ <div class="subnet-overview">
10
+ <div class="overview-item">
11
+ <span class="label">Price</span>
12
+ <span class="value price"></span>
13
+ </div>
14
+ <div class="overview-item">
15
+ <span class="label">Market Cap</span>
16
+ <span class="value market-cap"></span>
17
+ </div>
18
+ <div class="overview-item">
19
+ <span class="label">Emission Rate</span>
20
+ <span class="value emission"></span>
21
+ </div>
22
+ <div class="overview-item">
23
+ <span class="label">Your Total Stake</span>
24
+ <span class="value total-stake"></span>
25
+ </div>
26
+ </div>
27
+ <div class="stakes-section">
28
+ <h3>Your Stakes</h3>
29
+ <div class="stakes-list"></div>
30
+ </div>
31
+ </div>
32
+ </div>
@@ -0,0 +1,57 @@
1
+ <div class="metrics-section">
2
+ <div class="metrics-group market-metrics">
3
+ <div class="metric-card">
4
+ <div class="metric-label">Market Cap</div>
5
+ <div id="subnet-market-cap" class="metric-value"></div>
6
+ </div>
7
+ <div class="metric-card">
8
+ <div class="metric-label">Total Stake</div>
9
+ <div id="subnet-total-stake" class="metric-value"></div>
10
+ </div>
11
+ <div class="metric-card">
12
+ <div class="metric-label">Alpha Reserves</div>
13
+ <div id="network-alpha-in" class="metric-value"></div>
14
+ </div>
15
+ <div class="metric-card">
16
+ <div class="metric-label">Tao Reserves</div>
17
+ <div id="network-tau-in" class="metric-value"></div>
18
+ </div>
19
+ <div class="metric-card">
20
+ <div class="metric-label">Emission</div>
21
+ <div id="subnet-emission" class="metric-value"></div>
22
+ </div>
23
+ </div>
24
+
25
+ <div class="stakes-container">
26
+ <div class="stakes-header">
27
+ <h3 class="view-header">Metagraph</h3>
28
+ <div class="button-group">
29
+ <button class="manage-button add-stake-button" disabled title="Coming soon">
30
+ Add Stake (Coming soon)
31
+ </button>
32
+ <button class="manage-button export-csv-button" disabled title="Coming soon">
33
+ Export CSV (Coming soon)
34
+ </button>
35
+ </div>
36
+ </div>
37
+
38
+ <div class="stakes-table-container">
39
+ <table class="stakes-table">
40
+ <thead>
41
+ <tr>
42
+ <th>Hotkey</th>
43
+ <th>Amount</th>
44
+ <th>Value</th>
45
+ <th>Value (w/ slippage)</th>
46
+ <th>Alpha emission</th>
47
+ <th>Tao emission</th>
48
+ <th>Registered</th>
49
+ <th>Actions</th>
50
+ </tr>
51
+ </thead>
52
+ <tbody id="stakes-table-body">
53
+ </tbody>
54
+ </table>
55
+ </div>
56
+ </div>
57
+ </div>
@@ -0,0 +1,28 @@
1
+ <div class="subnets-table-container">
2
+ <table class="subnets-table">
3
+ <thead>
4
+ <tr>
5
+ <th class="sortable" onclick="sortMainTable(0)">Subnet</th>
6
+ <th class="sortable" onclick="sortMainTable(1)">Price</th>
7
+ <th class="sortable" onclick="sortMainTable(2)" data-sort="desc">Market Cap</th>
8
+ <th class="sortable" onclick="sortMainTable(3)">Your Stake</th>
9
+ <th class="sortable" onclick="sortMainTable(4)">Emission</th>
10
+ <th>Status</th>
11
+ </tr>
12
+ </thead>
13
+ <tbody>
14
+ {% for subnet in subnets %}
15
+ {% set total_your_stake = subnet.your_stakes|sum(attribute="amount") %}
16
+ {% set stake_status = 'Staked' if total_your_stake > 0 else 'Not Staked' %}
17
+ <tr class="subnet-row" onclick="showSubnetPage({{subnet.netuid}})">
18
+ <td class="subnet-name" data-value="{{subnet.netuid}}"><span style="color: #FF9900">{{subnet.netuid}}</span> - {{subnet.name}}</td>
19
+ <td class="price" data-value="{{subnet.price}}"><span class="formatted-number" data-value="{{subnet.price}}" data-symbol="{{subnet.symbol}}"></span></td>
20
+ <td class="market-cap" data-value="{{subnet.market_cap}}"><span class="formatted-number" data-value="{{subnet.market_cap}}" data-symbol="{{root_symbol_html}}"></span></td>
21
+ <td class="your-stake" data-value="{{total_your_stake}}"><span class="formatted-number" data-value="{{total_your_stake}}" data-symbol="{{subnet.symbol}}"></span></td>
22
+ <td class="emission" data-value="{{subnet.emission}}"><span class="formatted-number" data-value="{{subnet.emission}}" data-symbol="{{root_symbol_html}}"></span></td>
23
+ <td class="stake-status-cell"><span class="stake-status {{'staked' if total_your_stake > 0 else 'unstaked'}}">{{stake_status}}</span></td>
24
+ </tr>
25
+ {% endfor %}
26
+ </tbody>
27
+ </table>
28
+ </div>