Contract Overview
Balance:
0 FTM
FTM Value:
$0.00
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0x5c44a7baae41b7d3fd10fb5a6ad5ca444261ac7bd74ff9899228889b9e159e56 | 41085563 | 275 days 11 hrs ago | 0xcbd4e556fc24c83159defd1d1bbad66fd7d2c75c | Contract Creation | 0 FTM |
[ Download CSV Export ]
Contract Name:
MarketManager
Compiler Version
v0.7.6+commit.7338295f
Optimization Enabled:
Yes with 100 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: LICENSED // Solidity files have to start with this pragma. // It will be used by the Solidity compiler to validate its version. pragma solidity ^0.7.0; pragma abicoder v2; import "./interfaces/ERC20Interface.sol"; import "./interfaces/ICard.sol"; import "./interfaces/IConverter.sol"; import "./MultiSigOwner.sol"; import "./Manager.sol"; contract MarketManager is MultiSigOwner, Manager { // default market , which is used when user didn't select any market for his main market address public defaultMarket; /// @notice A list of all assets address[] public allMarkets; // enable or disable for each market mapping(address => bool) public marketEnable; // store user's main asset used when user make payment. mapping(address => address) public userMainMarket; address public WETH; // // this is main currency for master wallet, master wallet will get always this token. normally we use USDC for this token. address public USDC; // // this is okse token address, which is used for setting of user's daily level and cashback. address public OKSE; // Set whether user can use okse as payment asset. normally it is false. bool public oksePaymentEnable; bool public emergencyStop; uint256 public slippage; address public immutable converter; modifier marketSupported(address market) { require(isMarketExist(market), "mns"); _; } // verified modifier marketEnabled(address market) { require(marketEnable[market], "mdnd"); _; } event MarketAdded(address market); event DefaultMarketChanged(address newMarket); event TokenAddressChanged(address okse, address usdc); event EmergencyStopChanged(bool emergencyStop); event OkseAsPaymentChanged(bool oksePaymentEnable); event MarketEnableChanged(address market, bool bEnable); event SlippageChanged(uint256 slippage); constructor( address _cardContract, address _WETH, address _usdcAddress, address _okseAddress, address _converter ) Manager(_cardContract) { WETH = _WETH; USDC = _usdcAddress; OKSE = _okseAddress; _addMarketInternal(WETH); _addMarketInternal(USDC); _addMarketInternal(OKSE); defaultMarket = WETH; converter = _converter; slippage = 1000; // 10% } //verified function _addMarketInternal(address assetAddr) internal { for (uint256 i = 0; i < allMarkets.length; i++) { require(allMarkets[i] != assetAddr, "maa"); } allMarkets.push(assetAddr); marketEnable[assetAddr] = true; emit MarketAdded(assetAddr); } ////////////////////////// Read functions ///////////////////////////////////////////////////////////// function isMarketExist(address market) public view returns (bool) { bool marketExist = false; for (uint256 i = 0; i < allMarkets.length; i++) { if (allMarkets[i] == market) { marketExist = true; } } return marketExist; } function getBlockTime() public view returns (uint256) { return block.timestamp; } function getAllMarkets() public view returns (address[] memory) { return allMarkets; } function getUserMainMarket(address userAddr) public view returns (address) { if (userMainMarket[userAddr] == address(0)) { return defaultMarket; // return default market } address market = userMainMarket[userAddr]; if (marketEnable[market] == false) { return defaultMarket; // return default market } return market; } function getBatchUserAssetAmount(address userAddr) public view returns ( address[] memory, uint256[] memory, uint256[] memory ) { uint256[] memory assets = new uint256[](allMarkets.length); uint256[] memory decimals = new uint256[](allMarkets.length); for (uint256 i = 0; i < allMarkets.length; i++) { assets[i] = ICard(cardContract).usersBalances( userAddr, allMarkets[i] ); ERC20Interface token = ERC20Interface(allMarkets[i]); uint256 tokenDecimal = uint256(token.decimals()); decimals[i] = tokenDecimal; } return (allMarkets, assets, decimals); } function getBatchUserBalanceInUsd(address userAddr) public view returns (address[] memory, uint256[] memory) { uint256[] memory assets = new uint256[](allMarkets.length); for (uint256 i = 0; i < allMarkets.length; i++) { assets[i] = IConverter(converter).getUsdAmount( allMarkets[i], ICard(cardContract).usersBalances(userAddr, allMarkets[i]), ICard(cardContract).priceOracle() ); } return (allMarkets, assets); } function getUserBalanceInUsd(address userAddr) public view returns (uint256) { address market = getUserMainMarket(userAddr); uint256 assetAmount = ICard(cardContract).usersBalances( userAddr, market ); uint256 usdAmount = IConverter(converter).getUsdAmount( market, assetAmount, ICard(cardContract).priceOracle() ); return usdAmount; } ///////////////// CallBack functions from card contract ////////////////////////////////////////////// function setUserMainMakret(address userAddr, address market) public onlyFromCardContract { if (getUserMainMarket(userAddr) == market) return; userMainMarket[userAddr] = market; } //////////////////// Owner functions //////////////////////////////////////////////////////////////// // verified function addMarket(bytes calldata signData, bytes calldata keys) public validSignOfOwner(signData, keys, "addMarket") { (, , , bytes memory params) = abi.decode( signData, (bytes4, uint256, uint256, bytes) ); address market = abi.decode(params, (address)); _addMarketInternal(market); } function setDefaultMarket(bytes calldata signData, bytes calldata keys) public validSignOfOwner(signData, keys, "setDefaultMarket") { (, , , bytes memory params) = abi.decode( signData, (bytes4, uint256, uint256, bytes) ); address market = abi.decode(params, (address)); require(isMarketExist(market), "me"); require(marketEnable[market], "mn"); defaultMarket = market; emit DefaultMarketChanged(market); } // verified function enableMarket(bytes calldata signData, bytes calldata keys) public validSignOfOwner(signData, keys, "enableMarket") { (, , , bytes memory params) = abi.decode( signData, (bytes4, uint256, uint256, bytes) ); (address market, bool bEnable) = abi.decode(params, (address, bool)); marketEnable[market] = bEnable; emit MarketEnableChanged(market, bEnable); } function setParams(bytes calldata signData, bytes calldata keys) external validSignOfOwner(signData, keys, "setParams") { (, , , bytes memory params) = abi.decode( signData, (bytes4, uint256, uint256, bytes) ); (address _newOkse, address _newUSDC) = abi.decode( params, (address, address) ); OKSE = _newOkse; USDC = _newUSDC; emit TokenAddressChanged(OKSE, USDC); } // verified function setOkseAsPayment(bytes calldata signData, bytes calldata keys) public validSignOfOwner(signData, keys, "setOkseAsPayment") { (, , , bytes memory params) = abi.decode( signData, (bytes4, uint256, uint256, bytes) ); bool bEnable = abi.decode(params, (bool)); oksePaymentEnable = bEnable; emit OkseAsPaymentChanged(oksePaymentEnable); } function setSlippage(bytes calldata signData, bytes calldata keys) public validSignOfOwner(signData, keys, "setSlippage") { (, , , bytes memory params) = abi.decode( signData, (bytes4, uint256, uint256, bytes) ); uint256 _value = abi.decode(params, (uint256)); slippage = _value; emit SlippageChanged(slippage); } function setEmergencyStop(bytes calldata signData, bytes calldata keys) public validSignOfOwner(signData, keys, "setEmergencyStop") { (, , , bytes memory params) = abi.decode( signData, (bytes4, uint256, uint256, bytes) ); bool _value = abi.decode(params, (bool)); emergencyStop = _value; emit EmergencyStopChanged(emergencyStop); } }
//SPDX-License-Identifier: UNLICENSED pragma solidity ^0.7.0; interface ERC20Interface { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the token decimals. */ function decimals() external view returns (uint8); /** * @dev Returns the token symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the token name. */ function name() external view returns (string memory); /** * @dev Returns the bep token owner. */ function getOwner() external view returns (address); /** * @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); }
// SPDX-License-Identifier: LICENSED pragma solidity ^0.7.0; interface ICard { function getUserOkseBalance(address userAddr) external view returns (uint256); function getUserAssetAmount(address userAddr, address market) external view returns (uint256); function usersBalances(address userAddr, address market) external view returns (uint256); function priceOracle() external view returns (address); }
// SPDX-License-Identifier: LICENSED pragma solidity ^0.7.0; interface IConverter { function convertUsdAmountToAssetAmount( uint256 usdAmount, address assetAddress ) external view returns (uint256); function convertAssetAmountToUsdAmount( uint256 assetAmount, address assetAddress ) external view returns (uint256); function getUsdAmount( address market, uint256 assetAmount, address priceOracle ) external view returns (uint256 usdAmount); function getAssetAmount( address market, uint256 usdAmount, address priceOracle ) external view returns (uint256 assetAmount); }
// SPDX-License-Identifier: LICENSED pragma solidity ^0.7.0; pragma abicoder v2; // 2/3 Multi Sig Owner contract MultiSigOwner { address[] public owners; mapping(uint256 => bool) public signatureId; bool private initialized; // events event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); event SignValidTimeChanged(uint256 newValue); modifier validSignOfOwner( bytes calldata signData, bytes calldata keys, string memory functionName ) { require(isOwner(msg.sender), "on"); address signer = getSigner(signData, keys); require( signer != msg.sender && isOwner(signer) && signer != address(0), "is" ); (bytes4 method, uint256 id, uint256 validTime, ) = abi.decode( signData, (bytes4, uint256, uint256, bytes) ); require( signatureId[id] == false && method == bytes4(keccak256(bytes(functionName))), "sru" ); require(validTime > block.timestamp, "ep"); signatureId[id] = true; _; } function isOwner(address addr) public view returns (bool) { bool _isOwner = false; for (uint256 i = 0; i < owners.length; i++) { if (owners[i] == addr) { _isOwner = true; } } return _isOwner; } constructor() {} function initializeOwners(address[3] memory _owners) public { require( !initialized && _owners[0] != address(0) && _owners[1] != address(0) && _owners[2] != address(0), "ai" ); owners = [_owners[0], _owners[1], _owners[2]]; initialized = true; } function getSigner(bytes calldata _data, bytes calldata keys) public view returns (address) { uint256 chainId; assembly { chainId := chainid() } (uint8 v, bytes32 r, bytes32 s) = abi.decode( keys, (uint8, bytes32, bytes32) ); return ecrecover( toEthSignedMessageHash( keccak256(abi.encodePacked(this, chainId, _data)) ), v, r, s ); } function encodePackedData(bytes calldata _data) public view returns (bytes32) { uint256 chainId; assembly { chainId := chainid() } return keccak256(abi.encodePacked(this, chainId, _data)); } function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { return keccak256( abi.encodePacked("\x19Ethereum Signed Message:\n32", hash) ); } // Set functions // verified function transferOwnership(bytes calldata signData, bytes calldata keys) public validSignOfOwner(signData, keys, "transferOwnership") { (, , , bytes memory params) = abi.decode( signData, (bytes4, uint256, uint256, bytes) ); address newOwner = abi.decode(params, (address)); uint256 index; for (uint256 i = 0; i < owners.length; i++) { if (owners[i] == msg.sender) { index = i; } } address oldOwner = owners[index]; owners[index] = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
//SPDX-License-Identifier: LICENSED // Solidity files have to start with this pragma. // It will be used by the Solidity compiler to validate its version. pragma solidity ^0.7.0; contract Manager { address public immutable cardContract; constructor(address _cardContract) { cardContract = _cardContract; } /// modifier functions modifier onlyFromCardContract() { require(msg.sender == cardContract, "oc"); _; } }
{ "optimizer": { "enabled": true, "runs": 100 }, "metadata": { "bytecodeHash": "none", "useLiteralContent": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_cardContract","type":"address"},{"internalType":"address","name":"_WETH","type":"address"},{"internalType":"address","name":"_usdcAddress","type":"address"},{"internalType":"address","name":"_okseAddress","type":"address"},{"internalType":"address","name":"_converter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newMarket","type":"address"}],"name":"DefaultMarketChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"emergencyStop","type":"bool"}],"name":"EmergencyStopChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"market","type":"address"}],"name":"MarketAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"market","type":"address"},{"indexed":false,"internalType":"bool","name":"bEnable","type":"bool"}],"name":"MarketEnableChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"oksePaymentEnable","type":"bool"}],"name":"OkseAsPaymentChanged","type":"event"},{"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":"uint256","name":"newValue","type":"uint256"}],"name":"SignValidTimeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"slippage","type":"uint256"}],"name":"SlippageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"okse","type":"address"},{"indexed":false,"internalType":"address","name":"usdc","type":"address"}],"name":"TokenAddressChanged","type":"event"},{"inputs":[],"name":"OKSE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"signData","type":"bytes"},{"internalType":"bytes","name":"keys","type":"bytes"}],"name":"addMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allMarkets","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cardContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"converter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultMarket","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyStop","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"signData","type":"bytes"},{"internalType":"bytes","name":"keys","type":"bytes"}],"name":"enableMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"encodePackedData","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllMarkets","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddr","type":"address"}],"name":"getBatchUserAssetAmount","outputs":[{"internalType":"address[]","name":"","type":"address[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddr","type":"address"}],"name":"getBatchUserBalanceInUsd","outputs":[{"internalType":"address[]","name":"","type":"address[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"keys","type":"bytes"}],"name":"getSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddr","type":"address"}],"name":"getUserBalanceInUsd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddr","type":"address"}],"name":"getUserMainMarket","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[3]","name":"_owners","type":"address[3]"}],"name":"initializeOwners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"market","type":"address"}],"name":"isMarketExist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oksePaymentEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"owners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"signData","type":"bytes"},{"internalType":"bytes","name":"keys","type":"bytes"}],"name":"setDefaultMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"signData","type":"bytes"},{"internalType":"bytes","name":"keys","type":"bytes"}],"name":"setEmergencyStop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"signData","type":"bytes"},{"internalType":"bytes","name":"keys","type":"bytes"}],"name":"setOkseAsPayment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"signData","type":"bytes"},{"internalType":"bytes","name":"keys","type":"bytes"}],"name":"setParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"signData","type":"bytes"},{"internalType":"bytes","name":"keys","type":"bytes"}],"name":"setSlippage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddr","type":"address"},{"internalType":"address","name":"market","type":"address"}],"name":"setUserMainMakret","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"signatureId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"slippage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"signData","type":"bytes"},{"internalType":"bytes","name":"keys","type":"bytes"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userMainMarket","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c06040523480156200001157600080fd5b5060405162002bc638038062002bc6833981016040819052620000349162000235565b6001600160601b0319606086901b16608052600680546001600160a01b038681166001600160a01b0319928316179283905560078054878316908416179055600880548683169316929092179091556200008f911662000108565b600754620000a6906001600160a01b031662000108565b600854620000bd906001600160a01b031662000108565b60065460028054610100600160a81b0319166101006001600160a01b039093169290920291909117905560601b6001600160601b03191660a05250506103e860095550620002d59050565b60005b6003548110156200017657816001600160a01b0316600382815481106200012e57fe5b6000918252602090912001546001600160a01b031614156200016d5760405162461bcd60e51b81526004016200016490620002b8565b60405180910390fd5b6001016200010b565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b03841690811790915560009081526004602052604090819020805460ff1916909217909155517fbc600b1f03d316c479b49930c28e328809316458d5b5dacbb7419df5f6f89647906200020d908390620002a4565b60405180910390a150565b80516001600160a01b03811681146200023057600080fd5b919050565b600080600080600060a086880312156200024d578081fd5b620002588662000218565b9450620002686020870162000218565b9350620002786040870162000218565b9250620002886060870162000218565b9150620002986080870162000218565b90509295509295909350565b6001600160a01b0391909116815260200190565b6020808252600390820152626d616160e81b604082015260600190565b60805160601c60a05160601c61289f62000327600039806104e35280610c80528061188752508061053d52806106015280610bde5280610cb15280610fe2528061120c5280611f70525061289f6000f3fe608060405234801561001057600080fd5b50600436106101c65760003560e01c806387ceff09116100fa578063b2b9f0ed1161009d578063b2b9f0ed1461039f578063bd38837b146103b2578063be2ec3bc146103ba578063c0379347146103cd578063c3d74bee146103e0578063c4f39e54146103f3578063d1f21f4f14610406578063dffda16314610419578063e8b624ad14610421576101c6565b806387ceff091461033157806389a30271146103395780638aa7ba67146103415780638f12224514610349578063a5820b4f1461035c578063a82f84891461036f578063ad5c464814610382578063b0772d0b1461038a576101c6565b8063495b2f2b1161016d578063495b2f2b1461028d57806350ced2fd146102a057806352d84d1e146102b357806363a599a4146102c657806368af81e6146102ce578063693bd2d0146102e15780636f9e4f0b146102e957806375e16b17146102fc5780637a3e39641461030f576101c6565b806301e7c75d146101cb578063025e7c27146101e9578063038dcffe146101fc57806326f0d4601461021c5780632f54bf6e1461023d57806339a40fe9146102505780633e032a3b14610265578063412f60ed1461027a575b600080fd5b6101d3610434565b6040516101e0919061264d565b60405180910390f35b6101d36101f73660046124f7565b610448565b61020f61020a366004612220565b610472565b6040516101e09190612734565b61022f61022a366004612220565b610487565b6040516101e09291906126cc565b61020f61024b366004612220565b610787565b61026361025e36600461248f565b6107de565b005b61026d6109df565b6040516101e0919061273f565b61026361028836600461248f565b6109e5565b61026d61029b366004612220565b610bcc565b6102636102ae36600461248f565b610db7565b6101d36102c13660046124f7565b610f85565b61020f610f95565b61026d6102dc366004612450565b610fa5565b6101d3610fe0565b6102636102f73660046122f9565b611004565b6101d361030a36600461248f565b6110bc565b61032261031d366004612220565b611165565b6040516101e0939291906126f1565b61026d611411565b6101d3611415565b61020f611424565b61026361035736600461248f565b611434565b61026361036a36600461248f565b611659565b6101d361037d366004612220565b6117e4565b6101d36117ff565b61039261180e565b6040516101e091906126b9565b61020f6103ad3660046124f7565b611870565b6101d3611885565b6101d36103c8366004612220565b6118a9565b61020f6103db366004612220565b611932565b6102636103ee36600461248f565b611980565b61026361040136600461248f565b611b29565b61026361041436600461248f565b611cf7565b6101d3611f56565b61026361042f3660046122cc565b611f65565b60025461010090046001600160a01b031681565b6000818154811061045857600080fd5b6000918252602090912001546001600160a01b0316905081565b60046020526000908152604090205460ff1681565b60608060006003805490506001600160401b03811180156104a757600080fd5b506040519080825280602002602001820160405280156104d1578160200160208202803683370190505b50905060005b60035481101561071d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663788e10b86003838154811061051d57fe5b9060005260206000200160009054906101000a90046001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cefd071b896003878154811061057857fe5b6000918252602090912001546040516001600160e01b031960e085901b1681526105af92916001600160a01b031690600401612661565b60206040518083038186803b1580156105c757600080fd5b505afa1580156105db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ff919061250f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632630c12f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561065857600080fd5b505afa15801561066c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106909190612243565b6040518463ffffffff1660e01b81526004016106ae93929190612696565b60206040518083038186803b1580156106c657600080fd5b505afa1580156106da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fe919061250f565b82828151811061070a57fe5b60209081029190910101526001016104d7565b506003818180548060200260200160405190810160405280929190818152602001828054801561077657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610758575b505050505091509250925050915091565b600080805b6000548110156107d557836001600160a01b0316600082815481106107ad57fe5b6000918252602090912001546001600160a01b031614156107cd57600191505b60010161078c565b5090505b919050565b8383838360405180604001604052806009815260200168736574506172616d7360b81b81525061080d33610787565b6108325760405162461bcd60e51b815260040161082990612783565b60405180910390fd5b6000610840868686866110bc565b90506001600160a01b038116331480159061085f575061085f81610787565b801561087357506001600160a01b03811615155b61088f5760405162461bcd60e51b8152600401610829906127f3565b6000808061089f888a018a612398565b50600082815260016020526040902054929550909350915060ff161580156108d95750845160208601206001600160e01b03198481169116145b6108f55760405162461bcd60e51b81526004016108299061282b565b4281116109145760405162461bcd60e51b8152600401610829906127bb565b60008281526001602081905260408220805460ff1916909117905561093b8d8f018f612398565b935050505060008082806020019051810190610957919061225f565b600880546001600160a01b038085166001600160a01b0319928316179283905560078054828616931692909217918290556040519496509294507f5527f14e7199c63a0d6caffa1fd8eab9a6e595207bc2b23ae26a028acde7eefa936109c593928316929190911690612661565b60405180910390a150505050505050505050505050505050565b60095481565b838383836040518060400160405280601081526020016f1cd95d13dadcd9505cd4185e5b595b9d60821b815250610a1b33610787565b610a375760405162461bcd60e51b815260040161082990612783565b6000610a45868686866110bc565b90506001600160a01b0381163314801590610a645750610a6481610787565b8015610a7857506001600160a01b03811615155b610a945760405162461bcd60e51b8152600401610829906127f3565b60008080610aa4888a018a612398565b50600082815260016020526040902054929550909350915060ff16158015610ade5750845160208601206001600160e01b03198481169116145b610afa5760405162461bcd60e51b81526004016108299061282b565b428111610b195760405162461bcd60e51b8152600401610829906127bb565b60008281526001602081905260408220805460ff19169091179055610b408d8f018f612398565b9350505050600081806020019051810190610b5b919061237e565b6008805460ff60a01b1916600160a01b831515810291909117918290556040519293507f3cf9b8e7770ffe33dd661b325726560586f9b997767db9add34348c8311eb2fd92610bb39260ff9290049190911690612734565b60405180910390a1505050505050505050505050505050565b600080610bd8836118a9565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cefd071b85846040518363ffffffff1660e01b8152600401610c2a929190612661565b60206040518083038186803b158015610c4257600080fd5b505afa158015610c56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7a919061250f565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663788e10b884847f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632630c12f6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d0857600080fd5b505afa158015610d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d409190612243565b6040518463ffffffff1660e01b8152600401610d5e93929190612696565b60206040518083038186803b158015610d7657600080fd5b505afa158015610d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dae919061250f565b95945050505050565b838383836040518060400160405280601081526020016f0736574456d657267656e637953746f760841b815250610ded33610787565b610e095760405162461bcd60e51b815260040161082990612783565b6000610e17868686866110bc565b90506001600160a01b0381163314801590610e365750610e3681610787565b8015610e4a57506001600160a01b03811615155b610e665760405162461bcd60e51b8152600401610829906127f3565b60008080610e76888a018a612398565b50600082815260016020526040902054929550909350915060ff16158015610eb05750845160208601206001600160e01b03198481169116145b610ecc5760405162461bcd60e51b81526004016108299061282b565b428111610eeb5760405162461bcd60e51b8152600401610829906127bb565b60008281526001602081905260408220805460ff19169091179055610f128d8f018f612398565b9350505050600081806020019051810190610f2d919061237e565b6008805460ff60a81b1916600160a81b831515810291909117918290556040519293507f6c0090cbbfa9373c32ee731ed1968f0193a85509bf596f7f9b89705951c2399d92610bb39260ff9290049190911690612734565b6003818154811061045857600080fd5b600854600160a81b900460ff1681565b6040516000904690610fc19030908390879087906020016125e9565b6040516020818303038152906040528051906020012091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff16158015611020575080516001600160a01b031615155b8015611038575060208101516001600160a01b031615155b8015611050575060408101516001600160a01b031615155b61106c5760405162461bcd60e51b81526004016108299061280f565b6040805160608101825282516001600160a01b0390811682526020808501518216908301528383015116918101919091526110ab906000906003612150565b50506002805460ff19166001179055565b6000468180806110ce86880188612543565b925092509250600161110b30868c8c6040516020016110f094939291906125e9565b60405160208183030381529060405280519060200120612021565b8484846040516000815260200160405260405161112b9493929190612748565b6020604051602081039080840390855afa15801561114d573d6000803e3d6000fd5b5050604051601f1901519a9950505050505050505050565b606080606060006003805490506001600160401b038111801561118757600080fd5b506040519080825280602002602001820160405280156111b1578160200160208202803683370190505b506003549091506000906001600160401b03811180156111d057600080fd5b506040519080825280602002602001820160405280156111fa578160200160208202803683370190505b50905060005b6003548110156113a1577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cefd071b886003848154811061124757fe5b6000918252602090912001546040516001600160e01b031960e085901b16815261127e92916001600160a01b031690600401612661565b60206040518083038186803b15801561129657600080fd5b505afa1580156112aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ce919061250f565b8382815181106112da57fe5b6020026020010181815250506000600382815481106112f557fe5b60009182526020808320909101546040805163313ce56760e01b815290516001600160a01b039092169450849263313ce56792600480840193829003018186803b15801561134257600080fd5b505afa158015611356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137a9190612527565b60ff1690508084848151811061138c57fe5b60209081029190910101525050600101611200565b5060038282828054806020026020016040519081016040528092919081815260200182805480156113fb57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116113dd575b5050505050925094509450945050509193909250565b4290565b6007546001600160a01b031681565b600854600160a01b900460ff1681565b838383836040518060400160405280601081526020016f1cd95d111959985d5b1d13585c9ad95d60821b81525061146a33610787565b6114865760405162461bcd60e51b815260040161082990612783565b6000611494868686866110bc565b90506001600160a01b03811633148015906114b357506114b381610787565b80156114c757506001600160a01b03811615155b6114e35760405162461bcd60e51b8152600401610829906127f3565b600080806114f3888a018a612398565b50600082815260016020526040902054929550909350915060ff1615801561152d5750845160208601206001600160e01b03198481169116145b6115495760405162461bcd60e51b81526004016108299061282b565b4281116115685760405162461bcd60e51b8152600401610829906127bb565b60008281526001602081905260408220805460ff1916909117905561158f8d8f018f612398565b93505050506000818060200190518101906115aa9190612243565b90506115b581611932565b6115d15760405162461bcd60e51b8152600401610829906127d7565b6001600160a01b03811660009081526004602052604090205460ff166116095760405162461bcd60e51b81526004016108299061279f565b60028054610100600160a81b0319166101006001600160a01b038416021790556040517faad6c4dfd9c3ae6dc778c3c1f76f56fcac002db9c6adc5b8e4613008009e77b690610bb390839061264d565b838383836040518060400160405280600981526020016818591913585c9ad95d60ba1b81525061168833610787565b6116a45760405162461bcd60e51b815260040161082990612783565b60006116b2868686866110bc565b90506001600160a01b03811633148015906116d157506116d181610787565b80156116e557506001600160a01b03811615155b6117015760405162461bcd60e51b8152600401610829906127f3565b60008080611711888a018a612398565b50600082815260016020526040902054929550909350915060ff1615801561174b5750845160208601206001600160e01b03198481169116145b6117675760405162461bcd60e51b81526004016108299061282b565b4281116117865760405162461bcd60e51b8152600401610829906127bb565b60008281526001602081905260408220805460ff191690911790556117ad8d8f018f612398565b93505050506000818060200190518101906117c89190612243565b90506117d381612051565b505050505050505050505050505050565b6005602052600090815260409020546001600160a01b031681565b6006546001600160a01b031681565b6060600380548060200260200160405190810160405280929190818152602001828054801561186657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611848575b5050505050905090565b60016020526000908152604090205460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b038181166000908152600560205260408120549091166118e1575060025461010090046001600160a01b03166107d9565b6001600160a01b0380831660009081526005602090815260408083205490931680835260049091529190205460ff1661192c57505060025461010090046001600160a01b03166107d9565b92915050565b600080805b6003548110156107d557836001600160a01b03166003828154811061195857fe5b6000918252602090912001546001600160a01b0316141561197857600191505b600101611937565b838383836040518060400160405280600b81526020016a736574536c69707061676560a81b8152506119b133610787565b6119cd5760405162461bcd60e51b815260040161082990612783565b60006119db868686866110bc565b90506001600160a01b03811633148015906119fa57506119fa81610787565b8015611a0e57506001600160a01b03811615155b611a2a5760405162461bcd60e51b8152600401610829906127f3565b60008080611a3a888a018a612398565b50600082815260016020526040902054929550909350915060ff16158015611a745750845160208601206001600160e01b03198481169116145b611a905760405162461bcd60e51b81526004016108299061282b565b428111611aaf5760405162461bcd60e51b8152600401610829906127bb565b60008281526001602081905260408220805460ff19169091179055611ad68d8f018f612398565b9350505050600081806020019051810190611af1919061250f565b60098190556040519091507febfb7b9839a38a6c5d27e43aeb27cf7c47a40bde9262cabba968aecd6336ea1090610bb390839061273f565b838383836040518060400160405280600c81526020016b195b98589b1953585c9ad95d60a21b815250611b5b33610787565b611b775760405162461bcd60e51b815260040161082990612783565b6000611b85868686866110bc565b90506001600160a01b0381163314801590611ba45750611ba481610787565b8015611bb857506001600160a01b03811615155b611bd45760405162461bcd60e51b8152600401610829906127f3565b60008080611be4888a018a612398565b50600082815260016020526040902054929550909350915060ff16158015611c1e5750845160208601206001600160e01b03198481169116145b611c3a5760405162461bcd60e51b81526004016108299061282b565b428111611c595760405162461bcd60e51b8152600401610829906127bb565b60008281526001602081905260408220805460ff19169091179055611c808d8f018f612398565b935050505060008082806020019051810190611c9c9190612298565b6001600160a01b03821660009081526004602052604090819020805460ff19168315151790555191935091507f3befdc26f51caa2a17108df88efa7f021d67e693929a6ad49e439d881fe4aa5e906109c5908490849061267b565b838383836040518060400160405280601181526020017007472616e736665724f776e65727368697607c1b815250611d2e33610787565b611d4a5760405162461bcd60e51b815260040161082990612783565b6000611d58868686866110bc565b90506001600160a01b0381163314801590611d775750611d7781610787565b8015611d8b57506001600160a01b03811615155b611da75760405162461bcd60e51b8152600401610829906127f3565b60008080611db7888a018a612398565b50600082815260016020526040902054929550909350915060ff16158015611df15750845160208601206001600160e01b03198481169116145b611e0d5760405162461bcd60e51b81526004016108299061282b565b428111611e2c5760405162461bcd60e51b8152600401610829906127bb565b60008281526001602081905260408220805460ff19169091179055611e538d8f018f612398565b9350505050600081806020019051810190611e6e9190612243565b90506000805b600054811015611ebc57336001600160a01b031660008281548110611e9557fe5b6000918252602090912001546001600160a01b03161415611eb4578091505b600101611e74565b506000808281548110611ecb57fe5b600091825260208220015481546001600160a01b03909116925084919084908110611ef257fe5b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051858316928416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050505050505050505050505050505050565b6008546001600160a01b031681565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611fc7576040805162461bcd60e51b81526020600482015260026024820152616f6360f01b604482015290519081900360640190fd5b806001600160a01b0316611fda836118a9565b6001600160a01b03161415611fee5761201d565b6001600160a01b03828116600090815260056020526040902080546001600160a01b0319169183169190911790555b5050565b600081604051602001612034919061261c565b604051602081830303815290604052805190602001209050919050565b60005b6003548110156120b057816001600160a01b03166003828154811061207557fe5b6000918252602090912001546001600160a01b031614156120a85760405162461bcd60e51b815260040161082990612766565b600101612054565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b03841690811790915560009081526004602052604090819020805460ff1916909217909155517fbc600b1f03d316c479b49930c28e328809316458d5b5dacbb7419df5f6f896479061214590839061264d565b60405180910390a150565b8280548282559060005260206000209081019282156121a5579160200282015b828111156121a557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612170565b506121b19291506121b5565b5090565b5b808211156121b157600081556001016121b6565b805180151581146107d957600080fd5b60008083601f8401126121eb578182fd5b5081356001600160401b03811115612201578182fd5b60208301915083602082850101111561221957600080fd5b9250929050565b600060208284031215612231578081fd5b813561223c8161286b565b9392505050565b600060208284031215612254578081fd5b815161223c8161286b565b60008060408385031215612271578081fd5b825161227c8161286b565b602084015190925061228d8161286b565b809150509250929050565b600080604083850312156122aa578182fd5b82516122b58161286b565b91506122c3602084016121ca565b90509250929050565b600080604083850312156122de578182fd5b82356122e98161286b565b9150602083013561228d8161286b565b60006060828403121561230a578081fd5b82601f830112612318578081fd5b604051606081018181106001600160401b038211171561233457fe5b604052808360608101861015612348578384fd5b835b600381101561237357813561235e8161286b565b8352602092830192919091019060010161234a565b509195945050505050565b60006020828403121561238f578081fd5b61223c826121ca565b600080600080608085870312156123ad578182fd5b84356001600160e01b0319811681146123c4578283fd5b935060208581013593506040860135925060608601356001600160401b03808211156123ee578384fd5b818801915088601f830112612401578384fd5b81358181111561240d57fe5b61241f601f8201601f19168501612848565b91508082528984828501011115612434578485fd5b8084840185840137810190920192909252939692955090935050565b60008060208385031215612462578182fd5b82356001600160401b03811115612477578283fd5b612483858286016121da565b90969095509350505050565b600080600080604085870312156124a4578384fd5b84356001600160401b03808211156124ba578586fd5b6124c6888389016121da565b909650945060208701359150808211156124de578384fd5b506124eb878288016121da565b95989497509550505050565b600060208284031215612508578081fd5b5035919050565b600060208284031215612520578081fd5b5051919050565b600060208284031215612538578081fd5b815161223c81612883565b600080600060608486031215612557578081fd5b833561256281612883565b95602085013595506040909401359392505050565b6000815180845260208085019450808401835b838110156125af5781516001600160a01b03168752958201959082019060010161258a565b509495945050505050565b6000815180845260208085019450808401835b838110156125af578151875295820195908201906001016125cd565b60006bffffffffffffffffffffffff198660601b1682528460148301528284603484013791016034019081529392505050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039290921682521515602082015260400190565b6001600160a01b0393841681526020810192909252909116604082015260600190565b60006020825261223c6020830184612577565b6000604082526126df6040830185612577565b8281036020840152610dae81856125ba565b6000606082526127046060830186612577565b828103602084015261271681866125ba565b9050828103604084015261272a81856125ba565b9695505050505050565b901515815260200190565b90815260200190565b93845260ff9290921660208401526040830152606082015260800190565b6020808252600390820152626d616160e81b604082015260600190565b60208082526002908201526137b760f11b604082015260600190565b60208082526002908201526136b760f11b604082015260600190565b602080825260029082015261065760f41b604082015260600190565b6020808252600290820152616d6560f01b604082015260600190565b602080825260029082015261697360f01b604082015260600190565b602080825260029082015261616960f01b604082015260600190565b60208082526003908201526273727560e81b604082015260600190565b6040518181016001600160401b038111828210171561286357fe5b604052919050565b6001600160a01b038116811461288057600080fd5b50565b60ff8116811461288057600080fdfea164736f6c6343000706000a00000000000000000000000008b1fc2b48e5871354af138b7909e9d1a04a89dd00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c8300000000000000000000000004068da6c83afcfa0e13ba15a6696662335d5b750000000000000000000000003b53d2c7b44d40be05fa5e2309ffeb6eb2492d88000000000000000000000000515695578eecd92d7747897df7756967912e678a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000008b1fc2b48e5871354af138b7909e9d1a04a89dd00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c8300000000000000000000000004068da6c83afcfa0e13ba15a6696662335d5b750000000000000000000000003b53d2c7b44d40be05fa5e2309ffeb6eb2492d88000000000000000000000000515695578eecd92d7747897df7756967912e678a
-----Decoded View---------------
Arg [0] : _cardContract (address): 0x08b1fc2b48e5871354af138b7909e9d1a04a89dd
Arg [1] : _WETH (address): 0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83
Arg [2] : _usdcAddress (address): 0x04068da6c83afcfa0e13ba15a6696662335d5b75
Arg [3] : _okseAddress (address): 0x3b53d2c7b44d40be05fa5e2309ffeb6eb2492d88
Arg [4] : _converter (address): 0x515695578eecd92d7747897df7756967912e678a
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 00000000000000000000000008b1fc2b48e5871354af138b7909e9d1a04a89dd
Arg [1] : 00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83
Arg [2] : 00000000000000000000000004068da6c83afcfa0e13ba15a6696662335d5b75
Arg [3] : 0000000000000000000000003b53d2c7b44d40be05fa5e2309ffeb6eb2492d88
Arg [4] : 000000000000000000000000515695578eecd92d7747897df7756967912e678a
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.