@@ -81,16 +81,19 @@ contract VaultFactory {
81
81
// initialize Dashboard with the factory address as the default admin, grant optional roles and connect to VaultHub
82
82
dashboard.initialize (address (this ), address (this ), _nodeOperatorManager, _nodeOperatorFeeBP, _confirmExpiry);
83
83
84
- if (_roleAssignments.length > 0 ) dashboard.grantRoles (_roleAssignments);
85
-
86
84
// connection must be pre-approved by the node operator manager
87
85
dashboard.setApprovedToConnect (true );
88
86
dashboard.connectToVaultHub {value: msg .value }();
89
87
90
- dashboard.grantRole (dashboard.DEFAULT_ADMIN_ROLE (), _defaultAdmin);
91
88
dashboard.grantRole (dashboard.NODE_OPERATOR_MANAGER_ROLE (), _nodeOperatorManager);
92
- dashboard.revokeRole (dashboard.DEFAULT_ADMIN_ROLE (), address (this ));
93
89
dashboard.revokeRole (dashboard.NODE_OPERATOR_MANAGER_ROLE (), address (this ));
90
+
91
+ // _roleAssignments can only include DEFAULT_ADMIN_ROLE's subroles,
92
+ // which is why it's important to revoke the NODE_OPERATOR_MANAGER_ROLE BEFORE granting roles
93
+ if (_roleAssignments.length > 0 ) dashboard.grantRoles (_roleAssignments);
94
+
95
+ dashboard.grantRole (dashboard.DEFAULT_ADMIN_ROLE (), _defaultAdmin);
96
+ dashboard.revokeRole (dashboard.DEFAULT_ADMIN_ROLE (), address (this ));
94
97
95
98
emit VaultCreated (address (vault));
96
99
emit DashboardCreated (address (dashboard), address (vault), _defaultAdmin);
0 commit comments