Contract 0x111111111111ed1D73f860F57b2798b683f2d325 11

Contract Overview

Balance:
0 AVAX

AVAX Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xe6e0103608be06bbb7cf48024c3c03a765ec007160d044cc2c97986eabd45e97Approve354290932023-09-20 12:55:582 days 48 mins ago0x64622c5d879121983ddc84747e84d2b6c42c9364 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.00076770526.5
0x79bab77781d2862bba46b05342658f6400d06a3d1bfff5bd4107b7b4aad2f4b8Approve354290862023-09-20 12:55:442 days 48 mins ago0x64622c5d879121983ddc84747e84d2b6c42c9364 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.00076770526.5
0xee3a7b81bbfcc94e8a221cc9c5cbb4dd77a29884a63d05b3acaf3aa11fcd09f8Approve354290352023-09-20 12:54:022 days 50 mins ago0x64622c5d879121983ddc84747e84d2b6c42c9364 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.00076770526.5
0x8e78e7a1cd300ce3e37df7eec8e6a13e9697a8e165a9d4ca05028f339c9acb71Approve354194822023-09-20 7:32:122 days 6 hrs ago0xfaf4faf993ad3257c4c8a7d26230fb25d4d948ba IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.000869130
0x1bf1e12ee4fe78f83ec9f66c9bad1ddae4cf25fe21a3d0ad1983556574ba63daApprove353360552023-09-18 8:16:204 days 5 hrs ago0x355e2c0158d5b2bd82efc204ad8f3494d02eae55 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001262743973 27.35225
0x6677910d7ff64ea8af1605b7cdefd7273bf1a85c09cbd3982b8dadf09b6705d4Approve352632842023-09-16 14:42:035 days 23 hrs ago0xfe51263bd0d075dc5441e89ecd1f6d63ff41e02e IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.0012238606626.51
0xaa1cd0ea1e483f455de9e074e1b269943ac09fd34752d8a2ef2ad27f33c3a7d7Approve352528872023-09-16 8:51:176 days 4 hrs ago0xfcb9f7fd344c948833f4d8ba2020cf95aff0060e IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001223399 26.5
0xf9389abf7823350532aa35a7200fa1ff9f985089783f99829e150b614b1d2f83Approve351749212023-09-14 12:23:488 days 1 hr ago0x08b5c815d76bfad971dcc48aa5114e804d093184 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.00097367218 33.17
0x1ba9c70830446669a66e6d6a1e29006cfa92130739738977abba1a2814c9369dApprove351748792023-09-14 12:22:268 days 1 hr ago0x08b5c815d76bfad971dcc48aa5114e804d093184 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.0015628844 33.88
0x1383ef2941830c1ef198553ab8acde7a33a0297bbf22f3df95e0787178a0a64aApprove351695592023-09-14 9:22:458 days 4 hrs ago0xe3145648c5a39072f9982ae5294a4ad79ed85f0c IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001200628 26
0x1e6e6d5a53335f38e37f1fd028dd2a59bb6d11228f8dfccf10342e06b7b97028Approve351652602023-09-14 6:57:548 days 6 hrs ago0xe2e13bfffe89ac34d146391de09452057b8af3f4 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001223717 26.5
0x947457ee9e6e46c263c8d9df7d61c00d2ca3b8da4fb4feea5f48a7238d3cdec1Approve351599352023-09-14 3:55:458 days 9 hrs ago0x7609a4d02dbb6f892f837de404f1a0fdd23c163f IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.000703681 26.5
0x158ff3f27f703c10d1c00b8ff1d7a44c6adcc2b11f293aab54191b49a481202fApprove351598852023-09-14 3:54:048 days 9 hrs ago0x7609a4d02dbb6f892f837de404f1a0fdd23c163f IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001231031 26.5
0x60561d915f626c09737b965e5303031482c07d282fb0dd57d64306ca6e20141dApprove351402172023-09-13 16:43:558 days 21 hrs ago0x76b32f589904e78af65b773561133446c77bb70d IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001269565 27.5
0x386c9448572266020e77bd7a1b584eb4dedce2101e6890ea7657bc90d096720dApprove350420152023-09-11 9:19:0211 days 4 hrs ago0xff321995cf44bb7d7eeb6f6d5437069dc18350f0 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.00122308126.5
0x10374d27803b27bda23bb7dfb82187da3e7456ab2945fb7c5808ba895bc9894dApprove350056872023-09-10 12:45:0712 days 59 mins ago0x6319da9b17223043bc69db4944c2afac21cbf89f IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001224035 26.5
0x99383cd7913805550c8b484557ecd61f076970eddb7295f049f9ddf40348b79fApprove349956162023-09-10 7:04:4012 days 6 hrs ago0x5500e69d58d8f80b236c8a72fd52c538a5d5237f IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001223717 26.5
0x1afbc1c3fa91663eceff2d7c870d6557cb0ab3dd07008a9ef0bb6ae7a8fad490Approve348954932023-09-07 21:31:4414 days 16 hrs ago0xb9c20ac22fcf1a2e9da43dfe639f60dade1edcdf IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.00116181454 25.01
0xf1466a803815cebeacf32e0ec5d1db465e1009fd44da1f198e837c39761b0f96Approve348948872023-09-07 21:10:1514 days 16 hrs ago0x6c27e9f4a786cc4b2a26bf4f431eb574a28d4a74 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.0011659954 25.1
0x32600720f4f03b8d4fc55a37da2dc8c65ddc2d9d151ed9f6c07a093b5acf06f2Approve348886162023-09-07 17:28:0014 days 20 hrs ago0xe2233d97f30745fa5f15761b81b281be5959db5c IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001223081 26.5
0xc9d991d8d1bf3e6b8a60c71a451ea6092c040c03989e3f4595b01de7d93e68b5Approve348885032023-09-07 17:23:4514 days 20 hrs ago0x6ede5522b1c7773e2e5482e52a6bf75ff3b70597 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.001200316 26
0x4fd437473e0e4d4dedb05960b4d5a73ff6c7fa796e6aeb1830c574bc72f616d1Approve348527032023-09-06 19:56:1115 days 17 hrs ago0x27b85164d4d46045e5ca04683e5fa480481fcb08 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.000770885 26.5
0x7cbf91d111d897b86b1cb5e6d6216cc822ef54840c3b0dfab3fd84b9430e9303Approve348526942023-09-06 19:55:5215 days 17 hrs ago0x27b85164d4d46045e5ca04683e5fa480481fcb08 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.000696049 26.5
0xf6a1b1a2951158a26763f8c58d649170de8a4b3ddf4084b3ccded406ea8e271aApprove348526722023-09-06 19:55:0415 days 17 hrs ago0x27b85164d4d46045e5ca04683e5fa480481fcb08 IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.000770249 26.5
0x6d27c2bb9e7634f476d9042583489f012a4ecdd616581e835398dde0699675f7Approve348464262023-09-06 16:14:4815 days 21 hrs ago0x98f8a53f123096a0d05c102d82e74c98ef4d339f IN  0x111111111111ed1d73f860f57b2798b683f2d3250 AVAX0.00077523914 26.41
[ Download CSV Export 
Parent Txn Hash Block From To Value
Index Block
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
File 1 of 5 : YUSDToken.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.6.11;

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

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

/*
 *
 * 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
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.