Source Code
More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Eth Swap To Mint... | 11581003 | 1887 days ago | IN | 0.12479932 ETH | 0.04412894 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
MintUtilities
Compiler Version
v0.5.17+commit.d19bba13
Optimization Enabled:
Yes with 100000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity ^0.5.7;
pragma experimental ABIEncoderV2;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/math/SafeMath.sol";
import './IUniswapV2Router02.sol';
import './IFraxPool.sol';
import './IWETH.sol';
contract MintUtilities {
using SafeMath for uint256;
address constant private USDC_ADDRESS = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
address constant private WETH_ADDRESS = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
address constant private FRAX_ADDRESS = 0x853d955aCEf822Db058eb8505911ED77F175b99e;
address constant private FXS_ADDRESS = 0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0;
address payable constant public UNISWAP_ROUTER_ADDRESS = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
address constant public REFERRAL_REWARD_ADDRESS = 0x234D953a9404Bf9DbC3b526271d440cD2870bCd2; // Frax main
address public POOL_ADDRESS = 0x1864Ca3d47AaB98Ee78D11fc9DCC5E7bADdA1c0d;
address public NULL_ADDRESS = 0x0000000000000000000000000000000000000000;
IERC20 constant internal USDC_ERC20 = IERC20(USDC_ADDRESS);
IERC20 constant internal WETH_ERC20 = IERC20(WETH_ADDRESS);
IERC20 constant internal FRAX_ERC20 = IERC20(FRAX_ADDRESS);
IERC20 constant internal FXS_ERC20 = IERC20(FXS_ADDRESS);
IERC20 constant internal ETH_ERC20 = IERC20(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);
IWETH constant internal WETH_IWETH = IWETH(WETH_ADDRESS);
IFraxPool internal FRAX_POOL = IFraxPool(POOL_ADDRESS);
IUniswapV2Router02 constant internal UniswapV2Router02 = IUniswapV2Router02(UNISWAP_ROUTER_ADDRESS);
address public owner_address;
address payable public owner_address_payable;
bool public is_paused;
// Super jank
mapping(uint256 => address[]) PATHS;
modifier onlyOwner {
require(msg.sender == owner_address, "Only the contract owner may perform this action");
_;
}
modifier notPaused {
require(is_paused == false, "Contract is paused");
_;
}
constructor () public {
owner_address = msg.sender;
owner_address_payable = msg.sender;
is_paused = false;
PATHS[0] = [WETH_ADDRESS, USDC_ADDRESS];
PATHS[1] = [WETH_ADDRESS, FRAX_ADDRESS, FXS_ADDRESS];
}
function _swapETHForERC20(
uint256 amountETH,
uint256 token_out_min,
address token_address,
uint256 path_idx,
uint256 last_path_idx
) internal notPaused returns (uint256, uint256) {
// Do the swap
(uint[] memory amounts) = UniswapV2Router02.swapExactETHForTokens.value(amountETH)(
token_out_min,
PATHS[path_idx],
address(this),
2105300114 // A long time from now
);
// Make sure enough tokens were recieved
require(amounts[last_path_idx] >= token_out_min, "swapETHForERC20: Not enough tokens received from swap");
// Approve for FraxPool
IERC20(token_address).approve(POOL_ADDRESS, amounts[last_path_idx]);
return (amounts[0], amounts[last_path_idx]);
}
function ethSwapToMintFF(
uint256 amountETH_for_col,
uint256 col_out_min,
uint256 amountETH_for_fxs,
uint256 fxs_out_min,
uint256 frax_out_min
) external payable notPaused {
// =================== ETH -> USDC via Uniswap ===================
(uint256 usdc_eth_used, uint256 received_USDC) = _swapETHForERC20(
amountETH_for_col,
col_out_min,
USDC_ADDRESS,
0,
1
);
// =================== ETH -> FXS via Uniswap ===================
(uint256 fxs_eth_used, uint256 received_FXS) = _swapETHForERC20(
amountETH_for_fxs,
fxs_out_min,
FXS_ADDRESS,
1,
2
);
// Mint
FRAX_POOL.mintFractionalFRAX(received_USDC, received_FXS, frax_out_min);
// Return FRAX to sender. Note that there may be crumbs left over...
FRAX_ERC20.transfer(msg.sender, frax_out_min);
// Return unused ETH dust to sender
uint256 eth_refund = amountETH_for_col.add(amountETH_for_fxs).sub(usdc_eth_used).sub(fxs_eth_used);
msg.sender.transfer(eth_refund);
}
// The smart contract should never end up having to need this as there should be no deposits. Just for emergency purposes
function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyOwner {
IERC20(tokenAddress).transfer(owner_address, tokenAmount);
}
function withdraw() external onlyOwner
{
msg.sender.transfer(address(this).balance);
}
function selfDestruct() external payable onlyOwner {
selfdestruct(owner_address_payable);
}
function togglePaused() external onlyOwner {
is_paused = !is_paused;
}
function setPoolAddress(address _pool_address) external onlyOwner {
POOL_ADDRESS = _pool_address;
FRAX_POOL = IFraxPool(_pool_address);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.5.7;
interface IFraxPool {
function minting_fee() external returns (uint256);
function redemption_fee() external returns (uint256);
function buyback_fee() external returns (uint256);
function recollat_fee() external returns (uint256);
function collatDollarBalance() external returns (uint256);
function availableExcessCollatDV() external returns (uint256);
function getCollateralPrice() external returns (uint256);
function setCollatETHOracle(address _collateral_weth_oracle_address, address _weth_address) external;
function mint1t1FRAX(uint256 collateral_amount, uint256 FRAX_out_min) external;
function mintAlgorithmicFRAX(uint256 fxs_amount_d18, uint256 FRAX_out_min) external;
function mintFractionalFRAX(uint256 collateral_amount, uint256 fxs_amount, uint256 FRAX_out_min) external;
function redeem1t1FRAX(uint256 FRAX_amount, uint256 COLLATERAL_out_min) external;
function redeemFractionalFRAX(uint256 FRAX_amount, uint256 FXS_out_min, uint256 COLLATERAL_out_min) external;
function redeemAlgorithmicFRAX(uint256 FRAX_amount, uint256 FXS_out_min) external;
function collectRedemption() external;
function recollateralizeFRAX(uint256 collateral_amount, uint256 FXS_out_min) external;
function buyBackFXS(uint256 FXS_amount, uint256 COLLATERAL_out_min) external;
function toggleMinting() external;
function toggleRedeeming() external;
function toggleRecollateralize() external;
function toggleBuyBack() external;
function toggleCollateralPrice(uint256 _new_price) external;
function setPoolParameters(uint256 new_ceiling, uint256 new_bonus_rate, uint256 new_redemption_delay, uint256 new_mint_fee, uint256 new_redeem_fee, uint256 new_buyback_fee, uint256 new_recollat_fee) external;
function setTimelock(address new_timelock) external;
function setOwner(address _owner_address) external;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.5.7;
interface IUniswapV2Router02 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}pragma solidity ^0.5.0;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
contract IWETH is IERC20 {
function deposit() external payable;
function withdraw(uint256 amount) external;
}pragma solidity ^0.5.0;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*
* _Available since v2.4.0._
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*
* _Available since v2.4.0._
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*
* _Available since v2.4.0._
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}pragma solidity ^0.5.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP. Does not include
* the optional functions; to access them see {ERC20Detailed}.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}{
"remappings": [],
"optimizer": {
"enabled": true,
"runs": 100000
},
"evmVersion": "istanbul",
"libraries": {},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"constant":true,"inputs":[],"name":"NULL_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"POOL_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"REFERRAL_REWARD_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UNISWAP_ROUTER_ADDRESS","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amountETH_for_col","type":"uint256"},{"internalType":"uint256","name":"col_out_min","type":"uint256"},{"internalType":"uint256","name":"amountETH_for_fxs","type":"uint256"},{"internalType":"uint256","name":"fxs_out_min","type":"uint256"},{"internalType":"uint256","name":"frax_out_min","type":"uint256"}],"name":"ethSwapToMintFF","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"is_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner_address","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner_address_payable","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"selfDestruct","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_pool_address","type":"address"}],"name":"setPoolAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"togglePaused","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080604052600080546001600160a01b0319908116731864ca3d47aab98ee78d11fc9dcc5e7badda1c0d17918290556001805482169055600280549091166001600160a01b03929092169190911790553480156200005c57600080fd5b50600380546001600160a01b0319908116339081179092556004805460ff60a01b1992169092171690556040805180820190915273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2815273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486020808301919091526000805260059052620000fc907f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc90600262000198565b506040805160608101825273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2815273853d955acef822db058eb8505911ed77f175b99e602080830191909152733432b6a60d23ca0dfca7761b7ab56459d9c964d0928201929092526001600052600590915262000191907f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b90600362000198565b506200022c565b828054828255906000526020600020908101928215620001f0579160200282015b82811115620001f057825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620001b9565b50620001fe92915062000202565b5090565b6200022991905b80821115620001fe5780546001600160a01b031916815560010162000209565b90565b611200806200023c6000396000f3fe6080604052600436106100d25760003560e01c80639cb8a26a1161007f578063afc1a96811610059578063afc1a968146101b5578063de0ce17d146101ca578063e9e15b4f146101df578063fe94df88146101ff576100d2565b80639cb8a26a146101765780639cdaf37f1461017e5780639d4f8aa914610193576100d2565b806379b36943116100b057806379b369431461011657806380edef8e146101415780638980f11f14610156576100d2565b806311bda7f2146100d757806336566f06146100ec5780633ccfd60b14610101575b600080fd5b6100ea6100e5366004610ce1565b610214565b005b3480156100f857600080fd5b506100ea610458565b34801561010d57600080fd5b506100ea6104f6565b34801561012257600080fd5b5061012b610576565b6040516101389190610f65565b60405180910390f35b34801561014d57600080fd5b5061012b61058e565b34801561016257600080fd5b506100ea610171366004610c54565b6105aa565b6100ea6106ac565b34801561018a57600080fd5b5061012b610718565b34801561019f57600080fd5b506101a8610734565b6040516101389190610f9c565b3480156101c157600080fd5b5061012b610755565b3480156101d657600080fd5b5061012b61076d565b3480156101eb57600080fd5b506100ea6101fa366004610c2e565b610789565b34801561020b57600080fd5b5061012b61082b565b60045474010000000000000000000000000000000000000000900460ff1615610272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026990610feb565b60405180910390fd5b600080610298878773a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4860006001610847565b915091506000806102c28787733432b6a60d23ca0dfca7761b7ab56459d9c964d060016002610847565b6002546040517f5bb87b4200000000000000000000000000000000000000000000000000000000815292945090925073ffffffffffffffffffffffffffffffffffffffff1690635bb87b429061032090869085908a90600401611040565b600060405180830381600087803b15801561033a57600080fd5b505af115801561034e573d6000803e3d6000fd5b50506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273853d955acef822db058eb8505911ed77f175b99e925063a9059cbb91506103a49033908990600401610f73565b602060405180830381600087803b1580156103be57600080fd5b505af11580156103d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506103f69190810190610cc3565b50600061041b8361040f87818e8d63ffffffff610ab316565b9063ffffffff610afb16565b604051909150339082156108fc029083906000818181858888f1935050505015801561044b573d6000803e3d6000fd5b5050505050505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146104a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026990610fdb565b600480547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8116740100000000000000000000000000000000000000009182900460ff1615909102179055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026990610fdb565b60405133904780156108fc02916000818181858888f19350505050158015610573573d6000803e3d6000fd5b50565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60035473ffffffffffffffffffffffffffffffffffffffff1633146105fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026990610fdb565b6003546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481169263a9059cbb9261065592909116908590600401610f8e565b602060405180830381600087803b15801561066f57600080fd5b505af1158015610683573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506106a79190810190610cc3565b505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146106fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026990610fdb565b60045473ffffffffffffffffffffffffffffffffffffffff16ff5b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60045474010000000000000000000000000000000000000000900460ff1681565b73234d953a9404bf9dbc3b526271d440cd2870bcd281565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60035473ffffffffffffffffffffffffffffffffffffffff1633146107da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026990610fdb565b6000805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790915560028054909216179055565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600454600090819074010000000000000000000000000000000000000000900460ff16156108a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026990610feb565b6000848152600560205260409081902090517f7ff36ab5000000000000000000000000000000000000000000000000000000008152606091737a250d5630b4cf539739df2c5dacb4c659f2488d91637ff36ab5918b9161090d918c913090637d7c549290600401610ffb565b6000604051808303818588803b15801561092657600080fd5b505af115801561093a573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526109819190810190610c8e565b90508681858151811061099057fe5b602002602001015110156109d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026990610fcb565b600054815173ffffffffffffffffffffffffffffffffffffffff8089169263095ea7b392911690849088908110610a0357fe5b60200260200101516040518363ffffffff1660e01b8152600401610a28929190610f8e565b602060405180830381600087803b158015610a4257600080fd5b505af1158015610a56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a7a9190810190610cc3565b5080600081518110610a8857fe5b6020026020010151818581518110610a9c57fe5b602002602001015192509250509550959350505050565b600082820183811015610af2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026990610fbb565b90505b92915050565b6000610af283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060008184841115610b76576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102699190610faa565b50508183035b9392505050565b8035610af581611197565b600082601f830112610b9f57600080fd5b8151610bb2610bad8261108f565b611068565b91508181835260208401935060208101905083856020840282011115610bd757600080fd5b60005b83811015610c035781610bed8882610c23565b8452506020928301929190910190600101610bda565b5050505092915050565b8051610af5816111ab565b8035610af5816111b4565b8051610af5816111b4565b600060208284031215610c4057600080fd5b6000610c4c8484610b83565b949350505050565b60008060408385031215610c6757600080fd5b6000610c738585610b83565b9250506020610c8485828601610c18565b9150509250929050565b600060208284031215610ca057600080fd5b815167ffffffffffffffff811115610cb757600080fd5b610c4c84828501610b8e565b600060208284031215610cd557600080fd5b6000610c4c8484610c0d565b600080600080600060a08688031215610cf957600080fd5b6000610d058888610c18565b9550506020610d1688828901610c18565b9450506040610d2788828901610c18565b9350506060610d3888828901610c18565b9250506080610d4988828901610c18565b9150509295509295909350565b6000610d628383610d79565b505060200190565b610d73816110ff565b82525050565b610d73816110ec565b6000610d8d826110bc565b610d9781856110ca565b9350610da2836110b0565b8060005b83811015610dd757610db782611163565b610dc18882610d56565b9750610dcc836110c4565b925050600101610da6565b509495945050505050565b610d73816110f7565b610d738161110a565b6000610dff826110c0565b610e0981856110ca565b9350610e19818560208601611120565b610e228161116f565b9093019392505050565b6000610e39601b836110ca565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000610e726035836110ca565b7f73776170455448466f7245524332303a204e6f7420656e6f75676820746f6b6581527f6e732072656365697665642066726f6d20737761700000000000000000000000602082015260400192915050565b6000610ed1602f836110ca565b7f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726681527f6f726d207468697320616374696f6e0000000000000000000000000000000000602082015260400192915050565b6000610f306012836110ca565b7f436f6e7472616374206973207061757365640000000000000000000000000000815260200192915050565b610d73816110fc565b60208101610af58284610d79565b60408101610f818285610d6a565b610b7c6020830184610f5c565b60408101610f818285610d79565b60208101610af58284610de2565b60208082528101610af28184610df4565b60208082528101610af581610e2c565b60208082528101610af581610e65565b60208082528101610af581610ec4565b60208082528101610af581610f23565b608081016110098287610f5c565b818103602083015261101b8186610d82565b905061102a6040830185610d79565b6110376060830184610deb565b95945050505050565b6060810161104e8286610f5c565b61105b6020830185610f5c565b610c4c6040830184610f5c565b60405181810167ffffffffffffffff8111828210171561108757600080fd5b604052919050565b600067ffffffffffffffff8211156110a657600080fd5b5060209081020190565b60009081526020902090565b5490565b5190565b60010190565b90815260200190565b73ffffffffffffffffffffffffffffffffffffffff1690565b6000610af5826110d3565b151590565b90565b6000610af582611115565b6000610af5826110fc565b6000610af5826110ec565b60005b8381101561113b578181015183820152602001611123565b8381111561114a576000848401525b50505050565b6000610af561115e836110fc565b6110d3565b6000610af58254611150565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b6111a0816110ec565b811461057357600080fd5b6111a0816110f7565b6111a0816110fc56fea365627a7a72315820e5b7ef0119890d5f7ec248eb5e3d9d96aac3bafcbfd07d48af0b4d5c0c33ef426c6578706572696d656e74616cf564736f6c63430005110040
Deployed Bytecode
0x6080604052600436106100d25760003560e01c80639cb8a26a1161007f578063afc1a96811610059578063afc1a968146101b5578063de0ce17d146101ca578063e9e15b4f146101df578063fe94df88146101ff576100d2565b80639cb8a26a146101765780639cdaf37f1461017e5780639d4f8aa914610193576100d2565b806379b36943116100b057806379b369431461011657806380edef8e146101415780638980f11f14610156576100d2565b806311bda7f2146100d757806336566f06146100ec5780633ccfd60b14610101575b600080fd5b6100ea6100e5366004610ce1565b610214565b005b3480156100f857600080fd5b506100ea610458565b34801561010d57600080fd5b506100ea6104f6565b34801561012257600080fd5b5061012b610576565b6040516101389190610f65565b60405180910390f35b34801561014d57600080fd5b5061012b61058e565b34801561016257600080fd5b506100ea610171366004610c54565b6105aa565b6100ea6106ac565b34801561018a57600080fd5b5061012b610718565b34801561019f57600080fd5b506101a8610734565b6040516101389190610f9c565b3480156101c157600080fd5b5061012b610755565b3480156101d657600080fd5b5061012b61076d565b3480156101eb57600080fd5b506100ea6101fa366004610c2e565b610789565b34801561020b57600080fd5b5061012b61082b565b60045474010000000000000000000000000000000000000000900460ff1615610272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026990610feb565b60405180910390fd5b600080610298878773a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4860006001610847565b915091506000806102c28787733432b6a60d23ca0dfca7761b7ab56459d9c964d060016002610847565b6002546040517f5bb87b4200000000000000000000000000000000000000000000000000000000815292945090925073ffffffffffffffffffffffffffffffffffffffff1690635bb87b429061032090869085908a90600401611040565b600060405180830381600087803b15801561033a57600080fd5b505af115801561034e573d6000803e3d6000fd5b50506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273853d955acef822db058eb8505911ed77f175b99e925063a9059cbb91506103a49033908990600401610f73565b602060405180830381600087803b1580156103be57600080fd5b505af11580156103d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506103f69190810190610cc3565b50600061041b8361040f87818e8d63ffffffff610ab316565b9063ffffffff610afb16565b604051909150339082156108fc029083906000818181858888f1935050505015801561044b573d6000803e3d6000fd5b5050505050505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146104a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026990610fdb565b600480547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8116740100000000000000000000000000000000000000009182900460ff1615909102179055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026990610fdb565b60405133904780156108fc02916000818181858888f19350505050158015610573573d6000803e3d6000fd5b50565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60035473ffffffffffffffffffffffffffffffffffffffff1633146105fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026990610fdb565b6003546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481169263a9059cbb9261065592909116908590600401610f8e565b602060405180830381600087803b15801561066f57600080fd5b505af1158015610683573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506106a79190810190610cc3565b505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146106fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026990610fdb565b60045473ffffffffffffffffffffffffffffffffffffffff16ff5b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60045474010000000000000000000000000000000000000000900460ff1681565b73234d953a9404bf9dbc3b526271d440cd2870bcd281565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60035473ffffffffffffffffffffffffffffffffffffffff1633146107da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026990610fdb565b6000805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790915560028054909216179055565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600454600090819074010000000000000000000000000000000000000000900460ff16156108a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026990610feb565b6000848152600560205260409081902090517f7ff36ab5000000000000000000000000000000000000000000000000000000008152606091737a250d5630b4cf539739df2c5dacb4c659f2488d91637ff36ab5918b9161090d918c913090637d7c549290600401610ffb565b6000604051808303818588803b15801561092657600080fd5b505af115801561093a573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526109819190810190610c8e565b90508681858151811061099057fe5b602002602001015110156109d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026990610fcb565b600054815173ffffffffffffffffffffffffffffffffffffffff8089169263095ea7b392911690849088908110610a0357fe5b60200260200101516040518363ffffffff1660e01b8152600401610a28929190610f8e565b602060405180830381600087803b158015610a4257600080fd5b505af1158015610a56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a7a9190810190610cc3565b5080600081518110610a8857fe5b6020026020010151818581518110610a9c57fe5b602002602001015192509250509550959350505050565b600082820183811015610af2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026990610fbb565b90505b92915050565b6000610af283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060008184841115610b76576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102699190610faa565b50508183035b9392505050565b8035610af581611197565b600082601f830112610b9f57600080fd5b8151610bb2610bad8261108f565b611068565b91508181835260208401935060208101905083856020840282011115610bd757600080fd5b60005b83811015610c035781610bed8882610c23565b8452506020928301929190910190600101610bda565b5050505092915050565b8051610af5816111ab565b8035610af5816111b4565b8051610af5816111b4565b600060208284031215610c4057600080fd5b6000610c4c8484610b83565b949350505050565b60008060408385031215610c6757600080fd5b6000610c738585610b83565b9250506020610c8485828601610c18565b9150509250929050565b600060208284031215610ca057600080fd5b815167ffffffffffffffff811115610cb757600080fd5b610c4c84828501610b8e565b600060208284031215610cd557600080fd5b6000610c4c8484610c0d565b600080600080600060a08688031215610cf957600080fd5b6000610d058888610c18565b9550506020610d1688828901610c18565b9450506040610d2788828901610c18565b9350506060610d3888828901610c18565b9250506080610d4988828901610c18565b9150509295509295909350565b6000610d628383610d79565b505060200190565b610d73816110ff565b82525050565b610d73816110ec565b6000610d8d826110bc565b610d9781856110ca565b9350610da2836110b0565b8060005b83811015610dd757610db782611163565b610dc18882610d56565b9750610dcc836110c4565b925050600101610da6565b509495945050505050565b610d73816110f7565b610d738161110a565b6000610dff826110c0565b610e0981856110ca565b9350610e19818560208601611120565b610e228161116f565b9093019392505050565b6000610e39601b836110ca565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000610e726035836110ca565b7f73776170455448466f7245524332303a204e6f7420656e6f75676820746f6b6581527f6e732072656365697665642066726f6d20737761700000000000000000000000602082015260400192915050565b6000610ed1602f836110ca565b7f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726681527f6f726d207468697320616374696f6e0000000000000000000000000000000000602082015260400192915050565b6000610f306012836110ca565b7f436f6e7472616374206973207061757365640000000000000000000000000000815260200192915050565b610d73816110fc565b60208101610af58284610d79565b60408101610f818285610d6a565b610b7c6020830184610f5c565b60408101610f818285610d79565b60208101610af58284610de2565b60208082528101610af28184610df4565b60208082528101610af581610e2c565b60208082528101610af581610e65565b60208082528101610af581610ec4565b60208082528101610af581610f23565b608081016110098287610f5c565b818103602083015261101b8186610d82565b905061102a6040830185610d79565b6110376060830184610deb565b95945050505050565b6060810161104e8286610f5c565b61105b6020830185610f5c565b610c4c6040830184610f5c565b60405181810167ffffffffffffffff8111828210171561108757600080fd5b604052919050565b600067ffffffffffffffff8211156110a657600080fd5b5060209081020190565b60009081526020902090565b5490565b5190565b60010190565b90815260200190565b73ffffffffffffffffffffffffffffffffffffffff1690565b6000610af5826110d3565b151590565b90565b6000610af582611115565b6000610af5826110fc565b6000610af5826110ec565b60005b8381101561113b578181015183820152602001611123565b8381111561114a576000848401525b50505050565b6000610af561115e836110fc565b6110d3565b6000610af58254611150565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b6111a0816110ec565b811461057357600080fd5b6111a0816110f7565b6111a0816110fc56fea365627a7a72315820e5b7ef0119890d5f7ec248eb5e3d9d96aac3bafcbfd07d48af0b4d5c0c33ef426c6578706572696d656e74616cf564736f6c63430005110040
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.