账户
0x9d...b4b9
0x9D...B4b9

0x9D...B4b9

$500
此合同的源代码已经过验证!
合同元数据
编译器
0.6.12+commit.27d51765
语言
Solidity
合同源代码
文件 1 的 1:Updater.sol
// File: contracts/updater/interfaces/IFreeFromUpTo.sol
pragma solidity ^0.6.12;

interface IFreeFromUpTo {
    function freeFromUpTo(address from, uint256 value) external returns (uint256 freed);
}

// File: contracts/updater/BurnChi.sol
pragma solidity 0.6.12;

contract BurnChi {
    IFreeFromUpTo private constant chi = IFreeFromUpTo(0x0000000000004946c0e9F43F4Dee607b0eF1fA1c);

    modifier discountCHI(bool _useChi) {
        if(_useChi) {
            uint256 gasStart = gasleft();
            _;
            uint256 gasSpent = 21000 + gasStart - gasleft() + 16 * msg.data.length;
            chi.freeFromUpTo(msg.sender, (gasSpent + 14154) / 41130);
        } else {
            _;
        }
    }
}

// File: contracts/updater/interfaces/ITokenManager.sol
pragma solidity ^0.6.12;

interface ITokenManager {
  function updateRewardParams(address payable userAddr) external returns (bool);
}

// File: contracts/updater/interfaces/IObserver.sol
pragma solidity ^0.6.12;

interface IObserver {
  function updateChainMarketInfo(uint256 _idx, uint256 chainDeposit, uint256 chainBorrow) external returns (bool);
}

// File: contracts/updater/Updater.sol
// SPDX-License-Identifier: BSD-3-Clause
pragma solidity ^0.6.12;

/**
 * @title BiFi's Updater contract
 * @notice Update chain market, reward
 * @author BiFi(seinmyung25, Miller-kk, tlatkdgus1, dongchangYoo)
 */
contract Updater is BurnChi {
  address public owner;

  ITokenManager public manager;
  IObserver public observer;

  modifier onlyOwner {
		require(msg.sender == owner, "onlyOwner");
		_;
	}

  constructor(address managerAddress, address observerAddress) public {
    owner = msg.sender;

    manager = ITokenManager(managerAddress);
    observer = IObserver(observerAddress);
  }

  function setManager(address managerAddress) public onlyOwner returns (bool) {
    manager = ITokenManager(managerAddress);
    return true;
  }

  function setObserver(address observerAddress) public onlyOwner returns (bool) {
    observer = IObserver(observerAddress);
    return true;
  }

  function syncReward(address payable rewerder, uint256 _idx, uint256 chainDeposit, uint256 chainBorrow, bool _useChi) external onlyOwner discountCHI(_useChi) returns (bool) {
    _updateChainMarketInfo(_idx, chainDeposit, chainBorrow);
    _updateRewardParams(rewerder);

    return true;
  }

  function updateRewardParams(address payable rewerder, bool _useChi) external onlyOwner discountCHI(_useChi) returns (bool) {
    return _updateRewardParams(rewerder);
  }

  function _updateRewardParams(address payable rewerder) internal returns (bool) {
    return manager.updateRewardParams(rewerder);
  }

  function updateChainMarketInfo(uint256 _idx, uint256 chainDeposit, uint256 chainBorrow, bool _useChi) external onlyOwner discountCHI(_useChi) returns (bool) {
    return _updateChainMarketInfo(_idx, chainDeposit, chainBorrow);
  }

  function _updateChainMarketInfo(uint256 _idx, uint256 chainDeposit, uint256 chainBorrow) internal returns (bool) {
    return observer.updateChainMarketInfo(_idx, chainDeposit, chainBorrow);
  }
}
设置
{
  "compilationTarget": {
    "Updater.sol": "Updater"
  },
  "evmVersion": "istanbul",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "remappings": []
}
ABI
[{"inputs":[{"internalType":"address","name":"managerAddress","type":"address"},{"internalType":"address","name":"observerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"manager","outputs":[{"internalType":"contract ITokenManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"observer","outputs":[{"internalType":"contract IObserver","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"managerAddress","type":"address"}],"name":"setManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"observerAddress","type":"address"}],"name":"setObserver","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"rewerder","type":"address"},{"internalType":"uint256","name":"_idx","type":"uint256"},{"internalType":"uint256","name":"chainDeposit","type":"uint256"},{"internalType":"uint256","name":"chainBorrow","type":"uint256"},{"internalType":"bool","name":"_useChi","type":"bool"}],"name":"syncReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_idx","type":"uint256"},{"internalType":"uint256","name":"chainDeposit","type":"uint256"},{"internalType":"uint256","name":"chainBorrow","type":"uint256"},{"internalType":"bool","name":"_useChi","type":"bool"}],"name":"updateChainMarketInfo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"rewerder","type":"address"},{"internalType":"bool","name":"_useChi","type":"bool"}],"name":"updateRewardParams","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]