{"file_path":null,"creation_status":"success","source_code":"# @version 0.3.7\n\"\"\"\n@title crvUSD Stablecoin\n@author Curve.Fi\n@license Copyright (c) Curve.Fi, 2020-2023 - all rights reserved\n\"\"\"\nfrom vyper.interfaces import ERC20\n\nimplements: ERC20\n\n\ninterface ERC1271:\n    def isValidSignature(_hash: bytes32, _signature: Bytes[65]) -> bytes4: view\n\n\nevent Approval:\n    owner: indexed(address)\n    spender: indexed(address)\n    value: uint256\n\nevent Transfer:\n    sender: indexed(address)\n    receiver: indexed(address)\n    value: uint256\n\nevent SetMinter:\n    minter: indexed(address)\n\n\ndecimals: public(constant(uint8)) = 18\nversion: public(constant(String[8])) = \"v1.0.0\"\n\nERC1271_MAGIC_VAL: constant(bytes4) = 0x1626ba7e\nEIP712_TYPEHASH: constant(bytes32) = keccak256(\n    \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract,bytes32 salt)\"\n)\nEIP2612_TYPEHASH: constant(bytes32) = keccak256(\n    \"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\"\n)\nVERSION_HASH: constant(bytes32) = keccak256(version)\n\n\nname: public(immutable(String[64]))\nsymbol: public(immutable(String[32]))\nsalt: public(immutable(bytes32))\n\nNAME_HASH: immutable(bytes32)\nCACHED_CHAIN_ID: immutable(uint256)\nCACHED_DOMAIN_SEPARATOR: immutable(bytes32)\n\n\nallowance: public(HashMap[address, HashMap[address, uint256]])\nbalanceOf: public(HashMap[address, uint256])\ntotalSupply: public(uint256)\n\nnonces: public(HashMap[address, uint256])\nminter: public(address)\n\n\n@external\ndef __init__(_name: String[64], _symbol: String[32]):\n    name = _name\n    symbol = _symbol\n\n    NAME_HASH = keccak256(_name)\n    CACHED_CHAIN_ID = chain.id\n    salt = block.prevhash\n    CACHED_DOMAIN_SEPARATOR = keccak256(\n        _abi_encode(\n            EIP712_TYPEHASH,\n            keccak256(_name),\n            VERSION_HASH,\n            chain.id,\n            self,\n            block.prevhash,\n        )\n    )\n\n    self.minter = msg.sender\n    log SetMinter(msg.sender)\n\n\n@internal\ndef _approve(_owner: address, _spender: address, _value: uint256):\n    self.allowance[_owner][_spender] = _value\n\n    log Approval(_owner, _spender, _value)\n\n\n@internal\ndef _burn(_from: address, _value: uint256):\n    self.balanceOf[_from] -= _value\n    self.totalSupply -= _value\n\n    log Transfer(_from, empty(address), _value)\n\n\n@internal\ndef _transfer(_from: address, _to: address, _value: uint256):\n    assert _to not in [self, empty(address)]\n\n    self.balanceOf[_from] -= _value\n    self.balanceOf[_to] += _value\n\n    log Transfer(_from, _to, _value)\n\n\n@view\n@internal\ndef _domain_separator() -> bytes32:\n    if chain.id != CACHED_CHAIN_ID:\n        return keccak256(\n            _abi_encode(\n                EIP712_TYPEHASH,\n                NAME_HASH,\n                VERSION_HASH,\n                chain.id,\n                self,\n                salt,\n            )\n        )\n    return CACHED_DOMAIN_SEPARATOR\n\n\n@external\ndef transferFrom(_from: address, _to: address, _value: uint256) -> bool:\n    \"\"\"\n    @notice Transfer tokens from one account to another.\n    @dev The caller needs to have an allowance from account `_from` greater than or\n        equal to the value being transferred. An allowance equal to the uint256 type's\n        maximum, is considered infinite and does not decrease.\n    @param _from The account which tokens will be spent from.\n    @param _to The account which tokens will be sent to.\n    @param _value The amount of tokens to be transferred.\n    \"\"\"\n    allowance: uint256 = self.allowance[_from][msg.sender]\n    if allowance != max_value(uint256):\n        self._approve(_from, msg.sender, allowance - _value)\n\n    self._transfer(_from, _to, _value)\n    return True\n\n\n@external\ndef transfer(_to: address, _value: uint256) -> bool:\n    \"\"\"\n    @notice Transfer tokens to `_to`.\n    @param _to The account to transfer tokens to.\n    @param _value The amount of tokens to transfer.\n    \"\"\"\n    self._transfer(msg.sender, _to, _value)\n    return True\n\n\n@external\ndef approve(_spender: address, _value: uint256) -> bool:\n    \"\"\"\n    @notice Allow `_spender` to transfer up to `_value` amount of tokens from the caller's account.\n    @dev Non-zero to non-zero approvals are allowed, but should be used cautiously. The methods\n        increaseAllowance + decreaseAllowance are available to prevent any front-running that\n        may occur.\n    @param _spender The account permitted to spend up to `_value` amount of caller's funds.\n    @param _value The amount of tokens `_spender` is allowed to spend.\n    \"\"\"\n    self._approve(msg.sender, _spender, _value)\n    return True\n\n\n@external\ndef permit(\n    _owner: address,\n    _spender: address,\n    _value: uint256,\n    _deadline: uint256,\n    _v: uint8,\n    _r: bytes32,\n    _s: bytes32,\n) -> bool:\n    \"\"\"\n    @notice Permit `_spender` to spend up to `_value` amount of `_owner`'s tokens via a signature.\n    @dev In the event of a chain fork, replay attacks are prevented as domain separator is recalculated.\n        However, this is only if the resulting chains update their chainId.\n    @param _owner The account which generated the signature and is granting an allowance.\n    @param _spender The account which will be granted an allowance.\n    @param _value The approval amount.\n    @param _deadline The deadline by which the signature must be submitted.\n    @param _v The last byte of the ECDSA signature.\n    @param _r The first 32 bytes of the ECDSA signature.\n    @param _s The second 32 bytes of the ECDSA signature.\n    \"\"\"\n    assert _owner != empty(address) and block.timestamp <= _deadline\n\n    nonce: uint256 = self.nonces[_owner]\n    digest: bytes32 = keccak256(\n        concat(\n            b\"\\x19\\x01\",\n            self._domain_separator(),\n            keccak256(_abi_encode(EIP2612_TYPEHASH, _owner, _spender, _value, nonce, _deadline)),\n        )\n    )\n\n    if _owner.is_contract:\n        sig: Bytes[65] = concat(_abi_encode(_r, _s), slice(convert(_v, bytes32), 31, 1))\n        assert ERC1271(_owner).isValidSignature(digest, sig) == ERC1271_MAGIC_VAL\n    else:\n        assert ecrecover(digest, _v, _r, _s) == _owner\n\n    self.nonces[_owner] = nonce + 1\n    self._approve(_owner, _spender, _value)\n    return True\n\n\n@external\ndef increaseAllowance(_spender: address, _add_value: uint256) -> bool:\n    \"\"\"\n    @notice Increase the allowance granted to `_spender`.\n    @dev This function will never overflow, and instead will bound\n        allowance to MAX_UINT256. This has the potential to grant an\n        infinite approval.\n    @param _spender The account to increase the allowance of.\n    @param _add_value The amount to increase the allowance by.\n    \"\"\"\n    cached_allowance: uint256 = self.allowance[msg.sender][_spender]\n    allowance: uint256 = unsafe_add(cached_allowance, _add_value)\n\n    # check for an overflow\n    if allowance < cached_allowance:\n        allowance = max_value(uint256)\n\n    if allowance != cached_allowance:\n        self._approve(msg.sender, _spender, allowance)\n\n    return True\n\n\n@external\ndef decreaseAllowance(_spender: address, _sub_value: uint256) -> bool:\n    \"\"\"\n    @notice Decrease the allowance granted to `_spender`.\n    @dev This function will never underflow, and instead will bound\n        allowance to 0.\n    @param _spender The account to decrease the allowance of.\n    @param _sub_value The amount to decrease the allowance by.\n    \"\"\"\n    cached_allowance: uint256 = self.allowance[msg.sender][_spender]\n    allowance: uint256 = unsafe_sub(cached_allowance, _sub_value)\n\n    # check for an underflow\n    if cached_allowance < allowance:\n        allowance = 0\n\n    if allowance != cached_allowance:\n        self._approve(msg.sender, _spender, allowance)\n\n    return True\n\n\n@external\ndef burnFrom(_from: address, _value: uint256) -> bool:\n    \"\"\"\n    @notice Burn `_value` amount of tokens from `_from`.\n    @dev The caller must have previously been given an allowance by `_from`.\n    @param _from The account to burn the tokens from.\n    @param _value The amount of tokens to burn.\n    \"\"\"\n    allowance: uint256 = self.allowance[_from][msg.sender]\n    if allowance != max_value(uint256):\n        self._approve(_from, msg.sender, allowance - _value)\n\n    self._burn(_from, _value)\n    return True\n\n\n@external\ndef burn(_value: uint256) -> bool:\n    \"\"\"\n    @notice Burn `_value` amount of tokens.\n    @param _value The amount of tokens to burn.\n    \"\"\"\n    self._burn(msg.sender, _value)\n    return True\n\n\n@external\ndef mint(_to: address, _value: uint256) -> bool:\n    \"\"\"\n    @notice Mint `_value` amount of tokens to `_to`.\n    @dev Only callable by an account with minter privileges.\n    @param _to The account newly minted tokens are credited to.\n    @param _value The amount of tokens to mint.\n    \"\"\"\n    assert msg.sender == self.minter\n    assert _to not in [self, empty(address)]\n\n    self.balanceOf[_to] += _value\n    self.totalSupply += _value\n\n    log Transfer(empty(address), _to, _value)\n    return True\n\n\n@external\ndef set_minter(_minter: address):\n    assert msg.sender == self.minter\n\n    self.minter = _minter\n    log SetMinter(_minter)\n\n\n@view\n@external\ndef DOMAIN_SEPARATOR() -> bytes32:\n    \"\"\"\n    @notice EIP712 domain separator.\n    \"\"\"\n    return self._domain_separator()","deployed_bytecode":"0x6003361161000c57610ab0565b60003560e01c34610cc2576323b872dd81186100e55760643610610cc2576004358060a01c610cc25760c0526024358060a01c610cc25760e052600060c051602052600052604060002080336020526000526040600020905054610100527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010051146100be5760c0516040523360605261010051604435808203828111610cc257905090506080526100be610ab6565b60c05160405260e0516060526044356080526100d8610b7f565b6001610120526020610120f35b63a9059cbb81186101295760443610610cc2576004358060a01c610cc25760c0523360405260c05160605260243560805261011e610b7f565b600160e052602060e0f35b63095ea7b3811861016d5760443610610cc2576004358060a01c610cc25760c0523360405260c051606052602435608052610162610ab6565b600160e052602060e0f35b63d505accf811861049b5760e43610610cc2576004358060a01c610cc257610120526024358060a01c610cc257610140526084358060081c610cc2576101605261012051156101c1576064354211156101c4565b60005b15610cc25760036101205160205260005260406000205461018052600060026101c0527f19010000000000000000000000000000000000000000000000000000000000006101e0526101c0805160208201836103200181518152505080830192505050610232610200610c1b565b610200518161032001526020810190507f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c961024052610120516102605261014051610280526044356102a052610180516102c0526064356102e05260c061022052610220805160208201209050816103200152602081019050806103005261030090508051602082012090506101a052610120513b1561041c576000604060a46102603760406102405261024080516020820183610320018281848460045afa50505080830192505050610160516102a0526102a0601f810180516102e0525060016102c0526102c09050805160208201836103200181518152505080830192505050806103005261030090508051806101c05260208201816101e0838360045afa505050507f1626ba7e0000000000000000000000000000000000000000000000000000000061012051631626ba7e6102405260406101a05161026052806102805280610260016101c051808252602082018181836101e060045afa5050508051806020830101601f82600003163682375050601f19601f82516020010116905081015050602061024060c461025c845afa6103f4573d600060003e3d6000fd5b60203d10610cc257610240518060201b610cc2576103205261032090505118610cc25761044f565b610120516101a0516101c052610160516101e052604060a4610200376020600060806101c060015afa5060005118610cc2575b6101805160018101818110610cc2579050600361012051602052600052604060002055610120516040526101405160605260443560805261048e610ab6565b60016101c05260206101c0f35b6339509351811861054f5760443610610cc2576004358060a01c610cc25760c05260003360205260005260406000208060c051602052600052604060002090505460e05260243560e051016101005260e05161010051101561051d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100525b60e0516101005114610542573360405260c05160605261010051608052610542610ab6565b6001610120526020610120f35b63a457c2d781186105e45760443610610cc2576004358060a01c610cc25760c05260003360205260005260406000208060c051602052600052604060002090505460e05260243560e05103610100526101005160e05110156105b2576000610100525b60e05161010051146105d7573360405260c051606052610100516080526105d7610ab6565b6001610120526020610120f35b6379cc6790811861069b5760443610610cc2576004358060a01c610cc25760c052600060c05160205260005260406000208033602052600052604060002090505460e0527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60e0511461067a5760c0516040523360605260e051602435808203828111610cc2579050905060805261067a610ab6565b60c05160405260243560605261068e610b0f565b6001610100526020610100f35b6342966c6881186106cb5760243610610cc257336040526004356060526106c0610b0f565b600160a052602060a0f35b6340c10f19811861078a5760443610610cc2576004358060a01c610cc2576040526004543318610cc2576040513081146107075780151561070a565b60005b905015610cc257600160405160205260005260406000208054602435808201828110610cc25790509050815550600254602435808201828110610cc2579050905060025560405160007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60243560605260206060a3600160605260206060f35b631652e9fc81186107e55760243610610cc2576004358060a01c610cc2576040526004543318610cc2576040516004556040517fcec52196e972044edde8689a1b608e459c5946b7f3e5c8cd3d6d8e126d422e1c60006060a2005b633644e515811861080a5760043610610cc2576020610805610120610c1b565b610120f35b63313ce56781186108285760043610610cc257601260405260206040f35b6354fd4d5081186108b05760043610610cc25760208060805260066040527f76312e302e30000000000000000000000000000000000000000000000000000060605260408160800181518082526020830160208301815181525050508051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506080f35b6306fdde0381186109115760043610610cc257602080604052806040016020610cd46000396000518082526020820181610cf4823950508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b6395d89b4181186109795760043610610cc257602080604052806040016020610d34600039600051808252602082016020610d54600039600051815250508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b63bfa0b13381186109a05760043610610cc2576020610d7460003960005160405260206040f35b63dd62ed3e81186109fa5760443610610cc2576004358060a01c610cc2576040526024358060a01c610cc2576060526000604051602052600052604060002080606051602052600052604060002090505460805260206080f35b6370a082318118610a355760243610610cc2576004358060a01c610cc257604052600160405160205260005260406000205460605260206060f35b6318160ddd8118610a545760043610610cc25760025460405260206040f35b637ecebe008118610a8f5760243610610cc2576004358060a01c610cc257604052600360405160205260005260406000205460605260206060f35b63075461728118610aae5760043610610cc25760045460405260206040f35b505b60006000fd5b608051600060405160205260005260406000208060605160205260005260406000209050556060516040517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560805160a052602060a0a3565b600160405160205260005260406000208054606051808203828111610cc25790509050815550600254606051808203828111610cc2579050905060025560006040517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60605160805260206080a3565b606051308114610b9157801515610b94565b60005b905015610cc257600160405160205260005260406000208054608051808203828111610cc25790509050815550600160605160205260005260406000208054608051808201828110610cc257905090508155506060516040517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60805160a052602060a0a3565b6020610db46000396000514614610cb1577fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564726060526020610d946000396000516080527f15124d26d1272f8d4d5266a24ca397811f414b8cd05a53b26b745f63af5ae2fc60a0524660c0523060e0526020610d746000396000516101005260c06040526040805160208201209050815250610cc0565b6020610dd46000396000518152505b565b600080fda165767970657283000307000b000000000000000000000000000000000000000000000000000000000000001743757276652e46692055534420537461626c65636f696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066372765553440000000000000000000000000000000000000000000000000000b99ba1c24ff7f96081ccd1ad26ffc380e2cc4c73b87f99e7a0165fa980b3b9776b6d6c86c326770f6c25b6ef3f5528c1ce6dc99246faa6c29790347076961bba00000000000000000000000000000000000000000000000000000000000000017906987b5141f4b3a52bd45bf8cd1495b428ff72f3caefd1d670d9726103a7f0","optimization_enabled":true,"verified_twin_address_hash":null,"is_verified":true,"compiler_settings":null,"optimization_runs":null,"sourcify_repo_url":null,"decoded_constructor_args":[["Curve.Fi USD Stablecoin",{"name":"_name","type":"string"}],["crvUSD",{"name":"_symbol","type":"string"}]],"compiler_version":"v0.3.7+commit.6020b8bb","is_verified_via_verifier_alliance":false,"verified_at":"2025-10-23T06:33:39.842379Z","implementations":[],"proxy_type":null,"external_libraries":[],"creation_bytecode":"0x6020610e886000396000516040602082610e880160003960005111610e8357602081610e880160003960005180604052602082018181610e88016060395050506020610ea86000396000516020602082610e880160003960005111610e8357602081610e88016000396000518060a05260208201602081610e880160003960005160c05250505034610e835760405180610cd452600081601f0160051c60028111610e835780156100cb57905b8060051b606001518160051b602001610cd401526001018181186100ac575b50505060a05180610d345260c051610d545250604051606020610d945246610db4526001430340610d74527fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac5647261010052604051606020610120527f15124d26d1272f8d4d5266a24ca397811f414b8cd05a53b26b745f63af5ae2fc610140524661016052306101805260014303406101a05260c060e05260e0805160208201209050610dd45233600455337fcec52196e972044edde8689a1b608e459c5946b7f3e5c8cd3d6d8e126d422e1c600060e0a2610cd46101ae61000039610df4610000f36003361161000c57610ab0565b60003560e01c34610cc2576323b872dd81186100e55760643610610cc2576004358060a01c610cc25760c0526024358060a01c610cc25760e052600060c051602052600052604060002080336020526000526040600020905054610100527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010051146100be5760c0516040523360605261010051604435808203828111610cc257905090506080526100be610ab6565b60c05160405260e0516060526044356080526100d8610b7f565b6001610120526020610120f35b63a9059cbb81186101295760443610610cc2576004358060a01c610cc25760c0523360405260c05160605260243560805261011e610b7f565b600160e052602060e0f35b63095ea7b3811861016d5760443610610cc2576004358060a01c610cc25760c0523360405260c051606052602435608052610162610ab6565b600160e052602060e0f35b63d505accf811861049b5760e43610610cc2576004358060a01c610cc257610120526024358060a01c610cc257610140526084358060081c610cc2576101605261012051156101c1576064354211156101c4565b60005b15610cc25760036101205160205260005260406000205461018052600060026101c0527f19010000000000000000000000000000000000000000000000000000000000006101e0526101c0805160208201836103200181518152505080830192505050610232610200610c1b565b610200518161032001526020810190507f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c961024052610120516102605261014051610280526044356102a052610180516102c0526064356102e05260c061022052610220805160208201209050816103200152602081019050806103005261030090508051602082012090506101a052610120513b1561041c576000604060a46102603760406102405261024080516020820183610320018281848460045afa50505080830192505050610160516102a0526102a0601f810180516102e0525060016102c0526102c09050805160208201836103200181518152505080830192505050806103005261030090508051806101c05260208201816101e0838360045afa505050507f1626ba7e0000000000000000000000000000000000000000000000000000000061012051631626ba7e6102405260406101a05161026052806102805280610260016101c051808252602082018181836101e060045afa5050508051806020830101601f82600003163682375050601f19601f82516020010116905081015050602061024060c461025c845afa6103f4573d600060003e3d6000fd5b60203d10610cc257610240518060201b610cc2576103205261032090505118610cc25761044f565b610120516101a0516101c052610160516101e052604060a4610200376020600060806101c060015afa5060005118610cc2575b6101805160018101818110610cc2579050600361012051602052600052604060002055610120516040526101405160605260443560805261048e610ab6565b60016101c05260206101c0f35b6339509351811861054f5760443610610cc2576004358060a01c610cc25760c05260003360205260005260406000208060c051602052600052604060002090505460e05260243560e051016101005260e05161010051101561051d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100525b60e0516101005114610542573360405260c05160605261010051608052610542610ab6565b6001610120526020610120f35b63a457c2d781186105e45760443610610cc2576004358060a01c610cc25760c05260003360205260005260406000208060c051602052600052604060002090505460e05260243560e05103610100526101005160e05110156105b2576000610100525b60e05161010051146105d7573360405260c051606052610100516080526105d7610ab6565b6001610120526020610120f35b6379cc6790811861069b5760443610610cc2576004358060a01c610cc25760c052600060c05160205260005260406000208033602052600052604060002090505460e0527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60e0511461067a5760c0516040523360605260e051602435808203828111610cc2579050905060805261067a610ab6565b60c05160405260243560605261068e610b0f565b6001610100526020610100f35b6342966c6881186106cb5760243610610cc257336040526004356060526106c0610b0f565b600160a052602060a0f35b6340c10f19811861078a5760443610610cc2576004358060a01c610cc2576040526004543318610cc2576040513081146107075780151561070a565b60005b905015610cc257600160405160205260005260406000208054602435808201828110610cc25790509050815550600254602435808201828110610cc2579050905060025560405160007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60243560605260206060a3600160605260206060f35b631652e9fc81186107e55760243610610cc2576004358060a01c610cc2576040526004543318610cc2576040516004556040517fcec52196e972044edde8689a1b608e459c5946b7f3e5c8cd3d6d8e126d422e1c60006060a2005b633644e515811861080a5760043610610cc2576020610805610120610c1b565b610120f35b63313ce56781186108285760043610610cc257601260405260206040f35b6354fd4d5081186108b05760043610610cc25760208060805260066040527f76312e302e30000000000000000000000000000000000000000000000000000060605260408160800181518082526020830160208301815181525050508051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506080f35b6306fdde0381186109115760043610610cc257602080604052806040016020610cd46000396000518082526020820181610cf4823950508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b6395d89b4181186109795760043610610cc257602080604052806040016020610d34600039600051808252602082016020610d54600039600051815250508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b63bfa0b13381186109a05760043610610cc2576020610d7460003960005160405260206040f35b63dd62ed3e81186109fa5760443610610cc2576004358060a01c610cc2576040526024358060a01c610cc2576060526000604051602052600052604060002080606051602052600052604060002090505460805260206080f35b6370a082318118610a355760243610610cc2576004358060a01c610cc257604052600160405160205260005260406000205460605260206060f35b6318160ddd8118610a545760043610610cc25760025460405260206040f35b637ecebe008118610a8f5760243610610cc2576004358060a01c610cc257604052600360405160205260005260406000205460605260206060f35b63075461728118610aae5760043610610cc25760045460405260206040f35b505b60006000fd5b608051600060405160205260005260406000208060605160205260005260406000209050556060516040517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560805160a052602060a0a3565b600160405160205260005260406000208054606051808203828111610cc25790509050815550600254606051808203828111610cc2579050905060025560006040517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60605160805260206080a3565b606051308114610b9157801515610b94565b60005b905015610cc257600160405160205260005260406000208054608051808203828111610cc25790509050815550600160605160205260005260406000208054608051808201828110610cc257905090508155506060516040517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60805160a052602060a0a3565b6020610db46000396000514614610cb1577fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564726060526020610d946000396000516080527f15124d26d1272f8d4d5266a24ca397811f414b8cd05a53b26b745f63af5ae2fc60a0524660c0523060e0526020610d746000396000516101005260c06040526040805160208201209050815250610cc0565b6020610dd46000396000518152505b565b600080fda165767970657283000307000b005b600080fd00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001743757276652e46692055534420537461626c65636f696e00000000000000000000000000000000000000000000000000000000000000000000000000000000066372765553440000000000000000000000000000000000000000000000000000","name":"crvUSD Stablecoin","is_blueprint":false,"license_type":"unlicense","is_fully_verified":false,"is_verified_via_eth_bytecode_db":false,"language":"vyper","evm_version":"istanbul","can_be_visualized_via_sol2uml":false,"is_verified_via_sourcify":false,"additional_sources":[],"certified":false,"conflicting_implementations":null,"abi":[{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"sender","type":"address"},{"indexed":true,"name":"receiver","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"minter","type":"address"}],"name":"SetMinter","type":"event"},{"inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"}],"outputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_deadline","type":"uint256"},{"name":"_v","type":"uint8"},{"name":"_r","type":"bytes32"},{"name":"_s","type":"bytes32"}],"name":"permit","outputs":[{"name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_spender","type":"address"},{"name":"_add_value","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_spender","type":"address"},{"name":"_sub_value","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_from","type":"address"},{"name":"_value","type":"uint256"}],"name":"burnFrom","outputs":[{"name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_value","type":"uint256"}],"name":"burn","outputs":[{"name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"mint","outputs":[{"name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_minter","type":"address"}],"name":"set_minter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"salt","outputs":[{"name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"arg0","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"arg0","type":"address"}],"name":"nonces","outputs":[{"name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minter","outputs":[{"name":"","type":"address"}],"stateMutability":"view","type":"function"}],"is_changed_bytecode":false,"is_partially_verified":true,"constructor_args":"0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001743757276652e46692055534420537461626c65636f696e00000000000000000000000000000000000000000000000000000000000000000000000000000000066372765553440000000000000000000000000000000000000000000000000000"}