@@ -5,8 +5,8 @@ pub(crate) mod RolesComponent {
55 AppRoleAdminRemoved , GOVERNANCE_ADMIN , GovernanceAdminAdded , GovernanceAdminRemoved , IRoles ,
66 OPERATOR , OperatorAdded , OperatorRemoved , RoleId , SECURITY_ADMIN , SECURITY_AGENT ,
77 SecurityAdminAdded , SecurityAdminRemoved , SecurityAgentAdded , SecurityAgentRemoved ,
8- TOKEN_ADMIN , TokenAdminAdded , TokenAdminRemoved , UPGRADE_GOVERNOR , UpgradeGovernorAdded ,
9- UpgradeGovernorRemoved ,
8+ TOKEN_ADMIN , TokenAdminAdded , TokenAdminRemoved , UPGRADE_AGENT , UPGRADE_GOVERNOR ,
9+ UpgradeAgentAdded , UpgradeAgentRemoved , UpgradeGovernorAdded , UpgradeGovernorRemoved ,
1010 };
1111 use core :: num :: traits :: Zero ;
1212 use starknet :: storage :: StorageMapReadAccess ;
@@ -40,6 +40,8 @@ pub(crate) mod RolesComponent {
4040 TokenAdminRemoved : TokenAdminRemoved ,
4141 UpgradeGovernorAdded : UpgradeGovernorAdded ,
4242 UpgradeGovernorRemoved : UpgradeGovernorRemoved ,
43+ UpgradeAgentAdded : UpgradeAgentAdded ,
44+ UpgradeAgentRemoved : UpgradeAgentRemoved ,
4345 }
4446 use openzeppelin :: access :: accesscontrol :: AccessControlComponent ;
4547 use openzeppelin :: access :: accesscontrol :: AccessControlComponent :: {
@@ -100,6 +102,13 @@ pub(crate) mod RolesComponent {
100102 access_comp . has_role (role : TOKEN_ADMIN , : account )
101103 }
102104
105+ fn is_upgrade_agent (
106+ self : @ ComponentState <TContractState >, account : ContractAddress ,
107+ ) -> bool {
108+ let access_comp = get_dep_component! (self , Access );
109+ access_comp . has_role (role : UPGRADE_AGENT , : account )
110+ }
111+
103112 fn is_upgrade_governor (
104113 self : @ ComponentState <TContractState >, account : ContractAddress ,
105114 ) -> bool {
@@ -230,6 +239,24 @@ pub(crate) mod RolesComponent {
230239 self . _revoke_role_and_emit (role : TOKEN_ADMIN , : account , : event );
231240 }
232241
242+ fn register_upgrade_agent (
243+ ref self : ComponentState <TContractState >, account : ContractAddress ,
244+ ) {
245+ let event = Event :: UpgradeAgentAdded (
246+ UpgradeAgentAdded { added_account : account , added_by : get_caller_address () },
247+ );
248+ self . _grant_role_and_emit (role : UPGRADE_AGENT , : account , : event );
249+ }
250+
251+ fn remove_upgrade_agent (
252+ ref self : ComponentState <TContractState >, account : ContractAddress ,
253+ ) {
254+ let event = Event :: UpgradeAgentRemoved (
255+ UpgradeAgentRemoved { removed_account : account , removed_by : get_caller_address () },
256+ );
257+ self . _revoke_role_and_emit (role : UPGRADE_AGENT , : account , : event );
258+ }
259+
233260 fn register_upgrade_governor (
234261 ref self : ComponentState <TContractState >, account : ContractAddress ,
235262 ) {
@@ -349,6 +376,7 @@ pub(crate) mod RolesComponent {
349376 access_comp . set_role_admin (role : GOVERNANCE_ADMIN , admin_role : GOVERNANCE_ADMIN );
350377 access_comp . set_role_admin (role : OPERATOR , admin_role : APP_ROLE_ADMIN );
351378 access_comp . set_role_admin (role : TOKEN_ADMIN , admin_role : APP_ROLE_ADMIN );
379+ access_comp . set_role_admin (role : UPGRADE_AGENT , admin_role : APP_ROLE_ADMIN );
352380 access_comp . set_role_admin (role : UPGRADE_GOVERNOR , admin_role : GOVERNANCE_ADMIN );
353381
354382 access_comp . _grant_role (role : SECURITY_ADMIN , account : governance_admin );
@@ -361,14 +389,17 @@ pub(crate) mod RolesComponent {
361389 self . is_app_governor (get_caller_address ()), " {}" , AccessErrors :: ONLY_APP_GOVERNOR ,
362390 );
363391 }
392+
364393 fn only_operator (self : @ ComponentState <TContractState >) {
365394 assert! (self . is_operator (get_caller_address ()), " {}" , AccessErrors :: ONLY_OPERATOR );
366395 }
396+
367397 fn only_token_admin (self : @ ComponentState <TContractState >) {
368398 assert! (
369399 self . is_token_admin (get_caller_address ()), " {}" , AccessErrors :: ONLY_TOKEN_ADMIN ,
370400 );
371401 }
402+
372403 fn only_upgrade_governor (self : @ ComponentState <TContractState >) {
373404 assert! (
374405 self . is_upgrade_governor (get_caller_address ()),
@@ -377,6 +408,15 @@ pub(crate) mod RolesComponent {
377408 );
378409 }
379410
411+ fn only_upgrader (self : @ ComponentState <TContractState >) {
412+ assert! (
413+ self . is_upgrade_agent (get_caller_address ())
414+ || self . is_upgrade_governor (get_caller_address ()),
415+ " {}" ,
416+ AccessErrors :: ONLY_UPGRADER ,
417+ );
418+ }
419+
380420 fn only_security_admin (self : @ ComponentState <TContractState >) {
381421 assert! (
382422 self . is_security_admin (get_caller_address ()),
0 commit comments