ETH Price: $3,496.85 (+1.26%)

Token

eBTC (EBTC)
 

Overview

Max Total Supply

52.193387271340236031 EBTC

Holders

85 (0.00%)

Market

Price

$98,465.00 @ 28.158171 ETH (+2.73%)

Onchain Market Cap

$5,139,221.88

Circulating Supply Market Cap

$5,038,288.00

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
7bfee.eth
Balance
0.000000000000000001 EBTC

Value
$0.00 ( ~0 Eth) [0.0000%]
0x7BFEe91193d9Df2Ac0bFe90191D40F23c773C060
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

eBTC is a capital efficient, transparent, governance minimized CDP protocol that allows anyone to borrow synthetic Bitcoin asset against their stETH with zero borrowing fees.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
EBTCToken

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 8 : EBTCToken.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

import "./Interfaces/IEBTCToken.sol";

import "./Dependencies/AuthNoOwner.sol";
import "./Dependencies/PermitNonce.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 EBTCToken ---
 *
 * 1) Transfer protection: blocklist of addresses that are invalid recipients (i.e. core Ebtc contracts) in external transfer() and transferFrom() calls.
 * The purpose is to protect users from losing tokens by mistakenly sending EBTC directly to a Liquity.
 * core contract, when they should rather call the right function.
 */

contract EBTCToken is IEBTCToken, AuthNoOwner, PermitNonce {
    uint256 private _totalSupply;
    string internal constant _NAME = "eBTC";
    string internal constant _SYMBOL = "EBTC";
    string internal constant _VERSION = "1";
    uint8 internal constant _DECIMALS = 18;

    // --- 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;

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

    // --- Addresses ---
    address public immutable cdpManagerAddress;
    address public immutable borrowerOperationsAddress;

    /// @param _cdpManagerAddress Address of the CDP Manager
    /// @param _borrowerOperationsAddress Address of the Borrower Operations
    /// @param _authorityAddress Address of the authority for the contract
    constructor(
        address _cdpManagerAddress,
        address _borrowerOperationsAddress,
        address _authorityAddress
    ) {
        _initializeAuthority(_authorityAddress);

        cdpManagerAddress = _cdpManagerAddress;
        borrowerOperationsAddress = _borrowerOperationsAddress;

        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);
    }

    /// @notice Mint new tokens
    /// @dev Internal system function - only callable by BorrowerOperations or CDPManager
    /// @dev Governance can also expand the list of approved minters to enable other systems to mint tokens
    /// @param _account The address to receive the newly minted tokens
    /// @param _amount The amount of tokens to mint
    function mint(address _account, uint256 _amount) external override {
        _requireCallerIsBOorCdpMOrAuth();
        _mint(_account, _amount);
    }

    /// @notice Burn existing tokens
    /// @dev Internal system function - only callable by BorrowerOperations or CDPManager
    /// @dev Governance can also expand the list of approved burners to enable other systems to burn tokens
    /// @param _account The address to burn tokens from
    /// @param _amount The amount of tokens to burn
    function burn(address _account, uint256 _amount) external override {
        _requireCallerIsBOorCdpMOrAuth();
        _burn(_account, _amount);
    }

    /// @notice Burn existing tokens from caller
    /// @dev Internal system function - only callable by BorrowerOperations or CDPManager
    /// @dev Governance can also expand the list of approved burners to enable other systems to burn tokens
    /// @param _amount The amount of tokens to burn
    function burn(uint256 _amount) external {
        _requireCallerIsBOorCdpMOrAuth();
        _burn(msg.sender, _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);

        uint256 cachedAllowance = _allowances[sender][msg.sender];
        if (cachedAllowance != type(uint256).max) {
            require(cachedAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, msg.sender, cachedAllowance - amount);
            }
        }
        return true;
    }

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

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

    // --- EIP 2612 Functionality (https://eips.ethereum.org/EIPS/eip-2612) ---

    /// @notice This function returns the domain separator for current chain
    /// @return EIP712 compatible Domain definition
    function DOMAIN_SEPARATOR() external view returns (bytes32) {
        return domainSeparator();
    }

    /// @notice This function returns the domain separator for current chain
    /// @return EIP712 compatible Domain definition
    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);
        }
    }

    /// @notice This function approve given amount for specified owner and spender
    /// @notice by verifying the validity of given deadline and signature parameters (v, r, s).
    /// @param owner The token owner
    /// @param spender The consumer to which owner want to grant approval
    /// @param amount The token expenditure budget to be set
    /// @param deadline The permit valid deadline
    /// @param v The v part of signature from owner
    /// @param r The r part of signature from owner
    /// @param s The s part of signature from owner
    function permit(
        address owner,
        address spender,
        uint256 amount,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external override {
        require(deadline >= block.timestamp, "EBTC: 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, "EBTC: invalid signature");
        _approve(owner, spender, amount);
    }

    /// @dev Return current nonce for specified owner fOR EIP-2612 compatibility
    /// @param owner The address whose nonce to be queried
    function nonces(address owner) external view override(IERC2612, PermitNonce) returns (uint256) {
        return _nonces[owner];
    }

    // --- Internal operations ---

    function _chainID() private view returns (uint256) {
        return block.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), "EBTCToken: zero sender!");
        require(recipient != address(0), "EBTCToken: zero recipient!");

        uint256 cachedSenderBalances = _balances[sender];
        require(cachedSenderBalances >= amount, "ERC20: transfer amount exceeds balance");

        unchecked {
            // Safe because of the check above
            _balances[sender] = cachedSenderBalances - amount;
        }

        _balances[recipient] = _balances[recipient] + amount;
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "EBTCToken: mint to zero recipient!");

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

    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "EBTCToken: burn from zero account!");

        uint256 cachedBalance = _balances[account];
        require(cachedBalance >= amount, "ERC20: burn amount exceeds balance");

        unchecked {
            // Safe because of the check above
            _balances[account] = cachedBalance - amount;
        }

        _totalSupply = _totalSupply - amount;
        emit Transfer(account, address(0), amount);
    }

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

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

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

    function _requireValidRecipient(address _recipient) internal view {
        require(
            _recipient != address(0) && _recipient != address(this),
            "EBTC: Cannot transfer tokens directly to the EBTC token contract or the zero address"
        );
        require(
            _recipient != cdpManagerAddress && _recipient != borrowerOperationsAddress,
            "EBTC: Cannot transfer tokens directly to the CdpManager or BorrowerOps"
        );
    }

    function _requireCallerIsBorrowerOperations() internal view {
        require(
            msg.sender == borrowerOperationsAddress,
            "EBTCToken: Caller is not BorrowerOperations"
        );
    }

    /// @dev authority check last to short-circuit in the case of use by usual immutable addresses
    function _requireCallerIsBOorCdpMOrAuth() internal view {
        require(
            msg.sender == borrowerOperationsAddress ||
                msg.sender == cdpManagerAddress ||
                isAuthorized(msg.sender, msg.sig),
            "EBTC: Caller is neither BorrowerOperations nor CdpManager nor authorized"
        );
    }

    function _requireCallerIsCdpM() internal view {
        require(msg.sender == cdpManagerAddress, "EBTC: Caller is not CdpManager");
    }

    // --- Optional functions ---

    /// @notice Returns the name of the token
    /// @return Name of the token
    function name() external pure override returns (string memory) {
        return _NAME;
    }

    /// @notice Returns the symbol of the token
    /// @return Symbol of the token
    function symbol() external pure override returns (string memory) {
        return _SYMBOL;
    }

    /// @notice Returns the number of decimals used to represent token amounts
    /// @return Number of decimals used by the token
    function decimals() external pure override returns (uint8) {
        return _DECIMALS;
    }

    /// @notice Returns the version of the token
    /// @return Version of the token
    function version() external pure override returns (string memory) {
        return _VERSION;
    }

    /// @notice Returns the type hash used for permit() function as per EIP-2612
    /// @return EIP-2612 permit type hash
    function permitTypeHash() external pure override returns (bytes32) {
        return _PERMIT_TYPEHASH;
    }
}

File 2 of 8 : AuthNoOwner.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity 0.8.17;

import {Authority} from "./Authority.sol";

/// @notice Provides a flexible and updatable auth pattern which is completely separate from application logic.
/// @author Modified by BadgerDAO to remove owner
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Auth.sol)
/// @author Modified from Dappsys (https://github.com/dapphub/ds-auth/blob/master/src/auth.sol)
contract AuthNoOwner {
    event AuthorityUpdated(address indexed user, Authority indexed newAuthority);

    Authority private _authority;
    bool private _authorityInitialized;

    modifier requiresAuth() virtual {
        require(isAuthorized(msg.sender, msg.sig), "Auth: UNAUTHORIZED");

        _;
    }

    function authority() public view returns (Authority) {
        return _authority;
    }

    function authorityInitialized() public view returns (bool) {
        return _authorityInitialized;
    }

    function isAuthorized(address user, bytes4 functionSig) internal view virtual returns (bool) {
        Authority auth = _authority; // Memoizing authority saves us a warm SLOAD, around 100 gas.

        // Checking if the caller is the owner only after calling the authority saves gas in most cases, but be
        // aware that this makes protected functions uncallable even to the owner if the authority is out of order.
        return (address(auth) != address(0) && auth.canCall(user, address(this), functionSig));
    }

    /// @notice Changed constructor to initialize to allow flexiblity of constructor vs initializer use
    /// @notice sets authorityInitiailzed flag to ensure only one use of
    function _initializeAuthority(address newAuthority) internal {
        require(address(_authority) == address(0), "Auth: authority is non-zero");
        require(!_authorityInitialized, "Auth: authority already initialized");

        _authority = Authority(newAuthority);
        _authorityInitialized = true;

        emit AuthorityUpdated(address(this), Authority(newAuthority));
    }
}

File 3 of 8 : Authority.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity 0.8.17;

/// @notice A generic interface for a contract which provides authorization data to an Auth instance.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Auth.sol)
/// @author Modified from Dappsys (https://github.com/dapphub/ds-auth/blob/master/src/auth.sol)
interface Authority {
    function canCall(address user, address target, bytes4 functionSig) external view returns (bool);
}

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

pragma solidity 0.8.17;

/**
 * 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 8 : IERC2612.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

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

File 6 of 8 : PermitNonce.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;
import "../Interfaces/IPermitNonce.sol";

/**
 * @dev This abstract contract provides a mapping from address to nonce (uint256) used for permit signature
 */
contract PermitNonce is IPermitNonce {
    mapping(address => uint256) internal _nonces;

    /// @dev Increase current nonce for msg.sender by one.
    /// @notice This function could be used to invalidate any signed permit out there
    function increasePermitNonce() external returns (uint256) {
        return ++_nonces[msg.sender];
    }

    /// @dev Return current nonce for msg.sender fOR EIP-2612 compatibility
    function nonces(address owner) external view virtual returns (uint256) {
        return _nonces[owner];
    }
}

File 7 of 8 : IEBTCToken.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

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

interface IEBTCToken is IERC20, IERC2612 {
    // --- Functions ---

    function mint(address _account, uint256 _amount) external;

    function burn(address _account, uint256 _amount) external;
}

File 8 of 8 : IPermitNonce.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

interface IPermitNonce {
    // --- Functions ---
    function increasePermitNonce() external returns (uint256);

    function nonces(address owner) external view returns (uint256);
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_cdpManagerAddress","type":"address"},{"internalType":"address","name":"_borrowerOperationsAddress","type":"address"},{"internalType":"address","name":"_authorityAddress","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":"user","type":"address"},{"indexed":true,"internalType":"contract Authority","name":"newAuthority","type":"address"}],"name":"AuthorityUpdated","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"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","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":[],"name":"authority","outputs":[{"internalType":"contract Authority","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"authorityInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"borrowerOperationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cdpManagerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":[],"name":"increasePermitNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"pure","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":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"}]

6101406040523480156200001257600080fd5b506040516200170538038062001705833981016040819052620000359162000272565b62000040816200013d565b506001600160a01b0391821661010052166101205260408051808201825260048152636542544360e01b6020918201528151808301835260018152603160f81b908201527f02f659af6b042fdf36c3ab7e538ab380cb5cbbeeaff551a20156873878a94eaf60c08181527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660e08190524660a081815286517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8188015280880195909552606085019290925260808085019190915230848301528551808503909201825292909101909352825192909101919091209052620002bc565b6000546001600160a01b0316156200019c5760405162461bcd60e51b815260206004820152601b60248201527f417574683a20617574686f72697479206973206e6f6e2d7a65726f000000000060448201526064015b60405180910390fd5b600054600160a01b900460ff1615620002045760405162461bcd60e51b815260206004820152602360248201527f417574683a20617574686f7269747920616c726561647920696e697469616c696044820152621e995960ea1b606482015260840162000193565b600080546001600160a81b0319166001600160a01b038316908117600160a01b178255604051909130917fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b763899801989190a350565b80516001600160a01b03811681146200026d57600080fd5b919050565b6000806000606084860312156200028857600080fd5b620002938462000255565b9250620002a36020850162000255565b9150620002b36040850162000255565b90509250925092565b60805160a05160c05160e05161010051610120516113dd620003286000396000818161038401528181610b3f0152610db701526000818161017d01528181610b020152610de9015260006108f4015260006108cf015260006108540152600061087c01526113dd6000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806370a08231116100de578063a9059cbb11610097578063d505accf11610071578063d505accf146103b7578063dd62ed3e146103ca578063e344803514610403578063f698da251461040b57600080fd5b8063a9059cbb1461036c578063b7f8cf9b1461037f578063bf7e214f146103a657600080fd5b806370a08231146102c25780637ecebe00146102eb57806395d89b411461031457806397bc1e1b146103345780639dc29fac14610346578063a457c2d71461035957600080fd5b8063313ce56711610130578063313ce567146102535780633644e51514610262578063395093511461026a57806340c10f191461027d57806342966c681461029257806354fd4d50146102a557600080fd5b806302f6567f1461017857806306fdde03146101bc578063095ea7b3146101e557806310ce43bd1461020857806318160ddd1461023857806323b872dd14610240575b600080fd5b61019f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6040805180820190915260048152636542544360e01b60208201525b6040516101b3919061117f565b6101f86101f33660046111e9565b610413565b60405190151581526020016101b3565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c95b6040519081526020016101b3565b60025461022a565b6101f861024e366004611213565b61042a565b604051601281526020016101b3565b61022a6104eb565b6101f86102783660046111e9565b6104fa565b61029061028b3660046111e9565b610536565b005b6102906102a036600461124f565b61054c565b6040805180820190915260018152603160f81b60208201526101d8565b61022a6102d0366004611268565b6001600160a01b031660009081526003602052604090205490565b61022a6102f9366004611268565b6001600160a01b031660009081526001602052604090205490565b6040805180820190915260048152634542544360e01b60208201526101d8565b600054600160a01b900460ff166101f8565b6102906103543660046111e9565b610561565b6101f86103673660046111e9565b610573565b6101f861037a3660046111e9565b61060c565b61019f7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031661019f565b6102906103c536600461128a565b610622565b61022a6103d83660046112fd565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b61022a61082a565b61022a610850565b6000610420338484610942565b5060015b92915050565b600061043583610a50565b610440848484610bf5565b6001600160a01b038416600090815260046020908152604080832033845290915290205460001981146104e057828110156104d35760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6104e08533858403610942565b506001949350505050565b60006104f5610850565b905090565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610420918590610531908690611346565b610942565b61053e610dac565b6105488282610eac565b5050565b610554610dac565b61055e3382610f9f565b50565b610569610dac565b6105488282610f9f565b3360009081526004602090815260408083206001600160a01b0386168452909152812054828110156105f55760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104ca565b6106023385858403610942565b5060019392505050565b600061061783610a50565b610420338484610bf5565b4284101561066b5760405162461bcd60e51b8152602060048201526016602482015275454254433a206578706972656420646561646c696e6560501b60448201526064016104ca565b6000610675610850565b6001600160a01b038916600090815260016020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928c928c928c929091906106c383611359565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012060405160200161073c92919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa1580156107a7573d6000803e3d6000fd5b505050602060405103519050886001600160a01b0316816001600160a01b0316146108145760405162461bcd60e51b815260206004820152601760248201527f454254433a20696e76616c6964207369676e617475726500000000000000000060448201526064016104ca565b61081f898989610942565b505050505050505050565b3360009081526001602052604081208054829061084690611359565b9182905550919050565b60007f0000000000000000000000000000000000000000000000000000000000000000460361089e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6001600160a01b0383166109985760405162461bcd60e51b815260206004820152601e60248201527f45425443546f6b656e3a207a65726f20617070726f7665206f776e657221000060448201526064016104ca565b6001600160a01b0382166109ee5760405162461bcd60e51b815260206004820181905260248201527f45425443546f6b656e3a207a65726f20617070726f7665207370656e6465722160448201526064016104ca565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03811615801590610a7157506001600160a01b0381163014155b610b005760405162461bcd60e51b815260206004820152605460248201527f454254433a2043616e6e6f74207472616e7366657220746f6b656e732064697260448201527f6563746c7920746f20746865204542544320746f6b656e20636f6e7472616374606482015273206f7220746865207a65726f206164647265737360601b608482015260a4016104ca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614158015610b7457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614155b61055e5760405162461bcd60e51b815260206004820152604660248201527f454254433a2043616e6e6f74207472616e7366657220746f6b656e732064697260448201527f6563746c7920746f20746865204364704d616e61676572206f7220426f72726f6064820152657765724f707360d01b608482015260a4016104ca565b6001600160a01b038316610c4b5760405162461bcd60e51b815260206004820152601760248201527f45425443546f6b656e3a207a65726f2073656e6465722100000000000000000060448201526064016104ca565b6001600160a01b038216610ca15760405162461bcd60e51b815260206004820152601a60248201527f45425443546f6b656e3a207a65726f20726563697069656e742100000000000060448201526064016104ca565b6001600160a01b03831660009081526003602052604090205481811015610d195760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104ca565b6001600160a01b03808516600090815260036020526040808220858503905591851681522054610d4a908390611346565b6001600160a01b0380851660008181526003602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d9e9086815260200190565b60405180910390a350505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610e0b5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b80610e275750610e27336000356001600160e01b0319166110e0565b610eaa5760405162461bcd60e51b815260206004820152604860248201527f454254433a2043616c6c6572206973206e65697468657220426f72726f77657260448201527f4f7065726174696f6e73206e6f72204364704d616e61676572206e6f722061756064820152671d1a1bdc9a5e995960c21b608482015260a4016104ca565b565b6001600160a01b038216610f0d5760405162461bcd60e51b815260206004820152602260248201527f45425443546f6b656e3a206d696e7420746f207a65726f20726563697069656e604482015261742160f01b60648201526084016104ca565b80600254610f1b9190611346565b6002556001600160a01b038216600090815260036020526040902054610f42908290611346565b6001600160a01b0383166000818152600360205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f939085815260200190565b60405180910390a35050565b6001600160a01b0382166110005760405162461bcd60e51b815260206004820152602260248201527f45425443546f6b656e3a206275726e2066726f6d207a65726f206163636f756e604482015261742160f01b60648201526084016104ca565b6001600160a01b038216600090815260036020526040902054818110156110745760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104ca565b6001600160a01b0383166000908152600360205260409020828203905560025461109f908390611372565b6002556040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610a43565b600080546001600160a01b03168015801590611177575060405163b700961360e01b81526001600160a01b0385811660048301523060248301526001600160e01b03198516604483015282169063b700961390606401602060405180830381865afa158015611153573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111779190611385565b949350505050565b600060208083528351808285015260005b818110156111ac57858101830151858201604001528201611190565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146111e457600080fd5b919050565b600080604083850312156111fc57600080fd5b611205836111cd565b946020939093013593505050565b60008060006060848603121561122857600080fd5b611231846111cd565b925061123f602085016111cd565b9150604084013590509250925092565b60006020828403121561126157600080fd5b5035919050565b60006020828403121561127a57600080fd5b611283826111cd565b9392505050565b600080600080600080600060e0888a0312156112a557600080fd5b6112ae886111cd565b96506112bc602089016111cd565b95506040880135945060608801359350608088013560ff811681146112e057600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561131057600080fd5b611319836111cd565b9150611327602084016111cd565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561042457610424611330565b60006001820161136b5761136b611330565b5060010190565b8181038181111561042457610424611330565b60006020828403121561139757600080fd5b8151801515811461128357600080fdfea26469706673582212204ab3c29f13decc78b01e2fcbf503dc701631084a674e94bdd7685bce950c493764736f6c63430008110033000000000000000000000000c4cbae499bb4ca41e78f52f07f5d98c375711774000000000000000000000000d366e016ae0677cdce93472e603b75051e022ad00000000000000000000000002a095d44831c26cfb6acb806a6531ae3ca32dbc1

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101735760003560e01c806370a08231116100de578063a9059cbb11610097578063d505accf11610071578063d505accf146103b7578063dd62ed3e146103ca578063e344803514610403578063f698da251461040b57600080fd5b8063a9059cbb1461036c578063b7f8cf9b1461037f578063bf7e214f146103a657600080fd5b806370a08231146102c25780637ecebe00146102eb57806395d89b411461031457806397bc1e1b146103345780639dc29fac14610346578063a457c2d71461035957600080fd5b8063313ce56711610130578063313ce567146102535780633644e51514610262578063395093511461026a57806340c10f191461027d57806342966c681461029257806354fd4d50146102a557600080fd5b806302f6567f1461017857806306fdde03146101bc578063095ea7b3146101e557806310ce43bd1461020857806318160ddd1461023857806323b872dd14610240575b600080fd5b61019f7f000000000000000000000000c4cbae499bb4ca41e78f52f07f5d98c37571177481565b6040516001600160a01b0390911681526020015b60405180910390f35b6040805180820190915260048152636542544360e01b60208201525b6040516101b3919061117f565b6101f86101f33660046111e9565b610413565b60405190151581526020016101b3565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c95b6040519081526020016101b3565b60025461022a565b6101f861024e366004611213565b61042a565b604051601281526020016101b3565b61022a6104eb565b6101f86102783660046111e9565b6104fa565b61029061028b3660046111e9565b610536565b005b6102906102a036600461124f565b61054c565b6040805180820190915260018152603160f81b60208201526101d8565b61022a6102d0366004611268565b6001600160a01b031660009081526003602052604090205490565b61022a6102f9366004611268565b6001600160a01b031660009081526001602052604090205490565b6040805180820190915260048152634542544360e01b60208201526101d8565b600054600160a01b900460ff166101f8565b6102906103543660046111e9565b610561565b6101f86103673660046111e9565b610573565b6101f861037a3660046111e9565b61060c565b61019f7f000000000000000000000000d366e016ae0677cdce93472e603b75051e022ad081565b6000546001600160a01b031661019f565b6102906103c536600461128a565b610622565b61022a6103d83660046112fd565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b61022a61082a565b61022a610850565b6000610420338484610942565b5060015b92915050565b600061043583610a50565b610440848484610bf5565b6001600160a01b038416600090815260046020908152604080832033845290915290205460001981146104e057828110156104d35760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6104e08533858403610942565b506001949350505050565b60006104f5610850565b905090565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610420918590610531908690611346565b610942565b61053e610dac565b6105488282610eac565b5050565b610554610dac565b61055e3382610f9f565b50565b610569610dac565b6105488282610f9f565b3360009081526004602090815260408083206001600160a01b0386168452909152812054828110156105f55760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104ca565b6106023385858403610942565b5060019392505050565b600061061783610a50565b610420338484610bf5565b4284101561066b5760405162461bcd60e51b8152602060048201526016602482015275454254433a206578706972656420646561646c696e6560501b60448201526064016104ca565b6000610675610850565b6001600160a01b038916600090815260016020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928c928c928c929091906106c383611359565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012060405160200161073c92919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa1580156107a7573d6000803e3d6000fd5b505050602060405103519050886001600160a01b0316816001600160a01b0316146108145760405162461bcd60e51b815260206004820152601760248201527f454254433a20696e76616c6964207369676e617475726500000000000000000060448201526064016104ca565b61081f898989610942565b505050505050505050565b3360009081526001602052604081208054829061084690611359565b9182905550919050565b60007f0000000000000000000000000000000000000000000000000000000000000001460361089e57507f577053ccb0bebc14d391fe0a7e7b9013a18ad4d0ae12814c3b50c464b9a28b9790565b50604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020808301919091527f02f659af6b042fdf36c3ab7e538ab380cb5cbbeeaff551a20156873878a94eaf828401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6001600160a01b0383166109985760405162461bcd60e51b815260206004820152601e60248201527f45425443546f6b656e3a207a65726f20617070726f7665206f776e657221000060448201526064016104ca565b6001600160a01b0382166109ee5760405162461bcd60e51b815260206004820181905260248201527f45425443546f6b656e3a207a65726f20617070726f7665207370656e6465722160448201526064016104ca565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03811615801590610a7157506001600160a01b0381163014155b610b005760405162461bcd60e51b815260206004820152605460248201527f454254433a2043616e6e6f74207472616e7366657220746f6b656e732064697260448201527f6563746c7920746f20746865204542544320746f6b656e20636f6e7472616374606482015273206f7220746865207a65726f206164647265737360601b608482015260a4016104ca565b7f000000000000000000000000c4cbae499bb4ca41e78f52f07f5d98c3757117746001600160a01b0316816001600160a01b031614158015610b7457507f000000000000000000000000d366e016ae0677cdce93472e603b75051e022ad06001600160a01b0316816001600160a01b031614155b61055e5760405162461bcd60e51b815260206004820152604660248201527f454254433a2043616e6e6f74207472616e7366657220746f6b656e732064697260448201527f6563746c7920746f20746865204364704d616e61676572206f7220426f72726f6064820152657765724f707360d01b608482015260a4016104ca565b6001600160a01b038316610c4b5760405162461bcd60e51b815260206004820152601760248201527f45425443546f6b656e3a207a65726f2073656e6465722100000000000000000060448201526064016104ca565b6001600160a01b038216610ca15760405162461bcd60e51b815260206004820152601a60248201527f45425443546f6b656e3a207a65726f20726563697069656e742100000000000060448201526064016104ca565b6001600160a01b03831660009081526003602052604090205481811015610d195760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104ca565b6001600160a01b03808516600090815260036020526040808220858503905591851681522054610d4a908390611346565b6001600160a01b0380851660008181526003602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d9e9086815260200190565b60405180910390a350505050565b336001600160a01b037f000000000000000000000000d366e016ae0677cdce93472e603b75051e022ad0161480610e0b5750336001600160a01b037f000000000000000000000000c4cbae499bb4ca41e78f52f07f5d98c37571177416145b80610e275750610e27336000356001600160e01b0319166110e0565b610eaa5760405162461bcd60e51b815260206004820152604860248201527f454254433a2043616c6c6572206973206e65697468657220426f72726f77657260448201527f4f7065726174696f6e73206e6f72204364704d616e61676572206e6f722061756064820152671d1a1bdc9a5e995960c21b608482015260a4016104ca565b565b6001600160a01b038216610f0d5760405162461bcd60e51b815260206004820152602260248201527f45425443546f6b656e3a206d696e7420746f207a65726f20726563697069656e604482015261742160f01b60648201526084016104ca565b80600254610f1b9190611346565b6002556001600160a01b038216600090815260036020526040902054610f42908290611346565b6001600160a01b0383166000818152600360205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f939085815260200190565b60405180910390a35050565b6001600160a01b0382166110005760405162461bcd60e51b815260206004820152602260248201527f45425443546f6b656e3a206275726e2066726f6d207a65726f206163636f756e604482015261742160f01b60648201526084016104ca565b6001600160a01b038216600090815260036020526040902054818110156110745760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104ca565b6001600160a01b0383166000908152600360205260409020828203905560025461109f908390611372565b6002556040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610a43565b600080546001600160a01b03168015801590611177575060405163b700961360e01b81526001600160a01b0385811660048301523060248301526001600160e01b03198516604483015282169063b700961390606401602060405180830381865afa158015611153573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111779190611385565b949350505050565b600060208083528351808285015260005b818110156111ac57858101830151858201604001528201611190565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146111e457600080fd5b919050565b600080604083850312156111fc57600080fd5b611205836111cd565b946020939093013593505050565b60008060006060848603121561122857600080fd5b611231846111cd565b925061123f602085016111cd565b9150604084013590509250925092565b60006020828403121561126157600080fd5b5035919050565b60006020828403121561127a57600080fd5b611283826111cd565b9392505050565b600080600080600080600060e0888a0312156112a557600080fd5b6112ae886111cd565b96506112bc602089016111cd565b95506040880135945060608801359350608088013560ff811681146112e057600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561131057600080fd5b611319836111cd565b9150611327602084016111cd565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561042457610424611330565b60006001820161136b5761136b611330565b5060010190565b8181038181111561042457610424611330565b60006020828403121561139757600080fd5b8151801515811461128357600080fdfea26469706673582212204ab3c29f13decc78b01e2fcbf503dc701631084a674e94bdd7685bce950c493764736f6c63430008110033

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

000000000000000000000000c4cbae499bb4ca41e78f52f07f5d98c375711774000000000000000000000000d366e016ae0677cdce93472e603b75051e022ad00000000000000000000000002a095d44831c26cfb6acb806a6531ae3ca32dbc1

-----Decoded View---------------
Arg [0] : _cdpManagerAddress (address): 0xc4cbaE499bb4Ca41E78f52F07f5d98c375711774
Arg [1] : _borrowerOperationsAddress (address): 0xd366e016Ae0677CdCE93472e603b75051E022AD0
Arg [2] : _authorityAddress (address): 0x2A095d44831C26cFB6aCb806A6531AE3CA32DBc1

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000c4cbae499bb4ca41e78f52f07f5d98c375711774
Arg [1] : 000000000000000000000000d366e016ae0677cdce93472e603b75051e022ad0
Arg [2] : 0000000000000000000000002a095d44831c26cfb6acb806a6531ae3ca32dbc1


Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.