Overview
S Balance
S Value
$0.00Latest 8 from a total of 8 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 8740883 | 2 days ago | IN | 0 S | 0.00265692 | ||||
Approve | 8080143 | 5 days ago | IN | 0 S | 0.0031861 | ||||
Approve | 8079465 | 5 days ago | IN | 0 S | 0.00265571 | ||||
Approve | 8077997 | 5 days ago | IN | 0 S | 0.00265571 | ||||
Approve | 7600915 | 9 days ago | IN | 0 S | 0.00265516 | ||||
Approve | 7600817 | 9 days ago | IN | 0 S | 0.00144717 | ||||
Approve | 7599875 | 9 days ago | IN | 0 S | 0.00289602 | ||||
Set_minter | 1582984 | 58 days ago | IN | 0 S | 0.00002802 |
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x09F8D940...1B686C071 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
Token
Compiler Version
vyper:0.3.10
Contract Source Code (Vyper language format)
# @version 0.3.10 """ @title Token @license MIT @author Curve Finance """ event Approval: owner: indexed(address) spender: indexed(address) amount: uint256 event Transfer: owner: indexed(address) receiver: indexed(address) amount: uint256 event SetMinter: minter: indexed(address) EIP712_TYPEHASH: constant(bytes32) = keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)") EIP2612_TYPEHASH: constant(bytes32) = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)") VERSION: constant(String[5]) = "1.0.0" VERSION_HASH: constant(bytes32) = keccak256(VERSION) CACHED_CHAIN_ID: immutable(uint256) CACHED_DOMAIN_SEPARATOR: immutable(bytes32) NAME_HASH: immutable(bytes32) name: public(immutable(String[64])) symbol: public(immutable(String[32])) decimals: public(immutable(uint8)) totalSupply: public(uint256) balanceOf: public(HashMap[address, uint256]) allowance: public(HashMap[address, HashMap[address, uint256]]) minter: public(address) nonces: public(HashMap[address, uint256]) @external def __init__(_name: String[64], _symbol: String[32], _decimals: uint8): name = _name symbol = _symbol decimals = _decimals CACHED_CHAIN_ID = chain.id CACHED_DOMAIN_SEPARATOR = keccak256( _abi_encode( EIP712_TYPEHASH, keccak256(_name), VERSION_HASH, chain.id, self ) ) NAME_HASH = keccak256(_name) self.minter = msg.sender log SetMinter(msg.sender) @internal def _approve(_owner: address, _spender: address, _amount: uint256): self.allowance[_owner][_spender] = _amount log Approval(_owner, _spender, _amount) @internal def _burn(_from: address, _amount: uint256): self.balanceOf[_from] -= _amount self.totalSupply -= _amount log Transfer(_from, empty(address), _amount) @internal def _transfer(_from: address, _to: address, _amount: uint256): assert _to not in [self, empty(address)] self.balanceOf[_from] -= _amount self.balanceOf[_to] += _amount log Transfer(_from, _to, _amount) @view @internal def _domain_separator() -> bytes32: if chain.id != CACHED_CHAIN_ID: return keccak256( _abi_encode( EIP712_TYPEHASH, NAME_HASH, VERSION_HASH, chain.id, self ) ) return CACHED_DOMAIN_SEPARATOR @external def transferFrom(_from: address, _to: address, _value: uint256) -> bool: """ @notice Transfer tokens from one account to another. @dev The caller needs to have an allowance from account `_from` greater than or equal to the value being transferred. An allowance equal to the uint256 type's maximum, is considered infinite and does not decrease the caller's allowance. @param _from The account which tokens will be spent from. @param _to The account which tokens will be sent to. @param _value The amount of tokens to be transferred. """ allowance: uint256 = self.allowance[_from][msg.sender] if allowance != max_value(uint256): self._approve(_from, msg.sender, allowance - _value) self._transfer(_from, _to, _value) return True @external def transfer(_to: address, _value: uint256) -> bool: """ @notice Transfer tokens to `_to`. @param _to The account to transfer tokens to. @param _value The amount of tokens to transfer. """ self._transfer(msg.sender, _to, _value) return True @external def approve(_spender: address, _value: uint256) -> bool: """ @notice Allow `_spender` to transfer up to `_value` amount of tokens from the caller's account. @dev Non-zero to non-zero approvals are allowed, but should be used cautiously. The methods increaseAllowance + decreaseAllowance are available to prevent any front-running that may occur. @param _spender The account permitted to spend up to `_value` amount of caller's funds. @param _value The amount of tokens `_spender` is allowed to spend. """ self._approve(msg.sender, _spender, _value) return True @external def permit( _owner: address, _spender: address, _value: uint256, _deadline: uint256, _v: uint8, _r: bytes32, _s: bytes32, ) -> bool: """ @notice Permit `_spender` to spend up to `_value` amount of `_owner`'s tokens via a signature. @dev In the event of a chain fork, replay attacks are prevented as domain separator is recalculated. However, this is only if the resulting chains update their chainId. @param _owner The account which generated the signature and is granting an allowance. @param _spender The account which will be granted an allowance. @param _value The approval amount. @param _deadline The deadline by which the signature must be submitted. @param _v The last byte of the ECDSA signature. @param _r The first 32 bytes of the ECDSA signature. @param _s The second 32 bytes of the ECDSA signature. """ assert _owner != empty(address) and block.timestamp <= _deadline nonce: uint256 = self.nonces[_owner] digest: bytes32 = keccak256( concat( b"\x19\x01", self._domain_separator(), keccak256(_abi_encode(EIP2612_TYPEHASH, _owner, _spender, _value, nonce, _deadline)), ) ) assert ecrecover(digest, _v, _r, _s) == _owner self.nonces[_owner] = nonce + 1 self._approve(_owner, _spender, _value) return True @external def increaseAllowance(_spender: address, _add_value: uint256) -> bool: """ @notice Increase the allowance granted to `_spender`. @dev This function will never overflow, and instead will bound allowance to MAX_UINT256. This has the potential to grant an infinite approval. @param _spender The account to increase the allowance of. @param _add_value The amount to increase the allowance by. """ cached_allowance: uint256 = self.allowance[msg.sender][_spender] allowance: uint256 = unsafe_add(cached_allowance, _add_value) # check for an overflow if allowance < cached_allowance: allowance = max_value(uint256) if allowance != cached_allowance: self._approve(msg.sender, _spender, allowance) return True @external def decreaseAllowance(_spender: address, _sub_value: uint256) -> bool: """ @notice Decrease the allowance granted to `_spender`. @dev This function will never underflow, and instead will bound allowance to 0. @param _spender The account to decrease the allowance of. @param _sub_value The amount to decrease the allowance by. """ cached_allowance: uint256 = self.allowance[msg.sender][_spender] allowance: uint256 = unsafe_sub(cached_allowance, _sub_value) # check for an underflow if cached_allowance < allowance: allowance = 0 if allowance != cached_allowance: self._approve(msg.sender, _spender, allowance) return True @external def burnFrom(_from: address, _value: uint256) -> bool: """ @notice Burn `_value` amount of tokens from `_from`. @dev The caller must have previously been given an allowance by `_from`. @param _from The account to burn the tokens from. @param _value The amount of tokens to burn. """ allowance: uint256 = self.allowance[_from][msg.sender] if allowance != max_value(uint256): self._approve(_from, msg.sender, allowance - _value) self._burn(_from, _value) return True @external def burn(_value: uint256) -> bool: """ @notice Burn `_value` amount of tokens. @param _value The amount of tokens to burn. """ self._burn(msg.sender, _value) return True @external def mint(_to: address, _value: uint256) -> bool: """ @notice Mint `_value` amount of tokens to `_to`. @dev Only callable by an account with minter privileges. @param _to The account newly minted tokens are credited to. @param _value The amount of tokens to mint. """ assert msg.sender == self.minter assert _to not in [self, empty(address)] self.balanceOf[_to] += _value self.totalSupply += _value log Transfer(empty(address), _to, _value) return True @external def set_minter(_minter: address): """ @notice Set the minter. @dev Only callble by the current minter account. @param _minter The account to transfer minter permissions to. """ assert msg.sender == self.minter self.minter = _minter log SetMinter(_minter) @view @external def DOMAIN_SEPARATOR() -> bytes32: """ @notice EIP712 domain separator. """ return self._domain_separator()
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true},{"name":"spender","type":"address","indexed":true},{"name":"amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Transfer","inputs":[{"name":"owner","type":"address","indexed":true},{"name":"receiver","type":"address","indexed":true},{"name":"amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetMinter","inputs":[{"name":"minter","type":"address","indexed":true}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_decimals","type":"uint8"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"transferFrom","inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"nonpayable","type":"function","name":"transfer","inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"nonpayable","type":"function","name":"approve","inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"nonpayable","type":"function","name":"permit","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"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"nonpayable","type":"function","name":"increaseAllowance","inputs":[{"name":"_spender","type":"address"},{"name":"_add_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"nonpayable","type":"function","name":"decreaseAllowance","inputs":[{"name":"_spender","type":"address"},{"name":"_sub_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"nonpayable","type":"function","name":"burnFrom","inputs":[{"name":"_from","type":"address"},{"name":"_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"nonpayable","type":"function","name":"burn","inputs":[{"name":"_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"nonpayable","type":"function","name":"mint","inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"nonpayable","type":"function","name":"set_minter","inputs":[{"name":"_minter","type":"address"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"DOMAIN_SEPARATOR","inputs":[],"outputs":[{"name":"","type":"bytes32"}]},{"stateMutability":"view","type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8"}]},{"stateMutability":"view","type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"balanceOf","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"allowance","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"minter","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"nonces","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}]}]
Deployed Bytecode
0x5f3560e01c6002600f821660011b610a9801601e395f51565b6306fdde03811861006e5734610a94576020806040528060400160206020610b185f395f510180610b188339508051806020830101601f825f03163682375050601f19601f825160200101169050810190506040f35b63095ea7b381186108af57604436103417610a94576004358060a01c610a945760c0523360405260c0516060526024356080526100a96108b3565b600160e052602060e0f36108af565b6395d89b41811861010e5734610a94576020806040528060400160206020610b785f395f510180610b788339508051806020830101601f825f03163682375050601f19601f825160200101169050810190506040f35b6370a08231811861014957602436103417610a94576004358060a01c610a945760405260016040516020525f5260405f205460605260206060f35b633950935181186108af57604436103417610a94576004358060a01c610a945760c0526002336020525f5260405f208060c0516020525f5260405f2090505460e05260243560e051016101005260e0516101005110156101c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100525b60e05161010051146101ee573360405260c051606052610100516080526101ee6108b3565b6001610120526020610120f36108af565b63313ce567811861021d5734610a94576020610bb860403960206040f35b63a457c2d781186108af57604436103417610a94576004358060a01c610a945760c0526002336020525f5260405f208060c0516020525f5260405f2090505460e05260243560e05103610100526101005160e051101561027d575f610100525b60e05161010051146102a2573360405260c051606052610100516080526102a26108b3565b6001610120526020610120f36108af565b6318160ddd81186102ce5734610a94575f5460405260206040f35b6323b872dd81186108af57606436103417610a94576004358060a01c610a945760c0526024358060a01c610a945760e052600260c0516020525f5260405f2080336020525f5260405f20905054610100527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010051146103735760c0516040523360605261010051604435808203828111610a9457905090506080526103736108b3565b60c05160405260e05160605260443560805261038d610973565b6001610120526020610120f36108af565b63dd62ed3e81186108af57604436103417610a94576004358060a01c610a94576040526024358060a01c610a945760605260026040516020525f5260405f20806060516020525f5260405f2090505460805260206080f36108af565b630754617281186108af5734610a945760035460405260206040f36108af565b637ecebe00811460033611161561045b57602436103417610a94576004358060a01c610a945760405260046040516020525f5260405f205460605260206060f35b6379cc679081186108af57604436103417610a94576004358060a01c610a945760c052600260c0516020525f5260405f2080336020525f5260405f2090505460e0527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60e051146104ef5760c0516040523360605260e051602435808203828111610a9457905090506080526104ef6108b3565b60c051604052602435606052610503610908565b6001610100526020610100f36108af565b63a9059cbb81186108af57604436103417610a94576004358060a01c610a945760c0523360405260c05160605260243560805261054f610973565b600160e052602060e0f36108af565b63d505accf81186108af5760e436103417610a94576004358060a01c610a9457610100526024358060a01c610a9457610120526084358060081c610a94576101405261010051156105b4576064354211156105b6565b5f5b15610a94576004610100516020525f5260405f2054610160525f60026101a0527f19010000000000000000000000000000000000000000000000000000000000006101c0526101a08051602082018361030001815181525050808301925050506106216101e0610a0a565b6101e0518161030001526020810190507f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610220526101005161024052610120516102605260443561028052610160516102a0526064356102c05260c061020052610200805160208201209050816103000152602081019050806102e0526102e0905080516020820120905061018052610100515f61022052610180516101a052610140516101c052604060a46101e037602061022060806101a060015afa506102205118610a94576101605160018101818110610a945790506004610100516020525f5260405f205561010051604052610120516060526044356080526107276108b3565b60016101a05260206101a0f36108af565b6342966c6881186108af57602436103417610a94573360405260043560605261075f610908565b600160a052602060a0f36108af565b6340c10f1981186108af57604436103417610a94576004358060a01c610a94576040526003543318610a94576040513081146107ac578015156107ae565b5f5b905015610a945760016040516020525f5260405f208054602435808201828110610a9457905090508155505f54602435808201828110610a9457905090505f556040515f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60243560605260206060a3600160605260206060f36108af565b631652e9fc81186108af57602436103417610a94576004358060a01c610a94576040526003543318610a94576040516003556040517fcec52196e972044edde8689a1b608e459c5946b7f3e5c8cd3d6d8e126d422e1c5f6060a2006108af565b633644e51581186108af5734610a945760206108aa610100610a0a565b610100f35b5f5ffd5b60805160026040516020525f5260405f20806060516020525f5260405f209050556060516040517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560805160a052602060a0a3565b60016040516020525f5260405f208054606051808203828111610a9457905090508155505f54606051808203828111610a9457905090505f555f6040517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60605160805260206080a3565b60605130811461098557801515610987565b5f5b905015610a945760016040516020525f5260405f208054608051808203828111610a94579050905081555060016060516020525f5260405f208054608051808201828110610a9457905090508155506060516040517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60805160a052602060a0a3565b6020610ab85f395f514614610a89577f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6060526020610af86080397f06c015bd22b4c69690933c1058878ebdfef31f9aaae40bbe86d8a09fe1b2972c60a0524660c0523060e05260a06040526040805160208201209050815250610a92565b6020610ad88239505b565b5f80fd041a00b803fa001808af088d08af01ff0738076e08af0514082d02b3039e055e0000000000000000000000000000000000000000000000000000000000000092b1e565103d3584a80fc5c031900235ba7bc961ea0c63d990cd20fa0de0eb55b69f8677a1fd4b02d0a7b641e866cb02a22994bd45292cfd173416a660877ce3f2000000000000000000000000000000000000000000000000000000000000000f43757276652044414f20546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000343525600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012
Loading...
Loading
OVERVIEW
Curve is an exchange liquidity pool on Ethereum. Curve is designed for extremely efficient stablecoin trading and low risk, supplemental fee income for liquidity providers, without an opportunity cost.Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.