Contract 0x111111111111ed1d73f860f57b2798b683f2d325

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x0a8af1d4449e79d6e4844026ba4e7294f4eb4a1579d9e1b07625123cebf4f936Approve165500902022-06-26 17:12:573 hrs 39 mins ago0x6a89e921a9344dcea94dd2486ac31e7eb184d786 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.00073385 25
0xb740260378901279ce643f43e678273976adbb08db21b1098b8e59b6f403206dApprove165491532022-06-26 16:41:354 hrs 10 mins ago0x238643d4106c7c6206f8dc31acb59cd24c979d12 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001231031 26.5
0xac4b9b6087b369ad267f6ae844db8a5c64035b887cb917b9c1e1f6ef688afef6Approve165442542022-06-26 13:58:206 hrs 53 mins ago0x7b06b9d42df1537c33fcc0dd91a9a9126c81f3e1 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001254258 27
0x5eaa6991c05cced18adf412e4e95a2ad881adaabf42a68a55b699c9cf30d9bc2Transfer165275842022-06-26 4:39:5016 hrs 12 mins ago0x7351d784e1470af4983c3cd680d795e3be815dc5 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001368831 26.5
0x386030144d86648d90e82f1a60dbc8fad2f6891e894eb43b06ad32600b835e23Approve165222772022-06-26 1:42:2219 hrs 9 mins ago0xcfe2d0f9fe554a4234683651cd52b48df1dabf02 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001231031 26.5
0x6c0ae9daae4d7acdcff9cb7b95328319643993e10e643de72cb9c469def75daeApprove165012232022-06-25 14:01:021 day 6 hrs ago0xe79ba8816627f4bca4c8f6e28f30c06a24cfb88d IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001335552528.75
0x649f741437d0f324484eb17f40c33683dc18f2fe10a92f6698ac0f2367d2a8d7Approve164978862022-06-25 12:09:291 day 8 hrs ago0x11a4fa37f58b2b40f4f2f65002d6313130a759d7 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001231031 26.5
0xfba4b0151403bd1d2ccafe3ea5ef94642e657604ca325f3a9278a7f6e44278efApprove164958542022-06-25 11:01:461 day 9 hrs ago0xe42f34179a95676aeeaca55c80e380c664905544 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.0011610525
0x74b6ef7b76ade7423ac4349690a1a9b464569bae13ec17f84df82c22c29fe987Approve164911192022-06-25 8:23:301 day 12 hrs ago0x0e1c7fbc490b5731b95c6947ecf5296978896f96 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001231031 26.5
0x1de57ef544c24a3e24998dde6a6e77803692a5e34198c967242797545e7e0504Approve164806642022-06-25 2:35:031 day 18 hrs ago0x81d6436677d61628b89390d2b420f6284fd483f4 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001231031 26.5
0x25e446ffef0a6b6c689b309f2f18a3802d4443608b15019d3593bad2814894dbApprove164798632022-06-25 2:08:141 day 18 hrs ago0x9c0d1f4a029c46265831d120dee9cdc72f0ab3c3 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.00116135 25
0x44090812081ffdcebfd4a9324d287966dd2b4913289cd4d76c6dbd32954e109aApprove164774832022-06-25 0:48:451 day 20 hrs ago0x455564a2ae8b9a26bf53e8aa6c2336bf19fb8d76 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001231031 26.5
0xad7d0ed4592deeea3fde8aa9da2f480d92280c11eeba09b35409df2107a32341Approve164755442022-06-24 23:44:411 day 21 hrs ago0x93e7c216c25e53e98dd7bbfacfc05b5b1342ffa0 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001222763 26.5
0x6bbcb5e5fdf9effd61b24db8d3d144437909a9ae6166444cdd67671918d64ee3Approve164748902022-06-24 23:22:481 day 21 hrs ago0x19206f03068ec1fa140380a3a9ec8cee2a15aeea IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.00162589 35
0xfecbb12ffaee31a59392acefb13f28d46799e3d35dee6f915a5091a78a60841cApprove164675372022-06-24 19:18:342 days 1 hr ago0x88c31f648bdbc89ecdfbabe18b5a800e63ed8ee6 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001231031 26.5
0x971bdfc58072029d07611357237fe47359b7c2a205dc3048d269a9d48424a607Approve164639292022-06-24 17:17:582 days 3 hrs ago0xd3aa34a9e80d62d937e26ee77921396f70211a44 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.00115415 25
0x24aa96387a30e48aceab5dc81f7447900926a5e826f7fb72f0a69f8f2fe610fbApprove164613492022-06-24 15:51:572 days 5 hrs ago0x48e22d549d0ac01163ddf3e14f943f44d8fc5a76 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001231031 26.5
0xb715d85dfb1d6d645f27a22c6a97f3d3a485740b37a60ae4c68dad0c583a7811Approve164602072022-06-24 15:13:542 days 5 hrs ago0x01247fdf97ef4ce628d1e639b83a79a78dc1bb8e IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001231031 26.5
0x265eb444265d42f9719cc234a70588d74418334d56b667c8f659f3b3d0ddd25cApprove164426362022-06-24 5:28:302 days 15 hrs ago0x24051c984ad7634ec7896e9ea4376f5df5306d68 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001231031 26.5
0x130fe098a8c1ca0f29df8039c776a2c436caed68b5d06f5196e8a5102b909a02Approve164345932022-06-24 1:03:032 days 19 hrs ago0x126a2fbba0973c6770cc7d79886afe9945d4e8b1 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001230713 26.5
0x7819bdfd9e4014bee56d617c483deaa859c95792eb8f103ec37dfe309c6b4784Approve164199172022-06-23 16:54:343 days 3 hrs ago0x72c1bea91d2b03b1ac8e5a9d3ff2646c3dd8f7cd IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001245834 27
0xab001e0228b7f1d98b28030006041536aae925298e4a5ca9f44bf6052f3d38d3Approve164160762022-06-23 14:46:213 days 6 hrs ago0x5f82c7b43e75f53a8faac866be625d753fa424e6 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001254258 27
0x0d4ba6ae45fce2d0874eb658e9658109671fa56e6533758b19b743614c81b937Approve164123212022-06-23 12:41:063 days 8 hrs ago0x44b0a8140ac5591a96da5e652f06a657a3a5b930 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001231031 26.5
0x8924b99bc015b5c1cf54179243965913e6be626d5b7e303b9a0eeeaaa11d9510Approve164091912022-06-23 10:56:413 days 9 hrs ago0x3115ba406ad02d875ca84c0dc861b05e06ca684d IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001222763 26.5
0xf0d9f5869ca5ddac42c198f7cb87dd7f8d11bd9654dbad5afe2bb2a799b4bbfeApprove164082722022-06-23 10:25:553 days 10 hrs ago0x09443fba4e42c1516c8d5025447ac3029bdf436d IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001231031 26.5
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
YUSDToken

Compiler Version
v0.6.11+commit.5ef660b1

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 5 : YUSDToken.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.6.11;

import "../Interfaces/IYUSDToken.sol";
import "../Dependencies/SafeMath.sol";

// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&   ,[email protected]@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@&&&.,,      ,,**.&&&&&@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@,               ..,,,,,,,,,&@@@@@@@@@@
// @@@@@@,,,,,,&@@@@@@@@&                       ,,,,,&@@@@@@@@@
// @@@&,,,,,,,,@@@@@@@@@                        ,,,,,*@@@/@@@@@
// @@,*,*,*,*#,,*,&@@@@@   $$          $$       *,,,  ***&@@@@@
// @&***********(@@@@@@&   $$          $$       ,,,%&. & %@@@@@
// @(*****&**     &@@@@#                        *,,%  ,#%@*&@@@
// @... &             &                         **,,*&,(@*,*,&@
// @&,,.              &                         *,*       **,,@
// @@@,,,.            *                         **         ,*,,
// @@@@@,,,...   .,,,,&                        .,%          *,*
// @@@@@@@&/,,,,,,,,,,,,&,,,,,.         .,,,,,,,,.           *,
// @@@@@@@@@@@@&&@(,,,,,(@&&@@&&&&&%&&&&&%%%&,,,&            .(
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&,,,,,,,,,,,,,,&             &
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/,,,,,,,,,,,,&             &
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/            &             &
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&              &             &
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&      ,,,@@@&  &  &&  .&( &#%
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&&&&&%#**@@@&*&*******,,,,,**
//
//  $$\     $$\          $$\     $$\       $$$$$$$$\ $$\                                                   
//  \$$\   $$  |         $$ |    \__|      $$  _____|\__|                                                  
//   \$$\ $$  /$$$$$$\ $$$$$$\   $$\       $$ |      $$\ $$$$$$$\   $$$$$$\  $$$$$$$\   $$$$$$$\  $$$$$$\  
//    \$$$$  /$$  __$$\\_$$  _|  $$ |      $$$$$\    $$ |$$  __$$\  \____$$\ $$  __$$\ $$  _____|$$  __$$\ 
//     \$$  / $$$$$$$$ | $$ |    $$ |      $$  __|   $$ |$$ |  $$ | $$$$$$$ |$$ |  $$ |$$ /      $$$$$$$$ |
//      $$ |  $$   ____| $$ |$$\ $$ |      $$ |      $$ |$$ |  $$ |$$  __$$ |$$ |  $$ |$$ |      $$   ____|
//      $$ |  \$$$$$$$\  \$$$$  |$$ |      $$ |      $$ |$$ |  $$ |\$$$$$$$ |$$ |  $$ |\$$$$$$$\ \$$$$$$$\ 
//      \__|   \_______|  \____/ \__|      \__|      \__|\__|  \__| \_______|\__|  \__| \_______| \_______|

/*
 *
 * Based upon OpenZeppelin's ERC20 contract:
 * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol
 *
 * and their EIP2612 (ERC20Permit / ERC712) functionality:
 * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/53516bc555a454862470e7860a9b5254db4d00f5/contracts/token/ERC20/ERC20Permit.sol
 *
 *
 * --- Functionality added specific to the YUSDToken ---
 *
 * 1) Transfer protection: blacklist of addresses that are invalid recipients (i.e. core Yeti contracts) in external
 * transfer() and transferFrom() calls. The purpose is to protect users from losing tokens by mistakenly sending YUSD directly to a Yeti
 * core contract, when they should rather call the right function.
 *
 * 2) sendToPool() and returnFromPool(): functions callable only Yeti core contracts, which move YUSD tokens between Yeti <-> user.
 */

contract YUSDToken is IYUSDToken {
    using SafeMath for uint256;

    uint256 private _totalSupply;
    string internal constant _NAME = "YUSD Stablecoin";
    string internal constant _SYMBOL = "YUSD";
    string internal constant _VERSION = "1";
    uint8 internal constant _DECIMALS = 18;
    bool canMint = true;

    // --- Data for EIP2612 ---

    // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 private constant _PERMIT_TYPEHASH =
        0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;
    //     keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)");
    bytes32 private constant _TYPE_HASH =
        0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f;

    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to
    // invalidate the cached domain separator if the chain id changes.
    bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;
    uint256 private immutable _CACHED_CHAIN_ID;

    bytes32 private immutable _HASHED_NAME;
    bytes32 private immutable _HASHED_VERSION;

    mapping(address => uint256) private _nonces;

    // User data for YUSD token
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    // --- Addresses ---
    address internal immutable troveManagerAddress;
    address internal immutable troveManagerLiquidationsAddress;
    address internal immutable troveManagerRedemptionsAddress;
    address internal immutable stabilityPoolAddress;
    address internal immutable borrowerOperationsAddress;
    address internal immutable controllerAddress;
    mapping(address => bool) validMinters;

    modifier onlyController() {
        require(msg.sender == controllerAddress, "YUSDToken: Caller is not YetiController");
        _;
    }

    constructor(
        address _troveManagerAddress,
        address _troveManagerLiquidationsAddress,
        address _troveManagerRedemptionsAddress,
        address _stabilityPoolAddress,
        address _borrowerOperationsAddress,
        address _controllerAddress
    ) public {
        troveManagerAddress = _troveManagerAddress;
        troveManagerLiquidationsAddress = _troveManagerLiquidationsAddress;
        troveManagerRedemptionsAddress = _troveManagerRedemptionsAddress;
        stabilityPoolAddress = _stabilityPoolAddress;
        borrowerOperationsAddress = _borrowerOperationsAddress;
        controllerAddress = _controllerAddress;

        validMinters[_borrowerOperationsAddress] = true;

        bytes32 hashedName = keccak256(bytes(_NAME));
        bytes32 hashedVersion = keccak256(bytes(_VERSION));

        _HASHED_NAME = hashedName;
        _HASHED_VERSION = hashedVersion;
        _CACHED_CHAIN_ID = _chainID();
        _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(_TYPE_HASH, hashedName, hashedVersion);
    }

    // --- Functions for intra-Yeti calls ---

    function mint(address _account, uint256 _amount) external override {
        _requireCanMint();
        _requireValidMinter();
        _mint(_account, _amount);
    }

    function burn(address _account, uint256 _amount) external override {
        _requireCallerIsBOorTroveMorSP();
        _burn(_account, _amount);
    }

    /** 
     * Function special to Yeti which sends YUSD directly to SP without approve
     */
    function sendToPool(
        address _sender,
        address _poolAddress,
        uint256 _amount
    ) external override {
        _requireCallerIsStabilityPool();
        _transfer(_sender, _poolAddress, _amount);
    }

    /** 
     * Function special to Yeti which sends YUSD directly from pool back to a user
     */
    function returnFromPool(
        address _poolAddress,
        address _receiver,
        uint256 _amount
    ) external override {
        _requireCallerIsTMLorSP();
        _transfer(_poolAddress, _receiver, _amount);
    }

    // --- External functions ---

    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) external view override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        _requireValidRecipient(recipient);
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) external view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        _requireValidRecipient(recipient);

        _transfer(sender, recipient, amount);
        _approve(
            sender,
            msg.sender,
            _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance")
        );
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        external
        override
        returns (bool)
    {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        external
        override
        returns (bool)
    {
        _approve(
            msg.sender,
            spender,
            _allowances[msg.sender][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    // --- EIP 2612 Functionality ---

    function domainSeparator() public view override returns (bytes32) {
        if (_chainID() == _CACHED_CHAIN_ID) {
            return _CACHED_DOMAIN_SEPARATOR;
        } else {
            return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);
        }
    }

    function permit(
        address owner,
        address spender,
        uint256 amount,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external override {
        require(deadline >= block.timestamp, "YUSD: expired deadline");
        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                domainSeparator(),
                keccak256(
                    abi.encode(_PERMIT_TYPEHASH, owner, spender, amount, _nonces[owner]++, deadline)
                )
            )
        );
        address recoveredAddress = ecrecover(digest, v, r, s);
        require(recoveredAddress == owner, "YUSD: invalid signature");
        _approve(owner, spender, amount);
    }

    function nonces(address owner) external view override returns (uint256) {
        // FOR EIP 2612
        return _nonces[owner];
    }

    // --- Internal operations ---

    function _chainID() private pure returns (uint256 chainID) {
        assembly {
            chainID := chainid()
        }
    }

    function _buildDomainSeparator(
        bytes32 typeHash,
        bytes32 name,
        bytes32 version
    ) private view returns (bytes32) {
        return keccak256(abi.encode(typeHash, name, version, _chainID(), address(this)));
    }

    // --- Internal operations ---
    // Warning: sanity checks (for sender and recipient) should have been done before calling these internal functions

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal {
        require(sender != address(0), "_transfer: sender is address(0)");
        require(recipient != address(0), "_transfer: recipient is 0address");

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount > balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "_mint: account is address(0)");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account] + amount;
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "_burn: account is address(0)");

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount > balance");
        _totalSupply = _totalSupply - amount; // can't underflow since indiv balance didn't
        emit Transfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal {
        require(owner != address(0), "_approve: owner is address(0)");
        require(spender != address(0), "_approve: spender is address(0)");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function addValidMinter(address _newMinter) external override onlyController {
        validMinters[_newMinter] = true;
    }

    function removeValidMinter(address _minter) external override onlyController {
        validMinters[_minter] = false;
    }

    function updateMinting(bool _canMint) external override onlyController {
        canMint = _canMint;
    }

    function _requireCanMint() internal view {
        require(canMint);
    }

    // --- 'require' functions ---

    function _requireValidRecipient(address _recipient) internal view {
        require(
            _recipient != address(this),
            "YUSD: Cannot transfer tokens directly to the YUSD token contract"
        );
    }

    function _requireValidMinter() internal view {
        require(validMinters[msg.sender], "YUSDToken: Caller is not Valid Minter");
    }

    function _requireCallerIsBOorTroveMorSP() internal view {
        require(
            msg.sender == borrowerOperationsAddress ||
                msg.sender == troveManagerAddress ||
                msg.sender == stabilityPoolAddress ||
                msg.sender == troveManagerRedemptionsAddress,
            "YUSD: Caller is neither BorrowerOperations nor TroveManager nor StabilityPool"
        );
    }

    function _requireCallerIsStabilityPool() internal view {
        require(msg.sender == stabilityPoolAddress, "YUSD: Caller is not the StabilityPool");
    }

    function _requireCallerIsTMLorSP() internal view {
        require(
            msg.sender == stabilityPoolAddress || msg.sender == troveManagerLiquidationsAddress,
            "YUSD: Caller is neither TroveManagerLiquidator nor StabilityPool"
        );
    }

    // --- Optional functions ---

    function name() external view override returns (string memory) {
        return _NAME;
    }

    function symbol() external view override returns (string memory) {
        return _SYMBOL;
    }

    function decimals() external view override returns (uint8) {
        return _DECIMALS;
    }

    function version() external view override returns (string memory) {
        return _VERSION;
    }

    function permitTypeHash() external view override returns (bytes32) {
        return _PERMIT_TYPEHASH;
    }
}

File 2 of 5 : IYUSDToken.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.6.11;

import "../Interfaces/IERC20.sol";
import "../Interfaces/IERC2612.sol";

interface IYUSDToken is IERC20, IERC2612 {
    
    // --- Events ---

    event YUSDTokenBalanceUpdated(address _user, uint _amount);

    // --- Functions ---

    function mint(address _account, uint256 _amount) external;

    function burn(address _account, uint256 _amount) external;

    function sendToPool(address _sender,  address poolAddress, uint256 _amount) external;

    function returnFromPool(address poolAddress, address user, uint256 _amount ) external;

    function updateMinting(bool _canMint) external;

    function addValidMinter(address _newMinter) external;

    function removeValidMinter(address _minter) external;
}

File 3 of 5 : SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.6.11;

/**
 * Based on OpenZeppelin's SafeMath:
 * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/SafeMath.sol
 *
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "add overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "sub overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     *
     * _Available since v2.4.0._
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "mul overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "div by 0");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b != 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "mod by 0");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

File 4 of 5 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.6.11;

/**
 * Based on the OpenZeppelin IER20 interface:
 * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol
 *
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);
    function increaseAllowance(address spender, uint256 addedValue) external returns (bool);
    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool);

    /**
     * @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);

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    
    /**
     * @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);
}

File 5 of 5 : IERC2612.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.6.11;

/**
 * @dev Interface of the ERC2612 standard as defined in the EIP.
 *
 * Adds the {permit} method, which can be used to change one's
 * {IERC20-allowance} without having to send a transaction, by signing a
 * message. This allows users to spend tokens without having to hold Ether.
 *
 * See https://eips.ethereum.org/EIPS/eip-2612.
 * 
 * Code adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2237/
 */
interface IERC2612 {
    /**
     * @dev Sets `amount` as the allowance of `spender` over `owner`'s tokens,
     * given `owner`'s signed approval.
     *
     * IMPORTANT: The same issues {IERC20-approve} has related to transaction
     * ordering also apply here.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     * - `deadline` must be a timestamp in the future.
     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
     * over the EIP712-formatted function arguments.
     * - the signature must use ``owner``'s current nonce (see {nonces}).
     *
     * For more information on the signature format, see the
     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
     * section].
     */
    function permit(address owner, address spender, uint256 amount, 
                    uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    /**
     * @dev Returns the current ERC2612 nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases `owner`'s nonce by one. This
     * prevents a signature from being used multiple times.
     *
     * `owner` can limit the time a Permit is valid for by setting `deadline` to 
     * a value in the near future. The deadline argument can be set to uint(-1) to 
     * create Permits that effectively never expire.
     */
    function nonces(address owner) external view returns (uint256);
    
    function version() external view returns (string memory);
    function permitTypeHash() external view returns (bytes32);
    function domainSeparator() external view returns (bytes32);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 1000000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_troveManagerAddress","type":"address"},{"internalType":"address","name":"_troveManagerLiquidationsAddress","type":"address"},{"internalType":"address","name":"_troveManagerRedemptionsAddress","type":"address"},{"internalType":"address","name":"_stabilityPoolAddress","type":"address"},{"internalType":"address","name":"_borrowerOperationsAddress","type":"address"},{"internalType":"address","name":"_controllerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"YUSDTokenBalanceUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"_newMinter","type":"address"}],"name":"addValidMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","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":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"domainSeparator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"permitTypeHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"removeValidMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_poolAddress","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"returnFromPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_poolAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"sendToPool","outputs":[],"stateMutability":"nonpayable","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_canMint","type":"bool"}],"name":"updateMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

6101c06040526001805460ff1916811790553480156200001e57600080fd5b5060405162001e7338038062001e73833981810160405260c08110156200004457600080fd5b508051602080830151604080850151606080870151608088015160a0909801516001600160601b031988841b81166101005286841b81166101205284841b81166101405282841b81166101605289841b8116610180529281901b9092166101a0526001600160a01b038816600090815260058752849020805460ff1916600190811790915584518086018652600f81526e2caaa9a21029ba30b13632b1b7b4b760891b9088015284518086019095528452603160f81b93909501929092527f7bb87027487d36efcfb8a78c750a0c5fa1328814710c6d4fdd4ebf1e40f26b4f60c08190527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660e08190529596939591949392916200016a6001600160e01b03620001b516565b60a052620001a37f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83836001600160e01b03620001b916565b608052506200021a9650505050505050565b4690565b6000838383620001d16001600160e01b03620001b516565b6040805160208082019690965280820194909452606084019290925260808301523060a0808401919091528151808403909101815260c090920190528051910120949350505050565b60805160a05160c05160e0516101005160601c6101205160601c6101405160601c6101605160601c6101805160601c6101a05160601c611bc1620002b2600039806109015280610c965280610d7052508061168752508061108a528061170652806119305250806117465250806110c95250806116c6525080610ed4525080610eb3525080610e39525080610e695250611bc16000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c80637ecebe00116100e3578063bb997bac1161008c578063e4d2156111610066578063e4d21561146105b2578063e66ff880146105e5578063f698da25146106185761018d565b8063bb997bac146104d6578063d505accf14610519578063dd62ed3e146105775761018d565b8063a457c2d7116100bd578063a457c2d714610445578063a9059cbb1461047e578063b22b7840146104b75761018d565b80637ecebe00146103d157806395d89b41146104045780639dc29fac1461040c5761018d565b806323b872dd1161014557806340c10f191161011f57806340c10f191461035d57806354fd4d501461039657806370a082311461039e5761018d565b806323b872dd146102c3578063313ce5671461030657806339509351146103245761018d565b806310ce43bd1161017657806310ce43bd1461025c57806318160ddd1461027657806320c582be1461027e5761018d565b806306fdde0314610192578063095ea7b31461020f575b600080fd5b61019a610620565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101d45781810151838201526020016101bc565b50505050905090810190601f1680156102015780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102486004803603604081101561022557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610658565b604080519115158252519081900360200190f35b61026461066e565b60408051918252519081900360200190f35b610264610692565b6102c16004803603606081101561029457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610698565b005b610248600480360360608110156102d957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356106b0565b61030e610735565b6040805160ff9092168252519081900360200190f35b6102486004803603604081101561033a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561073a565b6102c16004803603604081101561037357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610783565b61019a6107a1565b610264600480360360208110156103b457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166107d8565b610264600480360360208110156103e757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610800565b61019a610828565b6102c16004803603604081101561042257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561085f565b6102486004803603604081101561045b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610871565b6102486004803603604081101561049457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356108d3565b6102c1600480360360208110156104cd57600080fd5b503515156108e9565b6102c1600480360360608110156104ec57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356109a8565b6102c1600480360360e081101561052f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356109b0565b6102646004803603604081101561058d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610c46565b6102c1600480360360208110156105c857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c7e565b6102c1600480360360208110156105fb57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d58565b610264610e35565b60408051808201909152600f81527f5955534420537461626c65636f696e000000000000000000000000000000000060208201525b90565b6000610665338484610eff565b50600192915050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c990565b60005490565b6106a0611072565b6106ab838383611142565b505050565b60006106bb8361135b565b6106c6848484611142565b61072b843361072685604051806060016040528060288152602001611aff6028913973ffffffffffffffffffffffffffffffffffffffff8a166000908152600460209081526040808320338452909152902054919063ffffffff6113cd16565b610eff565b5060019392505050565b601290565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091610665918590610726908663ffffffff61147e16565b61078b6114f9565b610793611508565b61079d8282611570565b5050565b60408051808201909152600181527f3100000000000000000000000000000000000000000000000000000000000000602082015290565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b60408051808201909152600481527f5955534400000000000000000000000000000000000000000000000000000000602082015290565b61086761166f565b61079d82826117bd565b6000610665338461072685604051806060016040528060258152602001611b676025913933600090815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d168452909152902054919063ffffffff6113cd16565b60006108de8361135b565b610665338484611142565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610977576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180611a4e6027913960400191505060405180910390fd5b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6106a0611918565b42841015610a1f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f595553443a206578706972656420646561646c696e6500000000000000000000604482015290519081900360640190fd5b6000610a29610e35565b73ffffffffffffffffffffffffffffffffffffffff808a1660008181526002602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958e166060860152608085018d905260a085019590955260c08085018c90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff8a166101828501526101a284018990526101c284018890525194955090936101e2808401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301929081900390910190855afa158015610b8a573d6000803e3d6000fd5b5050506020604051035190508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c3057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f595553443a20696e76616c6964207369676e6174757265000000000000000000604482015290519081900360640190fd5b610c3b898989610eff565b505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180611a4e6027913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180611a4e6027913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60007f0000000000000000000000000000000000000000000000000000000000000000610e606119a6565b1415610e8d57507f0000000000000000000000000000000000000000000000000000000000000000610655565b610ef87f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006119aa565b9050610655565b73ffffffffffffffffffffffffffffffffffffffff8316610f8157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5f617070726f76653a206f776e65722069732061646472657373283029000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821661100357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5f617070726f76653a207370656e646572206973206164647265737328302900604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260046020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614806110eb57503373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016145b611140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526040815260200180611b276040913960400191505060405180910390fd5b565b73ffffffffffffffffffffffffffffffffffffffff83166111c457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5f7472616e736665723a2073656e646572206973206164647265737328302900604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821661124657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f5f7472616e736665723a20726563697069656e74206973203061646472657373604482015290519081900360640190fd5b60408051808201825260208082527f45524332303a207472616e7366657220616d6f756e74203e2062616c616e63658183015273ffffffffffffffffffffffffffffffffffffffff86166000908152600390915291909120546112b091839063ffffffff6113cd16565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526003602052604080822093909355908416815220546112f2908263ffffffff61147e16565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526003602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b73ffffffffffffffffffffffffffffffffffffffff81163014156113ca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526040815260200180611abf6040913960400191505060405180910390fd5b50565b60008184841115611476576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561143b578181015183820152602001611423565b50505050905090810190601f1680156114685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156114f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f616464206f766572666c6f770000000000000000000000000000000000000000604482015290519081900360640190fd5b9392505050565b60015460ff1661114057600080fd5b3360009081526005602052604090205460ff16611140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180611a756025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166115f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5f6d696e743a206163636f756e74206973206164647265737328302900000000604482015290519081900360640190fd5b600054611605908263ffffffff61147e16565b600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420805486019055805185815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614806116e857503373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016145b8061172857503373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016145b8061176857503373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016145b611140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604d815260200180611a01604d913960600191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821661183f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5f6275726e3a206163636f756e74206973206164647265737328302900000000604482015290519081900360640190fd5b604080518082018252601c81527f45524332303a206275726e20616d6f756e74203e2062616c616e63650000000060208083019190915273ffffffffffffffffffffffffffffffffffffffff85166000908152600390915291909120546118ad91839063ffffffff6113cd16565b73ffffffffffffffffffffffffffffffffffffffff8316600081815260036020908152604080832094909455815485900382558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180611a9a6025913960400191505060405180910390fd5b4690565b60008383836119b76119a6565b6040805160208082019690965280820194909452606084019290925260808301523060a0808401919091528151808403909101815260c09092019052805191012094935050505056fe595553443a2043616c6c6572206973206e65697468657220426f72726f7765724f7065726174696f6e73206e6f722054726f76654d616e61676572206e6f722053746162696c697479506f6f6c59555344546f6b656e3a2043616c6c6572206973206e6f742059657469436f6e74726f6c6c657259555344546f6b656e3a2043616c6c6572206973206e6f742056616c6964204d696e746572595553443a2043616c6c6572206973206e6f74207468652053746162696c697479506f6f6c595553443a2043616e6e6f74207472616e7366657220746f6b656e73206469726563746c7920746f20746865205955534420746f6b656e20636f6e747261637445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365595553443a2043616c6c6572206973206e6569746865722054726f76654d616e616765724c697175696461746f72206e6f722053746162696c697479506f6f6c45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122094f9318437ad2594860689c9f179ea533474799bc9c96f8861ea763246799e9264736f6c634300060b0033000000000000000000000000000000000000614c27530d24b5f039ec15a61d8d0000000000000000000000000000000000adcd24b833604068cbbbb2eeb3a2a300000000000000000000000000000000000d9c2f60d8e82f2d1c2bed5008dd7d000000000000000000000000fffffffffff5d3627294fec5081ce5c5d7fa6451000000000000000000000000bbbbbbbbbbbec8bf32635374c0717c44b5c535ef000000000000000000000000cccccccccccc053fd8d1ff275da4183c2954dbe3

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000614c27530d24b5f039ec15a61d8d0000000000000000000000000000000000adcd24b833604068cbbbb2eeb3a2a300000000000000000000000000000000000d9c2f60d8e82f2d1c2bed5008dd7d000000000000000000000000fffffffffff5d3627294fec5081ce5c5d7fa6451000000000000000000000000bbbbbbbbbbbec8bf32635374c0717c44b5c535ef000000000000000000000000cccccccccccc053fd8d1ff275da4183c2954dbe3

-----Decoded View---------------
Arg [0] : _troveManagerAddress (address): 0x000000000000614c27530d24b5f039ec15a61d8d
Arg [1] : _troveManagerLiquidationsAddress (address): 0x0000000000adcd24b833604068cbbbb2eeb3a2a3
Arg [2] : _troveManagerRedemptionsAddress (address): 0x00000000000d9c2f60d8e82f2d1c2bed5008dd7d
Arg [3] : _stabilityPoolAddress (address): 0xfffffffffff5d3627294fec5081ce5c5d7fa6451
Arg [4] : _borrowerOperationsAddress (address): 0xbbbbbbbbbbbec8bf32635374c0717c44b5c535ef
Arg [5] : _controllerAddress (address): 0xcccccccccccc053fd8d1ff275da4183c2954dbe3

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000614c27530d24b5f039ec15a61d8d
Arg [1] : 0000000000000000000000000000000000adcd24b833604068cbbbb2eeb3a2a3
Arg [2] : 00000000000000000000000000000000000d9c2f60d8e82f2d1c2bed5008dd7d
Arg [3] : 000000000000000000000000fffffffffff5d3627294fec5081ce5c5d7fa6451
Arg [4] : 000000000000000000000000bbbbbbbbbbbec8bf32635374c0717c44b5c535ef
Arg [5] : 000000000000000000000000cccccccccccc053fd8d1ff275da4183c2954dbe3


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.