100 lines
2.4 KiB
Solidity
100 lines
2.4 KiB
Solidity
|
// SPDX-License-Identifier: MIT
|
||
|
|
||
|
pragma solidity >=0.8.9;
|
||
|
|
||
|
import "./SwapBase.sol";
|
||
|
|
||
|
contract BridgeSwap is SwapBase {
|
||
|
function bridgeWithSwapNative(
|
||
|
address _receiver,
|
||
|
uint256 _amountIn,
|
||
|
uint64 _dstChainId,
|
||
|
address _srcBridgeToken,
|
||
|
SwapInfoDest calldata _dstSwap,
|
||
|
uint32 _maxBridgeSlippage
|
||
|
) external payable {
|
||
|
uint256 _fee = _deriveFeeAndPerformChecksNative(
|
||
|
_amountIn,
|
||
|
_dstChainId,
|
||
|
_dstSwap.integrator,
|
||
|
_srcBridgeToken
|
||
|
);
|
||
|
|
||
|
_sendBridgeMessage(
|
||
|
_receiver,
|
||
|
_dstChainId,
|
||
|
_srcBridgeToken,
|
||
|
_dstSwap,
|
||
|
_maxBridgeSlippage,
|
||
|
_fee,
|
||
|
_amountIn
|
||
|
);
|
||
|
}
|
||
|
|
||
|
function bridgeWithSwap(
|
||
|
address _receiver,
|
||
|
uint256 _amountIn,
|
||
|
uint64 _dstChainId,
|
||
|
address _srcBridgeToken,
|
||
|
SwapInfoDest calldata _dstSwap,
|
||
|
uint32 _maxBridgeSlippage
|
||
|
) external payable {
|
||
|
uint256 _fee = _deriveFeeAndPerformChecks(
|
||
|
_amountIn,
|
||
|
_dstChainId,
|
||
|
_dstSwap.integrator,
|
||
|
_srcBridgeToken
|
||
|
);
|
||
|
|
||
|
_sendBridgeMessage(
|
||
|
_receiver,
|
||
|
_dstChainId,
|
||
|
_srcBridgeToken,
|
||
|
_dstSwap,
|
||
|
_maxBridgeSlippage,
|
||
|
_fee,
|
||
|
_amountIn
|
||
|
);
|
||
|
}
|
||
|
|
||
|
function _sendBridgeMessage(
|
||
|
address _receiver,
|
||
|
uint64 _dstChainId,
|
||
|
address _srcBridgeToken,
|
||
|
SwapInfoDest calldata _dstSwap,
|
||
|
uint32 _maxBridgeSlippage,
|
||
|
uint256 _fee,
|
||
|
uint256 _amountIn
|
||
|
) private {
|
||
|
BaseCrossChainParams memory _baseParams = BaseCrossChainParams(
|
||
|
_srcBridgeToken,
|
||
|
_amountIn,
|
||
|
_dstChainId,
|
||
|
_retrieveDstTokenAddress(_dstSwap),
|
||
|
_dstSwap.amountOutMinimum,
|
||
|
_dstSwap.receiverEOA,
|
||
|
_dstSwap.integrator,
|
||
|
address(0)
|
||
|
);
|
||
|
|
||
|
require(
|
||
|
_baseParams.dstChainID != uint64(block.chainid),
|
||
|
"same chain id"
|
||
|
);
|
||
|
|
||
|
bytes32 id = _sendMessage(
|
||
|
_receiver,
|
||
|
uint64(_baseParams.dstChainID),
|
||
|
_dstSwap,
|
||
|
_maxBridgeSlippage,
|
||
|
_beforeSwapAndSendMessage(),
|
||
|
_fee,
|
||
|
_baseParams.srcInputToken,
|
||
|
_baseParams.srcInputAmount,
|
||
|
true
|
||
|
);
|
||
|
|
||
|
emit CrossChainRequestSent(id, _baseParams);
|
||
|
}
|
||
|
}
|