5454 }
5555}
5656
57+ // Verify that delegate is an authorized zero-delay proxy for on_behalf_of
58+ fn verify_proxy < T > (
59+ on_behalf_of : & T :: AccountId ,
60+ delegate : & T :: AccountId ,
61+ required_proxy_type : ProxyType ,
62+ ) -> Result < ( ) , DispatchError >
63+ where
64+ T : pallet_proxy:: Config < ProxyType = ProxyType > ,
65+ {
66+ let ( proxies, _) = pallet_proxy:: Proxies :: < T > :: get ( on_behalf_of) ;
67+ proxies
68+ . iter ( )
69+ . find ( |p| {
70+ p. delegate == * delegate
71+ && p. delay . is_zero ( )
72+ && ( p. proxy_type == required_proxy_type
73+ || pallet_proxy:: Pallet :: < T > :: is_superset ( p. proxy_type , required_proxy_type) )
74+ } )
75+ . ok_or ( DispatchError :: Other ( "Not authorized proxy" ) ) ?;
76+ Ok ( ( ) )
77+ }
78+
5779impl < T > SubtensorChainExtension < T >
5880where
5981 T : pallet_subtensor:: Config
6284 + pallet_subtensor_swap:: Config ,
6385 T :: AccountId : Clone ,
6486{
65- fn verify_proxy (
66- on_behalf_of : & T :: AccountId ,
67- delegate : & T :: AccountId ,
68- required_proxy_type : ProxyType ,
69- ) -> Result < ( ) , DispatchError > {
70- let ( proxies, _) = pallet_proxy:: Proxies :: < T > :: get ( on_behalf_of) ;
71- proxies
72- . iter ( )
73- . find ( |p| {
74- p. delegate == * delegate
75- && p. delay . is_zero ( )
76- && ( p. proxy_type == required_proxy_type
77- || pallet_proxy:: Pallet :: < T > :: is_superset ( p. proxy_type , required_proxy_type) )
78- } )
79- . ok_or ( DispatchError :: Other ( "Not authorized proxy" ) ) ?;
80- Ok ( ( ) )
81- }
82-
8387 fn dispatch < Env > ( env : & mut Env ) -> Result < RetVal , DispatchError >
8488 where
8589 Env : SubtensorExtensionEnv < T :: AccountId > ,
@@ -565,7 +569,7 @@ where
565569 . map_err ( |_| DispatchError :: Other ( "Failed to decode input parameters" ) ) ?;
566570
567571 let caller = env. caller ( ) ;
568- Self :: verify_proxy ( & on_behalf_of, & caller, ProxyType :: Staking ) ?;
572+ verify_proxy :: < T > ( & on_behalf_of, & caller, ProxyType :: Staking ) ?;
569573
570574 let call_result = pallet_subtensor:: Pallet :: < T > :: add_stake (
571575 RawOrigin :: Signed ( on_behalf_of) . into ( ) ,
@@ -595,7 +599,7 @@ where
595599 . map_err ( |_| DispatchError :: Other ( "Failed to decode input parameters" ) ) ?;
596600
597601 let caller = env. caller ( ) ;
598- Self :: verify_proxy ( & on_behalf_of, & caller, ProxyType :: Staking ) ?;
602+ verify_proxy :: < T > ( & on_behalf_of, & caller, ProxyType :: Staking ) ?;
599603
600604 let call_result = pallet_subtensor:: Pallet :: < T > :: remove_stake (
601605 RawOrigin :: Signed ( on_behalf_of) . into ( ) ,
@@ -620,7 +624,7 @@ where
620624 . map_err ( |_| DispatchError :: Other ( "Failed to decode input parameters" ) ) ?;
621625
622626 let caller = env. caller ( ) ;
623- Self :: verify_proxy ( & on_behalf_of, & caller, ProxyType :: Staking ) ?;
627+ verify_proxy :: < T > ( & on_behalf_of, & caller, ProxyType :: Staking ) ?;
624628
625629 let call_result = pallet_subtensor:: Pallet :: < T > :: unstake_all (
626630 RawOrigin :: Signed ( on_behalf_of) . into ( ) ,
@@ -643,7 +647,7 @@ where
643647 . map_err ( |_| DispatchError :: Other ( "Failed to decode input parameters" ) ) ?;
644648
645649 let caller = env. caller ( ) ;
646- Self :: verify_proxy ( & on_behalf_of, & caller, ProxyType :: Staking ) ?;
650+ verify_proxy :: < T > ( & on_behalf_of, & caller, ProxyType :: Staking ) ?;
647651
648652 let call_result = pallet_subtensor:: Pallet :: < T > :: unstake_all_alpha (
649653 RawOrigin :: Signed ( on_behalf_of) . into ( ) ,
@@ -680,7 +684,7 @@ where
680684 . map_err ( |_| DispatchError :: Other ( "Failed to decode input parameters" ) ) ?;
681685
682686 let caller = env. caller ( ) ;
683- Self :: verify_proxy ( & on_behalf_of, & caller, ProxyType :: Staking ) ?;
687+ verify_proxy :: < T > ( & on_behalf_of, & caller, ProxyType :: Staking ) ?;
684688
685689 let call_result = pallet_subtensor:: Pallet :: < T > :: move_stake (
686690 RawOrigin :: Signed ( on_behalf_of) . into ( ) ,
@@ -721,7 +725,7 @@ where
721725 . map_err ( |_| DispatchError :: Other ( "Failed to decode input parameters" ) ) ?;
722726
723727 let caller = env. caller ( ) ;
724- Self :: verify_proxy ( & on_behalf_of, & caller, ProxyType :: Transfer ) ?;
728+ verify_proxy :: < T > ( & on_behalf_of, & caller, ProxyType :: Transfer ) ?;
725729
726730 let call_result = pallet_subtensor:: Pallet :: < T > :: transfer_stake (
727731 RawOrigin :: Signed ( on_behalf_of) . into ( ) ,
@@ -754,7 +758,7 @@ where
754758 . map_err ( |_| DispatchError :: Other ( "Failed to decode input parameters" ) ) ?;
755759
756760 let caller = env. caller ( ) ;
757- Self :: verify_proxy ( & on_behalf_of, & caller, ProxyType :: Staking ) ?;
761+ verify_proxy :: < T > ( & on_behalf_of, & caller, ProxyType :: Staking ) ?;
758762
759763 let call_result = pallet_subtensor:: Pallet :: < T > :: swap_stake (
760764 RawOrigin :: Signed ( on_behalf_of) . into ( ) ,
@@ -787,7 +791,7 @@ where
787791 . map_err ( |_| DispatchError :: Other ( "Failed to decode input parameters" ) ) ?;
788792
789793 let caller = env. caller ( ) ;
790- Self :: verify_proxy ( & on_behalf_of, & caller, ProxyType :: Staking ) ?;
794+ verify_proxy :: < T > ( & on_behalf_of, & caller, ProxyType :: Staking ) ?;
791795
792796 let call_result = pallet_subtensor:: Pallet :: < T > :: add_stake_limit (
793797 RawOrigin :: Signed ( on_behalf_of) . into ( ) ,
@@ -821,7 +825,7 @@ where
821825 . map_err ( |_| DispatchError :: Other ( "Failed to decode input parameters" ) ) ?;
822826
823827 let caller = env. caller ( ) ;
824- Self :: verify_proxy ( & on_behalf_of, & caller, ProxyType :: Staking ) ?;
828+ verify_proxy :: < T > ( & on_behalf_of, & caller, ProxyType :: Staking ) ?;
825829
826830 let call_result = pallet_subtensor:: Pallet :: < T > :: remove_stake_limit (
827831 RawOrigin :: Signed ( on_behalf_of) . into ( ) ,
@@ -864,7 +868,7 @@ where
864868 . map_err ( |_| DispatchError :: Other ( "Failed to decode input parameters" ) ) ?;
865869
866870 let caller = env. caller ( ) ;
867- Self :: verify_proxy ( & on_behalf_of, & caller, ProxyType :: Staking ) ?;
871+ verify_proxy :: < T > ( & on_behalf_of, & caller, ProxyType :: Staking ) ?;
868872
869873 let call_result = pallet_subtensor:: Pallet :: < T > :: swap_stake_limit (
870874 RawOrigin :: Signed ( on_behalf_of) . into ( ) ,
@@ -897,7 +901,7 @@ where
897901 . map_err ( |_| DispatchError :: Other ( "Failed to decode input parameters" ) ) ?;
898902
899903 let caller = env. caller ( ) ;
900- Self :: verify_proxy ( & on_behalf_of, & caller, ProxyType :: Staking ) ?;
904+ verify_proxy :: < T > ( & on_behalf_of, & caller, ProxyType :: Staking ) ?;
901905
902906 let call_result = pallet_subtensor:: Pallet :: < T > :: remove_stake_full_limit (
903907 RawOrigin :: Signed ( on_behalf_of) . into ( ) ,
@@ -922,7 +926,7 @@ where
922926 . map_err ( |_| DispatchError :: Other ( "Failed to decode input parameters" ) ) ?;
923927
924928 let caller = env. caller ( ) ;
925- Self :: verify_proxy ( & on_behalf_of, & caller, ProxyType :: Staking ) ?;
929+ verify_proxy :: < T > ( & on_behalf_of, & caller, ProxyType :: Staking ) ?;
926930
927931 let call_result = pallet_subtensor:: Pallet :: < T > :: set_coldkey_auto_stake_hotkey (
928932 RawOrigin :: Signed ( on_behalf_of) . into ( ) ,
0 commit comments