@@ -20,8 +20,7 @@ import { IALMProxy } from "./interfaces/IALMProxy.sol";
2020import { ICCTPLike } from "./interfaces/CCTPInterfaces.sol " ;
2121import { IRateLimits } from "./interfaces/IRateLimits.sol " ;
2222
23- import "./interfaces/CentrifugeInterfaces.sol " ;
24- import "./interfaces/ILayerZero.sol " ;
23+ import "./interfaces/ILayerZero.sol " ;
2524
2625import { OptionsBuilder } from "layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol " ;
2726
@@ -31,6 +30,15 @@ interface IATokenWithPool is IAToken {
3130 function POOL () external view returns (address );
3231}
3332
33+ interface ICentrifugeToken is IERC7540 {
34+ function cancelDepositRequest (uint256 requestId , address controller ) external ;
35+ function cancelRedeemRequest (uint256 requestId , address controller ) external ;
36+ function claimCancelDepositRequest (uint256 requestId , address receiver , address controller )
37+ external returns (uint256 assets );
38+ function claimCancelRedeemRequest (uint256 requestId , address receiver , address controller )
39+ external returns (uint256 shares );
40+ }
41+
3442contract ForeignController is AccessControl {
3543
3644 using OptionsBuilder for bytes ;
@@ -47,8 +55,6 @@ contract ForeignController is AccessControl {
4755 uint256 usdcAmount
4856 );
4957
50- event CentrifugeRecipientSet (uint16 indexed centrifugeId , bytes32 recipient );
51-
5258 event LayerZeroRecipientSet (uint32 indexed destinationEndpointId , bytes32 layerZeroRecipient );
5359
5460 event MintRecipientSet (uint32 indexed destinationDomain , bytes32 mintRecipient );
@@ -62,19 +68,17 @@ contract ForeignController is AccessControl {
6268 bytes32 public constant FREEZER = keccak256 ("FREEZER " );
6369 bytes32 public constant RELAYER = keccak256 ("RELAYER " );
6470
65- bytes32 public constant LIMIT_4626_DEPOSIT = keccak256 ("LIMIT_4626_DEPOSIT " );
66- bytes32 public constant LIMIT_4626_WITHDRAW = keccak256 ("LIMIT_4626_WITHDRAW " );
67- bytes32 public constant LIMIT_7540_DEPOSIT = keccak256 ("LIMIT_7540_DEPOSIT " );
68- bytes32 public constant LIMIT_7540_REDEEM = keccak256 ("LIMIT_7540_REDEEM " );
69- bytes32 public constant LIMIT_AAVE_DEPOSIT = keccak256 ("LIMIT_AAVE_DEPOSIT " );
70- bytes32 public constant LIMIT_AAVE_WITHDRAW = keccak256 ("LIMIT_AAVE_WITHDRAW " );
71- bytes32 public constant LIMIT_ASSET_TRANSFER = keccak256 ("LIMIT_ASSET_TRANSFER " );
72- bytes32 public constant LIMIT_CENTRIFUGE_TRANSFER = keccak256 ("LIMIT_CENTRIFUGE_TRANSFER " );
73- bytes32 public constant LIMIT_LAYERZERO_TRANSFER = keccak256 ("LIMIT_LAYERZERO_TRANSFER " );
74- bytes32 public constant LIMIT_PSM_DEPOSIT = keccak256 ("LIMIT_PSM_DEPOSIT " );
75- bytes32 public constant LIMIT_PSM_WITHDRAW = keccak256 ("LIMIT_PSM_WITHDRAW " );
76- bytes32 public constant LIMIT_USDC_TO_CCTP = keccak256 ("LIMIT_USDC_TO_CCTP " );
77- bytes32 public constant LIMIT_USDC_TO_DOMAIN = keccak256 ("LIMIT_USDC_TO_DOMAIN " );
71+ bytes32 public constant LIMIT_4626_DEPOSIT = keccak256 ("LIMIT_4626_DEPOSIT " );
72+ bytes32 public constant LIMIT_4626_WITHDRAW = keccak256 ("LIMIT_4626_WITHDRAW " );
73+ bytes32 public constant LIMIT_7540_DEPOSIT = keccak256 ("LIMIT_7540_DEPOSIT " );
74+ bytes32 public constant LIMIT_7540_REDEEM = keccak256 ("LIMIT_7540_REDEEM " );
75+ bytes32 public constant LIMIT_AAVE_DEPOSIT = keccak256 ("LIMIT_AAVE_DEPOSIT " );
76+ bytes32 public constant LIMIT_AAVE_WITHDRAW = keccak256 ("LIMIT_AAVE_WITHDRAW " );
77+ bytes32 public constant LIMIT_LAYERZERO_TRANSFER = keccak256 ("LIMIT_LAYERZERO_TRANSFER " );
78+ bytes32 public constant LIMIT_PSM_DEPOSIT = keccak256 ("LIMIT_PSM_DEPOSIT " );
79+ bytes32 public constant LIMIT_PSM_WITHDRAW = keccak256 ("LIMIT_PSM_WITHDRAW " );
80+ bytes32 public constant LIMIT_USDC_TO_CCTP = keccak256 ("LIMIT_USDC_TO_CCTP " );
81+ bytes32 public constant LIMIT_USDC_TO_DOMAIN = keccak256 ("LIMIT_USDC_TO_DOMAIN " );
7882
7983 uint256 internal constant CENTRIFUGE_REQUEST_ID = 0 ;
8084
@@ -87,7 +91,6 @@ contract ForeignController is AccessControl {
8791
8892 mapping (uint32 destinationDomain = > bytes32 mintRecipient ) public mintRecipients;
8993 mapping (uint32 destinationEndpointId = > bytes32 layerZeroRecipient ) public layerZeroRecipients;
90- mapping (uint16 centrifugeId = > bytes32 recipient ) public centrifugeRecipients;
9194
9295 /**********************************************************************************************/
9396 /*** Initialization ***/
@@ -152,14 +155,6 @@ contract ForeignController is AccessControl {
152155 emit LayerZeroRecipientSet (destinationEndpointId, layerZeroRecipient);
153156 }
154157
155- function setCentrifugeRecipient (uint16 centrifugeId , bytes32 recipient )
156- external
157- onlyRole (DEFAULT_ADMIN_ROLE)
158- {
159- centrifugeRecipients[centrifugeId] = recipient;
160- emit CentrifugeRecipientSet (centrifugeId, recipient);
161- }
162-
163158 /**********************************************************************************************/
164159 /*** Freezer functions ***/
165160 /**********************************************************************************************/
@@ -497,45 +492,6 @@ contract ForeignController is AccessControl {
497492 );
498493 }
499494
500- function transferSharesCentrifuge (
501- address token ,
502- uint128 amount ,
503- uint16 destinationCentrifugeId ,
504- uint128 remoteExtraGasLimit
505- )
506- external payable
507- {
508- _checkRole (RELAYER);
509- _rateLimited (
510- keccak256 (abi.encode (LIMIT_CENTRIFUGE_TRANSFER, token, destinationCentrifugeId)),
511- amount
512- );
513-
514- bytes32 recipient = centrifugeRecipients[destinationCentrifugeId];
515- require (recipient != 0 , "MainnetController/centrifuge-id-not-configured " );
516-
517- ICentrifugeV3VaultLike centrifugeVault = ICentrifugeV3VaultLike (token);
518-
519- address spoke = IAsyncRedeemManagerLike (centrifugeVault.manager ()).spoke ();
520-
521- // Initiate cross-chain transfer via the specific spoke address
522- proxy.doCallWithValue {value: msg .value }(
523- spoke,
524- abi.encodeCall (
525- ISpokeLike (spoke).crosschainTransferShares,
526- (
527- destinationCentrifugeId,
528- centrifugeVault.poolId (),
529- centrifugeVault.scId (),
530- recipient,
531- amount,
532- remoteExtraGasLimit
533- )
534- ),
535- msg .value
536- );
537- }
538-
539495 /**********************************************************************************************/
540496 /*** Relayer Aave functions ***/
541497 /**********************************************************************************************/
0 commit comments