df8039f494
new file: Interchain-message/.eslintrc.js new file: Interchain-message/.gitignore new file: Interchain-message/.prettierrc new file: Interchain-message/.solhint.json new file: Interchain-message/.solhintignore new file: Interchain-message/contracts/interfaces/IBridge.sol new file: Interchain-message/contracts/interfaces/IMessageBus.sol new file: Interchain-message/contracts/interfaces/IMessageReceiverApp.sol new file: Interchain-message/contracts/interfaces/IUniswapRouterV3.sol new file: Interchain-message/contracts/interfaces/IWETH.sol new file: Interchain-message/contracts/message/apps/BridgeSwap.sol new file: Interchain-message/contracts/message/apps/RubicRouterV2.sol new file: Interchain-message/contracts/message/apps/RubicRouterV2ETH.sol new file: Interchain-message/contracts/message/apps/SwapBase.sol new file: Interchain-message/contracts/message/apps/TransferSwapInch.sol new file: Interchain-message/contracts/message/apps/TransferSwapV2.sol new file: Interchain-message/contracts/message/apps/TransferSwapV3.sol new file: Interchain-message/contracts/message/framework/MessageReceiverApp.sol new file: Interchain-message/contracts/message/framework/MessageSenderApp.sol new file: Interchain-message/contracts/message/libraries/MessageSenderLib.sol new file: Interchain-message/contracts/message/libraries/MsgDataTypes.sol new file: Interchain-message/contracts/test/MessageBusSender.sol new file: Interchain-message/contracts/test/TestERC20.sol new file: Interchain-message/contracts/test/TestMessages.sol new file: Interchain-message/contracts/test/WETH9.sol new file: Interchain-message/deployments/Readme.md new file: Interchain-message/executor/config/cbridge.toml new file: Interchain-message/executor/config/executor.toml new file: Interchain-message/executor/eth-ks/signer.json new file: Interchain-message/hardhat.config.ts new file: Interchain-message/package-lock.json new file: Interchain-message/package.json new file: Interchain-message/reports/contract_sizes.txt new file: Interchain-message/reports/gas_usage/summary.txt new file: Interchain-message/scripts/deploy/deploy.js new file: Interchain-message/scripts/deploy/deployAVAX.ts new file: Interchain-message/scripts/deploy/deployArbitrum.ts new file: Interchain-message/scripts/deploy/deployAurora.ts new file: Interchain-message/scripts/deploy/deployBSC.ts new file: Interchain-message/scripts/deploy/deployEth.ts new file: Interchain-message/scripts/deploy/deployFantom.ts new file: Interchain-message/scripts/deploy/deployPoly.ts new file: Interchain-message/scripts/privateKey.js new file: Interchain-message/scripts/sendTx/avaxToFantomBridge.js new file: Interchain-message/scripts/sendTx/avaxToFantomNativeV2.js new file: Interchain-message/test/RubicCrossChainBridge.spec.ts new file: Interchain-message/test/RubicCrossChainV2.spec.ts new file: Interchain-message/test/RubicCrossChainV3.spec.ts new file: Interchain-message/test/RubicFallback.spec.ts new file: Interchain-message/test/RubicSettings.spec.ts new file: Interchain-message/test/shared/consts.ts new file: Interchain-message/test/shared/fixtures.ts new file: Interchain-message/test/shared/utils.ts new file: Interchain-message/tsconfig.json deleted: Rubic-Inter-chain-Message-develop.zip deleted: proxy-instant-trades-master.zip deleted: rubic-app-master.zip deleted: rubic-sdk-master.zip
118 lines
4.4 KiB
Solidity
118 lines
4.4 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
|
|
pragma solidity >=0.8.9;
|
|
|
|
import "rubic-bridge-base/contracts/libraries/SmartApprove.sol";
|
|
|
|
import "../../interfaces/IBridge.sol";
|
|
import "../../interfaces/IMessageBus.sol";
|
|
|
|
import "./MsgDataTypes.sol";
|
|
|
|
library MessageSenderLib {
|
|
// ============== Internal library functions called by apps ==============
|
|
|
|
/**
|
|
* @notice Sends a message associated with a transfer to a contract on another chain.
|
|
* @param _receiver The address of the destination app contract.
|
|
* @param _token The address of the token to be sent.
|
|
* @param _amount The amount of tokens to be sent.
|
|
* @param _dstChainId The destination chain ID.
|
|
* @param _nonce A number input to guarantee uniqueness of transferId. Can be timestamp in practice.
|
|
* @param _maxSlippage The max slippage accepted, given as percentage in point (pip). Eg. 5000 means 0.5%.
|
|
* Must be greater than minimalMaxSlippage. Receiver is guaranteed to receive at least
|
|
* (100% - max slippage percentage) * amount or the transfer can be refunded.
|
|
* Only applicable to the {MsgDataTypes.BridgeSendType.Liquidity}.
|
|
* @param _message Arbitrary message bytes to be decoded by the destination app contract.
|
|
* If message is empty, only the token transfer will be sent
|
|
* param _bridgeSendType One of the {MsgDataTypes.BridgeSendType} enum.
|
|
* @param _messageBus The address of the MessageBus on this chain.
|
|
* @param _fee The fee amount to pay to MessageBus.
|
|
* @return The transfer ID.
|
|
*/
|
|
function sendMessageWithTransfer(
|
|
address _receiver,
|
|
address _token,
|
|
uint256 _amount,
|
|
uint64 _dstChainId,
|
|
uint64 _nonce,
|
|
uint32 _maxSlippage,
|
|
bytes memory _message,
|
|
address _messageBus,
|
|
uint256 _fee
|
|
) internal returns (bytes32) {
|
|
return
|
|
sendMessageWithLiquidityBridgeTransfer(
|
|
_receiver,
|
|
_token,
|
|
_amount,
|
|
_dstChainId,
|
|
_nonce,
|
|
_maxSlippage,
|
|
_message,
|
|
_messageBus,
|
|
_fee
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @notice Sends a message to an app on another chain via MessageBus with an associated liquidity bridge transfer.
|
|
* @param _receiver The address of the destination app contract.
|
|
* @param _token The address of the token to be sent.
|
|
* @param _amount The amount of tokens to be sent.
|
|
* @param _dstChainId The destination chain ID.
|
|
* @param _nonce A number input to guarantee uniqueness of transferId. Can be timestamp in practice.
|
|
* @param _maxSlippage The max slippage accepted, given as percentage in point (pip). Eg. 5000 means 0.5%.
|
|
* Must be greater than minimalMaxSlippage. Receiver is guaranteed to receive at least
|
|
* (100% - max slippage percentage) * amount or the transfer can be refunded.
|
|
* @param _message Arbitrary message bytes to be decoded by the destination app contract.
|
|
* If message is empty, only the token transfer will be sent
|
|
* @param _messageBus The address of the MessageBus on this chain.
|
|
* @param _fee The fee amount to pay to MessageBus.
|
|
* @return The transfer ID.
|
|
*/
|
|
function sendMessageWithLiquidityBridgeTransfer(
|
|
address _receiver,
|
|
address _token,
|
|
uint256 _amount,
|
|
uint64 _dstChainId,
|
|
uint64 _nonce,
|
|
uint32 _maxSlippage,
|
|
bytes memory _message,
|
|
address _messageBus,
|
|
uint256 _fee
|
|
) internal returns (bytes32) {
|
|
address bridge = IMessageBus(_messageBus).liquidityBridge();
|
|
SmartApprove.smartApprove(_token, _amount, bridge);
|
|
IBridge(bridge).send(
|
|
_receiver,
|
|
_token,
|
|
_amount,
|
|
_dstChainId,
|
|
_nonce,
|
|
_maxSlippage
|
|
);
|
|
bytes32 transferId = keccak256(
|
|
abi.encodePacked(
|
|
address(this),
|
|
_receiver,
|
|
_token,
|
|
_amount,
|
|
_dstChainId,
|
|
_nonce,
|
|
uint64(block.chainid)
|
|
)
|
|
);
|
|
if (_message.length > 0) {
|
|
IMessageBus(_messageBus).sendMessageWithTransfer{value: _fee}(
|
|
_receiver,
|
|
_dstChainId,
|
|
bridge,
|
|
transferId,
|
|
_message
|
|
);
|
|
}
|
|
return transferId;
|
|
}
|
|
}
|