MCPcopy Create free account
hub / github.com/circlefin/arc-node / queryValidatorManagerConfig

Function queryValidatorManagerConfig

scripts/hardhat/tasks/query-state.ts:278–356  ·  view source on GitHub ↗
(
  hre: HardhatRuntimeEnvironment,
  client: PublicClient,
  validatorRegisterers?: Array<Address>,
  configValidators?: Array<{ controllers?: Array<{ address: Address }> }>,
)

Source from the content-addressed store, hash-verified

276}
277
278const queryValidatorManagerConfig = async (
279 hre: HardhatRuntimeEnvironment,
280 client: PublicClient,
281 validatorRegisterers?: Array<Address>,
282 configValidators?: Array<{ controllers?: Array<{ address: Address }> }>,
283): Promise<GenesisConfig['ValidatorManager']> => {
284 const abiValidatorRegistry = hre.artifacts.readArtifactSync('ValidatorRegistry').abi
285 const abiPermissionedValidatorManager = hre.artifacts.readArtifactSync('PermissionedValidatorManager').abi
286 const abiAdminProxy = hre.artifacts.readArtifactSync('AdminUpgradeableProxy').abi
287
288 const validatorRegistry = getContract({
289 abi: [...abiValidatorRegistry, ...abiAdminProxy],
290 address: validatorRegistryAddress,
291 client,
292 }).read
293 const poaManager = getContract({
294 abi: [...abiPermissionedValidatorManager, ...abiAdminProxy],
295 address: permissionedManagerAddress,
296 client,
297 }).read
298
299 const [vrAdmin, vrImpl, nextRegistrationId, admin, impl, owner, pauser, ...isValidatorRegisterer] = await Promise.all(
300 [
301 validatorRegistry.admin(),
302 validatorRegistry.implementation(),
303 validatorRegistry.getNextRegistrationId(),
304 poaManager.admin(),
305 poaManager.implementation(),
306 poaManager.owner(),
307 poaManager.pauser(),
308 ...(validatorRegisterers ?? []).map((x) => poaManager.isValidatorRegisterer([x])),
309 ],
310 )
311
312 const onChainValidators = await Promise.all(
313 Array(Number(nextRegistrationId - 1n))
314 .fill(0)
315 .map((_, i) => validatorRegistry.getValidator([BigInt(i) + 1n])),
316 )
317
318 // For each validator, query the on-chain state for the controller addresses
319 // that config says should manage it. A controller is considered to belong to
320 // validator i if its on-chain registrationId equals i+1 — mismatches produce
321 // a missing entry here, which the comparator flags as a diff.
322 const validators = await Promise.all(
323 onChainValidators.map(async (v, i) => {
324 const expectedRegistrationId = BigInt(i + 1)
325 const configControllers = configValidators?.[i]?.controllers ?? []
326 const controllers = await Promise.all(
327 configControllers.map(async (c) => {
328 const [registrationId, votingPowerLimit] = await Promise.all([
329 poaManager.getRegistrationId([c.address]),
330 poaManager.getVotingPowerLimit([c.address]),
331 ])
332 return registrationId === expectedRegistrationId ? { address: c.address, votingPowerLimit } : null
333 }),
334 )
335 return {

Callers 1

query-state.tsFile · 0.85

Calls 1

allMethod · 0.45

Tested by

no test coverage detected