@@ -13,6 +13,7 @@ use frame_support::sp_runtime::DispatchError;
1313use mock:: * ;
1414use pallet_balances:: Call as BalancesCall ;
1515use pallet_subtensor:: * ;
16+ use serde:: de;
1617use sp_core:: { H256 , U256 } ;
1718use sp_runtime:: traits:: SignedExtension ;
1819
@@ -4195,3 +4196,198 @@ fn test_comprehensive_coldkey_swap_scenarios() {
41954196 assert_eq ! ( SubtensorModule :: get_coldkey_balance( & regular_user) , 0 ) ;
41964197 } ) ;
41974198}
4199+
4200+ #[ test]
4201+ fn test_get_total_delegated_stake_after_unstaking ( ) {
4202+ new_test_ext ( 1 ) . execute_with ( || {
4203+ let delegate = U256 :: from ( 1 ) ;
4204+ let coldkey = U256 :: from ( 2 ) ;
4205+ let delegator = U256 :: from ( 3 ) ;
4206+ let initial_stake = 2000 ;
4207+ let unstake_amount = 500 ;
4208+ let netuid = 1u16 ;
4209+ let existential_deposit = 1 ; // Account for the existential deposit
4210+
4211+ add_network ( netuid, 0 , 0 ) ;
4212+
4213+ register_ok_neuron ( netuid, delegate, coldkey, 0 ) ;
4214+
4215+ // Make the delegate a delegate
4216+ assert_ok ! ( SubtensorModule :: become_delegate(
4217+ RuntimeOrigin :: signed( coldkey) ,
4218+ delegate
4219+ ) ) ;
4220+
4221+ // Add balance to delegator
4222+ SubtensorModule :: add_balance_to_coldkey_account ( & delegator, initial_stake) ;
4223+
4224+ // Delegate stake
4225+ assert_ok ! ( SubtensorModule :: add_stake(
4226+ RuntimeOrigin :: signed( delegator) ,
4227+ delegate,
4228+ initial_stake
4229+ ) ) ;
4230+
4231+ // Unstake part of the delegation
4232+ assert_ok ! ( SubtensorModule :: remove_stake(
4233+ RuntimeOrigin :: signed( delegator) ,
4234+ delegate,
4235+ unstake_amount
4236+ ) ) ;
4237+
4238+ // Calculate the expected delegated stake
4239+ let expected_delegated_stake = initial_stake - unstake_amount - existential_deposit;
4240+
4241+ // Check the total delegated stake after unstaking
4242+ assert_eq ! (
4243+ SubtensorModule :: get_total_delegated_stake( & delegate) ,
4244+ expected_delegated_stake
4245+ ) ;
4246+ } ) ;
4247+ }
4248+
4249+ #[ test]
4250+ fn test_get_total_delegated_stake_no_delegations ( ) {
4251+ new_test_ext ( 1 ) . execute_with ( || {
4252+ let delegate = U256 :: from ( 1 ) ;
4253+ let coldkey = U256 :: from ( 2 ) ;
4254+ let netuid = 1u16 ;
4255+
4256+ add_network ( netuid, 0 , 0 ) ;
4257+ register_ok_neuron ( netuid, delegate, coldkey, 0 ) ;
4258+
4259+ // Make the delegate a delegate
4260+ assert_ok ! ( SubtensorModule :: become_delegate(
4261+ RuntimeOrigin :: signed( coldkey) ,
4262+ delegate
4263+ ) ) ;
4264+
4265+ // Check that there's no delegated stake
4266+ assert_eq ! ( SubtensorModule :: get_total_delegated_stake( & delegate) , 0 ) ;
4267+ } ) ;
4268+ }
4269+
4270+ #[ test]
4271+ fn test_get_total_delegated_stake_single_delegator ( ) {
4272+ new_test_ext ( 1 ) . execute_with ( || {
4273+ let delegate = U256 :: from ( 1 ) ;
4274+ let coldkey = U256 :: from ( 2 ) ;
4275+ let delegator = U256 :: from ( 3 ) ;
4276+ let stake_amount = 1000 ;
4277+ let netuid = 1u16 ;
4278+
4279+ add_network ( netuid, 0 , 0 ) ;
4280+ register_ok_neuron ( netuid, delegate, coldkey, 0 ) ;
4281+
4282+ // Make the delegate a delegate
4283+ assert_ok ! ( SubtensorModule :: become_delegate(
4284+ RuntimeOrigin :: signed( coldkey) ,
4285+ delegate
4286+ ) ) ;
4287+
4288+ // Add balance to delegator
4289+ SubtensorModule :: add_balance_to_coldkey_account ( & delegator, stake_amount) ;
4290+
4291+ // Delegate stake
4292+ assert_ok ! ( SubtensorModule :: add_stake(
4293+ RuntimeOrigin :: signed( delegator) ,
4294+ delegate,
4295+ stake_amount
4296+ ) ) ;
4297+
4298+ // Check the total delegated stake
4299+ assert_eq ! (
4300+ SubtensorModule :: get_total_delegated_stake( & delegate) ,
4301+ stake_amount - 1 // Subtract 1 for existential deposit
4302+ ) ;
4303+ } ) ;
4304+ }
4305+
4306+ #[ test]
4307+ fn test_get_total_delegated_stake_multiple_delegators ( ) {
4308+ new_test_ext ( 1 ) . execute_with ( || {
4309+ let delegate = U256 :: from ( 1 ) ;
4310+ let coldkey = U256 :: from ( 2 ) ;
4311+ let delegator1 = U256 :: from ( 3 ) ;
4312+ let delegator2 = U256 :: from ( 4 ) ;
4313+ let stake_amount1 = 1000 ;
4314+ let stake_amount2 = 2000 ;
4315+ let netuid = 1u16 ;
4316+
4317+ add_network ( netuid, 0 , 0 ) ;
4318+ register_ok_neuron ( netuid, delegate, coldkey, 0 ) ;
4319+
4320+ // Make the delegate a delegate
4321+ assert_ok ! ( SubtensorModule :: become_delegate(
4322+ RuntimeOrigin :: signed( coldkey) ,
4323+ delegate
4324+ ) ) ;
4325+
4326+ // Add balance to delegators
4327+ SubtensorModule :: add_balance_to_coldkey_account ( & delegator1, stake_amount1) ;
4328+ SubtensorModule :: add_balance_to_coldkey_account ( & delegator2, stake_amount2) ;
4329+
4330+ // Delegate stakes
4331+ assert_ok ! ( SubtensorModule :: add_stake(
4332+ RuntimeOrigin :: signed( delegator1) ,
4333+ delegate,
4334+ stake_amount1
4335+ ) ) ;
4336+ assert_ok ! ( SubtensorModule :: add_stake(
4337+ RuntimeOrigin :: signed( delegator2) ,
4338+ delegate,
4339+ stake_amount2
4340+ ) ) ;
4341+
4342+ // Check the total delegated stake
4343+ assert_eq ! (
4344+ SubtensorModule :: get_total_delegated_stake( & delegate) ,
4345+ stake_amount1 + stake_amount2 - 2 // Subtract 2 for existential deposits
4346+ ) ;
4347+ } ) ;
4348+ }
4349+
4350+ #[ test]
4351+ fn test_get_total_delegated_stake_exclude_owner_stake ( ) {
4352+ new_test_ext ( 1 ) . execute_with ( || {
4353+ let delegate = U256 :: from ( 1 ) ;
4354+ let coldkey = U256 :: from ( 2 ) ;
4355+ let delegator = U256 :: from ( 3 ) ;
4356+ let owner_stake = 5000 ;
4357+ let delegator_stake = 1000 ;
4358+ let netuid = 1u16 ;
4359+
4360+ add_network ( netuid, 0 , 0 ) ;
4361+ register_ok_neuron ( netuid, delegate, coldkey, 0 ) ;
4362+
4363+ // Make the delegate a delegate
4364+ assert_ok ! ( SubtensorModule :: become_delegate(
4365+ RuntimeOrigin :: signed( coldkey) ,
4366+ delegate
4367+ ) ) ;
4368+
4369+ // Add balance to owner and delegator
4370+ SubtensorModule :: add_balance_to_coldkey_account ( & coldkey, owner_stake) ;
4371+ SubtensorModule :: add_balance_to_coldkey_account ( & delegator, delegator_stake) ;
4372+
4373+ // Owner adds stake
4374+ assert_ok ! ( SubtensorModule :: add_stake(
4375+ RuntimeOrigin :: signed( coldkey) ,
4376+ delegate,
4377+ owner_stake
4378+ ) ) ;
4379+
4380+ // Delegator adds stake
4381+ assert_ok ! ( SubtensorModule :: add_stake(
4382+ RuntimeOrigin :: signed( delegator) ,
4383+ delegate,
4384+ delegator_stake
4385+ ) ) ;
4386+
4387+ // Check the total delegated stake (should exclude owner's stake)
4388+ assert_eq ! (
4389+ SubtensorModule :: get_total_delegated_stake( & delegate) ,
4390+ delegator_stake - 1 // Subtract 1 for existential deposit
4391+ ) ;
4392+ } ) ;
4393+ }
0 commit comments