ETH cannot always be unstaked using Rocket Pool
The protocol lets users unstake Ethereum using any bridge they want. Rocket Pool may not have enough ETH to satisfy unstake transactions, this will cause the transaction to revert.\\nWhen users try to unstake ETH using Rocket Pool, the transaction may revert because Rocket Pool may not have enough ETH in its deposit pool and rEth contract to satisfy the unstake request. Rocket pool sources ETH for unstaking from the rEth contract and deposit pool. When they are empty it cannot satisfy unstake requests. More information can be found in the Unstake section of the rocketPool documentation.\\nThe pools have been empty before. Here's a proof of concept of failed withdrawals when Rocket Pool's rEth contract and deposit pool were empty at block 15361748.\\n```\\n   function testWithdrawETHfromRocketPool() public{\\n    string memory MAINNET_RPC_URL = vm.envString("MAINNET_RPC_URL");\\n    uint256 mainnetFork = vm.createFork(MAINNET_RPC_URL, 15361748);\\n\\n    RocketTokenRETHInterface rEth = RocketTokenRETHInterface(0xae78736Cd615f374D3085123A210448E74Fc6393);\\n    vm.selectFork(mainnetFork);\\n    uint totalCollateral = rEth.getTotalCollateral();\\n    assertEq(totalCollateral, 0); // pools are empty\\n\\n    address owner = 0x50A78DFb9F5CC22ac8ffA90FA2B6C595881CCb97; // has rEth at block 15361748\\n    uint rEthBalance = rEth.balanceOf(owner);\\n    assertGt(rEthBalance, 0);\\n    \\n    vm.expectRevert("Insufficient ETH balance for exchange");\\n    vm.prank(owner); \\n    rEth.burn(rEthBalance);\\n  }\\n```\\n
Check if Rocket Pool has enough ETH and if it doesn't, rEth can be exchanged for ETH on a DEX and sent to the user.
If Rocket Pool's rEth contract and deposit Pool do not have enough ETH to satisfy an unstake transaction the transaction will revert.
```\\n   function testWithdrawETHfromRocketPool() public{\\n    string memory MAINNET_RPC_URL = vm.envString("MAINNET_RPC_URL");\\n    uint256 mainnetFork = vm.createFork(MAINNET_RPC_URL, 15361748);\\n\\n    RocketTokenRETHInterface rEth = RocketTokenRETHInterface(0xae78736Cd615f374D3085123A210448E74Fc6393);\\n    vm.selectFork(mainnetFork);\\n    uint totalCollateral = rEth.getTotalCollateral();\\n    assertEq(totalCollateral, 0); // pools are empty\\n\\n    address owner = 0x50A78DFb9F5CC22ac8ffA90FA2B6C595881CCb97; // has rEth at block 15361748\\n    uint rEthBalance = rEth.balanceOf(owner);\\n    assertGt(rEthBalance, 0);\\n    \\n    vm.expectRevert("Insufficient ETH balance for exchange");\\n    vm.prank(owner); \\n    rEth.burn(rEthBalance);\\n  }\\n```\\n