Sonic Blaze Testnet

Contract

0x53171BE74d0AC87CE38fede85af530408Bd135B1

Overview

S Balance

Sonic Blaze LogoSonic Blaze LogoSonic Blaze Logo0 S

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

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)

File 1 of 9 : SafeTrackerLight.sol
// 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");
  }
}

File 2 of 9 : IERC20.sol
// 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);
}

File 3 of 9 : MasterAwareV2.sol
// 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);
  }

}

File 4 of 9 : IMasterAwareV2.sol
// 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);
}

File 5 of 9 : IMemberRoles.sol
// 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);
}

File 6 of 9 : IPool.sol
// 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;
}

File 7 of 9 : IPriceFeedOracle.sol
// 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);

}

File 8 of 9 : ISafeTracker.sol
// 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();
}

File 9 of 9 : ISAFURAMaster.sol
// 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;
}

Settings
{
  "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"}]

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


Block Transaction Gas Used Reward
view all blocks ##produced##

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits

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.