Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
836eab5
Introduce palletId-based subnet account Ids
gztensor Mar 19, 2026
e97adb8
Forbid use of subnet account IDs as hotkey and as subnet owner hotkey
gztensor Mar 20, 2026
b51fe9c
Document subnet account IDs for subnets 0-1024
gztensor Mar 23, 2026
4fcb784
Organize TAO critical operations
gztensor Mar 25, 2026
9bed7bb
Add BurnAccountId for maintenance of burned TAO - WIP
gztensor Mar 30, 2026
5c87144
Getting rid of add_balance_to_coldkey_account and remove_balance_to_c…
gztensor Apr 1, 2026
f9e6777
Remove add/remove balance methods in runtime code, replace with safe …
gztensor Apr 1, 2026
e220c39
Merge branch 'devnet-ready' into chore/imbalances
gztensor Apr 1, 2026
ebb26f9
Cleanup merge of devnet-ready
gztensor Apr 1, 2026
164a18f
Organize TAO operations in a single file. Move remove_balance_from_co…
gztensor Apr 2, 2026
d27e709
Merge branch 'devnet-ready' into chore/imbalances
gztensor Apr 2, 2026
c008e8d
Merge devnet-ready WIP
gztensor Apr 3, 2026
b69a116
Cleanup devnet-ready merge
gztensor Apr 3, 2026
40e7a2c
Merge branch 'devnet-ready' into chore/imbalances
gztensor Apr 3, 2026
799a59a
Merge devnet-ready
gztensor Apr 3, 2026
35ef578
Add migration to mint SubnetTAO and SUbnetLocked into subnet accounts
gztensor Apr 3, 2026
a6194d2
Merge branch 'devnet-ready' into chore/imbalances
gztensor Apr 6, 2026
66b350f
fmt
gztensor Apr 6, 2026
2c698c6
Add tao balance operations tests
gztensor Apr 6, 2026
10d250e
Correct TI after balances migration
gztensor Apr 6, 2026
d0b4c89
Add more logging to subnet balances migration
gztensor Apr 7, 2026
48fef13
Add correction to subnet balances migration for subnet locked
gztensor Apr 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 17 additions & 2 deletions chain-extensions/src/mock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,8 @@ parameter_types! {
pub const LeaseDividendsDistributionInterval: u32 = 100;
pub const MaxImmuneUidsPercentage: Percent = Percent::from_percent(80);
pub const EvmKeyAssociateRateLimit: u64 = 10;
pub const SubtensorPalletId: PalletId = PalletId(*b"subtensr");
pub const BurnAccountId: PalletId = PalletId(*b"burntnsr");
}

impl pallet_subtensor::Config for Test {
Expand Down Expand Up @@ -423,6 +425,8 @@ impl pallet_subtensor::Config for Test {
type CommitmentsInterface = CommitmentsI;
type EvmKeyAssociateRateLimit = EvmKeyAssociateRateLimit;
type AuthorshipProvider = MockAuthorshipProvider;
type SubtensorPalletId = SubtensorPalletId;
type BurnAccountId = BurnAccountId;
type WeightInfo = ();
}

Expand Down Expand Up @@ -690,7 +694,7 @@ pub fn register_ok_neuron(

let bal: TaoBalance = SubtensorModule::get_coldkey_balance(&cold);
if bal < min_balance_needed {
SubtensorModule::add_balance_to_coldkey_account(&cold, min_balance_needed - bal);
add_balance_to_coldkey_account(&cold, min_balance_needed - bal);
}
};

Expand Down Expand Up @@ -727,11 +731,22 @@ pub fn register_ok_neuron(
);
}

#[allow(dead_code)]
pub fn add_balance_to_coldkey_account(coldkey: &U256, tao: TaoBalance) {
let credit = SubtensorModule::mint_tao(tao);
let _ = SubtensorModule::spend_tao(coldkey, credit, tao).unwrap();
}

#[allow(dead_code)]
pub fn remove_balance_from_coldkey_account(coldkey: &U256, tao: TaoBalance) {
let _ = SubtensorModule::burn_tao(coldkey, tao);
}

#[allow(dead_code)]
pub fn add_dynamic_network(hotkey: &U256, coldkey: &U256) -> NetUid {
let netuid = SubtensorModule::get_next_netuid();
let lock_cost = SubtensorModule::get_network_lock_cost();
SubtensorModule::add_balance_to_coldkey_account(coldkey, lock_cost.into());
add_balance_to_coldkey_account(coldkey, lock_cost.into());

assert_ok!(SubtensorModule::register_network(
RawOrigin::Signed(*coldkey).into(),
Expand Down
51 changes: 13 additions & 38 deletions chain-extensions/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ use substrate_fixed::types::U96F32;
use subtensor_runtime_common::{AlphaBalance, NetUid, TaoBalance, Token};
use subtensor_swap_interface::SwapHandler;

use mock::*;

type AccountId = <mock::Test as frame_system::Config>::AccountId;

#[derive(Clone)]
Expand Down Expand Up @@ -89,7 +91,7 @@ fn remove_stake_full_limit_success_with_limit_price() {

mock::register_ok_neuron(netuid, hotkey, coldkey, 0);

pallet_subtensor::Pallet::<mock::Test>::add_balance_to_coldkey_account(
add_balance_to_coldkey_account(
&coldkey,
TaoBalance::from(stake_amount_raw + 1_000_000_000),
);
Expand Down Expand Up @@ -228,7 +230,7 @@ fn remove_stake_limit_success_respects_price_limit() {

mock::register_ok_neuron(netuid, hotkey, coldkey, 0);

pallet_subtensor::Pallet::<mock::Test>::add_balance_to_coldkey_account(
add_balance_to_coldkey_account(
&coldkey,
TaoBalance::from(stake_amount_raw + 1_000_000_000),
);
Expand Down Expand Up @@ -304,10 +306,7 @@ fn add_stake_limit_success_executes_within_price_guard() {

mock::register_ok_neuron(netuid, hotkey, coldkey, 0);

pallet_subtensor::Pallet::<mock::Test>::add_balance_to_coldkey_account(
&coldkey,
(amount_raw + 1_000_000_000).into(),
);
add_balance_to_coldkey_account(&coldkey, (amount_raw + 1_000_000_000).into());

let stake_before =
pallet_subtensor::Pallet::<mock::Test>::get_stake_for_hotkey_and_coldkey_on_subnet(
Expand Down Expand Up @@ -379,10 +378,7 @@ fn swap_stake_success_moves_between_subnets() {
mock::register_ok_neuron(netuid_a, hotkey, coldkey, 0);
mock::register_ok_neuron(netuid_b, hotkey, coldkey, 1);

pallet_subtensor::Pallet::<mock::Test>::add_balance_to_coldkey_account(
&coldkey,
(stake_amount_raw + 1_000_000_000).into(),
);
add_balance_to_coldkey_account(&coldkey, (stake_amount_raw + 1_000_000_000).into());

assert_ok!(pallet_subtensor::Pallet::<mock::Test>::add_stake(
RawOrigin::Signed(coldkey).into(),
Expand Down Expand Up @@ -456,10 +452,7 @@ fn transfer_stake_success_moves_between_coldkeys() {

mock::register_ok_neuron(netuid, hotkey, origin_coldkey, 0);

pallet_subtensor::Pallet::<mock::Test>::add_balance_to_coldkey_account(
&origin_coldkey,
(stake_amount_raw + 1_000_000_000).into(),
);
add_balance_to_coldkey_account(&origin_coldkey, (stake_amount_raw + 1_000_000_000).into());

assert_ok!(pallet_subtensor::Pallet::<mock::Test>::add_stake(
RawOrigin::Signed(origin_coldkey).into(),
Expand Down Expand Up @@ -540,10 +533,7 @@ fn move_stake_success_moves_alpha_between_hotkeys() {
mock::register_ok_neuron(netuid, origin_hotkey, coldkey, 0);
mock::register_ok_neuron(netuid, destination_hotkey, coldkey, 1);

pallet_subtensor::Pallet::<mock::Test>::add_balance_to_coldkey_account(
&coldkey,
(stake_amount_raw + 1_000_000_000).into(),
);
add_balance_to_coldkey_account(&coldkey, (stake_amount_raw + 1_000_000_000).into());

assert_ok!(pallet_subtensor::Pallet::<mock::Test>::add_stake(
RawOrigin::Signed(coldkey).into(),
Expand Down Expand Up @@ -620,10 +610,7 @@ fn unstake_all_alpha_success_moves_stake_to_root() {
);

mock::register_ok_neuron(netuid, hotkey, coldkey, 0);
pallet_subtensor::Pallet::<mock::Test>::add_balance_to_coldkey_account(
&coldkey,
(stake_amount_raw + 1_000_000_000).into(),
);
add_balance_to_coldkey_account(&coldkey, (stake_amount_raw + 1_000_000_000).into());

assert_ok!(pallet_subtensor::Pallet::<mock::Test>::add_stake(
RawOrigin::Signed(coldkey).into(),
Expand Down Expand Up @@ -667,10 +654,7 @@ fn add_proxy_success_creates_proxy_relationship() {
let delegator = U256::from(6001);
let delegate = U256::from(6002);

pallet_subtensor::Pallet::<mock::Test>::add_balance_to_coldkey_account(
&delegator,
1_000_000_000.into(),
);
add_balance_to_coldkey_account(&delegator, 1_000_000_000.into());

assert_eq!(
pallet_subtensor_proxy::Proxies::<mock::Test>::get(delegator)
Expand Down Expand Up @@ -705,10 +689,7 @@ fn remove_proxy_success_removes_proxy_relationship() {
let delegator = U256::from(7001);
let delegate = U256::from(7002);

pallet_subtensor::Pallet::<mock::Test>::add_balance_to_coldkey_account(
&delegator,
1_000_000_000.into(),
);
add_balance_to_coldkey_account(&delegator, 1_000_000_000.into());

let mut add_env = MockEnv::new(FunctionId::AddProxyV1, delegator, delegate.encode());
let ret = SubtensorChainExtension::<mock::Test>::dispatch(&mut add_env).unwrap();
Expand Down Expand Up @@ -842,10 +823,7 @@ fn add_stake_success_updates_stake_and_returns_success_code() {
);
mock::register_ok_neuron(netuid, hotkey, coldkey, 0);

pallet_subtensor::Pallet::<mock::Test>::add_balance_to_coldkey_account(
&coldkey,
amount_raw.into(),
);
add_balance_to_coldkey_account(&coldkey, amount_raw.into());

assert!(
pallet_subtensor::Pallet::<mock::Test>::get_total_stake_for_hotkey(&hotkey).is_zero()
Expand Down Expand Up @@ -930,10 +908,7 @@ fn unstake_all_success_unstakes_balance() {
);

mock::register_ok_neuron(netuid, hotkey, coldkey, 0);
pallet_subtensor::Pallet::<mock::Test>::add_balance_to_coldkey_account(
&coldkey,
(stake_amount_raw + 1_000_000_000).into(),
);
add_balance_to_coldkey_account(&coldkey, (stake_amount_raw + 1_000_000_000).into());

assert_ok!(pallet_subtensor::Pallet::<mock::Test>::add_stake(
RawOrigin::Signed(coldkey).into(),
Expand Down
4 changes: 2 additions & 2 deletions common/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -246,8 +246,8 @@ pub trait TokenReserve<C: Token> {
pub trait BalanceOps<AccountId> {
fn tao_balance(account_id: &AccountId) -> TaoBalance;
fn alpha_balance(netuid: NetUid, coldkey: &AccountId, hotkey: &AccountId) -> AlphaBalance;
fn increase_balance(coldkey: &AccountId, tao: TaoBalance);
fn decrease_balance(coldkey: &AccountId, tao: TaoBalance) -> Result<TaoBalance, DispatchError>;
// fn increase_balance(coldkey: &AccountId, tao: TaoBalance);
// fn decrease_balance(coldkey: &AccountId, tao: TaoBalance) -> Result<TaoBalance, DispatchError>;
fn increase_stake(
coldkey: &AccountId,
hotkey: &AccountId,
Expand Down
136 changes: 136 additions & 0 deletions contract-tests/src/subtensor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -421,6 +421,142 @@ export async function setNetworkLastLockCost(api: TypedApi<typeof devnet>, defau
assert.equal(defaultNetworkLastLockCost, valueOnChain)
}

export function getSubnetAccountId(netuid: number): string {
// Hardcode to speed up tests
const NETUID_TO_ACCOUNT_ID: Record<number, string> = {
0: "5EYCAe5jLQhn6ofDSvqF6iY53erXNkwhyE1aCEgvi1NNs91F",
1: "5EYCAe5jLQhn6ofDSvqWqk5fA9XiqK3ahtx5kBNmAqF78mqL",
2: "5EYCAe5jLQhn6ofDSvqnamdFGeCvHs9TSZtbJ84bdf7qQRc6",
3: "5EYCAe5jLQhn6ofDSvr4KoAqP8t7kRFLBEq6r4kS6UzZgCb5",
4: "5EYCAe5jLQhn6ofDSvrL4piRVdZKCyMCuumcQ1SGZJsHwmeE",
5: "5EYCAe5jLQhn6ofDSvrborG1c8EWfXT5eai7wx8728k2DHK7",
6: "5EYCAe5jLQhn6ofDSvrsYsobicui85YxPFedVtowUxckUuF8",
7: "5EYCAe5jLQhn6ofDSvs9HuMBq7auadeq7vb93qVmwnVUkg5A",
8: "5EYCAe5jLQhn6ofDSvsR2vtmwcG73BkhrbXebnBcQcND2Bdh",
9: "5EYCAe5jLQhn6ofDSvsgmxSN46wJVjrabGUA9isSsSEwHnFy",
10: "5EYCAe5jLQhn6ofDSvsxWyyxAbcVxHxTKwQfhfZHLG7fZUJG",
11: "5EYCAe5jLQhn6ofDSvtEG1XYH6HhQr4L4cMBFcF7o5zPpyA3",
12: "5EYCAe5jLQhn6ofDSvtW1358PaxtsQACoHHgoYvxFus86kJK",
13: "5EYCAe5jLQhn6ofDSvtmk4ciW5e6KxG5XxECMVcnijjrN8rz",
14: "5EYCAe5jLQhn6ofDSvu3V6AJcaKHnWMxGdAhuSJdBZcadwDn",
15: "5EYCAe5jLQhn6ofDSvuKE7htj4zVF4Tq1J7DTNzTePVJucfX",
16: "5EYCAe5jLQhn6ofDSvuay9FUqZfghcZhjy3j1KgJ7DN3BDc2",
17: "5EYCAe5jLQhn6ofDSvuriAo4x4LtAAfaUdzEZGN8a3EmSncG",
18: "5EYCAe5jLQhn6ofDSvv8TCLf4Z25cimTDJvk7D3y2s7ViZEm",
19: "5EYCAe5jLQhn6ofDSvvQCDtFB3hH5GsKwysFf9joVgzDytnb",
20: "5EYCAe5jLQhn6ofDSvvfwFRqHYNUXpyCgeomD6RdxWrxFpQR",
21: "5EYCAe5jLQhn6ofDSvvwgGyRQ33fzP55RKkGm37URLjgXG7M",
22: "5EYCAe5jLQhn6ofDSvwDRJX1WXisSwAx9zgnJyoJtAcQo59Y",
23: "5EYCAe5jLQhn6ofDSvwVAL4bd2Q4uVGptfdHrvV9LzV94VBb",
24: "5EYCAe5jLQhn6ofDSvwkuMcBjX5GN3NhdLZoQsAyopMsL7A7",
25: "5EYCAe5jLQhn6ofDSvx2eP9mr1kTpbUaN1WJxorpGeEbbfgG",
26: "5EYCAe5jLQhn6ofDSvxJPQhMxWRfH9aT6gSpWkYejU7KsbGp",
27: "5EYCAe5jLQhn6ofDSvxa8SEx516rjhgKqMPL4hEVCHz49DPw",
28: "5EYCAe5jLQhn6ofDSvxqsTnYBVn4CFnCa2KqcdvKf7rnQo7f",
29: "5EYCAe5jLQhn6ofDSvy7cVL8HzTFeot5JhGMAacA7wjWgPix",
30: "5EYCAe5jLQhn6ofDSvyPMWsiQV8T7Myx3NCriXHzamcEwyqa",
31: "5EYCAe5jLQhn6ofDSvyf6YRJWyoeZv5pn39NGTyq3bUyDc8k",
32: "5EYCAe5jLQhn6ofDSvyvqZxtdUUr2UBhWi5spQffWRMhV5hU",
33: "5EYCAe5jLQhn6ofDSvzCabWUjyA3V2HaFP2PNMMVyFERkxPm",
34: "5EYCAe5jLQhn6ofDSvzUKd44rTqEwaPSz3xtvJ3LS57A2Td3",
35: "5EYCAe5jLQhn6ofDSvzk4ebexxWSQ8VKiiuQUEjAttytJ8Nx",
36: "5EYCAe5jLQhn6ofDSw11og9F5TBdrgbCTPqv2BR1MircZp68",
37: "5EYCAe5jLQhn6ofDSw1HYhgqBwrqKEh5C4nRa86qpYjLqCQd",
38: "5EYCAe5jLQhn6ofDSw1ZHjERJSY2mnnwvjiw84ngHNc56t9n",
39: "5EYCAe5jLQhn6ofDSw1q2kn1QwDEELtpfQfSg1UWkCUoNVFh",
40: "5EYCAe5jLQhn6ofDSw26mnKbXRtRgtzhQ5bxDxAMD2MXeL6A",
41: "5EYCAe5jLQhn6ofDSw2NWosBdvZd9T6a8kYTmtrBfrEFusmX",
42: "5EYCAe5jLQhn6ofDSw2eFqQmkREpc1CSsRUyKqY28g6zBbxD",
43: "5EYCAe5jLQhn6ofDSw2uzrxMruv24ZJKc6RUsnDrbVyiT4uZ",
44: "5EYCAe5jLQhn6ofDSw3BjtVwyQbDX7QCLmMzRiuh4KrSienC",
45: "5EYCAe5jLQhn6ofDSw3TUv3Y5uGQyfW55SJVyfbXX9jAzHBc",
46: "5EYCAe5jLQhn6ofDSw3jDwb8CPwcSDbwp7F1XcHMyybuFsV6",
47: "5EYCAe5jLQhn6ofDSw3zxy8iJtcotmhpYnBX5YyCSoUdXS9C",
48: "5EYCAe5jLQhn6ofDSw4GhzgJRPJ1MKohHT82dVf2udMMo854",
49: "5EYCAe5jLQhn6ofDSw4YT2DtXsyCosua284YBSLsNTE64sjn",
50: "5EYCAe5jLQhn6ofDSw4pC3mUeNeQGS1Sko13jP2hqH6pLJc1",
51: "5EYCAe5jLQhn6ofDSw55w5K4ksKbiz7KVTwZHKiYJ6yYc62p",
52: "5EYCAe5jLQhn6ofDSw5Mg6resMzoBYDCE8t4qGQNkvrGsYLi",
53: "5EYCAe5jLQhn6ofDSw5dR8QEyrfze6K4xopaPD6DDkj19BcH",
54: "5EYCAe5jLQhn6ofDSw5uA9wq6MMC6eQwhUm5w9n3gabjR243",
55: "5EYCAe5jLQhn6ofDSw6AuBVRCr2PZCWpS9hbV6Tt9QUTghER",
56: "5EYCAe5jLQhn6ofDSw6SeD31KLhb1kchApe7339icEMBxKr7",
57: "5EYCAe5jLQhn6ofDSw6iPEabRqNnUJiZuVacayqZ54DvDhGB",
58: "5EYCAe5jLQhn6ofDSw6z8G8BYL3yvrpSeAX88vXPXt6eVRoY",
59: "5EYCAe5jLQhn6ofDSw7FsHfmepjBPQvKNqTdgsDDzhyNky3e",
60: "5EYCAe5jLQhn6ofDSw7XcKDMmKQNqy2C7WQ9Eou4TXr72f1B",
61: "5EYCAe5jLQhn6ofDSw7oMLkwsp5aJX84rBLenkatvMiqJC2W",
62: "5EYCAe5jLQhn6ofDSw856NJXzJkmm5DwarHALhGjPBbZa5wW",
63: "5EYCAe5jLQhn6ofDSw8LqPr86oRyDdKpKXDftdxZr1UHqWzq",
64: "5EYCAe5jLQhn6ofDSw8caRPiDJ7AgBRh4CABSaeQJqM278gq",
65: "5EYCAe5jLQhn6ofDSw8tKSwJKnnN8jXZns6gzXLEmfDkNtXu",
66: "5EYCAe5jLQhn6ofDSw9A4UUtSHTZbHdSXY3CYU25EV6UeLH2",
67: "5EYCAe5jLQhn6ofDSw9RoW2UYn8m3qjKGCyi6QhuhJyCv9nu",
68: "5EYCAe5jLQhn6ofDSw9hYXa4fGoxWPqBzsvDeMPkA8qwBecQ",
69: "5EYCAe5jLQhn6ofDSw9yHZ7emmV9xww4jYrjCJ5acxifTH7b",
70: "5EYCAe5jLQhn6ofDSwAF2afEtGAMRW2wUDoEkEmR5nbPiuFf",
71: "5EYCAe5jLQhn6ofDSwAWmcCpzkqYt48pCtjkJBTFYcU7ziWG",
72: "5EYCAe5jLQhn6ofDSwAnWdkR7FWkLcEgwZgFr8961SLrGPJp",
73: "5EYCAe5jLQhn6ofDSwB4FfJ1DkBwoALZgEcmQ4pvUGDaXxGw",
74: "5EYCAe5jLQhn6ofDSwBKzgqbLEs9FiSSQuZGx1Wkw66JoNQY",
75: "5EYCAe5jLQhn6ofDSwBbjiPBSjYLiGYK9aVnVxCbPuy357eQ",
76: "5EYCAe5jLQhn6ofDSwBsUjvmZEDYApeBtFSJ3ttRrjqmLmRP",
77: "5EYCAe5jLQhn6ofDSwC9DmUMfitjdNk4cvNobqaGKZiVcSd4",
78: "5EYCAe5jLQhn6ofDSwCQxo1wnDZw5vqwMbKK9nG6nPbDsr3v",
79: "5EYCAe5jLQhn6ofDSwCghpZXtiF8YUwp6GFphiwwFDTx9ZXw",
80: "5EYCAe5jLQhn6ofDSwCxSr781CvL133gpwCLFfdmi3LgRGUs",
81: "5EYCAe5jLQhn6ofDSwDEBsei7hbXTb9ZZc8qocKcAsDQgmDH",
82: "5EYCAe5jLQhn6ofDSwDVvuCJECGiv9FSJH5MMZ1Sdh68xe6G",
83: "5EYCAe5jLQhn6ofDSwDmfvjtLgwvNhMK2x1ruVhH6WxsE2Rh",
84: "5EYCAe5jLQhn6ofDSwE3QxHUTBd7qFTBmcxNTSP7ZLqbVqHX",
85: "5EYCAe5jLQhn6ofDSwEK9yq4ZgJKHoZ4WHtt1P4x2AiKmP2V",
86: "5EYCAe5jLQhn6ofDSwEau1NegAyWkMewExqPZKknUzb42r36",
87: "5EYCAe5jLQhn6ofDSwEre2vEnfeiCukoydmu7GScwpTnJa5d",
88: "5EYCAe5jLQhn6ofDSwF8P4TpuAKufTrgiJiQfD8TQeLWaGop",
89: "5EYCAe5jLQhn6ofDSwFQ861R1f1781xZSyevD9pHsUDEqiBR",
90: "5EYCAe5jLQhn6ofDSwFfs7Z189gJaa4SBebRm6W8LJ5y7dfH",
91: "5EYCAe5jLQhn6ofDSwFwc96bEeMW38AJvKXwK3Bxo7xhP3yn",
92: "5EYCAe5jLQhn6ofDSwGDMAeBM92hVgGBezUSrysoFwqReqrS",
93: "5EYCAe5jLQhn6ofDSwGV6CBmTdhtxEN4PfQxQvZdimi9vW9r",
94: "5EYCAe5jLQhn6ofDSwGkqDjMa8P6QnTw8LMTxsFUBbatC8C5",
95: "5EYCAe5jLQhn6ofDSwH2aFGwgd4HsLZos1HyWowJeRTcTVsg",
96: "5EYCAe5jLQhn6ofDSwHJKGpXo7jVKtfgbgEV4kd97FLLjBeJ",
97: "5EYCAe5jLQhn6ofDSwHa4JN7ucQgnSmZLMAzchJya5D4zq8v",
98: "5EYCAe5jLQhn6ofDSwHqoKui275tEzsS527WAdzp2u5oGNSd",
99: "5EYCAe5jLQhn6ofDSwJ7YMTJ8bm5hYyJoh41iageVixXYH59",
100: "5EYCAe5jLQhn6ofDSwJPHNztF6SHA75BYMzXGXNUxYqFoj9g",
101: "5EYCAe5jLQhn6ofDSwJf2QYUMb7UcfB4H2w2pU4KRNhz5GP5",
102: "5EYCAe5jLQhn6ofDSwJvmS64U5ng5DGw1hsYNQk9tCaiLvoS",
103: "5EYCAe5jLQhn6ofDSwKCWTdeaaTsXmNokNp3vMRzM2TScknA",
104: "5EYCAe5jLQhn6ofDSwKUFVBEh594zKUgV3kZUJ7porLAtE76",
105: "5EYCAe5jLQhn6ofDSwKjzWipoZpGSsaZDih52EofGgCu9mbP",
106: "5EYCAe5jLQhn6ofDSwL1jYGQv4VTuRgRxPdaaBVVjW5dRU9u",
107: "5EYCAe5jLQhn6ofDSwLHUZp12ZAfMynJh4a688BLCKxMhEMq",
108: "5EYCAe5jLQhn6ofDSwLZDbMb93qrpXtBRjWbg4sAf9q5xtB8",
109: "5EYCAe5jLQhn6ofDSwLpxcuBFYX4H5z4AQT7E1Z17yhpELLK",
110: "5EYCAe5jLQhn6ofDSwM6heSmN3CFje5vu5PcmxEqaoaYW1KP",
111: "5EYCAe5jLQhn6ofDSwMNSfzMUXsTCCBodkL8Ktvg3dTGmYbX",
112: "5EYCAe5jLQhn6ofDSwMeBhXwb2YeekHgNRGdsqcWWTL13NLP",
113: "5EYCAe5jLQhn6ofDSwMuvj5XhXDr7JPZ76D9RnJLyHCjK2Zy",
114: "5EYCAe5jLQhn6ofDSwNBfkd7p1u3ZrVRqm9eyizBS75TaPgK",
115: "5EYCAe5jLQhn6ofDSwNTQnAhvWaF2QbJaS6AXfg1tvxBrDUN",
116: "5EYCAe5jLQhn6ofDSwNj9oiJ31FSUxhBK72g5cMrMkpv7iJx",
117: "5EYCAe5jLQhn6ofDSwNztqFt9VvdwWo43myBdZ3gpahePQpf",
118: "5EYCAe5jLQhn6ofDSwPGdroUFzbqQ4tvnSuhBVjXHQaNet2o",
119: "5EYCAe5jLQhn6ofDSwPYNtM4NVH2rczoX7rCjSRMkET6vioH",
120: "5EYCAe5jLQhn6ofDSwPp7uteUyxEKB6gFnniHP7CD4KqCQDN",
121: "5EYCAe5jLQhn6ofDSwQ5rwSEbUdRmjCYzTjDqKo2ftCZTubr",
122: "5EYCAe5jLQhn6ofDSwQMbxyphyJdEHJRj8fjPGUs8i5HjcA3",
123: "5EYCAe5jLQhn6ofDSwQdLzXQpTypgqQJTocEwDAhbXx21Awy",
124: "5EYCAe5jLQhn6ofDSwQu624zvxf29PWBCUYkV9rY4MpkGu1f",
125: "5EYCAe5jLQhn6ofDSwRAq3cb3TLDbwc3w9VG36YNXBhUYKDi",
126: "5EYCAe5jLQhn6ofDSwRSa5AB9x1R4VhvfpRmb3ECz1aCp2ze",
127: "5EYCAe5jLQhn6ofDSwRiK6hmGSgcX3ooQVNH8yv3SqSw5mpH",
128: "5EYCAe5jLQhn6ofDSwRz48FMNwMoybug9AJngvbsufKfME2t",
}

return NETUID_TO_ACCOUNT_ID[netuid];
}

export async function getStake(api: TypedApi<typeof devnet>, hotkey: string, coldkey: string, netuid: number): Promise<bigint> {
const value = (await api.query.SubtensorModule.AlphaV2.getValue(hotkey, coldkey, netuid));
Expand Down
Loading
Loading