Source Code
Overview
S Balance
More Info
ContractCreator
Loading...
Loading
Contract Name:
SafeTrackerLight
Compiler Version
v0.8.18+commit.87f61d96
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.18; import "@openzeppelin/contracts-v4/token/ERC20/IERC20.sol"; import "../../abstract/MasterAwareV2.sol"; import "../../interfaces/IPool.sol"; import "../../interfaces/IPriceFeedOracle.sol"; import "../../interfaces/ISafeTracker.sol"; contract SafeTrackerLight is ISafeTracker, MasterAwareV2 { uint public coverReInvestmentUSDC; string public constant symbol = "NXMIS"; string public constant name = "NXMIS"; uint8 public constant decimals = 18; address public immutable safe; uint public immutable investmentLimit; IERC20 public immutable usdc; IERC20 public immutable weth; /* ========== CONSTRUCTOR ========== */ constructor( uint _investmentLimit, address _safe, address _usdc, address _weth ) { require( _usdc != address(0) && _weth != address(0), "SafeTracker: tokens address cannot be zero address" ); investmentLimit = _investmentLimit; safe = _safe; usdc = IERC20(_usdc); weth = IERC20(_weth); } /** * @dev Gets the balance of the safe * @return An uint256 representing the amount of the safe. */ function totalSupply() external view returns (uint256) { return _calculateBalance(); } /** * @dev Gets the balance of the safe * @return An uint256 representing the amount of the safe. */ function balanceOf(address account) external view returns (uint256) { if (account != address(pool())) { return 0; } return _calculateBalance(); } /** * @dev Updates invested USDC in CoverRe */ function updateCoverReInvestmentUSDC(uint investedUSDC) external { if (msg.sender != safe) { revert OnlySafe(); } if (investedUSDC > investmentLimit) { revert InvestmentSurpassesLimit(); } coverReInvestmentUSDC = investedUSDC; emit CoverReInvestmentUSDCUpdated(investedUSDC); } /** * @dev emits Transfer event only if it's called by Pool or SwapOperator */ function transfer(address to, uint256 amount) external returns (bool) { return _transfer(msg.sender, to, amount); } /** * @dev emits Transfer event only if it's called by Pool or SwapOperator */ function transferFrom(address from, address to, uint256 amount) external returns (bool) { return _transfer(from, to, amount); } function allowance(address, address) external pure returns (uint256) { return 0; } function approve(address spender, uint256 value) external override returns (bool) { emit Approval(msg.sender, spender, value); return true; } function latestAnswer() external pure returns (uint256) { return 1e18; } /** * @dev Fetches all necessary information about the tokens that are used in the safe and calculates the balance * @return balance ETH value of the safe. */ function _calculateBalance() internal view returns (uint256 balance) { // eth in the safe, weth balance uint ethAmount = address(safe).balance + weth.balanceOf(safe); IPriceFeedOracle priceFeedOracle = pool().priceFeedOracle(); // usdc actually in the safe and usdc invested in CoverRe uint usdcAmount = usdc.balanceOf(safe) + coverReInvestmentUSDC; uint usdcValueInEth = priceFeedOracle.getEthForAsset(address(usdc), usdcAmount); return ethAmount + usdcValueInEth; } function _transfer(address from, address to, uint256 amount) internal returns (bool) { if (amount == 0 || msg.sender == address(pool())) { emit Transfer(from, to, amount); return true; } revert("Amount exceeds balance"); } /* ========== DEPENDENCIES ========== */ function pool() internal view returns (IPool) { return IPool(internalContracts[uint(ID.P1)]); } function changeDependentContractAddress() external override { internalContracts[uint(ID.P1)] = master.getLatestAddress("P1"); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.18; import "../interfaces/ISAFURAMaster.sol"; import "../interfaces/IMasterAwareV2.sol"; import "../interfaces/IMemberRoles.sol"; abstract contract MasterAwareV2 is IMasterAwareV2 { ISAFURAMaster public master; mapping(uint => address payable) public internalContracts; modifier onlyMember { require( IMemberRoles(internalContracts[uint(ID.MR)]).checkRole( msg.sender, uint(IMemberRoles.Role.Member) ), "Caller is not a member" ); _; } modifier onlyAdvisoryBoard { require( IMemberRoles(internalContracts[uint(ID.MR)]).checkRole( msg.sender, uint(IMemberRoles.Role.AdvisoryBoard) ), "Caller is not an advisory board member" ); _; } modifier onlyInternal { require(master.isInternal(msg.sender), "Caller is not an internal contract"); _; } modifier onlyMaster { if (address(master) != address(0)) { require(address(master) == msg.sender, "Not master"); } _; } modifier onlyGovernance { require( master.checkIsAuthToGoverned(msg.sender), "Caller is not authorized to govern" ); _; } modifier onlyEmergencyAdmin { require( msg.sender == master.emergencyAdmin(), "Caller is not emergency admin" ); _; } modifier whenPaused { require(master.isPause(), "System is not paused"); _; } modifier whenNotPaused { require(!master.isPause(), "System is paused"); _; } function getInternalContractAddress(ID id) internal view returns (address payable) { return internalContracts[uint(id)]; } function changeMasterAddress(address masterAddress) public onlyMaster { master = ISAFURAMaster(masterAddress); } }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; interface IMasterAwareV2 { // TODO: if you update this enum, update lib/constants.js as well enum ID { TC, // TokenController.sol P1, // Pool.sol MR, // MemberRoles.sol MC, // MCR.sol CO, // Cover.sol SP, // StakingProducts.sol PS, // LegacyPooledStaking.sol GV, // Governance.sol GW, // LegacyGateway.sol - removed CL, // CoverMigrator.sol - removed AS, // Assessment.sol CI, // IndividualClaims.sol - Claims for Individuals CG, // YieldTokenIncidents.sol - Claims for Groups RA, // Ramm.sol ST, // SafeTracker.sol CP // CoverProducts.sol } function changeMasterAddress(address masterAddress) external; function changeDependentContractAddress() external; function internalContracts(uint) external view returns (address payable); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; interface IMemberRoles { enum Role {Unassigned, AdvisoryBoard, Member, Owner, Auditor} function join(address _userAddress, uint nonce, bytes calldata signature) external payable; function switchMembership(address _newAddress) external; function switchMembershipAndAssets( address newAddress, uint[] calldata coverIds, uint[] calldata stakingTokenIds ) external; function switchMembershipOf(address member, address _newAddress) external; function totalRoles() external view returns (uint256); function changeAuthorized(uint _roleId, address _newAuthorized) external; function setKycAuthAddress(address _add) external; function members(uint _memberRoleId) external view returns (uint, address[] memory memberArray); function numberOfMembers(uint _memberRoleId) external view returns (uint); function authorized(uint _memberRoleId) external view returns (address); function roles(address _memberAddress) external view returns (uint[] memory); function checkRole(address _memberAddress, uint _roleId) external view returns (bool); function getMemberLengthForAllRoles() external view returns (uint[] memory totalMembers); function memberAtIndex(uint _memberRoleId, uint index) external view returns (address, bool); function membersLength(uint _memberRoleId) external view returns (uint); event MemberRole(uint256 indexed roleId, bytes32 roleName, string roleDescription); event MemberJoined(address indexed newMember, uint indexed nonce); event switchedMembership(address indexed previousMember, address indexed newMember, uint timeStamp); event MembershipWithdrawn(address indexed member, uint timestamp); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; import "./IPriceFeedOracle.sol"; struct SwapDetails { uint104 minAmount; uint104 maxAmount; uint32 lastSwapTime; // 2 decimals of precision. 0.01% -> 0.0001 -> 1e14 uint16 maxSlippageRatio; } struct Asset { address assetAddress; bool isCoverAsset; bool isAbandoned; } interface IPool { function swapOperator() external view returns (address); function getAsset(uint assetId) external view returns (Asset memory); function getAssets() external view returns (Asset[] memory); function transferAssetToSwapOperator(address asset, uint amount) external; function setSwapDetailsLastSwapTime(address asset, uint32 lastSwapTime) external; function getAssetSwapDetails(address assetAddress) external view returns (SwapDetails memory); function sendPayout(uint assetIndex, address payable payoutAddress, uint amount, uint ethDepositAmount) external; function sendEth(address payoutAddress, uint amount) external; function upgradeCapitalPool(address payable newPoolAddress) external; function priceFeedOracle() external view returns (IPriceFeedOracle); function getPoolValueInEth() external view returns (uint); function calculateMCRRatio(uint totalAssetValue, uint mcrEth) external pure returns (uint); function getInternalTokenPriceInAsset(uint assetId) external view returns (uint tokenPrice); function getInternalTokenPriceInAssetAndUpdateTwap(uint assetId) external returns (uint tokenPrice); function getTokenPrice() external view returns (uint tokenPrice); function getMCRRatio() external view returns (uint); function setSwapValue(uint value) external; }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; interface Aggregator { function decimals() external view returns (uint8); function latestAnswer() external view returns (int); } interface IPriceFeedOracle { struct OracleAsset { Aggregator aggregator; uint8 decimals; } function ETH() external view returns (address); function assets(address) external view returns (Aggregator, uint8); function getAssetToEthRate(address asset) external view returns (uint); function getAssetForEth(address asset, uint ethIn) external view returns (uint); function getEthForAsset(address asset, uint amount) external view returns (uint); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; import "@openzeppelin/contracts-v4/token/ERC20/IERC20.sol"; interface ISafeTracker is IERC20 { function symbol() external view returns (string memory); function decimals() external view returns (uint8); function safe() external view returns (address); event CoverReInvestmentUSDCUpdated(uint investedUSDC); error OnlySafe(); error InvestmentSurpassesLimit(); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; interface ISAFURAMaster { function tokenAddress() external view returns (address); function owner() external view returns (address); function emergencyAdmin() external view returns (address); function masterInitialized() external view returns (bool); function isInternal(address _add) external view returns (bool); function isPause() external view returns (bool check); function isMember(address _add) external view returns (bool); function checkIsAuthToGoverned(address _add) external view returns (bool); function getLatestAddress(bytes2 _contractName) external view returns (address payable contractAddress); function contractAddresses(bytes2 code) external view returns (address payable); function upgradeMultipleContracts( bytes2[] calldata _contractCodes, address payable[] calldata newAddresses ) external; function removeContracts(bytes2[] calldata contractCodesToRemove) external; function addNewInternalContracts( bytes2[] calldata _contractCodes, address payable[] calldata newAddresses, uint[] calldata _types ) external; function updateOwnerParameters(bytes8 code, address payable val) external; }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract ABI
API[{"inputs":[{"internalType":"uint256","name":"_investmentLimit","type":"uint256"},{"internalType":"address","name":"_safe","type":"address"},{"internalType":"address","name":"_usdc","type":"address"},{"internalType":"address","name":"_weth","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvestmentSurpassesLimit","type":"error"},{"inputs":[],"name":"OnlySafe","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"investedUSDC","type":"uint256"}],"name":"CoverReInvestmentUSDCUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"changeDependentContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"masterAddress","type":"address"}],"name":"changeMasterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"coverReInvestmentUSDC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"internalContracts","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"investmentLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestAnswer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"master","outputs":[{"internalType":"contract ISAFURAMaster","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"safe","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"investedUSDC","type":"uint256"}],"name":"updateCoverReInvestmentUSDC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdc","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
61010060405234801561001157600080fd5b50604051610d3a380380610d3a833981016040819052610030916100f9565b6001600160a01b0382161580159061005057506001600160a01b03811615155b6100bb5760405162461bcd60e51b815260206004820152603260248201527f53616665547261636b65723a20746f6b656e7320616464726573732063616e6e6044820152716f74206265207a65726f206164647265737360701b606482015260840160405180910390fd5b60a0939093526001600160a01b03918216608052811660c0521660e052610146565b80516001600160a01b03811681146100f457600080fd5b919050565b6000806000806080858703121561010f57600080fd5b8451935061011f602086016100dd565b925061012d604086016100dd565b915061013b606086016100dd565b905092959194509250565b60805160a05160c05160e051610b836101b760003960008181610246015261064501526000818161021f0152818161079901526108250152600081816102bd01526104c90152600081816101b30152818161048901528181610618015281816106be015261076b0152610b836000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80635b2e03b6116100ad578063ba7efcdd11610071578063ba7efcdd146102b8578063d46655f4146102df578063dd62ed3e146102f2578063eb96236014610308578063ee97f7f31461033157600080fd5b80635b2e03b61461027657806370a082311461028957806372110f411461029c57806395d89b4114610131578063a9059cbb146102a557600080fd5b806323b872dd116100f457806323b872dd146101ed578063313ce567146102005780633e413bee1461021a5780633fc8cef31461024157806350d25bcd1461026857600080fd5b806306fdde0314610131578063095ea7b31461016b5780630ea9c9841461018e57806318160ddd14610198578063186f0354146101ae575b600080fd5b610155604051806040016040528060058152602001644e584d495360d81b81525081565b60405161016291906109b4565b60405180910390f35b61017e610179366004610a1a565b610344565b6040519015158152602001610162565b61019661039d565b005b6101a0610458565b604051908152602001610162565b6101d57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610162565b61017e6101fb366004610a46565b610467565b610208601281565b60405160ff9091168152602001610162565b6101d57f000000000000000000000000000000000000000000000000000000000000000081565b6101d57f000000000000000000000000000000000000000000000000000000000000000081565b670de0b6b3a76400006101a0565b610196610284366004610a87565b61047e565b6101a0610297366004610aa0565b610543565b6101a060025481565b61017e6102b3366004610a1a565b610575565b6101a07f000000000000000000000000000000000000000000000000000000000000000081565b6101966102ed366004610aa0565b610582565b6101a0610300366004610abd565b600092915050565b6101d5610316366004610a87565b6001602052600090815260409020546001600160a01b031681565b6000546101d5906001600160a01b031681565b6000826001600160a01b0316336001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161038b91815260200190565b60405180910390a35060015b92915050565b6000546040516227050b60e31b815261503160f01b60048201526001600160a01b0390911690630138285890602401602060405180830381865afa1580156103e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040d9190610af6565b600160008190526020527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610462610601565b905090565b60006104748484846108ba565b90505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104c75760405163d7fed6bd60e01b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610508576040516308049da760e41b815260040160405180910390fd5b60028190556040518181527f14407b8d2e1d466fe1864e85f04e262a31d26955461adb274583b64c70ff7a9b9060200160405180910390a150565b600061054d61097c565b6001600160a01b0316826001600160a01b03161461056d57506000919050565b610397610601565b60006104773384846108ba565b6000546001600160a01b0316156105df576000546001600160a01b031633146105df5760405162461bcd60e51b815260206004820152600a6024820152692737ba1036b0b9ba32b960b11b60448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6040516370a0823160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260009182917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561068c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b09190610b13565b6106e4906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001631610b2c565b905060006106f061097c565b6001600160a01b031663b9ab99276040518163ffffffff1660e01b8152600401602060405180830381865afa15801561072d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107519190610af6565b6002546040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301529293506000927f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156107e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108049190610b13565b61080e9190610b2c565b604051635dffa72d60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820183905291925060009184169063bbff4e5a90604401602060405180830381865afa158015610881573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a59190610b13565b90506108b18185610b2c565b94505050505090565b60008115806108e157506108cc61097c565b6001600160a01b0316336001600160a01b0316145b1561093b57826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161092b91815260200190565b60405180910390a3506001610477565b60405162461bcd60e51b8152602060048201526016602482015275416d6f756e7420657863656564732062616c616e636560501b60448201526064016105d6565b600160008190526020527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f546001600160a01b031690565b600060208083528351808285015260005b818110156109e1578581018301518582016040015282016109c5565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610a1757600080fd5b50565b60008060408385031215610a2d57600080fd5b8235610a3881610a02565b946020939093013593505050565b600080600060608486031215610a5b57600080fd5b8335610a6681610a02565b92506020840135610a7681610a02565b929592945050506040919091013590565b600060208284031215610a9957600080fd5b5035919050565b600060208284031215610ab257600080fd5b813561047781610a02565b60008060408385031215610ad057600080fd5b8235610adb81610a02565b91506020830135610aeb81610a02565b809150509250929050565b600060208284031215610b0857600080fd5b815161047781610a02565b600060208284031215610b2557600080fd5b5051919050565b8082018082111561039757634e487b7160e01b600052601160045260246000fdfea264697066735822122012dd7d8cbfbe7296c81586b983eecc256d44800278e488184acd5ec705705f0864736f6c63430008120033000000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000cdc3d087a718001ec1e80568d9092a0a27d581390000000000000000000000001570300e9cfec66c9fb0c8bc14366c86eb170ad0000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061012c5760003560e01c80635b2e03b6116100ad578063ba7efcdd11610071578063ba7efcdd146102b8578063d46655f4146102df578063dd62ed3e146102f2578063eb96236014610308578063ee97f7f31461033157600080fd5b80635b2e03b61461027657806370a082311461028957806372110f411461029c57806395d89b4114610131578063a9059cbb146102a557600080fd5b806323b872dd116100f457806323b872dd146101ed578063313ce567146102005780633e413bee1461021a5780633fc8cef31461024157806350d25bcd1461026857600080fd5b806306fdde0314610131578063095ea7b31461016b5780630ea9c9841461018e57806318160ddd14610198578063186f0354146101ae575b600080fd5b610155604051806040016040528060058152602001644e584d495360d81b81525081565b60405161016291906109b4565b60405180910390f35b61017e610179366004610a1a565b610344565b6040519015158152602001610162565b61019661039d565b005b6101a0610458565b604051908152602001610162565b6101d57f000000000000000000000000cdc3d087a718001ec1e80568d9092a0a27d5813981565b6040516001600160a01b039091168152602001610162565b61017e6101fb366004610a46565b610467565b610208601281565b60405160ff9091168152602001610162565b6101d57f0000000000000000000000001570300e9cfec66c9fb0c8bc14366c86eb170ad081565b6101d57f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3881565b670de0b6b3a76400006101a0565b610196610284366004610a87565b61047e565b6101a0610297366004610aa0565b610543565b6101a060025481565b61017e6102b3366004610a1a565b610575565b6101a07f000000000000000000000000000000000000000000000000000016bcc41e900081565b6101966102ed366004610aa0565b610582565b6101a0610300366004610abd565b600092915050565b6101d5610316366004610a87565b6001602052600090815260409020546001600160a01b031681565b6000546101d5906001600160a01b031681565b6000826001600160a01b0316336001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161038b91815260200190565b60405180910390a35060015b92915050565b6000546040516227050b60e31b815261503160f01b60048201526001600160a01b0390911690630138285890602401602060405180830381865afa1580156103e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040d9190610af6565b600160008190526020527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610462610601565b905090565b60006104748484846108ba565b90505b9392505050565b336001600160a01b037f000000000000000000000000cdc3d087a718001ec1e80568d9092a0a27d5813916146104c75760405163d7fed6bd60e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000016bcc41e9000811115610508576040516308049da760e41b815260040160405180910390fd5b60028190556040518181527f14407b8d2e1d466fe1864e85f04e262a31d26955461adb274583b64c70ff7a9b9060200160405180910390a150565b600061054d61097c565b6001600160a01b0316826001600160a01b03161461056d57506000919050565b610397610601565b60006104773384846108ba565b6000546001600160a01b0316156105df576000546001600160a01b031633146105df5760405162461bcd60e51b815260206004820152600a6024820152692737ba1036b0b9ba32b960b11b60448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6040516370a0823160e01b81526001600160a01b037f000000000000000000000000cdc3d087a718001ec1e80568d9092a0a27d581398116600483015260009182917f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3816906370a0823190602401602060405180830381865afa15801561068c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b09190610b13565b6106e4906001600160a01b037f000000000000000000000000cdc3d087a718001ec1e80568d9092a0a27d581391631610b2c565b905060006106f061097c565b6001600160a01b031663b9ab99276040518163ffffffff1660e01b8152600401602060405180830381865afa15801561072d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107519190610af6565b6002546040516370a0823160e01b81526001600160a01b037f000000000000000000000000cdc3d087a718001ec1e80568d9092a0a27d58139811660048301529293506000927f0000000000000000000000001570300e9cfec66c9fb0c8bc14366c86eb170ad016906370a0823190602401602060405180830381865afa1580156107e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108049190610b13565b61080e9190610b2c565b604051635dffa72d60e11b81526001600160a01b037f0000000000000000000000001570300e9cfec66c9fb0c8bc14366c86eb170ad0811660048301526024820183905291925060009184169063bbff4e5a90604401602060405180830381865afa158015610881573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a59190610b13565b90506108b18185610b2c565b94505050505090565b60008115806108e157506108cc61097c565b6001600160a01b0316336001600160a01b0316145b1561093b57826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161092b91815260200190565b60405180910390a3506001610477565b60405162461bcd60e51b8152602060048201526016602482015275416d6f756e7420657863656564732062616c616e636560501b60448201526064016105d6565b600160008190526020527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f546001600160a01b031690565b600060208083528351808285015260005b818110156109e1578581018301518582016040015282016109c5565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610a1757600080fd5b50565b60008060408385031215610a2d57600080fd5b8235610a3881610a02565b946020939093013593505050565b600080600060608486031215610a5b57600080fd5b8335610a6681610a02565b92506020840135610a7681610a02565b929592945050506040919091013590565b600060208284031215610a9957600080fd5b5035919050565b600060208284031215610ab257600080fd5b813561047781610a02565b60008060408385031215610ad057600080fd5b8235610adb81610a02565b91506020830135610aeb81610a02565b809150509250929050565b600060208284031215610b0857600080fd5b815161047781610a02565b600060208284031215610b2557600080fd5b5051919050565b8082018082111561039757634e487b7160e01b600052601160045260246000fdfea264697066735822122012dd7d8cbfbe7296c81586b983eecc256d44800278e488184acd5ec705705f0864736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000cdc3d087a718001ec1e80568d9092a0a27d581390000000000000000000000001570300e9cfec66c9fb0c8bc14366c86eb170ad0000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38
-----Decoded View---------------
Arg [0] : _investmentLimit (uint256): 25000000000000
Arg [1] : _safe (address): 0xCDc3D087A718001eC1e80568D9092a0A27d58139
Arg [2] : _usdc (address): 0x1570300e9cFEC66c9Fb0C8bc14366C86EB170Ad0
Arg [3] : _weth (address): 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000016bcc41e9000
Arg [1] : 000000000000000000000000cdc3d087a718001ec1e80568d9092a0a27d58139
Arg [2] : 0000000000000000000000001570300e9cfec66c9fb0c8bc14366c86eb170ad0
Arg [3] : 000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.