Skip to content

Commit dd23301

Browse files
committed
Updated CCIP chainlink to use the unified interface
1 parent 346468a commit dd23301

File tree

2 files changed

+41
-60
lines changed

2 files changed

+41
-60
lines changed

src/interface/ICrosschain.sol

Lines changed: 0 additions & 52 deletions
This file was deleted.

src/module/token/crosschain/chainlink.sol

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ import {Role} from "../../../Role.sol";
77

88
import {IERC20} from "../../../interface/IERC20.sol";
99
import {IInstallationCallback} from "../../../interface/IInstallationCallback.sol";
10+
import {CrossChain} from "./CrossChain.sol";
1011
import {OwnableRoles} from "@solady/auth/OwnableRoles.sol";
1112

13+
import {CCIPReceiver} from "@chainlink/ccip/applications/CCIPReceiver.sol";
1214
import {IRouterClient} from "@chainlink/ccip/interfaces/IRouterClient.sol";
1315
import {Client} from "@chainlink/ccip/libraries/Client.sol";
1416

@@ -33,10 +35,12 @@ library ChainlinkCrossChainStorage {
3335

3436
}
3537

36-
contract ChainlinkCrossChain is Module {
38+
contract ChainlinkCrossChain is Module, CrossChain, CCIPReceiver {
3739

3840
error NotEnoughBalance(uint256 currentBalance, uint256 calculatedFees);
3941

42+
constructor(address _router, address _link) CCIPReceiver(_router) {}
43+
4044
/*//////////////////////////////////////////////////////////////
4145
MODULE CONFIG
4246
//////////////////////////////////////////////////////////////*/
@@ -85,15 +89,15 @@ contract ChainlinkCrossChain is Module {
8589
FALLBACK FUNCTIONS
8690
//////////////////////////////////////////////////////////////*/
8791

88-
function getRouter() external view returns (address) {
92+
function getRouter() public view override(CrossChain, CCIPReceiver) returns (address) {
8993
return _chainlinkCrossChainStorage().router;
9094
}
9195

9296
function getLinkToken() external view returns (address) {
9397
return _chainlinkCrossChainStorage().linkToken;
9498
}
9599

96-
function setRouter(address router) external {
100+
function setRouter(address router) external override {
97101
_chainlinkCrossChainStorage().router = router;
98102
}
99103

@@ -104,13 +108,16 @@ contract ChainlinkCrossChain is Module {
104108
function sendCrossChainTransaction(
105109
uint64 _destinationChain,
106110
address _callAddress,
107-
address _recipient,
108-
address _token,
109-
uint256 _amount,
110111
bytes calldata _data,
111112
bytes calldata _extraArgs
112-
) external {
113-
(address _feeTokenAddress, bytes memory ccipMessageExtraArgs) = abi.decode(_extraArgs, (address, bytes));
113+
) external payable override {
114+
(
115+
address _recipient,
116+
address _token,
117+
uint256 _amount,
118+
address _feeTokenAddress,
119+
bytes memory ccipMessageExtraArgs
120+
) = abi.decode(_extraArgs, (address, address, uint256, address, bytes));
114121

115122
if (_feeTokenAddress == address(0)) {
116123
_sendMessagePayNative(_destinationChain, _recipient, _data, _token, _amount, ccipMessageExtraArgs);
@@ -119,12 +126,32 @@ contract ChainlinkCrossChain is Module {
119126
_destinationChain, _recipient, _data, _token, _amount, _feeTokenAddress, ccipMessageExtraArgs
120127
);
121128
}
129+
130+
onCrossChainTransactionSent(_destinationChain, _callAddress, _data, _extraArgs);
122131
}
123132

124133
/*//////////////////////////////////////////////////////////////
125134
INTERNAL FUNCTIONS
126135
//////////////////////////////////////////////////////////////*/
127136

137+
function onCrossChainTransactionSent(
138+
uint64 _destinationChain,
139+
address _callAddress,
140+
bytes calldata _payload,
141+
bytes calldata _extraArgs
142+
) internal override {
143+
/// post cross chain transaction sent logic goes here
144+
}
145+
146+
function onCrossChainTransactionReceived(
147+
uint64 _sourceChain,
148+
address _sourceAddress,
149+
bytes memory _payload,
150+
bytes memory _extraArgs
151+
) internal override {
152+
/// post cross chain transaction received logic goes here
153+
}
154+
128155
function _sendMessagePayToken(
129156
uint64 _destinationChain,
130157
address _recipient,
@@ -190,6 +217,12 @@ contract ChainlinkCrossChain is Module {
190217
});
191218
}
192219

220+
function _ccipReceive(Client.Any2EVMMessage memory message) internal override {
221+
address sender = abi.decode(message.sender, (address));
222+
bytes memory payload = "";
223+
onCrossChainTransactionReceived(message.sourceChainSelector, sender, message.data, payload);
224+
}
225+
193226
function _chainlinkCrossChainStorage() internal pure returns (ChainlinkCrossChainStorage.Data storage) {
194227
return ChainlinkCrossChainStorage.data();
195228
}

0 commit comments

Comments
 (0)