Contract 0x111111111111ed1D73f860F57b2798b683f2d325

Contract Overview

Balance:
0 AVAX

AVAX Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x2f97000211e506c0b1c91124bf084d65c77ea13c6e70d7d5adfbf6cf5a20a93dApprove204598832022-09-30 7:47:333 hrs 55 mins ago0x14d11ca53a6d88feb277b16e6ba04044ea89eb0b IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001231031 26.5
0x0587586769045bcf54dfd1df9d7e9c4b59b24057a43e030d353ae13314c0872dApprove204533462022-09-30 4:03:417 hrs 39 mins ago0x945a21e3277e6aabda145da4cbabbf6d592fbce4 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001269565 27.5
0xd7f43d6d7fa7b26da814a0ab4d708ab8f7fd58b5a1943ce90274f077b8293f7bApprove204493172022-09-30 1:46:139 hrs 57 mins ago0x54342d12395ea6bbba174241df0dc3d2b49bb23d IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.00121892714 26.41
0xdf82be6fd7fbfc4f5257a8cadfcadab6cea368dfaad35cdb3b69d37405403b1bApprove204489722022-09-30 1:34:1610 hrs 9 mins ago0xe80207675d5ef1a902622fc4a99ab9fb07ce4ee7 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001269565 27.5
0xa7a2a083bce57700f2815fcf3b99cb4830889cb6199a74a70dc3ebbfcf65834aApprove204452372022-09-29 23:26:2212 hrs 16 mins ago0x73831e7c600f48cebbbff957b466be8e5c087f34 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.00116135 25
0x9c3a52c2ff275fcd2a32a66d1af398389a824fcd4d32ed5bb27dd81a22a59f16Approve204426022022-09-29 21:57:0313 hrs 46 mins ago0xf23dc120e1f216b7275ba71a71fef2354e349f78 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001223081 26.5
0x29ed9cdb3070016919623c16bc4a525cf52c8962f3e13b25c793111ca1e3baf6Approve204425122022-09-29 21:53:5713 hrs 49 mins ago0xf23dc120e1f216b7275ba71a71fef2354e349f78 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001244421528 26.788253508
0x6a80d1e26c0b5e83ae531ae359873390850b0de90ec31b145289130b2992e212Approve204368802022-09-29 18:41:3017 hrs 1 min ago0x289ccaa883fef0d3308bedc2807521722d3aa1f9 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001254258 27
0x879b0bf021fbb0ed3ffce4ab8acd9618195d2f8cb8b950a635d45578f1098cd0Approve204358542022-09-29 18:07:0117 hrs 36 mins ago0x73831e7c600f48cebbbff957b466be8e5c087f34 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001231031 26.5
0xaf5c3f1c783d48102bb2224bce6037c048b4658db9af1fe09b2597232eab6037Approve204348652022-09-29 17:33:2218 hrs 9 mins ago0x4dfce485e4465345767c9b8bc38d5171558cf5a8 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001277485 27.5
0x23af66bb2c079d894d203c9a796589a57d0ce29d548a4cc1c09edd5ce7dc1680Approve204348252022-09-29 17:32:0218 hrs 11 mins ago0x4dfce485e4465345767c9b8bc38d5171558cf5a8 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001231031 26.5
0x59323513e6b478aae430a4fc19ee470bf300f7c134d685e8c374d818e74ecfeeApprove204343342022-09-29 17:15:2918 hrs 27 mins ago0xf849995a8fb20e1014883510e748451203345232 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001231031 26.5
0xb7f87a48ad06877ef37038c935f94f5553508a3de2b67819469e0594325cd0b1Approve204329532022-09-29 16:28:2619 hrs 14 mins ago0xf4b36bc19d94578de4c25f9013fd0c6fa5badb00 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.00134716629
0xe44ed0b5fec80c7d0ec87b36f67e0bc308a286f41e2e1669f205f6d7f8aec7dfApprove204327192022-09-29 16:20:2619 hrs 22 mins ago0x257054d91260ae47fc3712dcaa01bd7f8b51cb32 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001231031 26.5
0x7d564255c7a35fcb122b8cea32b7bfb6a09d198e8a2be6839c55839a600fde5bApprove204310622022-09-29 15:23:5520 hrs 19 mins ago0xf4b36bc19d94578de4c25f9013fd0c6fa5badb00 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.00134681829
0x1907f1337a4830e329b7e423cb4843cc2b1611b07b0952c7f752cff8b328e982Approve204303992022-09-29 15:01:1920 hrs 42 mins ago0xf4b36bc19d94578de4c25f9013fd0c6fa5badb00 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.00133811829
0xba7861312d76a51c8d1bead5c0a629727ef8474eb37868feee158c88cfc05f85Approve204303832022-09-29 15:00:4720 hrs 42 mins ago0xf4b36bc19d94578de4c25f9013fd0c6fa5badb00 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.0008383929
0xe3c9c6e8c48f08bb35d398239507e3d987e6fe95a69643b79f84ec19895be5dcApprove204303712022-09-29 15:00:2320 hrs 42 mins ago0xf4b36bc19d94578de4c25f9013fd0c6fa5badb00 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.00083978229
0xcb7524043c5de02ae714db1c1b7ccd7d0bef53bbe2217498af46784e3b96622bApprove204302622022-09-29 14:56:3420 hrs 46 mins ago0x489981c5d1c55c1397aa62308c672c3bc063bef3 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001244214 27
0x6881de67ae3c54bc1808e962db48b70e69d251393e22b8e141af4066330b623dApprove204301092022-09-29 14:51:2620 hrs 51 mins ago0xf4b36bc19d94578de4c25f9013fd0c6fa5badb00 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.000695413 26.5
0xce3ed7b674695bffbca9ccbc5c6097a25e645113e29115e3c1ae883f8af96f7fApprove204299552022-09-29 14:46:1420 hrs 57 mins ago0xf4b36bc19d94578de4c25f9013fd0c6fa5badb00 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001231031 26.5
0x2d85324d0c20b6c4415797a6811f316d696100b5d1e07ebe8435cb670b5102c9Approve204296782022-09-29 14:36:4621 hrs 6 mins ago0xf4b36bc19d94578de4c25f9013fd0c6fa5badb00 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.00133811829
0x5d226f8c66386792e77e43a4c6e4f15a9545387d4c9dc892ca3885e2cf9482d4Transfer204289392022-09-29 14:11:3021 hrs 31 mins ago0xf4b36bc19d94578de4c25f9013fd0c6fa5badb00 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.0014972729
0x73aa691cdc04a098f926e35f66fa4b6f0f0347f596aaea9e3e35cebfd4c054c9Approve204241532022-09-29 11:27:221 day 15 mins ago0xe8d841067c8a07a7ed425fe84015396db90acf6c IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.000769931 26.5
0x7eb3ee1a12e4296a55386df25cc894fafe44a5c7b2f79b9244c09e41df1d1107Approve204187062022-09-29 8:20:551 day 3 hrs ago0xf0708b0ae88cd4346a4786009e5f6062d8865f38 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.