Contract 0x111111111111ed1d73f860f57b2798b683f2d325

Contract Overview

Balance:
0 AVAX

AVAX Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xc6db87750fbc6f78679dee7f459f1bc03d0a81797a3d6ab55ae1b4a1897067acApprove185474042022-08-12 12:53:2410 mins ago0xe92af3dfc02ca0209fa6222130c518058a0a27c7 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.‍000703681 26.‍5
0xcb5b67ed9c5935fd7831f7b4b9936b5b7373974aa12f7f3343cf12a67d2d617aApprove185473992022-08-12 12:53:1411 mins ago0xe92af3dfc02ca0209fa6222130c518058a0a27c7 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.‍001231031 26.‍5
0x939a666ad442573459c5df1c0e503d4efbc643db5211232f81d7239b62b0a500Transfer185469042022-08-12 12:36:3727 mins ago0x11175a05d2cbdf6f823ef8f26be55773d80768fd IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.‍000949575 27.‍5
0x77eaa905e7adec4284195b9893939f5d38abccb1d571ea700b100c957a6f2e44Approve185468952022-08-12 12:36:1927 mins ago0x11175a05d2cbdf6f823ef8f26be55773d80768fd IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.‍001231031 26.‍5
0x861d9d5c4833d508df23418edde62a1fe7985accde18bed7316fc274b86f729cApprove185459502022-08-12 12:04:3859 mins ago0x68b24012683560a6093c7cec84fe84800d1c8383 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.‍001231031 26.‍5
0x66d622b077dbdeaead67c64d56d30f11101dc3ef58dc03952eb073f87b34aaf4Approve185444672022-08-12 11:15:001 hr 49 mins ago0x34c9eed7bae33bc79ec410c5bb10d14c99968322 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.‍00122685014 26.‍41
0xbc8bf13de233b449ab96484dd397b0feee9bc7c29abdac203b7224a5686a2a45Approve185411812022-08-12 9:24:443 hrs 39 mins ago0x382f449046b43cb1ad2b7aad57f48a3152d9b838 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.‍001231031 26.‍5
0x89353258317aea5db88f80e72bcc7db2de5da8bb031f2c06f00ad3ec47e8593eApprove185408842022-08-12 9:14:443 hrs 49 mins ago0x57b18069f62f7d2a9aa6617b9f7b2e5ad9f32133 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.‍001231031 26.‍5
0x42f3cf2172bc4ee62bcdd3cf57ada746fa5f017745a8e4cbb8e6a26185a4f7b7Approve185408482022-08-12 9:13:323 hrs 50 mins ago0x1325a694f22f9fd4fb67e838f46bac28d744aa7a IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.‍001231031 26.‍5
0x3b4207bb2e00c1bb7a5ffeb45b7e5aa0653c172a470481ab038c9803e18de65dApprove185400292022-08-12 8:45:594 hrs 18 mins ago0xac944eb6d04ed691e2f4475cdfd74e3694af36c5 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.‍001231031 26.‍5
0x885c54a2aa464c0e2cb2227b12f58d0df91ce1d2ac53d62a6daa2934b302157aApprove185399272022-08-12 8:42:324 hrs 21 mins ago0xf4e4d069b4a429d99caee2be8fd93b2676953ec3 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.‍00122685014 26.‍41
0xb47176074c506b05781958fb03448e7960c3e9c3ad8cb5ea0fbe34c3600fb61eApprove185383202022-08-12 7:48:275 hrs 15 mins ago0x7834a526973ed8e90a7f6d47b0785af37a6d9a84 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.‍00072425 25
0x65c36eb4c7bdeb8fda9a45c1dc09828c72cad6b1b605c2f0d393089d8605610eApprove185254982022-08-12 0:37:2112 hrs 26 mins ago0x3e01d86e6d2d4457b528edc931e3cb0caca25953 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.‍001231031 26.‍5
0x9b084760377063e3c9cc66ac8bb4e53b6790d81d970dafe8f7f1f609d0efa349Approve185253262022-08-12 0:31:3612 hrs 32 mins ago0x3e01d86e6d2d4457b528edc931e3cb0caca25953 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.‍001231031 26.‍5
0x7947f9d7e3feb30cfb8bd8815dbc6ac1c54398e94147e3584c8208bcb8b24410Approve185247602022-08-12 0:12:3912 hrs 51 mins ago0x1144d94d55f11f2f7504df1ac94e18714717ec27 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.‍001231031 26.‍5
0x130f269d6c2181e6ad66a8ee259fb77c9fbba02ee288d2c8711ea723407d261aApprove185235302022-08-11 23:31:4313 hrs 32 mins ago0xbf44a8b4816c6effbfbb65dbb7819587a2654d5a IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.‍001231031 26.‍5
0x56c91af71adebf6c853ad694f704add4ef1d45d5c1ed88ed790a3a63a4c92224Approve185233982022-08-11 23:27:1613 hrs 36 mins ago0xaa9e5c526525db930ecc3859e4f5810d24f9a05a IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.‍001231031 26.‍5
0x6d170ee6b0282021445eef710e7f128a36dfe4144dc62e89340212bb170682e8Approve185222462022-08-11 22:48:2914 hrs 15 mins ago0x1820e8706632fb0c4d7aca1597664e657d1d67bc IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.‍001231031 26.‍5
0x35fdfa538765abfee16b3c66c529c142529fedfed6544dced217cd53d40d3864Approve185204452022-08-11 21:47:5315 hrs 16 mins ago0x211d4fc19e7c65177955d46f3fd36db8c04a7b8d IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.‍001231031 26.‍5
0x20ea9827e576a9827d5f9f8da18f4544aa3d77723d4e0aca2ce556580fb6382cApprove185181272022-08-11 20:30:1116 hrs 34 mins ago0x708670ad43835305eee4447e378801fd72c86c9e IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.‍001231031 26.‍5
0xfb3c9ef2e4b379bde92fffeeb2878d317be010be8904ad8a06e1ebf5344b9cb8Approve185168782022-08-11 19:48:2217 hrs 15 mins ago0xdafddc3315d16d9e99c7cc5f729c2c99dc946e92 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.‍001231031 26.‍5
0x501ce73a9ea74e75ea242e61c219149c1165a690e3608293a8baabae81b41da0Approve185168272022-08-11 19:46:3917 hrs 17 mins ago0x2f3de459222e51046e3f9e18db8900dd8011a963 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.‍001231031 26.‍5
0xd587bd5d2f6b5bafb39b9b5f0ff3e071d8749d6a8d593fc57d04d70571b2677bApprove185154962022-08-11 19:02:1618 hrs 1 min ago0x29788b13bacc6495138ba7521368c2008a491895 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.‍001231031 26.‍5
0x1a3c822b35ae5a33350100faf422867bc638f4fc3114cc644daed5dd4ba20f69Transfer185150632022-08-11 18:47:4418 hrs 16 mins ago0xe08ab19acad311e929763006182fa6b8e8ec85dd IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.‍000949575 27.‍5
0x9b830c106745bda085bf74283309cf31310bc59c501719813719c1d8e97d8cfeApprove185150542022-08-11 18:47:2618 hrs 16 mins ago0xe08ab19acad311e929763006182fa6b8e8ec85dd 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.