@@ -75,6 +75,12 @@ abstract contract ERC4626StataTokenUpgradeable is ERC4626Upgradeable, IERC4626St
75
75
76
76
///@inheritdoc IERC4626StataToken
77
77
function depositATokens (uint256 assets , address receiver ) external returns (uint256 ) {
78
+ // because aToken is rebasable, we allow user to specify more then he has to compensate growth during the tx mining
79
+ uint256 actualUserBalance = IERC20 (aToken ()).balanceOf (_msgSender ());
80
+ if (assets > actualUserBalance) {
81
+ assets = actualUserBalance;
82
+ }
83
+
78
84
uint256 shares = previewDeposit (assets);
79
85
_deposit (_msgSender (), receiver, assets, shares, false );
80
86
@@ -89,14 +95,27 @@ abstract contract ERC4626StataTokenUpgradeable is ERC4626Upgradeable, IERC4626St
89
95
SignatureParams memory sig ,
90
96
bool depositToAave
91
97
) external returns (uint256 ) {
92
- IERC20Permit assetToDeposit = IERC20Permit (
93
- depositToAave ? asset () : address (_getERC4626StataTokenStorage ()._aToken)
94
- );
98
+ address assetToDeposit = depositToAave ? asset () : aToken ();
95
99
96
100
try
97
- assetToDeposit.permit (_msgSender (), address (this ), assets, deadline, sig.v, sig.r, sig.s)
101
+ IERC20Permit (assetToDeposit).permit (
102
+ _msgSender (),
103
+ address (this ),
104
+ assets,
105
+ deadline,
106
+ sig.v,
107
+ sig.r,
108
+ sig.s
109
+ )
98
110
{} catch {}
99
111
112
+ // because aToken is rebasable, we allow user to specify more then he has to compensate growth during the tx mining
113
+ // to make it consistent, we keep the same behaviour for the normal underlying too
114
+ uint256 actualUserBalance = IERC20 (assetToDeposit).balanceOf (_msgSender ());
115
+ if (assets > actualUserBalance) {
116
+ assets = actualUserBalance;
117
+ }
118
+
100
119
uint256 shares = previewDeposit (assets);
101
120
_deposit (_msgSender (), receiver, assets, shares, depositToAave);
102
121
return shares;
0 commit comments