Assessment reports>EtherFi>Threat Model>batchSendExitRequest

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.

Zellic © 2025Back to top ↑