@@ -68,9 +68,10 @@ export class ContractRoles<TContract extends IPermissions, TRole extends Role>
68
68
public async getAll ( ) : Promise < Record < TRole , string [ ] > > {
69
69
invariant ( this . roles . length , "this contract has no support for roles" ) ;
70
70
const roles = { } as Record < TRole , string [ ] > ;
71
- for ( const role of this . roles ) {
72
- roles [ role ] = await this . get ( role ) ;
73
- }
71
+ const entries = Object . entries ( this . roles ) ;
72
+ ( await Promise . all ( entries . map ( ( [ , role ] ) => this . get ( role ) ) ) ) . forEach (
73
+ ( item , index ) => ( roles [ entries [ index ] [ 1 ] ] = item ) ,
74
+ ) ;
74
75
return roles ;
75
76
}
76
77
@@ -151,17 +152,18 @@ export class ContractRoles<TContract extends IPermissions, TRole extends Role>
151
152
const sortedRoles = roles . sort ( ( role ) => ( role === "admin" ? 1 : - 1 ) ) ;
152
153
for ( let i = 0 ; i < sortedRoles . length ; i ++ ) {
153
154
const role = sortedRoles [ i ] ;
154
- const addresses : Address [ ] = await Promise . all (
155
- rolesWithAddresses [ role ] ?. map (
156
- async ( addressOrEns ) => await resolveAddress ( addressOrEns ) ,
157
- ) || [ ] ,
158
- ) ;
159
- const currentAddresses : Address [ ] = await Promise . all (
160
- currentRoles [ role ] ?. map (
161
- async ( addressOrEns ) =>
162
- await resolveAddress ( addressOrEns as AddressOrEns ) ,
163
- ) || [ ] ,
164
- ) ;
155
+ const [ addresses , currentAddresses ] = await Promise . all ( [
156
+ Promise . all (
157
+ rolesWithAddresses [ role ] ?. map ( ( addressOrEns ) =>
158
+ resolveAddress ( addressOrEns ) ,
159
+ ) || [ ] ,
160
+ ) ,
161
+ Promise . all (
162
+ currentRoles [ role ] ?. map ( ( addressOrEns ) =>
163
+ resolveAddress ( addressOrEns as AddressOrEns ) ,
164
+ ) || [ ] ,
165
+ ) ,
166
+ ] ) ;
165
167
const toAdd = addresses . filter (
166
168
( address ) => ! currentAddresses . includes ( address ) ,
167
169
) ;
@@ -176,18 +178,17 @@ export class ContractRoles<TContract extends IPermissions, TRole extends Role>
176
178
} ) ;
177
179
}
178
180
if ( toRemove . length ) {
179
- for ( let j = 0 ; j < toRemove . length ; j ++ ) {
180
- const address = toRemove [ j ] ;
181
- const revokeFunctionName = ( await this . getRevokeRoleFunctionName (
182
- address ,
183
- ) ) as any ;
181
+ const revokeFunctionNames = await Promise . all (
182
+ toRemove . map ( ( address ) => this . getRevokeRoleFunctionName ( address ) ) ,
183
+ ) ;
184
+ revokeFunctionNames . forEach ( ( revokeFunctionName , index ) =>
184
185
encoded . push (
185
186
contractEncoder . encode ( revokeFunctionName , [
186
187
getRoleHash ( role ) ,
187
- address ,
188
+ toRemove [ index ] ,
188
189
] ) ,
189
- ) ;
190
- }
190
+ ) ,
191
+ ) ;
191
192
}
192
193
}
193
194
@@ -211,8 +212,10 @@ export class ContractRoles<TContract extends IPermissions, TRole extends Role>
211
212
public async verify ( roles : TRole [ ] , address : AddressOrEns ) : Promise < void > {
212
213
await Promise . all (
213
214
roles . map ( async ( role ) => {
214
- const members = await this . get ( role ) ;
215
- const resolvedAddress : Address = await resolveAddress ( address ) ;
215
+ const [ members , resolvedAddress ] = await Promise . all ( [
216
+ this . get ( role ) ,
217
+ resolveAddress ( address ) ,
218
+ ] ) ;
216
219
if (
217
220
! members
218
221
. map ( ( a ) => a . toLowerCase ( ) )
@@ -310,8 +313,10 @@ export class ContractRoles<TContract extends IPermissions, TRole extends Role>
310
313
****************************/
311
314
312
315
private async getRevokeRoleFunctionName ( address : AddressOrEns ) {
313
- const resolvedAddress = await resolveAddress ( address ) ;
314
- const signerAddress = await this . contractWrapper . getSignerAddress ( ) ;
316
+ const [ resolvedAddress , signerAddress ] = await Promise . all ( [
317
+ resolveAddress ( address ) ,
318
+ this . contractWrapper . getSignerAddress ( ) ,
319
+ ] ) ;
315
320
if ( signerAddress . toLowerCase ( ) === resolvedAddress . toLowerCase ( ) ) {
316
321
return "renounceRole" ;
317
322
}
0 commit comments