ava-labs / teleporter

EVM cross-chain messaging protocol built on top of Avalanche Warp Messaging
Other
48 stars 23 forks source link

Ability to remove inactive validators #582

Open minghinmatthewlam opened 3 weeks ago

minghinmatthewlam commented 3 weeks ago

Context and scope Validators can remove themselves through the DisableSubnetValidatorTx on the P-Chain, which returns their AVAX and makes the validator inactive, but the validator's weight still contributes to Warp thresholds until the validator manager contract sends an update to set validator weight = 0. Validator Manager contract does so through initializeEndValidation, which is currently gated by _msgSender(), but if a validator decides to disable themselves, they'll likely not go and call initializeEndValidation after, since they would've done so in the first place instead of disable. We don't want these validators to be leftover to affect Warp thresholds, or the tracked validator weights in the contract that can affect churn tracking etc, so the Subnet should be able to agree to remove certain validators, which can now be done through a ValidatorSetSig.

Discussion and alternatives ValidatorManager should take in the option of a ValidatorSetSig, which can also initialize end validation for a validator, instead of just msgSender. Basically the validator manager contract should check whether it's msgSender or the additional validator set sig to allow for initializing end validation of a validator.