Diff
checker
Testo
Testo
Immagini
Documenti
Excel
Cartelle
Legal
Enterprise
Applicazione per desktop
Prezzi
Accedi
Scarica Diffchecker Desktop
Confronta il testo
Trova la differenza tra due file di testo
Strumenti
Cronologia
Visualizzazione
Layout
Diviso
Unificato
Editor live
Nascondi spazi bianchi
Comprimi invariate
Senza a capo
Livello di dettaglio
Intelligente
Sintassi
Nessuno
Modifica aspetto
Elaborazione
Ignora
Trasforma testo
Vai alla prima modifica
Modifica input
Diffchecker Desktop
Il modo più sicuro per usare Diffchecker. Ottieni l'app Diffchecker Desktop: i tuoi diff non lasciano mai il tuo computer!
Ottieni Desktop
UnstakeStETH
Creato
12 mesi fa
Il diff non scade mai
Eliminare
Esporta
Condividere
Spiegare
11 rimozioni
Linee
Totale
Rimosso
Caratteri
Totale
Rimosso
Per continuare a utilizzare questa funzione, aggiorna a
Diff
checker
Pro
Visualizza prezzi
67 linee
Copia tutti
8 aggiunte
Linee
Totale
Aggiunto
Caratteri
Totale
Aggiunto
Per continuare a utilizzare questa funzione, aggiorna a
Diff
checker
Pro
Visualizza prezzi
67 linee
Copia tutti
// SPDX-License-Identifier: BUSL-1.1
// SPDX-License-Identifier: BUSL-1.1
Copia
Copiato
Copia
Copiato
pragma solidity 0.8.
21
;
pragma solidity 0.8.
27
;
import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
Copia
Copiato
Copia
Copiato
import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
interface ILidoWithdrawalQueue {
interface ILidoWithdrawalQueue {
function requestWithdrawals(
function requestWithdrawals(
uint256[] calldata _amounts,
uint256[] calldata _amounts,
address _owner
address _owner
)
)
external
external
returns (uint256[] memory requestIds);
returns (uint256[] memory requestIds);
/// Usage: findCheckpointHints(_requestIds, 1, getLastCheckpointIndex())
/// Usage: findCheckpointHints(_requestIds, 1, getLastCheckpointIndex())
function findCheckpointHints(
function findCheckpointHints(
uint256[] calldata _requestIds,
uint256[] calldata _requestIds,
uint256 _firstIndex,
uint256 _firstIndex,
uint256 _lastIndex
uint256 _lastIndex
)
)
external
external
view
view
returns (uint256[] memory hintIds);
returns (uint256[] memory hintIds);
function getLastCheckpointIndex() external view returns (uint256);
function getLastCheckpointIndex() external view returns (uint256);
Copia
Copiato
Copia
Copiato
function claimWithdrawalsTo(
function claimWithdrawalsTo(
uint256[] calldata _requestIds,
uint256[] calldata _hints,
address _recipient
)
external;
uint256[] calldata _requestIds,
uint256[] calldata _hints,
address _recipient
)
external;
function finalize(uint256 _lastRequestIdToBeFinalized, uint256 _maxShareRate) external payable;
function finalize(uint256 _lastRequestIdToBeFinalized, uint256 _maxShareRate) external payable;
function getLastRequestId() external view returns (uint256);
function getLastRequestId() external view returns (uint256);
}
}
Copia
Copiato
Copia
Copiato
/// @dev Upgradeable base contract without storage gaps; adding variables in upgrades can collide with inheritors.
abstract contract UnstakeStETH is Initializable {
abstract contract UnstakeStETH is Initializable {
Copia
Copiato
Copia
Copiato
using SafeERC20 for IERC20;
ILidoWithdrawalQueue public withdrawalQueue;
ILidoWithdrawalQueue public withdrawalQueue;
IERC20 public stETH;
IERC20 public stETH;
event UnstakeStETHStarted(uint256 tokenId);
event UnstakeStETHStarted(uint256 tokenId);
function __initializeStETH(address _withdrawalQueue, address _stETHAddress) internal onlyInitializing {
function __initializeStETH(address _withdrawalQueue, address _stETHAddress) internal onlyInitializing {
withdrawalQueue = ILidoWithdrawalQueue(_withdrawalQueue);
withdrawalQueue = ILidoWithdrawalQueue(_withdrawalQueue);
stETH = IERC20(_stETHAddress);
stETH = IERC20(_stETHAddress);
}
}
function _unstakeStEth(uint256 amountToUnstake) internal {
function _unstakeStEth(uint256 amountToUnstake) internal {
Copia
Copiato
Copia
Copiato
stETH.
approve
(address(withdrawalQueue), amountToUnstake);
stETH.
safeIncreaseAllowance
(address(withdrawalQueue), amountToUnstake);
uint256[] memory amounts = new uint256[](1);
uint256[] memory amounts = new uint256[](1);
amounts[0] = amountToUnstake;
amounts[0] = amountToUnstake;
uint256[] memory requestIds = withdrawalQueue.requestWithdrawals(amounts, address(this));
uint256[] memory requestIds = withdrawalQueue.requestWithdrawals(amounts, address(this));
emit UnstakeStETHStarted(requestIds[0]);
emit UnstakeStETHStarted(requestIds[0]);
}
}
function _claimStEth(uint256 _requestId, uint256 _hint) internal {
function _claimStEth(uint256 _requestId, uint256 _hint) internal {
uint256[] memory requestIds = new uint256[](1);
uint256[] memory requestIds = new uint256[](1);
uint256[] memory hints = new uint256[](1);
uint256[] memory hints = new uint256[](1);
requestIds[0] = _requestId;
requestIds[0] = _requestId;
hints[0] = _hint;
hints[0] = _hint;
withdrawalQueue.claimWithdrawalsTo(requestIds, hints, address(this));
withdrawalQueue.claimWithdrawalsTo(requestIds, hints, address(this));
}
}
}
}
Copia
Copiato
Copia
Copiato
Diff salvati
Testo originale
Apri file
// SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.21; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; interface ILidoWithdrawalQueue { function requestWithdrawals( uint256[] calldata _amounts, address _owner ) external returns (uint256[] memory requestIds); /// Usage: findCheckpointHints(_requestIds, 1, getLastCheckpointIndex()) function findCheckpointHints( uint256[] calldata _requestIds, uint256 _firstIndex, uint256 _lastIndex ) external view returns (uint256[] memory hintIds); function getLastCheckpointIndex() external view returns (uint256); function claimWithdrawalsTo( uint256[] calldata _requestIds, uint256[] calldata _hints, address _recipient ) external; function finalize(uint256 _lastRequestIdToBeFinalized, uint256 _maxShareRate) external payable; function getLastRequestId() external view returns (uint256); } abstract contract UnstakeStETH is Initializable { ILidoWithdrawalQueue public withdrawalQueue; IERC20 public stETH; event UnstakeStETHStarted(uint256 tokenId); function __initializeStETH(address _withdrawalQueue, address _stETHAddress) internal onlyInitializing { withdrawalQueue = ILidoWithdrawalQueue(_withdrawalQueue); stETH = IERC20(_stETHAddress); } function _unstakeStEth(uint256 amountToUnstake) internal { stETH.approve(address(withdrawalQueue), amountToUnstake); uint256[] memory amounts = new uint256[](1); amounts[0] = amountToUnstake; uint256[] memory requestIds = withdrawalQueue.requestWithdrawals(amounts, address(this)); emit UnstakeStETHStarted(requestIds[0]); } function _claimStEth(uint256 _requestId, uint256 _hint) internal { uint256[] memory requestIds = new uint256[](1); uint256[] memory hints = new uint256[](1); requestIds[0] = _requestId; hints[0] = _hint; withdrawalQueue.claimWithdrawalsTo(requestIds, hints, address(this)); } }
Testo modificato
Apri file
// SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.27; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; interface ILidoWithdrawalQueue { function requestWithdrawals( uint256[] calldata _amounts, address _owner ) external returns (uint256[] memory requestIds); /// Usage: findCheckpointHints(_requestIds, 1, getLastCheckpointIndex()) function findCheckpointHints( uint256[] calldata _requestIds, uint256 _firstIndex, uint256 _lastIndex ) external view returns (uint256[] memory hintIds); function getLastCheckpointIndex() external view returns (uint256); function claimWithdrawalsTo(uint256[] calldata _requestIds, uint256[] calldata _hints, address _recipient) external; function finalize(uint256 _lastRequestIdToBeFinalized, uint256 _maxShareRate) external payable; function getLastRequestId() external view returns (uint256); } /// @dev Upgradeable base contract without storage gaps; adding variables in upgrades can collide with inheritors. abstract contract UnstakeStETH is Initializable { using SafeERC20 for IERC20; ILidoWithdrawalQueue public withdrawalQueue; IERC20 public stETH; event UnstakeStETHStarted(uint256 tokenId); function __initializeStETH(address _withdrawalQueue, address _stETHAddress) internal onlyInitializing { withdrawalQueue = ILidoWithdrawalQueue(_withdrawalQueue); stETH = IERC20(_stETHAddress); } function _unstakeStEth(uint256 amountToUnstake) internal { stETH.safeIncreaseAllowance(address(withdrawalQueue), amountToUnstake); uint256[] memory amounts = new uint256[](1); amounts[0] = amountToUnstake; uint256[] memory requestIds = withdrawalQueue.requestWithdrawals(amounts, address(this)); emit UnstakeStETHStarted(requestIds[0]); } function _claimStEth(uint256 _requestId, uint256 _hint) internal { uint256[] memory requestIds = new uint256[](1); uint256[] memory hints = new uint256[](1); requestIds[0] = _requestId; hints[0] = _hint; withdrawalQueue.claimWithdrawalsTo(requestIds, hints, address(this)); } }
Trovare la differenza