@@ -9,6 +9,7 @@ import "starkware/solidity/libraries/Transfers.sol";
99import "starkware/solidity/tokens/ERC20/IERC20.sol " ;
1010import "starkware/solidity/tokens/ERC20/IERC20Metadata.sol " ;
1111import "starkware/starknet/solidity/IStarknetMessaging.sol " ;
12+ import "src/solidity/ERC2771Recipient.sol " ;
1213import "src/solidity/Fees.sol " ;
1314import "src/solidity/IStarkgateBridge.sol " ;
1415import "src/solidity/IStarkgateManager.sol " ;
@@ -25,7 +26,8 @@ contract StarknetTokenBridge is
2526 IStarkgateService ,
2627 Identity ,
2728 StarknetTokenStorage ,
28- ProxySupport
29+ ProxySupport ,
30+ ERC2771Recipient
2931{
3032 using Addresses for address ;
3133 using Felt252 for string ;
@@ -125,7 +127,7 @@ contract StarknetTokenBridge is
125127 }
126128
127129 modifier onlyManager () {
128- require (manager () == msg . sender , "ONLY_MANAGER " );
130+ require (manager () == _msgSender () , "ONLY_MANAGER " );
129131 _;
130132 }
131133
@@ -152,7 +154,7 @@ contract StarknetTokenBridge is
152154 Fees.checkDepositFee (msg .value );
153155 uint256 currentBalance = IERC20 (token).balanceOf (address (this ));
154156 require (currentBalance + amount <= getMaxTotalBalance (token), "MAX_BALANCE_EXCEEDED " );
155- Transfers.transferIn (token, msg . sender , amount);
157+ Transfers.transferIn (token, _msgSender () , amount);
156158 return msg .value ;
157159 }
158160
@@ -320,10 +322,10 @@ contract StarknetTokenBridge is
320322 uint256 fee
321323 ) internal {
322324 if (selector == HANDLE_TOKEN_DEPOSIT_SELECTOR) {
323- emit Deposit (msg . sender , token, amount, l2Recipient, nonce, fee);
325+ emit Deposit (_msgSender () , token, amount, l2Recipient, nonce, fee);
324326 } else {
325327 require (selector == HANDLE_DEPOSIT_WITH_MESSAGE_SELECTOR, "UNKNOWN_SELECTOR " );
326- emit DepositWithMessage (msg . sender , token, amount, l2Recipient, message, nonce, fee);
328+ emit DepositWithMessage (_msgSender () , token, amount, l2Recipient, message, nonce, fee);
327329 }
328330 }
329331
@@ -339,15 +341,15 @@ contract StarknetTokenBridge is
339341 */
340342 function enableWithdrawalLimit (address token ) external onlySecurityAgent {
341343 tokenSettings ()[token].withdrawalLimitApplied = true ;
342- emit WithdrawalLimitEnabled (msg . sender , token);
344+ emit WithdrawalLimitEnabled (_msgSender () , token);
343345 }
344346
345347 /**
346348 Unset withdrawal limit for a token.
347349 */
348350 function disableWithdrawalLimit (address token ) external onlySecurityAdmin {
349351 tokenSettings ()[token].withdrawalLimitApplied = false ;
350- emit WithdrawalLimitDisabled (msg . sender , token);
352+ emit WithdrawalLimitDisabled (_msgSender () , token);
351353 }
352354
353355 /**
@@ -397,7 +399,7 @@ contract StarknetTokenBridge is
397399 : N_DEPOSIT_PAYLOAD_ARGS;
398400 uint256 [] memory payload = new uint256 [](MESSAGE_OFFSET + message.length );
399401 payload[0 ] = uint256 (uint160 (token));
400- payload[1 ] = uint256 (uint160 (msg . sender ));
402+ payload[1 ] = uint256 (uint160 (_msgSender () ));
401403 payload[2 ] = l2Recipient;
402404 payload[3 ] = amount & (UINT256_PART_SIZE - 1 );
403405 payload[4 ] = amount >> UINT256_PART_SIZE_BITS;
@@ -499,7 +501,7 @@ contract StarknetTokenBridge is
499501 }
500502
501503 function withdraw (address token , uint256 amount ) external {
502- withdraw (token, amount, msg . sender );
504+ withdraw (token, amount, _msgSender () );
503505 }
504506
505507 /*
@@ -525,7 +527,7 @@ contract StarknetTokenBridge is
525527 nonce
526528 );
527529
528- emit DepositCancelRequest (msg . sender , token, amount, l2Recipient, nonce);
530+ emit DepositCancelRequest (_msgSender () , token, amount, l2Recipient, nonce);
529531 }
530532
531533 /*
@@ -552,7 +554,7 @@ contract StarknetTokenBridge is
552554 );
553555
554556 emit DepositWithMessageCancelRequest (
555- msg . sender ,
557+ _msgSender () ,
556558 token,
557559 amount,
558560 l2Recipient,
@@ -581,8 +583,8 @@ contract StarknetTokenBridge is
581583 nonce
582584 );
583585
584- transferOutFunds (token, amount, msg . sender );
585- emit DepositWithMessageReclaimed (msg . sender , token, amount, l2Recipient, message, nonce);
586+ transferOutFunds (token, amount, _msgSender () );
587+ emit DepositWithMessageReclaimed (_msgSender () , token, amount, l2Recipient, message, nonce);
586588 }
587589
588590 function depositReclaim (
@@ -598,7 +600,18 @@ contract StarknetTokenBridge is
598600 nonce
599601 );
600602
601- transferOutFunds (token, amount, msg .sender );
602- emit DepositReclaimed (msg .sender , token, amount, l2Recipient, nonce);
603+ transferOutFunds (token, amount, _msgSender ());
604+ emit DepositReclaimed (_msgSender (), token, amount, l2Recipient, nonce);
605+ }
606+
607+
608+ // EIP2771 related functions
609+
610+ function setTrustedForwarder (address _forwarder ) public onlyManager {
611+ _setTrustedForwarder (_forwarder);
612+ }
613+
614+ function versionRecipient () external view override returns (string memory ) {
615+ return "1 " ;
603616 }
604617}
0 commit comments