Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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;
}

// Swap-related parameter types
Expand Down Expand Up @@ -686,7 +690,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 @@ -723,11 +727,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