Contract
0x0c35b3b57cde4a3007398045b274548a6592e9d0
4
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0x897acc88460ec31e8422744e1ff5e4f1abfcde5903ae2951171dccaa18ac2a20 | 21625245 | 452 days 17 hrs ago | Morpheus Swap: Deployer | Contract Creation | 0 FTM |
[ Download CSV Export ]
Contract Name:
MorpheusSwapper
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at FtmScan.com on 2021-11-10 */ /** *Submitted for verification at FtmScan.com on 2021-10-16 */ // SPDX-License-Identifier: MIT //Website : https://morpheusswap.finance/ //Discord : https://discord.gg/TR7zzfT2ru pragma solidity ^0.6.0; /** * @dev Interface of the MORPHERC20 . */ interface MORPHIERC20 { /** * @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); function mint(address _to, uint256 _amount) external ; } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library MORPHSafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer( MORPHIERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( MORPHIERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( MORPHIERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require( (value == 0) || (token.allowance(address(this), spender) == 0), 'SafeERC20: approve from non-zero to non-zero allowance' ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( MORPHIERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( MORPHIERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).sub( value, 'SafeERC20: decreased allowance below zero' ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(MORPHIERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, 'SafeERC20: low-level call failed'); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), 'SafeERC20: ERC20 operation did not succeed'); } } } /** * @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. */ 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. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { 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. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @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 () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } pragma experimental ABIEncoderV2; contract MorpheusSwapper is Context, Ownable, ReentrancyGuard { using MORPHSafeERC20 for MORPHIERC20; using SafeMath for uint256; using Address for address; MORPHIERC20 public morph; MORPHIERC20 public pills; address public gov; address constant DEADWALLET = 0x000000000000000000000000000000000000dEaD ; uint256 public startTime ; bool public swapEnabled; event Swapped(address user, uint256 amount); event SetSwapState (bool swapEnabled); event SetGov (address gov); constructor(address _morph, address _pills, address _gov, uint256 _startTime ) public { morph = MORPHIERC20(_morph); pills = MORPHIERC20(_pills); gov = _gov; startTime = _startTime; swapEnabled = true; } receive() external payable { revert(); } function getSwapRatio() public view returns (uint256) { uint256 ratio ; if (block.timestamp > (startTime + 5 days)) { uint256 timeDiff = (block.timestamp - (startTime + 5 days ) ).div(30 days); ratio = ((timeDiff + 1).mul(30)).add(100) ; // swap ratio = ratio : 100 } else { ratio = 100 ; } return (ratio); } function swap(uint256 amount) external nonReentrant { _swap(amount , msg.sender); } function swapMax() external nonReentrant { _swap(morph.balanceOf(msg.sender) , msg.sender); } function _swap(uint256 amount , address user) internal { require(swapEnabled , "Swap is disabled"); require(startTime <= block.timestamp , "Swap has not been started yet"); // We do not need the following original code, as morph.safeTransferForm performs all balance checks of user // uint256 bal = morph.balanceOf(user); // require(bal > 0, "User does not have MORPH tokens to swap"); // if ( bal < amount) // { // amount = bal ; // } uint256 swapAmount = amount.mul(100).div(getSwapRatio()); morph.safeTransferFrom(user, DEADWALLET, amount); // Burn MORPH pills.mint(user , swapAmount); // mint PILLS to user emit Swapped(user , amount); } function setSwapState(bool _swapEnabled) external { require( msg.sender == gov , "Only Governer"); swapEnabled = _swapEnabled; emit SetSwapState (_swapEnabled); } function setGov(address _gov) external { require( msg.sender == gov , "Only Governer"); gov = _gov ; emit SetGov (_gov); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_morph","type":"address"},{"internalType":"address","name":"_pills","type":"address"},{"internalType":"address","name":"_gov","type":"address"},{"internalType":"uint256","name":"_startTime","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"address","name":"gov","type":"address"}],"name":"SetGov","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"swapEnabled","type":"bool"}],"name":"SetSwapState","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Swapped","type":"event"},{"inputs":[],"name":"getSwapRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"morph","outputs":[{"internalType":"contract MORPHIERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pills","outputs":[{"internalType":"contract MORPHIERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapEnabled","type":"bool"}],"name":"setSwapState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMax","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
608060405234801561001057600080fd5b50604051610f53380380610f5383398101604081905261002f916100ff565b60006100396100de565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001808055600280546001600160a01b03199081166001600160a01b0397881617909155600380548216958716959095179094556004805490941692909416919091179091556005556006805460ff1916909117905561014c565b3390565b80516001600160a01b03811681146100f957600080fd5b92915050565b60008060008060808587031215610114578384fd5b61011e86866100e2565b935061012d86602087016100e2565b925061013c86604087016100e2565b6060959095015193969295505050565b610df88061015b6000396000f3fe6080604052600436106100c65760003560e01c80638da5cb5b1161007f578063becb345111610059578063becb3451146101cf578063cfad57a2146101e4578063d40ebd4714610204578063f2fde38b14610224576100d0565b80638da5cb5b1461018557806394b918de1461019a578063a5e992bb146101ba576100d0565b8063040c30da146100d557806312d43a511461010057806356603732146101155780636ddd17131461012a578063715018a61461014c57806378e9792514610163576100d0565b366100d057600080fd5b600080fd5b3480156100e157600080fd5b506100ea610244565b6040516100f79190610aba565b60405180910390f35b34801561010c57600080fd5b506100ea610253565b34801561012157600080fd5b506100ea610262565b34801561013657600080fd5b5061013f610271565b6040516100f79190610b0b565b34801561015857600080fd5b5061016161027a565b005b34801561016f57600080fd5b50610178610302565b6040516100f79190610d7c565b34801561019157600080fd5b506100ea610308565b3480156101a657600080fd5b506101616101b5366004610a6e565b610317565b3480156101c657600080fd5b50610161610350565b3480156101db57600080fd5b50610178610406565b3480156101f057600080fd5b506101616101ff366004610a0f565b610465565b34801561021057600080fd5b5061016161021f366004610a36565b6104e5565b34801561023057600080fd5b5061016161023f366004610a0f565b61054d565b6003546001600160a01b031681565b6004546001600160a01b031681565b6002546001600160a01b031681565b60065460ff1681565b610282610603565b6000546001600160a01b039081169116146102b85760405162461bcd60e51b81526004016102af90610c58565b60405180910390fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60055481565b6000546001600160a01b031690565b6002600154141561033a5760405162461bcd60e51b81526004016102af90610d45565b60026001556103498133610607565b5060018055565b600260015414156103735760405162461bcd60e51b81526004016102af90610d45565b60026001819055546040516370a0823160e01b8152610400916001600160a01b0316906370a08231906103aa903390600401610aba565b60206040518083038186803b1580156103c257600080fd5b505afa1580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa9190610a86565b33610607565b60018055565b600080600554620697800142111561045c57600061043962278d006005546206978001420361072890919063ffffffff16565b9050610454606461044e60018401601e610773565b906107ad565b915050610460565b5060645b905090565b6004546001600160a01b0316331461048f5760405162461bcd60e51b81526004016102af90610bf0565b600480546001600160a01b0319166001600160a01b0383161790556040517f91a8c1cc2d4a3bb60738481947a00cbb9899c822916694cf8bb1d68172fdcd54906104da908390610aba565b60405180910390a150565b6004546001600160a01b0316331461050f5760405162461bcd60e51b81526004016102af90610bf0565b6006805460ff19168215151790556040517fc9d490f94110503717a1b328ee8ed1c982f04ceb13635b0778ced7fac6f8a217906104da908390610b0b565b610555610603565b6000546001600160a01b039081169116146105825760405162461bcd60e51b81526004016102af90610c58565b6001600160a01b0381166105a85760405162461bcd60e51b81526004016102af90610b73565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b60065460ff166106295760405162461bcd60e51b81526004016102af90610b49565b42600554111561064b5760405162461bcd60e51b81526004016102af90610cc4565b6000610669610658610406565b610663856064610773565b90610728565b600254909150610686906001600160a01b03168361dead866107d2565b6003546040516340c10f1960e01b81526001600160a01b03909116906340c10f19906106b89085908590600401610af2565b600060405180830381600087803b1580156106d257600080fd5b505af11580156106e6573d6000803e3d6000fd5b505050507fcdee897399ab5e465acb1bd3ed5e32c695f196321764546c59720fa6c9ce4c69828460405161071b929190610af2565b60405180910390a1505050565b600061076a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610830565b90505b92915050565b6000826107825750600061076d565b8282028284828161078f57fe5b041461076a5760405162461bcd60e51b81526004016102af90610c17565b60008282018381101561076a5760405162461bcd60e51b81526004016102af90610bb9565b61082a846323b872dd60e01b8585856040516024016107f393929190610ace565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610867565b50505050565b600081836108515760405162461bcd60e51b81526004016102af9190610b16565b50600083858161085d57fe5b0495945050505050565b60606108bc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166108fb9092919063ffffffff16565b8051909150156108f657808060200190518101906108da9190610a52565b6108f65760405162461bcd60e51b81526004016102af90610cfb565b505050565b606061090a8484600085610912565b949350505050565b606061091d856109d6565b6109395760405162461bcd60e51b81526004016102af90610c8d565b60006060866001600160a01b031685876040516109569190610a9e565b60006040518083038185875af1925050503d8060008114610993576040519150601f19603f3d011682016040523d82523d6000602084013e610998565b606091505b509150915081156109ac57915061090a9050565b8051156109bc5780518082602001fd5b8360405162461bcd60e51b81526004016102af9190610b16565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061090a575050151592915050565b600060208284031215610a20578081fd5b81356001600160a01b038116811461076a578182fd5b600060208284031215610a47578081fd5b813561076a81610db1565b600060208284031215610a63578081fd5b815161076a81610db1565b600060208284031215610a7f578081fd5b5035919050565b600060208284031215610a97578081fd5b5051919050565b60008251610ab0818460208701610d85565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602082528251806020840152610b35816040850160208701610d85565b601f01601f19169190910160400192915050565b60208082526010908201526f14ddd85c081a5cc8191a5cd8589b195960821b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252600d908201526c27b7363c9023b7bb32b93732b960991b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252601d908201527f5377617020686173206e6f74206265656e207374617274656420796574000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b90815260200190565b60005b83811015610da0578181015183820152602001610d88565b8381111561082a5750506000910152565b8015158114610dbf57600080fd5b5056fea2646970667358221220e0c577e34e1b5dbabbdcbbc8fc8e3e109afaba11d016047a2373698b0a00273b64736f6c634300060c00330000000000000000000000000789ff5ba37f72abc4d561d00648acadc897b32d000000000000000000000000b66b5d38e183de42f21e92abcaf3c712dd5d628600000000000000000000000002fbd037a4db4a49f8afb0ff092bd3ad2784430700000000000000000000000000000000000000000000000000000000618b938b
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000789ff5ba37f72abc4d561d00648acadc897b32d000000000000000000000000b66b5d38e183de42f21e92abcaf3c712dd5d628600000000000000000000000002fbd037a4db4a49f8afb0ff092bd3ad2784430700000000000000000000000000000000000000000000000000000000618b938b
-----Decoded View---------------
Arg [0] : _morph (address): 0x0789ff5ba37f72abc4d561d00648acadc897b32d
Arg [1] : _pills (address): 0xb66b5d38e183de42f21e92abcaf3c712dd5d6286
Arg [2] : _gov (address): 0x02fbd037a4db4a49f8afb0ff092bd3ad27844307
Arg [3] : _startTime (uint256): 1636537227
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000789ff5ba37f72abc4d561d00648acadc897b32d
Arg [1] : 000000000000000000000000b66b5d38e183de42f21e92abcaf3c712dd5d6286
Arg [2] : 00000000000000000000000002fbd037a4db4a49f8afb0ff092bd3ad27844307
Arg [3] : 00000000000000000000000000000000000000000000000000000000618b938b
Deployed ByteCode Sourcemap
23593:2755:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24441:8;;;23593:2755;;;;23803:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23834:18;;;;;;;;;;;;;:::i;23772:24::-;;;;;;;;;;;;;:::i;23971:23::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20396:148::-;;;;;;;;;;;;;:::i;:::-;;23939:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;19754:79::-;;;;;;;;;;;;;:::i;24921:102::-;;;;;;;;;;-1:-1:-1;24921:102:0;;;;;:::i;:::-;;:::i;25035:112::-;;;;;;;;;;;;;:::i;24465:446::-;;;;;;;;;;;;;:::i;26184:159::-;;;;;;;;;;-1:-1:-1;26184:159:0;;;;;:::i;:::-;;:::i;25974:198::-;;;;;;;;;;-1:-1:-1;25974:198:0;;;;;:::i;:::-;;:::i;20699:244::-;;;;;;;;;;-1:-1:-1;20699:244:0;;;;;:::i;:::-;;:::i;23803:24::-;;;-1:-1:-1;;;;;23803:24:0;;:::o;23834:18::-;;;-1:-1:-1;;;;;23834:18:0;;:::o;23772:24::-;;;-1:-1:-1;;;;;23772:24:0;;:::o;23971:23::-;;;;;;:::o;20396:148::-;19976:12;:10;:12::i;:::-;19966:6;;-1:-1:-1;;;;;19966:6:0;;;:22;;;19958:67;;;;-1:-1:-1;;;19958:67:0;;;;;;;:::i;:::-;;;;;;;;;20503:1:::1;20487:6:::0;;20466:40:::1;::::0;-1:-1:-1;;;;;20487:6:0;;::::1;::::0;20466:40:::1;::::0;20503:1;;20466:40:::1;20534:1;20517:19:::0;;-1:-1:-1;;;;;;20517:19:0::1;::::0;;20396:148::o;23939:24::-;;;;:::o;19754:79::-;19792:7;19819:6;-1:-1:-1;;;;;19819:6:0;19754:79;:::o;24921:102::-;22601:1;23207:7;;:19;;23199:63;;;;-1:-1:-1;;;23199:63:0;;;;;;;:::i;:::-;22601:1;23340:7;:18;24989:26:::1;24995:6:::0;25004:10:::1;24989:5;:26::i;:::-;-1:-1:-1::0;22557:1:0;23519:22;;24921:102::o;25035:112::-;22601:1;23207:7;;:19;;23199:63;;;;-1:-1:-1;;;23199:63:0;;;;;;;:::i;:::-;22601:1;23340:7;:18;;;25098:5;:27:::1;::::0;-1:-1:-1;;;25098:27:0;;25092:47:::1;::::0;-1:-1:-1;;;;;25098:5:0::1;::::0;:15:::1;::::0;:27:::1;::::0;25114:10:::1;::::0;25098:27:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25128:10;25092:5;:47::i;:::-;22557:1:::0;23519:22;;25035:112::o;24465:446::-;24510:7;24535:13;24593:9;;24605:6;24593:18;24574:15;:38;24570:287;;;24634:16;24653:55;24700:7;24673:9;;24685:6;24673:18;24654:15;:39;24653:46;;:55;;;;:::i;:::-;24634:74;-1:-1:-1;24729:33:0;24758:3;24730:22;24742:1;24731:12;;24749:2;24730:18;:22::i;:::-;24729:28;;:33::i;:::-;24721:41;;24570:287;;;;-1:-1:-1;24841:3:0;24570:287;24886:5;-1:-1:-1;24465:446:0;:::o;26184:159::-;26257:3;;-1:-1:-1;;;;;26257:3:0;26243:10;:17;26234:45;;;;-1:-1:-1;;;26234:45:0;;;;;;;:::i;:::-;26294:3;:10;;-1:-1:-1;;;;;;26294:10:0;-1:-1:-1;;;;;26294:10:0;;;;;26322:13;;;;;;26294:10;;26322:13;:::i;:::-;;;;;;;;26184:159;:::o;25974:198::-;26058:3;;-1:-1:-1;;;;;26058:3:0;26044:10;:17;26035:45;;;;-1:-1:-1;;;26035:45:0;;;;;;;:::i;:::-;26095:11;:26;;-1:-1:-1;;26095:26:0;;;;;;;26137:27;;;;;;26095:26;;26137:27;:::i;20699:244::-;19976:12;:10;:12::i;:::-;19966:6;;-1:-1:-1;;;;;19966:6:0;;;:22;;;19958:67;;;;-1:-1:-1;;;19958:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20788:22:0;::::1;20780:73;;;;-1:-1:-1::0;;;20780:73:0::1;;;;;;;:::i;:::-;20890:6;::::0;;20869:38:::1;::::0;-1:-1:-1;;;;;20869:38:0;;::::1;::::0;20890:6;::::1;::::0;20869:38:::1;::::0;::::1;20918:6;:17:::0;;-1:-1:-1;;;;;;20918:17:0::1;-1:-1:-1::0;;;;;20918:17:0;;;::::1;::::0;;;::::1;::::0;;20699:244::o;18383:106::-;18471:10;18383:106;:::o;25155:810::-;25230:11;;;;25222:41;;;;-1:-1:-1;;;25222:41:0;;;;;;;:::i;:::-;25295:15;25282:9;;:28;;25274:71;;;;-1:-1:-1;;;25274:71:0;;;;;;;:::i;:::-;25716:18;25737:35;25757:14;:12;:14::i;:::-;25737:15;:6;25748:3;25737:10;:15::i;:::-;:19;;:35::i;:::-;25785:5;;25716:56;;-1:-1:-1;25785:48:0;;-1:-1:-1;;;;;25785:5:0;25808:4;23889:42;25826:6;25785:22;:48::i;:::-;25858:5;;:29;;-1:-1:-1;;;25858:29:0;;-1:-1:-1;;;;;25858:5:0;;;;:10;;:29;;25869:4;;25876:10;;25858:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25925:22;25933:4;25940:6;25925:22;;;;;;;:::i;:::-;;;;;;;;25155:810;;;:::o;10032:132::-;10090:7;10117:39;10121:1;10124;10117:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;10110:46;;10032:132;;;;;:::o;9085:471::-;9143:7;9388:6;9384:47;;-1:-1:-1;9418:1:0;9411:8;;9384:47;9455:5;;;9459:1;9455;:5;:1;9479:5;;;;;:10;9471:56;;;;-1:-1:-1;;;9471:56:0;;;;;;;:::i;7731:181::-;7789:7;7821:5;;;7845:6;;;;7837:46;;;;-1:-1:-1;;;7837:46:0;;;;;;;:::i;3769:253::-;3918:96;3938:5;3968:27;;;3997:4;4003:2;4007:5;3945:68;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3945:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;3945:68:0;-1:-1:-1;;;;;;3945:68:0;;;;;;;;;;3918:19;:96::i;:::-;3769:253;;;;:::o;10660:278::-;10746:7;10781:12;10774:5;10766:28;;;;-1:-1:-1;;;10766:28:0;;;;;;;;:::i;:::-;;10805:9;10821:1;10817;:5;;;;;;;10660:278;-1:-1:-1;;;;;10660:278:0:o;6105:779::-;6534:23;6560:69;6588:4;6560:69;;;;;;;;;;;;;;;;;6568:5;-1:-1:-1;;;;;6560:27:0;;;:69;;;;;:::i;:::-;6644:17;;6534:95;;-1:-1:-1;6644:21:0;6640:237;;6799:10;6788:30;;;;;;;;;;;;:::i;:::-;6780:85;;;;-1:-1:-1;;;6780:85:0;;;;;;;:::i;:::-;6105:779;;;:::o;15987:196::-;16090:12;16122:53;16145:6;16153:4;16159:1;16162:12;16122:22;:53::i;:::-;16115:60;15987:196;-1:-1:-1;;;;15987:196:0:o;17364:979::-;17494:12;17527:18;17538:6;17527:10;:18::i;:::-;17519:60;;;;-1:-1:-1;;;17519:60:0;;;;;;;:::i;:::-;17653:12;17667:23;17694:6;-1:-1:-1;;;;;17694:11:0;17714:8;17725:4;17694:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17652:78;;;;17745:7;17741:595;;;17776:10;-1:-1:-1;17769:17:0;;-1:-1:-1;17769:17:0;17741:595;17890:17;;:21;17886:439;;18153:10;18147:17;18214:15;18201:10;18197:2;18193:19;18186:44;18101:148;18296:12;18289:20;;-1:-1:-1;;;18289:20:0;;;;;;;;:::i;12872:619::-;12932:4;13400:20;;13243:66;13440:23;;;;;;:42;;-1:-1:-1;;13467:15:0;;;13432:51;-1:-1:-1;;12872:619:0:o;686:241:-1:-;;790:2;778:9;769:7;765:23;761:32;758:2;;;-1:-1;;796:12;758:2;72:20;;-1:-1;;;;;14470:54;;15732:35;;15722:2;;-1:-1;;15771:12;934:235;;1035:2;1023:9;1014:7;1010:23;1006:32;1003:2;;;-1:-1;;1041:12;1003:2;219:6;206:20;231:30;255:5;231:30;:::i;1176:257::-;;1288:2;1276:9;1267:7;1263:23;1259:32;1256:2;;;-1:-1;;1294:12;1256:2;354:6;348:13;366:30;390:5;366:30;:::i;1440:241::-;;1544:2;1532:9;1523:7;1519:23;1515:32;1512:2;;;-1:-1;;1550:12;1512:2;-1:-1;475:20;;1506:175;-1:-1;1506:175::o;1688:263::-;;1803:2;1791:9;1782:7;1778:23;1774:32;1771:2;;;-1:-1;;1809:12;1771:2;-1:-1;623:13;;1765:186;-1:-1;1765:186::o;6835:271::-;;2498:5;13723:12;2609:52;2654:6;2649:3;2642:4;2635:5;2631:16;2609:52;:::i;:::-;2673:16;;;;;6969:137;-1:-1;;6969:137::o;7113:222::-;-1:-1;;;;;14470:54;;;;2178:37;;7240:2;7225:18;;7211:124::o;7587:444::-;-1:-1;;;;;14470:54;;;2178:37;;14470:54;;;;7934:2;7919:18;;2178:37;8017:2;8002:18;;6786:37;;;;7770:2;7755:18;;7741:290::o;8038:333::-;-1:-1;;;;;14470:54;;;;2178:37;;8357:2;8342:18;;6786:37;8193:2;8178:18;;8164:207::o;8378:210::-;14382:13;;14375:21;2292:34;;8499:2;8484:18;;8470:118::o;8860:310::-;;9007:2;9028:17;9021:47;3015:5;13723:12;14162:6;9007:2;8996:9;8992:18;14150:19;3109:52;3154:6;14190:14;8996:9;14190:14;9007:2;3135:5;3131:16;3109:52;:::i;:::-;15652:7;15636:14;-1:-1;;15632:28;3173:39;;;;14190:14;3173:39;;8978:192;-1:-1;;8978:192::o;9177:416::-;9377:2;9391:47;;;3449:2;9362:18;;;14150:19;-1:-1;;;14190:14;;;3465:39;3523:12;;;9348:245::o;9600:416::-;9800:2;9814:47;;;3774:2;9785:18;;;14150:19;3810:34;14190:14;;;3790:55;-1:-1;;;3865:12;;;3858:30;3907:12;;;9771:245::o;10023:416::-;10223:2;10237:47;;;4158:2;10208:18;;;14150:19;4194:29;14190:14;;;4174:50;4243:12;;;10194:245::o;10446:416::-;10646:2;10660:47;;;4494:2;10631:18;;;14150:19;-1:-1;;;14190:14;;;4510:36;4565:12;;;10617:245::o;10869:416::-;11069:2;11083:47;;;4816:2;11054:18;;;14150:19;4852:34;14190:14;;;4832:55;-1:-1;;;4907:12;;;4900:25;4944:12;;;11040:245::o;11292:416::-;11492:2;11506:47;;;11477:18;;;14150:19;5231:34;14190:14;;;5211:55;5285:12;;;11463:245::o;11715:416::-;11915:2;11929:47;;;5536:2;11900:18;;;14150:19;5572:31;14190:14;;;5552:52;5623:12;;;11886:245::o;12138:416::-;12338:2;12352:47;;;5874:2;12323:18;;;14150:19;5910:31;14190:14;;;5890:52;5961:12;;;12309:245::o;12561:416::-;12761:2;12775:47;;;6212:2;12746:18;;;14150:19;6248:34;14190:14;;;6228:55;-1:-1;;;6303:12;;;6296:34;6349:12;;;12732:245::o;12984:416::-;13184:2;13198:47;;;6600:2;13169:18;;;14150:19;6636:33;14190:14;;;6616:54;6689:12;;;13155:245::o;13407:222::-;6786:37;;;13534:2;13519:18;;13505:124::o;15292:268::-;15357:1;15364:101;15378:6;15375:1;15372:13;15364:101;;;15445:11;;;15439:18;15426:11;;;15419:39;15400:2;15393:10;15364:101;;;15480:6;15477:1;15474:13;15471:2;;;-1:-1;;15357:1;15527:16;;15520:27;15341:219::o;15797:111::-;15878:5;14382:13;14375:21;15856:5;15853:32;15843:2;;15899:1;;15889:12;15843:2;15837:71;:::o
Swarm Source
ipfs://e0c577e34e1b5dbabbdcbbc8fc8e3e109afaba11d016047a2373698b0a00273b
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Validator ID :
0 FTM
Amount Staked
0
Amount Delegated
0
Staking Total
0
Staking Start Epoch
0
Staking Start Time
0
Proof of Importance
0
Origination Score
0
Validation Score
0
Active
0
Online
0
Downtime
0 s
Address | Amount | claimed Rewards | Created On Epoch | Created On |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.