Branch data Line data Source code
1 : : // SPDX-License-Identifier: BUSL-1.1
2 : : pragma solidity ^0.8.10;
3 : :
4 : : import {Pool} from './Pool.sol';
5 : : import {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';
6 : : import {IL2Pool} from '../../interfaces/IL2Pool.sol';
7 : : import {CalldataLogic} from '../libraries/logic/CalldataLogic.sol';
8 : :
9 : : /**
10 : : * @title L2Pool
11 : : * @author Aave
12 : : * @notice Calldata optimized extension of the Pool contract allowing users to pass compact calldata representation
13 : : * to reduce transaction costs on rollups.
14 : : */
15 : : abstract contract L2Pool is Pool, IL2Pool {
16 : : /// @inheritdoc IL2Pool
17 : : function supply(bytes32 args) external override {
18 : 7 : (address asset, uint256 amount, uint16 referralCode) = CalldataLogic.decodeSupplyParams(
19 : : _reservesList,
20 : : args
21 : : );
22 : :
23 : 7 : supply(asset, amount, msg.sender, referralCode);
24 : : }
25 : :
26 : : /// @inheritdoc IL2Pool
27 : : function supplyWithPermit(bytes32 args, bytes32 r, bytes32 s) external override {
28 : 1000 : (address asset, uint256 amount, uint16 referralCode, uint256 deadline, uint8 v) = CalldataLogic
29 : : .decodeSupplyWithPermitParams(_reservesList, args);
30 : :
31 : 1000 : supplyWithPermit(asset, amount, msg.sender, referralCode, deadline, v, r, s);
32 : : }
33 : :
34 : : /// @inheritdoc IL2Pool
35 : : function withdraw(bytes32 args) external override returns (uint256) {
36 : 2 : (address asset, uint256 amount) = CalldataLogic.decodeWithdrawParams(_reservesList, args);
37 : :
38 : 2 : return withdraw(asset, amount, msg.sender);
39 : : }
40 : :
41 : : /// @inheritdoc IL2Pool
42 : : function borrow(bytes32 args) external override {
43 : 3 : (address asset, uint256 amount, uint256 interestRateMode, uint16 referralCode) = CalldataLogic
44 : : .decodeBorrowParams(_reservesList, args);
45 : :
46 : 3 : borrow(asset, amount, interestRateMode, referralCode, msg.sender);
47 : : }
48 : :
49 : : /// @inheritdoc IL2Pool
50 : : function repay(bytes32 args) external override returns (uint256) {
51 : 1 : (address asset, uint256 amount, uint256 interestRateMode) = CalldataLogic.decodeRepayParams(
52 : : _reservesList,
53 : : args
54 : : );
55 : :
56 : 1 : return repay(asset, amount, interestRateMode, msg.sender);
57 : : }
58 : :
59 : : /// @inheritdoc IL2Pool
60 : : function repayWithPermit(bytes32 args, bytes32 r, bytes32 s) external override returns (uint256) {
61 : 1000 : (
62 : : address asset,
63 : : uint256 amount,
64 : : uint256 interestRateMode,
65 : : uint256 deadline,
66 : : uint8 v
67 : 1000 : ) = CalldataLogic.decodeRepayWithPermitParams(_reservesList, args);
68 : :
69 : 1000 : return repayWithPermit(asset, amount, interestRateMode, msg.sender, deadline, v, r, s);
70 : : }
71 : :
72 : : /// @inheritdoc IL2Pool
73 : : function repayWithATokens(bytes32 args) external override returns (uint256) {
74 : 1 : (address asset, uint256 amount, uint256 interestRateMode) = CalldataLogic.decodeRepayParams(
75 : : _reservesList,
76 : : args
77 : : );
78 : :
79 : 1 : return repayWithATokens(asset, amount, interestRateMode);
80 : : }
81 : :
82 : : /// @inheritdoc IL2Pool
83 : : function setUserUseReserveAsCollateral(bytes32 args) external override {
84 : 1 : (address asset, bool useAsCollateral) = CalldataLogic.decodeSetUserUseReserveAsCollateralParams(
85 : : _reservesList,
86 : : args
87 : : );
88 : 1 : setUserUseReserveAsCollateral(asset, useAsCollateral);
89 : : }
90 : :
91 : : /// @inheritdoc IL2Pool
92 : : function liquidationCall(bytes32 args1, bytes32 args2) external override {
93 : 1 : (
94 : : address collateralAsset,
95 : : address debtAsset,
96 : : address user,
97 : : uint256 debtToCover,
98 : : bool receiveAToken
99 : 1 : ) = CalldataLogic.decodeLiquidationCallParams(_reservesList, args1, args2);
100 : 1 : liquidationCall(collateralAsset, debtAsset, user, debtToCover, receiveAToken);
101 : : }
102 : : }
|