Add stake management function to ERC4337Utils (#5471)

This commit is contained in:
Hadrien Croubois
2025-01-31 16:35:57 +01:00
committed by GitHub
parent 840c974028
commit 828dbc357c
4 changed files with 106 additions and 5 deletions

View File

@ -3,7 +3,7 @@
pragma solidity ^0.8.20;
import {PackedUserOperation} from "../../interfaces/draft-IERC4337.sol";
import {IEntryPoint, PackedUserOperation} from "../../interfaces/draft-IERC4337.sol";
import {Math} from "../../utils/math/Math.sol";
import {Calldata} from "../../utils/Calldata.sol";
import {Packing} from "../../utils/Packing.sol";
@ -16,6 +16,9 @@ import {Packing} from "../../utils/Packing.sol";
library ERC4337Utils {
using Packing for *;
/// @dev Address of the entrypoint v0.7.0
IEntryPoint internal constant ENTRYPOINT = IEntryPoint(0x0000000071727De22E5E9d8BAf0edAc6f37da032);
/// @dev For simulation purposes, validateUserOp (and validatePaymasterUserOp) return this value on success.
uint256 internal constant SIG_VALIDATION_SUCCESS = 0;
@ -160,4 +163,29 @@ library ERC4337Utils {
function paymasterData(PackedUserOperation calldata self) internal pure returns (bytes calldata) {
return self.paymasterAndData.length < 52 ? Calldata.emptyBytes() : self.paymasterAndData[52:];
}
/// @dev Deposit ether into the entrypoint.
function depositTo(address to, uint256 value) internal {
ENTRYPOINT.depositTo{value: value}(to);
}
/// @dev Withdraw ether from the entrypoint.
function withdrawTo(address payable to, uint256 value) internal {
ENTRYPOINT.withdrawTo(to, value);
}
/// @dev Add stake to the entrypoint.
function addStake(uint256 value, uint32 unstakeDelaySec) internal {
ENTRYPOINT.addStake{value: value}(unstakeDelaySec);
}
/// @dev Unlock stake on the entrypoint.
function unlockStake() internal {
ENTRYPOINT.unlockStake();
}
/// @dev Withdraw unlocked stake from the entrypoint.
function withdrawStake(address payable to) internal {
ENTRYPOINT.withdrawStake(to);
}
}