@@ -3,9 +3,9 @@ pragma solidity ^0.8.13;
33
44import {IMorpho, MarketParams} from "../interfaces/IMorpho.sol " ;
55import {IERC20 } from "openzeppelin-contracts/contracts/token/ERC20/IERC20.sol " ;
6- import {SignetStd} from "../SignetStd.sol " ;
6+ import {SafeERC20} from "openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol " ;
7+ import {SignetL2} from "../l2/Signet.sol " ;
78import {RollupOrders} from "zenith/src/orders/RollupOrders.sol " ;
8- import {Passage} from "zenith/src/passage/Passage.sol " ;
99
1010// How this works:
1111// - The Signet Orders system calls `transferFrom` and check for the presence
@@ -38,68 +38,70 @@ import {Passage} from "zenith/src/passage/Passage.sol";
3838
3939// The Rollup contract creates orders to interact with Morpho on host net via
4040// the shortcut.
41- contract UseMorpho is SignetStd {
41+ contract UseMorpho is SignetL2 {
42+ using SafeERC20 for IERC20 ;
43+
4244 /// @dev Address of the shortcut on the host chain.
43- address immutable repayShortcut ;
44- address immutable supplyShortcut ;
45- address immutable borrowShortcut ;
45+ address immutable REPAY_SHORTCUT ;
46+ address immutable SUPPLY_SHORTCUT ;
47+ address immutable BORROW_SHORTCUT ;
4648
47- address immutable hostLoanToken ;
48- address immutable hostCollateralToken ;
49+ address immutable HOST_LOAN_TOKEN ;
50+ address immutable HOST_COLLATERAL_TOKEN ;
4951
50- IERC20 immutable ruLoanToken ;
51- IERC20 immutable ruCollateralToken ;
52+ IERC20 immutable RU_LOAN_TOKEN ;
53+ IERC20 immutable RU_COLLATERAL_TOKEN ;
5254
5355 constructor (address _repayShortcut , address _supplyShortcut , address _hostLoan , address _hostCollateral )
54- SignetStd ()
56+ SignetL2 ()
5557 {
56- repayShortcut = _repayShortcut;
57- supplyShortcut = _supplyShortcut;
58+ REPAY_SHORTCUT = _repayShortcut;
59+ SUPPLY_SHORTCUT = _supplyShortcut;
5860
5961 // Autodetect rollup tokens based on token addresses on host network.
60- hostLoanToken = _hostLoan;
61- hostCollateralToken = _hostCollateral;
62+ HOST_LOAN_TOKEN = _hostLoan;
63+ HOST_COLLATERAL_TOKEN = _hostCollateral;
6264 if (_hostLoan == HOST_WETH) {
63- ruLoanToken = WETH;
65+ RU_LOAN_TOKEN = WETH;
6466 } else if (_hostLoan == HOST_WBTC) {
65- ruLoanToken = WBTC;
67+ RU_LOAN_TOKEN = WBTC;
6668 } else if (_hostLoan == HOST_USDC || _hostLoan == HOST_USDT) {
67- ruLoanToken = WUSD;
69+ RU_LOAN_TOKEN = WUSD;
6870 } else {
6971 revert ("Unsupported loan token " );
7072 }
7173 if (_hostCollateral == HOST_WETH) {
72- ruCollateralToken = WETH;
74+ RU_COLLATERAL_TOKEN = WETH;
7375 } else if (_hostCollateral == HOST_WBTC) {
74- ruCollateralToken = WBTC;
76+ RU_COLLATERAL_TOKEN = WBTC;
7577 } else if (_hostCollateral == HOST_USDC || _hostCollateral == HOST_USDT) {
76- ruCollateralToken = WUSD;
78+ RU_COLLATERAL_TOKEN = WUSD;
7779 } else {
7880 revert ("Unsupported collateral token " );
7981 }
8082
8183 // Pre-emptively approve the Orders contract to spend our tokens.
82- ruLoanToken .approve (address (ORDERS), type (uint256 ).max);
83- ruCollateralToken .approve (address (ORDERS), type (uint256 ).max);
84+ RU_LOAN_TOKEN .approve (address (ORDERS), type (uint256 ).max);
85+ RU_COLLATERAL_TOKEN .approve (address (ORDERS), type (uint256 ).max);
8486 }
8587
8688 // Supply some amount of the collateral token on behalf of the user.
8789 function supplyCollateral (address onBehalf , uint256 amount ) public {
8890 if (amount > 0 ) {
89- ruCollateralToken. transferFrom (msg .sender , address (this ), amount);
91+ RU_COLLATERAL_TOKEN. safeTransferFrom (msg .sender , address (this ), amount);
9092 }
9193
9294 // the amount is whatever our current balance is
93- amount = ruCollateralToken .balanceOf (address (this ));
95+ amount = RU_COLLATERAL_TOKEN .balanceOf (address (this ));
9496
9597 RollupOrders.Input[] memory inputs = new RollupOrders.Input [](1 );
96- inputs[0 ] = makeInput (address (ruCollateralToken ), amount);
98+ inputs[0 ] = makeInput (address (RU_COLLATERAL_TOKEN ), amount);
9799
98100 // The first output pays the collateral token to the shortcut.
99101 // The second output calls the shortcut to supply the collateral.
100102 RollupOrders.Output[] memory outputs = new RollupOrders.Output [](2 );
101- outputs[0 ] = makeHostOutput (address (hostCollateralToken ), amount, supplyShortcut );
102- outputs[1 ] = makeHostOutput (supplyShortcut , amount, onBehalf);
103+ outputs[0 ] = makeHostOutput (address (HOST_COLLATERAL_TOKEN ), amount, SUPPLY_SHORTCUT );
104+ outputs[1 ] = makeHostOutput (SUPPLY_SHORTCUT , amount, onBehalf);
103105
104106 ORDERS.initiate (
105107 block .timestamp , // no deadline
@@ -111,20 +113,20 @@ contract UseMorpho is SignetStd {
111113 // Repay some amount of the loan token on behalf of the user.
112114 function repay (address onBehalf , uint256 amount ) public {
113115 if (amount > 0 ) {
114- ruLoanToken. transferFrom (msg .sender , address (this ), amount);
116+ RU_LOAN_TOKEN. safeTransferFrom (msg .sender , address (this ), amount);
115117 }
116118
117119 // Send all tokens.
118- amount = ruLoanToken .balanceOf (address (this ));
120+ amount = RU_LOAN_TOKEN .balanceOf (address (this ));
119121
120122 RollupOrders.Input[] memory inputs = new RollupOrders.Input [](1 );
121- inputs[0 ] = makeInput (address (ruLoanToken ), amount);
123+ inputs[0 ] = makeInput (address (RU_LOAN_TOKEN ), amount);
122124
123125 // The first output pays the loan token to the shortcut.
124126 // The second output calls the shortcut to repay the loan.
125127 RollupOrders.Output[] memory outputs = new RollupOrders.Output [](2 );
126- outputs[0 ] = makeHostOutput (address (hostLoanToken ), amount, repayShortcut );
127- outputs[1 ] = makeHostOutput (repayShortcut , amount, onBehalf);
128+ outputs[0 ] = makeHostOutput (address (HOST_LOAN_TOKEN ), amount, REPAY_SHORTCUT );
129+ outputs[1 ] = makeHostOutput (REPAY_SHORTCUT , amount, onBehalf);
128130
129131 ORDERS.initiate (
130132 block .timestamp , // no deadline
@@ -140,8 +142,8 @@ contract UseMorpho is SignetStd {
140142 // The first output calls the shortcut to borrow the loan.
141143 // The second output sends the loan token to the user on the rollup.
142144 RollupOrders.Output[] memory outputs = new RollupOrders.Output [](2 );
143- outputs[0 ] = makeHostOutput (borrowShortcut , amount, onBehalf);
144- outputs[1 ] = makeRollupOutput (address (ruLoanToken ), amount, msg .sender );
145+ outputs[0 ] = makeHostOutput (BORROW_SHORTCUT , amount, onBehalf);
146+ outputs[1 ] = makeRollupOutput (address (RU_LOAN_TOKEN ), amount, msg .sender );
145147
146148 ORDERS.initiate (
147149 block .timestamp , // no deadline
@@ -160,29 +162,29 @@ contract UseMorpho is SignetStd {
160162}
161163
162164abstract contract HostMorphoUser {
163- IMorpho immutable morpho ;
165+ IMorpho immutable MORPHO ;
164166
165167 // This is an unrolled MarketParams struct.
166- IERC20 immutable loanToken ;
167- IERC20 immutable collateralToken ;
168+ IERC20 immutable LOAN_TOKEN ;
169+ IERC20 immutable COLLATERAL_TOKEN ;
168170
169- address immutable oracle ;
170- address immutable irm ;
171- uint256 immutable lltv ;
171+ address immutable ORACLE ;
172+ address immutable IRM ;
173+ uint256 immutable LLTV ;
172174
173175 error InsufficentTokensReceived (uint256 received , uint256 required );
174176
175177 constructor (IMorpho _morpho , MarketParams memory _params ) {
176- morpho = _morpho;
178+ MORPHO = _morpho;
177179
178- loanToken = IERC20 (_params.loanToken);
179- collateralToken = IERC20 (_params.collateralToken);
180- oracle = _params.oracle;
181- irm = _params.irm;
182- lltv = _params.lltv;
180+ LOAN_TOKEN = IERC20 (_params.loanToken);
181+ COLLATERAL_TOKEN = IERC20 (_params.collateralToken);
182+ ORACLE = _params.oracle;
183+ IRM = _params.irm;
184+ LLTV = _params.lltv;
183185
184- loanToken .approve (address (_morpho), type (uint256 ).max);
185- collateralToken .approve (address (_morpho), type (uint256 ).max);
186+ LOAN_TOKEN .approve (address (_morpho), type (uint256 ).max);
187+ COLLATERAL_TOKEN .approve (address (_morpho), type (uint256 ).max);
186188 }
187189
188190 function checkReceived (uint256 received , uint256 required ) internal pure {
@@ -192,11 +194,11 @@ abstract contract HostMorphoUser {
192194 }
193195
194196 function loadParams () internal view returns (MarketParams memory params ) {
195- params.loanToken = address (loanToken );
196- params.collateralToken = address (collateralToken );
197- params.oracle = oracle ;
198- params.irm = irm ;
199- params.lltv = lltv ;
197+ params.loanToken = address (LOAN_TOKEN );
198+ params.collateralToken = address (COLLATERAL_TOKEN );
199+ params.oracle = ORACLE ;
200+ params.irm = IRM ;
201+ params.lltv = LLTV ;
200202 }
201203}
202204
@@ -208,9 +210,9 @@ contract HostMorphoRepay is HostMorphoUser {
208210 /// Uses the ERC20 transferFrom interface to invoke contract logic. This
209211 /// allows us to invoke logic from the Orders contract
210212 function transferFrom (address , address recipient , uint256 amount ) external returns (bool ) {
211- uint256 loanTokenBalance = loanToken .balanceOf (address (this ));
213+ uint256 loanTokenBalance = LOAN_TOKEN .balanceOf (address (this ));
212214 checkReceived (loanTokenBalance, amount);
213- morpho .repay (loadParams (), loanTokenBalance, 0 , recipient, "" );
215+ MORPHO .repay (loadParams (), loanTokenBalance, 0 , recipient, "" );
214216 return true ;
215217 }
216218}
@@ -221,11 +223,11 @@ contract HostMorphoSupply is HostMorphoUser {
221223 /// Uses the ERC20 transferFrom interface to invoke contract logic. This
222224 /// allows us to invoke logic from the Orders contract
223225 function transferFrom (address , address recipient , uint256 amount ) external returns (bool ) {
224- uint256 collateralTokenBalance = collateralToken .balanceOf (address (this ));
226+ uint256 collateralTokenBalance = COLLATERAL_TOKEN .balanceOf (address (this ));
225227
226228 checkReceived (collateralTokenBalance, amount);
227229
228- morpho .supplyCollateral (loadParams (), collateralTokenBalance, recipient, "" );
230+ MORPHO .supplyCollateral (loadParams (), collateralTokenBalance, recipient, "" );
229231
230232 // Future extension:
231233 // borrow some amount of loanToken
@@ -245,7 +247,7 @@ contract HosyMorphoBorrow is HostMorphoUser {
245247
246248 function transferFrom (address filler , address onBehalf , uint256 amount ) external returns (bool ) {
247249 // borrow some amount of loanToken
248- morpho .borrow (loadParams (), amount, 0 , onBehalf, address (this ));
250+ MORPHO .borrow (loadParams (), amount, 0 , onBehalf, address (this ));
249251
250252 // User logic to use the tokens goes here.
251253 // Could send the tokens to the rollup via Passage, or do something
0 commit comments