@@ -18,13 +18,12 @@ import { ICCTPLike } from "./interfaces/CCTPInterfaces.sol";
1818import { IRateLimits } from "./interfaces/IRateLimits.sol " ;
1919import { IPendleMarket } from "./interfaces/PendleInterfaces.sol " ;
2020
21- import { CentrifugeLib } from "./libraries/CentrifugeLib.sol " ;
22- import { CurveLib } from "./libraries/CurveLib.sol " ;
23- import { MerklLib } from "./libraries/MerklLib.sol " ;
24- import { PendleLib } from "./libraries/PendleLib.sol " ;
25- import { CCTPLib } from "./libraries/CCTPLib.sol " ;
26- import { ERC20Lib } from "./libraries/common/ERC20Lib.sol " ;
27- import { UniswapV3Lib } from "./libraries/UniswapV3Lib.sol " ;
21+ import { CurveLib } from "./libraries/CurveLib.sol " ;
22+ import { MerklLib } from "./libraries/MerklLib.sol " ;
23+ import { PendleLib } from "./libraries/PendleLib.sol " ;
24+ import { CCTPLib } from "./libraries/CCTPLib.sol " ;
25+ import { ERC20Lib } from "./libraries/common/ERC20Lib.sol " ;
26+ import { UniswapV3Lib } from "./libraries/UniswapV3Lib.sol " ;
2827
2928import { ISwapRouter, INonfungiblePositionManager } from "./interfaces/UniswapV3Interfaces.sol " ;
3029import { ICentrifugeV3VaultLike, IAsyncRedeemManagerLike, ISpokeLike } from "./interfaces/CentrifugeInterfaces.sol " ;
@@ -616,15 +615,34 @@ contract ForeignController is AccessControl {
616615 external payable
617616 {
618617 _checkRole (RELAYER);
619- CentrifugeLib.transferSharesCentrifuge (CentrifugeLib.CentrifugeTransferParams ({
620- proxy : proxy,
621- rateLimits : rateLimits,
622- token : token,
623- amount : amount,
624- recipient : centrifugeRecipients[destinationCentrifugeId],
625- destinationCentrifugeId : destinationCentrifugeId,
626- rateLimitId : LIMIT_CENTRIFUGE_TRANSFER
627- }));
618+ _rateLimited (
619+ keccak256 (abi.encode (LIMIT_CENTRIFUGE_TRANSFER, token, destinationCentrifugeId)),
620+ amount
621+ );
622+
623+ bytes32 recipient = centrifugeRecipients[destinationCentrifugeId];
624+ require (recipient != 0 , "FC/id-not-configured " );
625+
626+ ICentrifugeV3VaultLike centrifugeVault = ICentrifugeV3VaultLike (token);
627+
628+ address spoke = IAsyncRedeemManagerLike (centrifugeVault.manager ()).spoke ();
629+
630+ // Initiate cross-chain transfer via the specific spoke address
631+ proxy.doCallWithValue {value: msg .value }(
632+ spoke,
633+ abi.encodeCall (
634+ ISpokeLike (spoke).crosschainTransferShares,
635+ (
636+ destinationCentrifugeId,
637+ centrifugeVault.poolId (),
638+ centrifugeVault.scId (),
639+ recipient,
640+ amount,
641+ 0
642+ )
643+ ),
644+ msg .value
645+ );
628646 }
629647
630648 /**********************************************************************************************/
0 commit comments