Function: batchSendExitRequest(uint256[] _validatorIds)
Send the request to exit the validators as their TNFT holder. The BNFT holder must serve the request; otherwise, their bond will get penalized gradually.
Inputs
_validatorIds
Control: Fully controlled.
Constraints:
msg.sender
must be the TNFT holder of this validator ID.Impact: This is the validator ID for which the exit request must be sent.
Branches and code coverage
Intended branches
Updates the number of exit requests.
Updates the
exitRequestTimestamp
of the validator ID.Updates the etherFiNode for the validator ID.
Negative behavior
Revert if the caller is not the owner of the TNFT.
Revert if the phase is not
LIVE
.
Function call analysis
this.tnft.ownerOf(_validatorId)
What is controllable?
_validatorId
.If the return value is controllable, how is it used and how can it go wrong? Returns the owner of the TNFT. The ownership of the TNFT is verified to ensure the caller is the TNFT holder.
What happens if it reverts, reenters, or does other unusual control flow? If this call reverts, the function will revert — no reentrancy scenarios.
this.phase(_validatorId) -> IEtherFiNode(etherfiNode).version()
What is controllable? Not controllable.
If the return value is controllable, how is it used and how can it go wrong? Retrieves the version of the EtherFiNode related to the given validator.
What happens if it reverts, reenters, or does other unusual control flow? If this call reverts, it might indicate an issue with the EtherFiNode or an unexpected state.
this.phase(_validatorId) -> IEtherFiNode(etherfiNode).DEPRECATED_phase()
What is controllable? Not controllable.
If the return value is controllable, how is it used and how can it go wrong? Retrieves the deprecated phase of the EtherFiNode related to the given validator.
What happens if it reverts, reenters, or does other unusual control flow? N/A.
this._updateEtherFiNode(_validatorId) -> IEtherFiNode(etherfiNode).DEPRECATED_exitRequestTimestamp()
What is controllable? Not controllable.
If the return value is controllable, how is it used and how can it go wrong? Retrieves the deprecated exit-request timestamp.
What happens if it reverts, reenters, or does other unusual control flow? N/A.
this._updateEtherFiNode(_validatorId) -> IEtherFiNode(etherfiNode).DEPRECATED_exitTimestamp()
What is controllable? Not controllable.
If the return value is controllable, how is it used and how can it go wrong? Retrieves the deprecated exit timestamp.
What happens if it reverts, reenters, or does other unusual control flow? N/A.
this._updateEtherFiNode(_validatorId) -> IEtherFiNode(etherfiNode).DEPRECATED_phase()
What is controllable? Not controllable.
If the return value is controllable, how is it used and how can it go wrong? Retrieves the deprecated phase.
What happens if it reverts, reenters, or does other unusual control flow? N/A.
this._updateEtherFiNode(_validatorId) -> IEtherFiNode(etherfiNode).migrateVersion(_validatorId)
What is controllable? Not controllable.
If the return value is controllable, how is it used and how can it go wrong? Migrates the version related to the given validator.
What happens if it reverts, reenters, or does other unusual control flow? If this call reverts, it might indicate an issue with migrating the version — no reentrancy scenario.
IEtherFiNode(etherfiNode).updateNumExitRequests(1, 0)
What is controllable? Not controllable.
If the return value is controllable, how is it used and how can it go wrong? Updates the number of exit requests in the EtherFiNode related to the given validator.
What happens if it reverts, reenters, or does other unusual control flow? If this call reverts, it might indicate an issue with updating the number of exit requests — no reentrancy scenario.