Source Code
Latest 25 from a total of 23,414 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Multi Swap Token... | 12910993 | 106 days ago | IN | 0 GLMR | 0.01126806 | ||||
| Multi Swap Token... | 12903074 | 106 days ago | IN | 0 GLMR | 0.0111645 | ||||
| Multi Swap Token... | 12902646 | 106 days ago | IN | 0 GLMR | 0.01126806 | ||||
| Multi Swap Token... | 12886680 | 108 days ago | IN | 0 GLMR | 0.0111645 | ||||
| Multi Swap Token... | 12871066 | 109 days ago | IN | 0 GLMR | 0.0111565 | ||||
| Multi Swap Token... | 12869501 | 109 days ago | IN | 0 GLMR | 0.0111645 | ||||
| Multi Swap Token... | 12860493 | 110 days ago | IN | 0 GLMR | 0.0111645 | ||||
| Multi Swap Token... | 12856773 | 110 days ago | IN | 0 GLMR | 0.0111645 | ||||
| Multi Swap Eth F... | 12855824 | 110 days ago | IN | 2 GLMR | 0.01098625 | ||||
| Multi Swap Eth F... | 12854398 | 110 days ago | IN | 638 GLMR | 0.01099425 | ||||
| Multi Swap Eth F... | 12854388 | 110 days ago | IN | 500 GLMR | 0.01099425 | ||||
| Multi Swap Eth F... | 12854377 | 110 days ago | IN | 500 GLMR | 0.01099425 | ||||
| Multi Swap Eth F... | 12848665 | 111 days ago | IN | 0.2 GLMR | 0.00624835 | ||||
| Multi Swap Token... | 12845815 | 111 days ago | IN | 0 GLMR | 0.0111645 | ||||
| Multi Swap Eth F... | 12831411 | 112 days ago | IN | 2 GLMR | 0.01098625 | ||||
| Multi Swap Token... | 12830338 | 112 days ago | IN | 0 GLMR | 0.02657275 | ||||
| Multi Swap Token... | 12804788 | 114 days ago | IN | 0 GLMR | 0.0111645 | ||||
| Multi Swap Eth F... | 12800050 | 115 days ago | IN | 2 GLMR | 0.01098625 | ||||
| Multi Swap Eth F... | 12772317 | 117 days ago | IN | 3 GLMR | 0.01098625 | ||||
| Multi Swap Token... | 12769461 | 117 days ago | IN | 0 GLMR | 0.01213827 | ||||
| Multi Swap Token... | 12766673 | 118 days ago | IN | 0 GLMR | 0.0125555 | ||||
| Multi Swap Token... | 12746367 | 119 days ago | IN | 0 GLMR | 0.01105875 | ||||
| Multi Swap Token... | 12746332 | 119 days ago | IN | 0 GLMR | 0.0125555 | ||||
| Multi Swap Token... | 12728319 | 121 days ago | IN | 0 GLMR | 0.0111645 | ||||
| Multi Swap Token... | 12723035 | 121 days ago | IN | 0 GLMR | 0.01178126 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 12910993 | 106 days ago | 21.54472968 GLMR | ||||
| 12910993 | 106 days ago | 21.54472968 GLMR | ||||
| 12903074 | 106 days ago | 52.89146216 GLMR | ||||
| 12903074 | 106 days ago | 52.89146216 GLMR | ||||
| 12902646 | 106 days ago | 6.26892222 GLMR | ||||
| 12902646 | 106 days ago | 6.26892222 GLMR | ||||
| 12886680 | 108 days ago | 325.99124708 GLMR | ||||
| 12886680 | 108 days ago | 325.99124708 GLMR | ||||
| 12871066 | 109 days ago | 53.79040244 GLMR | ||||
| 12871066 | 109 days ago | 53.79040244 GLMR | ||||
| 12869501 | 109 days ago | 16.0057665 GLMR | ||||
| 12869501 | 109 days ago | 16.0057665 GLMR | ||||
| 12860493 | 110 days ago | 415.34491503 GLMR | ||||
| 12860493 | 110 days ago | 415.34491503 GLMR | ||||
| 12856773 | 110 days ago | 69.81480725 GLMR | ||||
| 12856773 | 110 days ago | 69.81480725 GLMR | ||||
| 12855824 | 110 days ago | 2 GLMR | ||||
| 12854398 | 110 days ago | 638 GLMR | ||||
| 12854388 | 110 days ago | 500 GLMR | ||||
| 12854377 | 110 days ago | 500 GLMR | ||||
| 12848665 | 111 days ago | 0.2 GLMR | ||||
| 12845815 | 111 days ago | 12.12965369 GLMR | ||||
| 12845815 | 111 days ago | 12.12965369 GLMR | ||||
| 12831411 | 112 days ago | 2 GLMR | ||||
| 12804788 | 114 days ago | 1,071.82575049 GLMR |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BeamswapHybridRouter
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 1000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
import "@openzeppelin/contracts/access/Ownable.sol";
import {IWETH} from "./interface/IWETH.sol";
import {IEERC20} from "./interface/IEERC20.sol";
import {IBeamswapExectuor} from "./interface/IBeamswapExectuor.sol";
import {BeamswapTypes} from "./BeamswapTypes.sol";
import "../interfaces/IBeamswapV3Pool.sol";
import "./libraries/TransferHelper.sol";
error BEAMSWAP_AmountOutLow();
error BEAMSWAP_Expired();
error BEAMSWAP_Paused();
error BEAMSWAP_BadFeeOrder();
error BEAMSWAP_FeeTooHigh();
error BEAMSWAP_AddressZero();
error BEAMSWAP_AmountOutMinZero();
error BEAMSWAP_SwapDataZero();
error BEAMSWAP_EthTransferFailed();
contract BeamswapHybridRouter is Ownable, BeamswapTypes {
address private _feeDeposit;
uint256 private _minFee = 5;
uint256 private _maxFee = 10;
uint256 private _stableFee = 2;
uint256 private constant feeCap = 200;
address public immutable WETH;
IBeamswapExectuor public _executor;
bool private _feeOn = true;
bool private _paused;
mapping(address => bool) internal isStable;
constructor(address WETH_, address executor_) {
_feeDeposit = msg.sender;
WETH = WETH_;
_executor = IBeamswapExectuor(executor_);
isStable[0x931715FEE2d06333043d11F658C8CE934aC61D0c] = true;
isStable[0xCa01a1D0993565291051daFF390892518ACfAD3A] = true;
isStable[0xFFFFFFfFea09FB06d082fd1275CD48b191cbCD1d] = true;
}
modifier ensureDeadline(uint256 deadline) {
if (deadline < block.timestamp) revert BEAMSWAP_Expired();
_;
}
modifier notPaused() {
if (_paused) revert BEAMSWAP_Paused();
_;
}
event SendAdminFee(
address indexed token,
address indexed receiver,
uint256 feeAmount
);
event Swap(
address indexed tokenIn,
address indexed tokenOut,
address indexed receiver,
uint256 amountIn,
uint256 amountOut
);
/**
* @notice Upon completion of any swap, the executor contract will transfer its balance of `tokenOut` back
* to this contract, final balance checks will be completed, fees will be processed and the results of the
* swap will be transferred to the user.
*/
/**
* @notice Performs a multi-path swap using the network token as the principal input and tokens as the principal output.
* @param tokenOut Token to recieve after swap.
* @param to Address to recieve resulting amount of tokenOut tokens.
* @param amountOutMin Minimum amount of tokenOut to recieve, pre optimizer fee.
* @param deadline Deadline for executing the swap. The transaction will revert if blocktime exceeds `deadline`.
* @param swapData bytes package defining swap parameters for the executor contract.
*/
function multiSwapEthForTokens(
address tokenOut,
address to,
uint256 amountOutMin,
uint256 deadline,
bytes calldata swapData
)
external
payable
notPaused
ensureDeadline(deadline)
returns (uint256 netTokens, uint256 feeAmount)
{
if (amountOutMin == 0) revert BEAMSWAP_AmountOutMinZero();
if (swapData.length == 0) revert BEAMSWAP_SwapDataZero();
IWETH(WETH).deposit{value: msg.value}();
TransferHelper.safeTransfer(WETH, address(_executor), msg.value);
_executor.executeSplitSwap(
WETH,
tokenOut,
msg.value,
amountOutMin,
swapData
);
// Final balance checking
netTokens = IEERC20(tokenOut).balanceOf(address(this));
if (netTokens < amountOutMin) revert BEAMSWAP_AmountOutLow();
(feeAmount, netTokens) = _feeOn
? _sendAdminFee(tokenOut, netTokens, amountOutMin, swapData)
: (0, netTokens);
address receiver = to == address(0) ? msg.sender : to;
// Transfer tokens net fees to user.
TransferHelper.safeTransfer(tokenOut, receiver, netTokens);
emit Swap(WETH, tokenOut, receiver, msg.value, netTokens);
}
/**
* @notice Performs a multi-path swap using tokens as the principal input and ETH as the principal output.
* @param tokenIn Input token for swap.
* @param to Address to recieve resulting amount of tokenOut tokens.
* @param amountIn Amount of `tokenIn` tokens with which to initiate the swap.
* @param amountOutMin Minimum amount of tokenOut to recieve, pre optimizer fee.
* @param deadline Deadline for executing the swap. The transaction will revert if blocktime exceeds `deadline`.
* @param swapData bytes package defining swap parameters for the executor contract.
*/
function multiSwapTokensForEth(
address tokenIn,
address to,
uint256 amountIn,
uint256 amountOutMin,
uint256 deadline,
bytes calldata swapData
)
external
notPaused
ensureDeadline(deadline)
returns (uint256 netTokens, uint256 feeAmount)
{
if (amountOutMin == 0) revert BEAMSWAP_AmountOutMinZero();
if (swapData.length == 0) revert BEAMSWAP_SwapDataZero();
uint256 beforeDeposit = IEERC20(tokenIn).balanceOf(address(_executor));
// Initial transfer of tokens from user
TransferHelper.safeTransferFrom(
tokenIn,
msg.sender,
address(_executor),
amountIn
);
uint256 afterDeposit = IEERC20(tokenIn).balanceOf(address(_executor));
amountIn = afterDeposit - beforeDeposit;
_executor.executeSplitSwap(
tokenIn,
WETH,
amountIn,
amountOutMin,
swapData
);
// Final balance checking
netTokens = IEERC20(WETH).balanceOf(address(this));
if (netTokens < amountOutMin) revert BEAMSWAP_AmountOutLow();
(feeAmount, netTokens) = _feeOn
? _sendAdminFee(WETH, netTokens, amountOutMin, swapData)
: (0, netTokens);
address receiver = to == address(0) ? msg.sender : to;
IWETH(WETH).withdraw(netTokens);
_sendEth(receiver, netTokens);
emit Swap(tokenIn, WETH, receiver, amountIn, netTokens);
}
/**
* @notice Performs a multi-path swap using tokens as the principal input and tokens as the principal output.
* @param tokenIn Input token for swap.
* @param tokenOut Token to recieve after swap.
* @param to Address to recieve resulting amount of tokenOut tokens.
* @param amountIn Amount of `tokenIn` tokens with which to initiate the swap.
* @param amountOutMin Minimum amount of tokenOut to recieve, pre optimizer fee.
* @param deadline Deadline for executing the swap. The transaction will revert if blocktime exceeds `deadline`.
* @param swapData bytes package defining swap parameters for the executor contract.
*/
function multiSwapTokensForTokens(
address tokenIn,
address tokenOut,
address to,
uint256 amountIn,
uint256 amountOutMin,
uint256 deadline,
bytes calldata swapData
)
external
notPaused
ensureDeadline(deadline)
returns (uint256 netTokens, uint256 feeAmount)
{
if (amountOutMin == 0) revert BEAMSWAP_AmountOutMinZero();
if (swapData.length == 0) revert BEAMSWAP_SwapDataZero();
// Initial transfer of tokens from user
uint256 beforeDeposit = IEERC20(tokenIn).balanceOf(address(_executor));
// Initial transfer of tokens from user
TransferHelper.safeTransferFrom(
tokenIn,
msg.sender,
address(_executor),
amountIn
);
uint256 afterDeposit = IEERC20(tokenIn).balanceOf(address(_executor));
amountIn = afterDeposit - beforeDeposit;
_executor.executeSplitSwap(
tokenIn,
tokenOut,
amountIn,
amountOutMin,
swapData
);
// Final balance checking
netTokens = IEERC20(tokenOut).balanceOf(address(this));
if (netTokens < amountOutMin) revert BEAMSWAP_AmountOutLow();
(feeAmount, netTokens) = _feeOn
? _sendAdminFee(tokenOut, netTokens, amountOutMin, swapData)
: (0, netTokens);
address receiver = to == address(0) ? msg.sender : to;
// Transfer tokens net fees to user.
TransferHelper.safeTransfer(tokenOut, receiver, netTokens);
emit Swap(tokenIn, tokenOut, receiver, amountIn, netTokens);
}
// Fee is equal to half of the difference between netTokens and AmountOutMin, floored at _minFee
// and capped at _maxFee.
function getFee(
uint256 netTokens,
uint256 amountOutMin
) public view returns (uint256, uint256) {
return _getFee(netTokens, amountOutMin);
}
function _getFee(
uint256 netTokens,
uint256 amountOutMin
) internal view returns (uint256, uint256) {
uint256 amountDiff = netTokens - amountOutMin;
uint256 feePercent = (amountDiff * 10000) /
((amountOutMin + netTokens) / 2) /
2; // in bips
if (feePercent < _minFee) {
feePercent = _minFee;
} else if (feePercent > _maxFee) {
feePercent = _maxFee;
}
uint256 feeAmount = ((netTokens * feePercent) / 10000);
uint256 amountNetFee = netTokens - feeAmount;
return (feeAmount, amountNetFee);
}
function _getFeeStable(
uint256 netTokens
) internal view returns (uint256, uint256) {
uint256 feeAmount = ((netTokens * _stableFee) / 10000);
uint256 amountNetFee = netTokens - feeAmount;
return (feeAmount, amountNetFee);
}
function setExecutor(address newExecutor) external onlyOwner {
if (newExecutor == address(0)) revert BEAMSWAP_AddressZero();
_executor = IBeamswapExectuor(newExecutor);
}
function setFeeDeposit(address newFeeDeposit) external onlyOwner {
if (newFeeDeposit == address(0)) revert BEAMSWAP_AddressZero();
_feeDeposit = newFeeDeposit;
}
function setFees(
uint256 minFee_,
uint256 maxFee_,
uint256 stableFee_
) external onlyOwner {
if (minFee_ > maxFee_) revert BEAMSWAP_BadFeeOrder();
if (maxFee_ > feeCap) revert BEAMSWAP_FeeTooHigh();
if (stableFee_ > feeCap) revert BEAMSWAP_FeeTooHigh();
_minFee = minFee_;
_maxFee = maxFee_;
_stableFee = stableFee_;
}
function setFeeOn(bool state) external onlyOwner {
_feeOn = state;
}
function setPaused(bool state) external onlyOwner {
_paused = state;
}
function isPaused() external view returns (bool paused) {
paused = _paused;
}
function minFee() public view returns (uint256 fee) {
fee = _minFee;
}
function maxFee() public view returns (uint256 fee) {
fee = _maxFee;
}
function executor() public view returns (address executor) {
executor = address(_executor);
}
function feeDeposit() external view returns (address feeDeposit) {
feeDeposit = _feeDeposit;
}
function feeOn() public view returns (bool isFeeOn) {
isFeeOn = _feeOn;
}
function getStableToken(
address token
) external view returns (bool isStable_) {
isStable_ = isStable[token];
}
function setStableToken(address token, bool isStable_) external onlyOwner {
isStable[token] = isStable_;
}
function rescueTokens(address token, uint256 amount) external onlyOwner {
TransferHelper.safeTransfer(token, owner(), amount);
}
function rescueEth(uint256 amount) external onlyOwner {
_sendEth(owner(), amount);
}
function _sendAdminFee(
address token,
uint256 netTokens,
uint256 amountOutMin,
bytes calldata swapData
) internal returns (uint256 feeAmount, uint256 amountNetFee) {
bool stableFee = false; // checks if any swap path is using saddle stable
bool isStableToken = isStable[token]; // gas saving
if (isStableToken) {
SplitPaths[] memory splitPaths = abi.decode(
swapData,
(SplitPaths[])
);
uint length = splitPaths.length;
for (uint i; i < length; ) {
SplitPaths memory splitPath = splitPaths[i];
SwapDataWrapper[] memory wrappedSwapData = splitPath
.wrappedSwapData;
address[] memory pools = splitPath.pools;
uint256 len = pools.length;
for (uint j; j < len; ) {
SwapDataWrapper memory wrappedSwapData_ = wrappedSwapData[
j
];
if (wrappedSwapData_.swapType == SwapType.SaddleStable) {
stableFee = true; // if any swap path is using saddle stable then stableFee is true
break;
}
if (wrappedSwapData_.swapType == SwapType.UniV3) {
IBeamswapV3Pool v3Pool = IBeamswapV3Pool(pools[j]);
address token0 = v3Pool.token0();
address token1 = v3Pool.token1();
uint24 fee = v3Pool.fee();
if (
isStable[token0] &&
isStable[token1] &&
(fee == 500 || fee == 100)
) {
stableFee = true; //if both tokens are stable and fee tier is stable
break;
}
}
unchecked {
++j;
}
}
if (stableFee) {
break;
}
unchecked {
++i;
}
}
}
(feeAmount, amountNetFee) = !stableFee && !isStableToken
? _getFee(netTokens, amountOutMin)
: _getFeeStable(netTokens); // if token is stable and any swap path used saddle, then we charge stable fee
if (feeAmount > 0) {
TransferHelper.safeTransfer(token, _feeDeposit, feeAmount);
emit SendAdminFee(token, _feeDeposit, feeAmount);
}
}
function _sendEth(address to, uint256 value) private {
(bool success, ) = to.call{value: value}(new bytes(0));
if (!success) revert BEAMSWAP_EthTransferFailed();
}
receive() external payable {
assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
interface IBeamswapV3Pool {
function protocolFees()
external
view
returns (uint128 token0, uint128 token1);
function setLmPool(address lmPool) external;
function collectProtocol(
address recipient,
uint128 amount0Requested,
uint128 amount1Requested
) external returns (uint128 amount0, uint128 amount1);
function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external;
function token0() external view returns (address);
function token1() external view returns (address);
function fee() external view returns (uint24);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract BeamswapTypes {
enum SwapType {
None, //0 - implemented
K, //1 - implemented
SaddleStable, //2 - implemented
UniV3, //3 - implemented
Gmx //4 - implemented
}
struct SplitPaths {
uint256 amountIn;
address[] pools;
SwapDataWrapper[] wrappedSwapData;
}
struct SwapDataWrapper {
bytes swapData;
SwapType swapType; //? enum
}
struct PlainSwapData {
uint8 poolInPos; //1
uint8 poolOutPos; //
address tokenOut; //20
uint256 poolFee; //32
}
struct UniV3SwapData {
uint8 poolInPos; //1
uint8 poolOutPos; //
address tokenOut; //20
bytes callbackData;
}
struct GmxSwapData {
address tokenIn;
address tokenOut;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IBeamswapExectuor {
function executeSplitSwap(
address tokenIn,
address tokenOut,
uint256 amountIn,
uint256 amountOutMin,
bytes calldata swapData
) external;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IEERC20 {
event Approval(address, address, uint256);
event Transfer(address, address, uint256);
function name() external view returns (string memory);
function decimals() external view returns (uint8);
function transferFrom(address, address, uint256) external returns (bool);
function allowance(address, address) external view returns (uint256);
function approve(address, uint256) external returns (bool);
function transfer(address, uint256) external returns (bool);
function balanceOf(address) external view returns (uint256);
function nonces(address) external view returns (uint256); // Only tokens that support permit
function permit(
address,
address,
uint256,
uint256,
uint8,
bytes32,
bytes32
) external; // Only tokens that support permit
function swap(address, uint256) external; // Only Avalanche bridge tokens
function swapSupply(address) external view returns (uint256); // Only Avalanche bridge tokens
function totalSupply() external view returns (uint256);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IWETH {
function deposit() external payable;
function transfer(address to, uint value) external returns (bool);
function withdraw(uint) external;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
error THELP_ApproveFailed();
error THELP_TransferFailed();
error THELP_TransferFromFailed();
error THELP_EthTransferFailed();
library TransferHelper {
function safeApprove(address token, address to, uint value) internal {
// bytes4(keccak256(bytes('approve(address,uint256)')));
(bool success, bytes memory data) = token.call(
abi.encodeWithSelector(0x095ea7b3, to, value)
);
if (!success || !(data.length == 0 || abi.decode(data, (bool))))
revert THELP_ApproveFailed();
}
function safeTransfer(address token, address to, uint value) internal {
// bytes4(keccak256(bytes('transfer(address,uint256)')));
(bool success, bytes memory data) = token.call(
abi.encodeWithSelector(0xa9059cbb, to, value)
);
if (!success || !(data.length == 0 || abi.decode(data, (bool))))
revert THELP_TransferFailed();
}
function safeTransferFrom(
address token,
address from,
address to,
uint value
) internal {
// bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
(bool success, bytes memory data) = token.call(
abi.encodeWithSelector(0x23b872dd, from, to, value)
);
if (!success || !(data.length == 0 || abi.decode(data, (bool))))
revert THELP_TransferFromFailed();
}
function safeTransferETH(address to, uint value) internal {
(bool success, ) = to.call{value: value}(new bytes(0));
if (!success) revert THELP_EthTransferFailed();
}
}{
"optimizer": {
"enabled": true,
"runs": 1000
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"WETH_","type":"address"},{"internalType":"address","name":"executor_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BEAMSWAP_AddressZero","type":"error"},{"inputs":[],"name":"BEAMSWAP_AmountOutLow","type":"error"},{"inputs":[],"name":"BEAMSWAP_AmountOutMinZero","type":"error"},{"inputs":[],"name":"BEAMSWAP_BadFeeOrder","type":"error"},{"inputs":[],"name":"BEAMSWAP_EthTransferFailed","type":"error"},{"inputs":[],"name":"BEAMSWAP_Expired","type":"error"},{"inputs":[],"name":"BEAMSWAP_FeeTooHigh","type":"error"},{"inputs":[],"name":"BEAMSWAP_Paused","type":"error"},{"inputs":[],"name":"BEAMSWAP_SwapDataZero","type":"error"},{"inputs":[],"name":"THELP_TransferFailed","type":"error"},{"inputs":[],"name":"THELP_TransferFromFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"feeAmount","type":"uint256"}],"name":"SendAdminFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"Swap","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_executor","outputs":[{"internalType":"contract IBeamswapExectuor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"executor","outputs":[{"internalType":"address","name":"executor","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDeposit","outputs":[{"internalType":"address","name":"feeDeposit","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeOn","outputs":[{"internalType":"bool","name":"isFeeOn","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"netTokens","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"}],"name":"getFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getStableToken","outputs":[{"internalType":"bool","name":"isStable_","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"paused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFee","outputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minFee","outputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bytes","name":"swapData","type":"bytes"}],"name":"multiSwapEthForTokens","outputs":[{"internalType":"uint256","name":"netTokens","type":"uint256"},{"internalType":"uint256","name":"feeAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bytes","name":"swapData","type":"bytes"}],"name":"multiSwapTokensForEth","outputs":[{"internalType":"uint256","name":"netTokens","type":"uint256"},{"internalType":"uint256","name":"feeAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bytes","name":"swapData","type":"bytes"}],"name":"multiSwapTokensForTokens","outputs":[{"internalType":"uint256","name":"netTokens","type":"uint256"},{"internalType":"uint256","name":"feeAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newExecutor","type":"address"}],"name":"setExecutor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newFeeDeposit","type":"address"}],"name":"setFeeDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setFeeOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minFee_","type":"uint256"},{"internalType":"uint256","name":"maxFee_","type":"uint256"},{"internalType":"uint256","name":"stableFee_","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"bool","name":"isStable_","type":"bool"}],"name":"setStableToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60a060405260056002818155600a600355600455805460ff60a01b1916600160a01b1790553480156200003157600080fd5b50604051620028e2380380620028e28339810160408190526200005491620001a4565b6200005f3362000137565b600180546001600160a01b0319908116331782556001600160a01b03938416608052600580549390941692169190911790915560066020527fb90cb5ebb1e4d45d34bcbcc31f8cab1f522991c64aa2003bd190c2261e20fd1f805460ff1990811683179091557fc1aa3f7e4f448bf687821a78dea13d817896a3975a68e16e07850c939b900904805482168317905573ffffffffea09fb06d082fd1275cd48b191cbcd1d6000527f6f3e346997c8a08029bbdbdc0bd38c9b479d6ee67ee0d40e553a1f235e43569580549091169091179055620001dc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200019f57600080fd5b919050565b60008060408385031215620001b857600080fd5b620001c38362000187565b9150620001d36020840162000187565b90509250929050565b6080516126a46200023e6000396000818161019f0152818161040f015281816106d70152818161074c0152818161080201528181610879015281816108f3015281816110c7015281816111400152818161119a01526112ef01526126a46000f3fe60806040526004361061018f5760003560e01c80638da5cb5b116100d6578063c34c08e51161007f578063f2fde38b11610059578063f2fde38b146104ae578063fb1a746f146104ce578063fc4064b3146104ee57600080fd5b8063c34c08e514610450578063cec10c111461046e578063d250185c1461048e57600080fd5b8063abca7290116100b0578063abca7290146103df578063ad5c4648146103fd578063b187bd261461043157600080fd5b80638da5cb5b1461037a578063a9b1a08e146103ac578063aa014a45146103bf57600080fd5b80635535240c11610138578063739f08c811610112578063739f08c81461031a5780637a883d6e1461033a578063840f94981461035a57600080fd5b80635535240c146102ac57806357376198146102e5578063715018a61461030557600080fd5b80631c3c0ea8116101695780631c3c0ea81461024c57806324ec75901461026c5780634f335d0a1461028157600080fd5b806301f59d16146101d357806312a6a6d4146101f757806316c38b3c1461022c57600080fd5b366101ce57336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101cc576101cc611e3b565b005b600080fd5b3480156101df57600080fd5b506003545b6040519081526020015b60405180910390f35b34801561020357600080fd5b50610217610212366004611ea8565b61050e565b604080519283526020830191909152016101ee565b34801561023857600080fd5b506101cc610247366004611f3c565b610977565b34801561025857600080fd5b506101cc610267366004611f60565b610a0f565b34801561027857600080fd5b506002546101e4565b34801561028d57600080fd5b50600554600160a01b900460ff165b60405190151581526020016101ee565b3480156102b857600080fd5b5061029c6102c7366004611f60565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156102f157600080fd5b506101cc610300366004611f7d565b610abf565b34801561031157600080fd5b506101cc610b39565b34801561032657600080fd5b506101cc610335366004611fa9565b610b9f565b34801561034657600080fd5b506101cc610355366004611f60565b610c17565b34801561036657600080fd5b50610217610375366004611fc2565b610cc7565b34801561038657600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016101ee565b6102176103ba36600461205a565b611030565b3480156103cb57600080fd5b506101cc6103da3660046120d6565b611366565b3480156103eb57600080fd5b506001546001600160a01b0316610394565b34801561040957600080fd5b506103947f000000000000000000000000000000000000000000000000000000000000000081565b34801561043d57600080fd5b50600554600160a81b900460ff1661029c565b34801561045c57600080fd5b506005546001600160a01b0316610394565b34801561047a57600080fd5b506101cc61048936600461210f565b6113eb565b34801561049a57600080fd5b506102176104a936600461213b565b6114d1565b3480156104ba57600080fd5b506101cc6104c9366004611f60565b6114ea565b3480156104da57600080fd5b50600554610394906001600160a01b031681565b3480156104fa57600080fd5b506101cc610509366004611f3c565b6115c9565b6005546000908190600160a81b900460ff161561053e5760405163f199645960e01b815260040160405180910390fd5b84428110156105605760405163368179bd60e21b815260040160405180910390fd5b8660000361058157604051631ca596a360e31b815260040160405180910390fd5b60008490036105a357604051635e4ae1ef60e01b815260040160405180910390fd5b6005546040516370a0823160e01b81526001600160a01b0391821660048201526000918c16906370a0823190602401602060405180830381865afa1580156105ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610613919061215d565b600554909150610630908c9033906001600160a01b03168c61165c565b6005546040516370a0823160e01b81526001600160a01b0391821660048201526000918d16906370a0823190602401602060405180830381865afa15801561067c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a0919061215d565b90506106ac828261218c565b60055460405163b5bd447b60e01b8152919b506001600160a01b03169063b5bd447b90610707908f907f0000000000000000000000000000000000000000000000000000000000000000908f908f908e908e906004016121a5565b600060405180830381600087803b15801561072157600080fd5b505af1158015610735573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506370a082319150602401602060405180830381865afa15801561079d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c1919061215d565b9450888510156107e45760405163628d226360e11b815260040160405180910390fd5b600554600160a01b900460ff166107fd5760008561082a565b61082a7f0000000000000000000000000000000000000000000000000000000000000000868b8a8a61179b565b9550935060006001600160a01b038c1615610845578b610847565b335b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018890529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156108c557600080fd5b505af11580156108d9573d6000803e3d6000fd5b505050506108e78187611b1f565b806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168e6001600160a01b03167fcd3829a3813dc3cdd188fd3d01dcf3268c16be2fdd2dd21d0665418816e460628e8a60405161095f929190918252602082015260400190565b60405180910390a45050505097509795505050505050565b6000546001600160a01b031633146109d65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60058054911515600160a81b027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b03163314610a695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b6001600160a01b038116610a905760405163c42313dd60e01b815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610b195760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b610b3582610b2f6000546001600160a01b031690565b83611bcb565b5050565b6000546001600160a01b03163314610b935760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b610b9d6000611d01565b565b6000546001600160a01b03163314610bf95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b610c14610c0e6000546001600160a01b031690565b82611b1f565b50565b6000546001600160a01b03163314610c715760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b6001600160a01b038116610c985760405163c42313dd60e01b815260040160405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6005546000908190600160a81b900460ff1615610cf75760405163f199645960e01b815260040160405180910390fd5b8442811015610d195760405163368179bd60e21b815260040160405180910390fd5b86600003610d3a57604051631ca596a360e31b815260040160405180910390fd5b6000849003610d5c57604051635e4ae1ef60e01b815260040160405180910390fd5b6005546040516370a0823160e01b81526001600160a01b0391821660048201526000918d16906370a0823190602401602060405180830381865afa158015610da8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcc919061215d565b600554909150610de9908d9033906001600160a01b03168c61165c565b6005546040516370a0823160e01b81526001600160a01b0391821660048201526000918e16906370a0823190602401602060405180830381865afa158015610e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e59919061215d565b9050610e65828261218c565b9950600560009054906101000a90046001600160a01b03166001600160a01b031663b5bd447b8e8e8d8d8c8c6040518763ffffffff1660e01b8152600401610eb2969594939291906121a5565b600060405180830381600087803b158015610ecc57600080fd5b505af1158015610ee0573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201526001600160a01b038f1692506370a082319150602401602060405180830381865afa158015610f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4c919061215d565b945088851015610f6f5760405163628d226360e11b815260040160405180910390fd5b600554600160a01b900460ff16610f8857600085610f95565b610f958c868b8a8a61179b565b9550935060006001600160a01b038c1615610fb0578b610fb2565b335b9050610fbf8d8288611bcb565b806001600160a01b03168d6001600160a01b03168f6001600160a01b03167fcd3829a3813dc3cdd188fd3d01dcf3268c16be2fdd2dd21d0665418816e460628e8a604051611017929190918252602082015260400190565b60405180910390a4505050509850989650505050505050565b6005546000908190600160a81b900460ff16156110605760405163f199645960e01b815260040160405180910390fd5b84428110156110825760405163368179bd60e21b815260040160405180910390fd5b866000036110a357604051631ca596a360e31b815260040160405180910390fd5b60008490036110c557604051635e4ae1ef60e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561112057600080fd5b505af1158015611134573d6000803e3d6000fd5b505060055461117293507f000000000000000000000000000000000000000000000000000000000000000092506001600160a01b0316905034611bcb565b60055460405163b5bd447b60e01b81526001600160a01b039091169063b5bd447b906111cc907f0000000000000000000000000000000000000000000000000000000000000000908d9034908d908c908c906004016121a5565b600060405180830381600087803b1580156111e657600080fd5b505af11580156111fa573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201526001600160a01b038c1692506370a082319150602401602060405180830381865afa158015611242573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611266919061215d565b9250868310156112895760405163628d226360e11b815260040160405180910390fd5b600554600160a01b900460ff166112a2576000836112af565b6112af898489888861179b565b9350915060006001600160a01b038916156112ca57886112cc565b335b90506112d98a8286611bcb565b806001600160a01b03168a6001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167fcd3829a3813dc3cdd188fd3d01dcf3268c16be2fdd2dd21d0665418816e460623488604051611351929190918252602082015260400190565b60405180910390a45050965096945050505050565b6000546001600160a01b031633146113c05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114455760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b8183111561147f576040517fac6d9eea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60c88211156114a15760405163bd957e8160e01b815260040160405180910390fd5b60c88111156114c35760405163bd957e8160e01b815260040160405180910390fd5b600292909255600355600455565b6000806114de8484611d5e565b915091505b9250929050565b6000546001600160a01b031633146115445760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b6001600160a01b0381166115c05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109cd565b610c1481611d01565b6000546001600160a01b031633146116235760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b60058054911515600160a01b027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905291516000928392908816916116ee9190612200565b6000604051808303816000865af19150503d806000811461172b576040519150601f19603f3d011682016040523d82523d6000602084013e611730565b606091505b509150915081158061175c57508051158061175a57508080602001905181019061175a919061222f565b155b15611793576040517ff275e43500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6001600160a01b0385166000908152600660205260408120548190819060ff168015611a825760006117cf86880188612445565b805190915060005b81811015611a7e5760008382815181106117f3576117f36125b4565b60209081029190910181015160408101519181015180519193509060005b81811015611a5f57600084828151811061182d5761182d6125b4565b602002602001015190506002600481111561184a5761184a6125ca565b81602001516004811115611860576118606125ca565b0361186f5760019a5050611a5f565b600381602001516004811115611887576118876125ca565b03611a565760008483815181106118a0576118a06125b4565b602002602001015190506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190e91906125e0565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611950573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197491906125e0565b90506000836001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119da91906125fd565b6001600160a01b03841660009081526006602052604090205490915060ff168015611a1d57506001600160a01b03821660009081526006602052604090205460ff165b8015611a3e57508062ffffff166101f41480611a3e57508062ffffff166064145b15611a515760019e505050505050611a5f565b505050505b50600101611811565b508815611a6f5750505050611a7e565b846001019450505050506117d7565b5050505b81158015611a8e575080155b611aa057611a9b88611e01565b611aaa565b611aaa8888611d5e565b90945092508315611b1357600154611acd908a906001600160a01b031686611bcb565b6001546040518581526001600160a01b03918216918b16907f395ff81941e712cde09fc59fc9e9ad438a1890d5756ff72a7d1c1cef24f636739060200160405180910390a35b50509550959350505050565b604080516000808252602082019092526001600160a01b038416908390604051611b499190612200565b60006040518083038185875af1925050503d8060008114611b86576040519150601f19603f3d011682016040523d82523d6000602084013e611b8b565b606091505b5050905080611bc6576040517fc27196ef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790529151600092839290871691611c559190612200565b6000604051808303816000865af19150503d8060008114611c92576040519150601f19603f3d011682016040523d82523d6000602084013e611c97565b606091505b5091509150811580611cc3575080511580611cc1575080806020019051810190611cc1919061222f565b155b15611cfa576040517fe9e9cd1f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008080611d6c848661218c565b90506000600280611d7d8888612622565b611d879190612635565b611d9384612710612657565b611d9d9190612635565b611da79190612635565b9050600254811015611dbc5750600254611dcb565b600354811115611dcb57506003545b6000612710611dda8389612657565b611de49190612635565b90506000611df2828961218c565b91989197509095505050505050565b600080600061271060045485611e179190612657565b611e219190612635565b90506000611e2f828661218c565b91959194509092505050565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b0381168114610c1457600080fd5b60008083601f840112611e7857600080fd5b50813567ffffffffffffffff811115611e9057600080fd5b6020830191508360208285010111156114e357600080fd5b600080600080600080600060c0888a031215611ec357600080fd5b8735611ece81611e51565b96506020880135611ede81611e51565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611f0f57600080fd5b611f1b8a828b01611e66565b989b979a50959850939692959293505050565b8015158114610c1457600080fd5b600060208284031215611f4e57600080fd5b8135611f5981611f2e565b9392505050565b600060208284031215611f7257600080fd5b8135611f5981611e51565b60008060408385031215611f9057600080fd5b8235611f9b81611e51565b946020939093013593505050565b600060208284031215611fbb57600080fd5b5035919050565b60008060008060008060008060e0898b031215611fde57600080fd5b8835611fe981611e51565b97506020890135611ff981611e51565b9650604089013561200981611e51565b9550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff81111561203a57600080fd5b6120468b828c01611e66565b999c989b5096995094979396929594505050565b60008060008060008060a0878903121561207357600080fd5b863561207e81611e51565b9550602087013561208e81611e51565b94506040870135935060608701359250608087013567ffffffffffffffff8111156120b857600080fd5b6120c489828a01611e66565b979a9699509497509295939492505050565b600080604083850312156120e957600080fd5b82356120f481611e51565b9150602083013561210481611f2e565b809150509250929050565b60008060006060848603121561212457600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561214e57600080fd5b50508035926020909101359150565b60006020828403121561216f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561219f5761219f612176565b92915050565b60006001600160a01b03808916835280881660208401525085604083015284606083015260a060808301528260a0830152828460c0840137600060c0848401015260c0601f19601f8501168301019050979650505050505050565b6000825160005b818110156122215760208186018101518583015201612207565b506000920191825250919050565b60006020828403121561224157600080fd5b8151611f5981611f2e565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156122855761228561224c565b60405290565b6040516060810167ffffffffffffffff811182821017156122855761228561224c565b604051601f8201601f1916810167ffffffffffffffff811182821017156122d7576122d761224c565b604052919050565b600067ffffffffffffffff8211156122f9576122f961224c565b5060051b60200190565b80356005811061231257600080fd5b919050565b6000601f838184011261232957600080fd5b8235602061233e612339836122df565b6122ae565b82815260059290921b8501810191818101908784111561235d57600080fd5b8287015b8481101561243957803567ffffffffffffffff808211156123825760008081fd5b908901906040601f19838d03810182131561239d5760008081fd5b6123a5612262565b88850135848111156123b75760008081fd5b8501603f81018f136123c95760008081fd5b89810135858111156123dd576123dd61224c565b6123ec8b858f840116016122ae565b95508086528f8582840101111561240557600093508384fd5b808583018c88013760009086018b015250838152612424858401612303565b818a0152875250505092840192508301612361565b50979650505050505050565b6000602080838503121561245857600080fd5b823567ffffffffffffffff8082111561247057600080fd5b818501915085601f83011261248457600080fd5b8135612492612339826122df565b81815260059190911b830184019084810190888311156124b157600080fd5b8585015b838110156125a7578035858111156124cc57600080fd5b86016060818c03601f190112156124e257600080fd5b6124ea61228b565b88820135815260408201358781111561250257600080fd5b8201603f81018d1361251357600080fd5b89810135612523612339826122df565b81815260059190911b8201604001908b8101908f83111561254357600080fd5b6040840193505b8284101561256c57833561255d81611e51565b8252928c0192908c019061254a565b848d015250505060608201358781111561258557600080fd5b6125938d8b83860101612317565b6040830152508452509186019186016124b5565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000602082840312156125f257600080fd5b8151611f5981611e51565b60006020828403121561260f57600080fd5b815162ffffff81168114611f5957600080fd5b8082018082111561219f5761219f612176565b60008261265257634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761219f5761219f61217656fea26469706673582212206698bfd3937f053d01d75ca79eed743b00db53cfa0ca7f25b9037ae041ef820264736f6c63430008130033000000000000000000000000acc15dc74880c9944775448304b263d191c6077f0000000000000000000000006af33d66e7b4c20589b4f103140cb79229793d72
Deployed Bytecode
0x60806040526004361061018f5760003560e01c80638da5cb5b116100d6578063c34c08e51161007f578063f2fde38b11610059578063f2fde38b146104ae578063fb1a746f146104ce578063fc4064b3146104ee57600080fd5b8063c34c08e514610450578063cec10c111461046e578063d250185c1461048e57600080fd5b8063abca7290116100b0578063abca7290146103df578063ad5c4648146103fd578063b187bd261461043157600080fd5b80638da5cb5b1461037a578063a9b1a08e146103ac578063aa014a45146103bf57600080fd5b80635535240c11610138578063739f08c811610112578063739f08c81461031a5780637a883d6e1461033a578063840f94981461035a57600080fd5b80635535240c146102ac57806357376198146102e5578063715018a61461030557600080fd5b80631c3c0ea8116101695780631c3c0ea81461024c57806324ec75901461026c5780634f335d0a1461028157600080fd5b806301f59d16146101d357806312a6a6d4146101f757806316c38b3c1461022c57600080fd5b366101ce57336001600160a01b037f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f16146101cc576101cc611e3b565b005b600080fd5b3480156101df57600080fd5b506003545b6040519081526020015b60405180910390f35b34801561020357600080fd5b50610217610212366004611ea8565b61050e565b604080519283526020830191909152016101ee565b34801561023857600080fd5b506101cc610247366004611f3c565b610977565b34801561025857600080fd5b506101cc610267366004611f60565b610a0f565b34801561027857600080fd5b506002546101e4565b34801561028d57600080fd5b50600554600160a01b900460ff165b60405190151581526020016101ee565b3480156102b857600080fd5b5061029c6102c7366004611f60565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156102f157600080fd5b506101cc610300366004611f7d565b610abf565b34801561031157600080fd5b506101cc610b39565b34801561032657600080fd5b506101cc610335366004611fa9565b610b9f565b34801561034657600080fd5b506101cc610355366004611f60565b610c17565b34801561036657600080fd5b50610217610375366004611fc2565b610cc7565b34801561038657600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016101ee565b6102176103ba36600461205a565b611030565b3480156103cb57600080fd5b506101cc6103da3660046120d6565b611366565b3480156103eb57600080fd5b506001546001600160a01b0316610394565b34801561040957600080fd5b506103947f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f81565b34801561043d57600080fd5b50600554600160a81b900460ff1661029c565b34801561045c57600080fd5b506005546001600160a01b0316610394565b34801561047a57600080fd5b506101cc61048936600461210f565b6113eb565b34801561049a57600080fd5b506102176104a936600461213b565b6114d1565b3480156104ba57600080fd5b506101cc6104c9366004611f60565b6114ea565b3480156104da57600080fd5b50600554610394906001600160a01b031681565b3480156104fa57600080fd5b506101cc610509366004611f3c565b6115c9565b6005546000908190600160a81b900460ff161561053e5760405163f199645960e01b815260040160405180910390fd5b84428110156105605760405163368179bd60e21b815260040160405180910390fd5b8660000361058157604051631ca596a360e31b815260040160405180910390fd5b60008490036105a357604051635e4ae1ef60e01b815260040160405180910390fd5b6005546040516370a0823160e01b81526001600160a01b0391821660048201526000918c16906370a0823190602401602060405180830381865afa1580156105ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610613919061215d565b600554909150610630908c9033906001600160a01b03168c61165c565b6005546040516370a0823160e01b81526001600160a01b0391821660048201526000918d16906370a0823190602401602060405180830381865afa15801561067c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a0919061215d565b90506106ac828261218c565b60055460405163b5bd447b60e01b8152919b506001600160a01b03169063b5bd447b90610707908f907f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f908f908f908e908e906004016121a5565b600060405180830381600087803b15801561072157600080fd5b505af1158015610735573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201527f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f6001600160a01b031692506370a082319150602401602060405180830381865afa15801561079d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c1919061215d565b9450888510156107e45760405163628d226360e11b815260040160405180910390fd5b600554600160a01b900460ff166107fd5760008561082a565b61082a7f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f868b8a8a61179b565b9550935060006001600160a01b038c1615610845578b610847565b335b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018890529091507f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f6001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156108c557600080fd5b505af11580156108d9573d6000803e3d6000fd5b505050506108e78187611b1f565b806001600160a01b03167f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f6001600160a01b03168e6001600160a01b03167fcd3829a3813dc3cdd188fd3d01dcf3268c16be2fdd2dd21d0665418816e460628e8a60405161095f929190918252602082015260400190565b60405180910390a45050505097509795505050505050565b6000546001600160a01b031633146109d65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60058054911515600160a81b027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b03163314610a695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b6001600160a01b038116610a905760405163c42313dd60e01b815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610b195760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b610b3582610b2f6000546001600160a01b031690565b83611bcb565b5050565b6000546001600160a01b03163314610b935760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b610b9d6000611d01565b565b6000546001600160a01b03163314610bf95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b610c14610c0e6000546001600160a01b031690565b82611b1f565b50565b6000546001600160a01b03163314610c715760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b6001600160a01b038116610c985760405163c42313dd60e01b815260040160405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6005546000908190600160a81b900460ff1615610cf75760405163f199645960e01b815260040160405180910390fd5b8442811015610d195760405163368179bd60e21b815260040160405180910390fd5b86600003610d3a57604051631ca596a360e31b815260040160405180910390fd5b6000849003610d5c57604051635e4ae1ef60e01b815260040160405180910390fd5b6005546040516370a0823160e01b81526001600160a01b0391821660048201526000918d16906370a0823190602401602060405180830381865afa158015610da8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcc919061215d565b600554909150610de9908d9033906001600160a01b03168c61165c565b6005546040516370a0823160e01b81526001600160a01b0391821660048201526000918e16906370a0823190602401602060405180830381865afa158015610e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e59919061215d565b9050610e65828261218c565b9950600560009054906101000a90046001600160a01b03166001600160a01b031663b5bd447b8e8e8d8d8c8c6040518763ffffffff1660e01b8152600401610eb2969594939291906121a5565b600060405180830381600087803b158015610ecc57600080fd5b505af1158015610ee0573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201526001600160a01b038f1692506370a082319150602401602060405180830381865afa158015610f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4c919061215d565b945088851015610f6f5760405163628d226360e11b815260040160405180910390fd5b600554600160a01b900460ff16610f8857600085610f95565b610f958c868b8a8a61179b565b9550935060006001600160a01b038c1615610fb0578b610fb2565b335b9050610fbf8d8288611bcb565b806001600160a01b03168d6001600160a01b03168f6001600160a01b03167fcd3829a3813dc3cdd188fd3d01dcf3268c16be2fdd2dd21d0665418816e460628e8a604051611017929190918252602082015260400190565b60405180910390a4505050509850989650505050505050565b6005546000908190600160a81b900460ff16156110605760405163f199645960e01b815260040160405180910390fd5b84428110156110825760405163368179bd60e21b815260040160405180910390fd5b866000036110a357604051631ca596a360e31b815260040160405180910390fd5b60008490036110c557604051635e4ae1ef60e01b815260040160405180910390fd5b7f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f6001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561112057600080fd5b505af1158015611134573d6000803e3d6000fd5b505060055461117293507f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f92506001600160a01b0316905034611bcb565b60055460405163b5bd447b60e01b81526001600160a01b039091169063b5bd447b906111cc907f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f908d9034908d908c908c906004016121a5565b600060405180830381600087803b1580156111e657600080fd5b505af11580156111fa573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201526001600160a01b038c1692506370a082319150602401602060405180830381865afa158015611242573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611266919061215d565b9250868310156112895760405163628d226360e11b815260040160405180910390fd5b600554600160a01b900460ff166112a2576000836112af565b6112af898489888861179b565b9350915060006001600160a01b038916156112ca57886112cc565b335b90506112d98a8286611bcb565b806001600160a01b03168a6001600160a01b03167f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f6001600160a01b03167fcd3829a3813dc3cdd188fd3d01dcf3268c16be2fdd2dd21d0665418816e460623488604051611351929190918252602082015260400190565b60405180910390a45050965096945050505050565b6000546001600160a01b031633146113c05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114455760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b8183111561147f576040517fac6d9eea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60c88211156114a15760405163bd957e8160e01b815260040160405180910390fd5b60c88111156114c35760405163bd957e8160e01b815260040160405180910390fd5b600292909255600355600455565b6000806114de8484611d5e565b915091505b9250929050565b6000546001600160a01b031633146115445760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b6001600160a01b0381166115c05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109cd565b610c1481611d01565b6000546001600160a01b031633146116235760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b60058054911515600160a01b027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905291516000928392908816916116ee9190612200565b6000604051808303816000865af19150503d806000811461172b576040519150601f19603f3d011682016040523d82523d6000602084013e611730565b606091505b509150915081158061175c57508051158061175a57508080602001905181019061175a919061222f565b155b15611793576040517ff275e43500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6001600160a01b0385166000908152600660205260408120548190819060ff168015611a825760006117cf86880188612445565b805190915060005b81811015611a7e5760008382815181106117f3576117f36125b4565b60209081029190910181015160408101519181015180519193509060005b81811015611a5f57600084828151811061182d5761182d6125b4565b602002602001015190506002600481111561184a5761184a6125ca565b81602001516004811115611860576118606125ca565b0361186f5760019a5050611a5f565b600381602001516004811115611887576118876125ca565b03611a565760008483815181106118a0576118a06125b4565b602002602001015190506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190e91906125e0565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611950573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197491906125e0565b90506000836001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119da91906125fd565b6001600160a01b03841660009081526006602052604090205490915060ff168015611a1d57506001600160a01b03821660009081526006602052604090205460ff165b8015611a3e57508062ffffff166101f41480611a3e57508062ffffff166064145b15611a515760019e505050505050611a5f565b505050505b50600101611811565b508815611a6f5750505050611a7e565b846001019450505050506117d7565b5050505b81158015611a8e575080155b611aa057611a9b88611e01565b611aaa565b611aaa8888611d5e565b90945092508315611b1357600154611acd908a906001600160a01b031686611bcb565b6001546040518581526001600160a01b03918216918b16907f395ff81941e712cde09fc59fc9e9ad438a1890d5756ff72a7d1c1cef24f636739060200160405180910390a35b50509550959350505050565b604080516000808252602082019092526001600160a01b038416908390604051611b499190612200565b60006040518083038185875af1925050503d8060008114611b86576040519150601f19603f3d011682016040523d82523d6000602084013e611b8b565b606091505b5050905080611bc6576040517fc27196ef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790529151600092839290871691611c559190612200565b6000604051808303816000865af19150503d8060008114611c92576040519150601f19603f3d011682016040523d82523d6000602084013e611c97565b606091505b5091509150811580611cc3575080511580611cc1575080806020019051810190611cc1919061222f565b155b15611cfa576040517fe9e9cd1f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008080611d6c848661218c565b90506000600280611d7d8888612622565b611d879190612635565b611d9384612710612657565b611d9d9190612635565b611da79190612635565b9050600254811015611dbc5750600254611dcb565b600354811115611dcb57506003545b6000612710611dda8389612657565b611de49190612635565b90506000611df2828961218c565b91989197509095505050505050565b600080600061271060045485611e179190612657565b611e219190612635565b90506000611e2f828661218c565b91959194509092505050565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b0381168114610c1457600080fd5b60008083601f840112611e7857600080fd5b50813567ffffffffffffffff811115611e9057600080fd5b6020830191508360208285010111156114e357600080fd5b600080600080600080600060c0888a031215611ec357600080fd5b8735611ece81611e51565b96506020880135611ede81611e51565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611f0f57600080fd5b611f1b8a828b01611e66565b989b979a50959850939692959293505050565b8015158114610c1457600080fd5b600060208284031215611f4e57600080fd5b8135611f5981611f2e565b9392505050565b600060208284031215611f7257600080fd5b8135611f5981611e51565b60008060408385031215611f9057600080fd5b8235611f9b81611e51565b946020939093013593505050565b600060208284031215611fbb57600080fd5b5035919050565b60008060008060008060008060e0898b031215611fde57600080fd5b8835611fe981611e51565b97506020890135611ff981611e51565b9650604089013561200981611e51565b9550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff81111561203a57600080fd5b6120468b828c01611e66565b999c989b5096995094979396929594505050565b60008060008060008060a0878903121561207357600080fd5b863561207e81611e51565b9550602087013561208e81611e51565b94506040870135935060608701359250608087013567ffffffffffffffff8111156120b857600080fd5b6120c489828a01611e66565b979a9699509497509295939492505050565b600080604083850312156120e957600080fd5b82356120f481611e51565b9150602083013561210481611f2e565b809150509250929050565b60008060006060848603121561212457600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561214e57600080fd5b50508035926020909101359150565b60006020828403121561216f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561219f5761219f612176565b92915050565b60006001600160a01b03808916835280881660208401525085604083015284606083015260a060808301528260a0830152828460c0840137600060c0848401015260c0601f19601f8501168301019050979650505050505050565b6000825160005b818110156122215760208186018101518583015201612207565b506000920191825250919050565b60006020828403121561224157600080fd5b8151611f5981611f2e565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156122855761228561224c565b60405290565b6040516060810167ffffffffffffffff811182821017156122855761228561224c565b604051601f8201601f1916810167ffffffffffffffff811182821017156122d7576122d761224c565b604052919050565b600067ffffffffffffffff8211156122f9576122f961224c565b5060051b60200190565b80356005811061231257600080fd5b919050565b6000601f838184011261232957600080fd5b8235602061233e612339836122df565b6122ae565b82815260059290921b8501810191818101908784111561235d57600080fd5b8287015b8481101561243957803567ffffffffffffffff808211156123825760008081fd5b908901906040601f19838d03810182131561239d5760008081fd5b6123a5612262565b88850135848111156123b75760008081fd5b8501603f81018f136123c95760008081fd5b89810135858111156123dd576123dd61224c565b6123ec8b858f840116016122ae565b95508086528f8582840101111561240557600093508384fd5b808583018c88013760009086018b015250838152612424858401612303565b818a0152875250505092840192508301612361565b50979650505050505050565b6000602080838503121561245857600080fd5b823567ffffffffffffffff8082111561247057600080fd5b818501915085601f83011261248457600080fd5b8135612492612339826122df565b81815260059190911b830184019084810190888311156124b157600080fd5b8585015b838110156125a7578035858111156124cc57600080fd5b86016060818c03601f190112156124e257600080fd5b6124ea61228b565b88820135815260408201358781111561250257600080fd5b8201603f81018d1361251357600080fd5b89810135612523612339826122df565b81815260059190911b8201604001908b8101908f83111561254357600080fd5b6040840193505b8284101561256c57833561255d81611e51565b8252928c0192908c019061254a565b848d015250505060608201358781111561258557600080fd5b6125938d8b83860101612317565b6040830152508452509186019186016124b5565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000602082840312156125f257600080fd5b8151611f5981611e51565b60006020828403121561260f57600080fd5b815162ffffff81168114611f5957600080fd5b8082018082111561219f5761219f612176565b60008261265257634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761219f5761219f61217656fea26469706673582212206698bfd3937f053d01d75ca79eed743b00db53cfa0ca7f25b9037ae041ef820264736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000acc15dc74880c9944775448304b263d191c6077f0000000000000000000000006af33d66e7b4c20589b4f103140cb79229793d72
-----Decoded View---------------
Arg [0] : WETH_ (address): 0xAcc15dC74880C9944775448304B263D191c6077F
Arg [1] : executor_ (address): 0x6af33d66E7b4c20589B4F103140cb79229793D72
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000acc15dc74880c9944775448304b263d191c6077f
Arg [1] : 0000000000000000000000006af33d66e7b4c20589b4f103140cb79229793d72
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$2.49
Net Worth in GLMR
Token Allocations
GLMR
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| GLMR | 100.00% | $0.021836 | 113.8322 | $2.49 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.