// SPDX-License-Identifier: MIT
pragma solidity 0.8.13;
contract ChainXBridge {
address public cold;
uint64 public chainId;
uint64 public nonce;
event SwapOut(
bytes32 swapId,
uint64 fromChainId,
uint64 toChainId,
address sender,
string receiver,
uint256 amount,
uint256 estGas
);
modifier autoIncreaseNonce() {
nonce = nonce + 1;
_;
}
constructor(
address _cold,
uint64 _chainId
){
require(_cold != address(0), "InvalidCold");
require(_chainId != 0, "InvalidChainId");
cold = _cold;
chainId = _chainId;
nonce = 0;
}
function swap_out(
bytes32 swapID,
uint64 toChainId,
string calldata receiver,
uint256 amount,
uint256 estGas
) external payable autoIncreaseNonce {
require((cold != address(0)), "InvalidCold");
require(msg.value == amount, "ValueErr");
uint256 old_balance = cold.balance;
(bool sent, ) = payable(cold).call{value: amount}("");
require(sent, "Failed to send Ether");
uint256 new_balance = cold.balance;
require(new_balance > old_balance && new_balance == old_balance + amount, "Unexpect");
emit SwapOut(
swapID,
chainId,
toChainId,
msg.sender,
receiver,
amount,
estGas
);
}
}
{
"compilationTarget": {
"ChainXBridge.sol": "ChainXBridge"
},
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
}
[{"inputs":[{"internalType":"address","name":"_cold","type":"address"},{"internalType":"uint64","name":"_chainId","type":"uint64"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"swapId","type":"bytes32"},{"indexed":false,"internalType":"uint64","name":"fromChainId","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"toChainId","type":"uint64"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"string","name":"receiver","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"estGas","type":"uint256"}],"name":"SwapOut","type":"event"},{"inputs":[],"name":"chainId","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cold","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nonce","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"swapID","type":"bytes32"},{"internalType":"uint64","name":"toChainId","type":"uint64"},{"internalType":"string","name":"receiver","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"estGas","type":"uint256"}],"name":"swap_out","outputs":[],"stateMutability":"payable","type":"function"}]