ETH Price: $2,064.15 (+1.73%)

Contract

0x14139EB676342b6bC8E41E0d419969f23A49881e
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

Advanced mode:
Parent Transaction Hash Method Block
From
To
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Vyper_contract

Compiler Version
vyper:0.3.7

Optimization Enabled:
N/A

Other Settings:
default evmVersion, MIT license

Contract Source Code (Vyper language format)

# @version 0.3.7
"""
@author fiddy
@notice Calculates the circulating supply of Curve DAO token.
@dev The returned circulating supply is an estimate. There might be
     contracts that are not yet accounted for. Should you find one,
     please contact the core dev team.
"""


from vyper.interfaces import ERC20

admin: public(address)
CRV: public(constant(address)) = 0xD533a949740bb3306d119CC777fa900bA034cd52

contracts: public(address[100000])
num_contracts: public(uint256)
LEN_CACHED_CONTRACTS: constant(uint256) = 18
cached_contracts: public(constant(address[LEN_CACHED_CONTRACTS])) = [
    0x41Df5d28C7e801c4df0aB33421E2ed6ce52D2567,  # new employees
    0x2b6509Ca3D0FB2CD1c00F354F119aa139f118bb3,  # vesting
    0xe3997288987E6297Ad550A69B31439504F513267,  # community fund
    0xd061D61a4d941c39E5453435B6345Dc261C2fcE0,  # token minter
    0xd2D43555134dC575BF7279F4bA18809645dB0F1D,  # founder
    0x2A7d59E327759acd5d11A8fb652Bf4072d28AC04,  # investors
    0xa445521569E93D8a87820E593bC9C51C0123da08,  # vesting
    0xD533a949740bb3306d119CC777fa900bA034cd52,  # crv token
    0xf22995a3EA2C83F6764c711115B23A88411CAfdd,  # vesting
    0x575CCD8e2D300e2377B43478339E364000318E2c,  # LPs
    0x5f3b5DfEb7B28CDbD7FAba78963EE202a494e2A2,  # veCRV
    0xf7dBC322d72C1788a1E37eEE738e2eA9C7Fa875e,  # vesting
    0x679FCB9b33Fc4AE10Ff4f96caeF49c1ae3F8fA67,  # employees
    0x81930D767a75269dC0E9b83938884E342c1Fa5F6,
    0x629347824016530Fcd9a1990a30658ed9a04C834,
    0x967E923269475d1Af5718581Ab10bBC6a6154861,
    0xf049ae8D0dDccDD63d479e38aC3C51C4EE64fC2C,
    0x730E9aF9B71D5F41a1EA211347B888024A76612A,
]


@external
def __init__():
    self.admin = msg.sender
    self.num_contracts = 18


@external
def add_contract(_contract: address):
    """
    @notice Adds a contract to the list of contracts to 
            check for CRV balances
    @param _contract Address of the contract to cache
    """
    assert msg.sender == self.admin
    self._add_contract(_contract)


@external
@view
def circulating_supply() -> uint256:
    """
    @notice Returns the circulating supply of CRV
    """
    crv_total_supply: uint256 = ERC20(CRV).totalSupply()
    not_circulating: uint256 = self._get_crv_balances_of_cached_contracts()
    return crv_total_supply - not_circulating


@external
def set_admin(_new_admin: address):
    """
    @notice Set admin. Only callable by current admin.
    @dev We can do lazy admin transfer since this is not a critical contract
    @param _new_admin The new admin address
    """
    assert msg.sender == self.admin
    self.admin = _new_admin


@internal
def _add_contract(_contract: address):
    assert _contract not in self.contracts
    self.contracts[self.num_contracts] = _contract
    self.num_contracts += 1


@internal
@view
def _get_crv_balances_of_cached_contracts() -> uint256:
    
    balances: uint256 = 0
    for i in range(LEN_CACHED_CONTRACTS):
        balances += ERC20(CRV).balanceOf(cached_contracts[i])

    for i in range(10000):
        if self.contracts[i] == empty(address):
            break
        balances += ERC20(CRV).balanceOf(self.contracts[i])

    return balances

Contract Security Audit

Contract ABI

API
[{"stateMutability":"nonpayable","type":"constructor","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"add_contract","inputs":[{"name":"_contract","type":"address"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"circulating_supply","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"set_admin","inputs":[{"name":"_new_admin","type":"address"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"admin","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"CRV","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"contracts","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"num_contracts","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"cached_contracts","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]}]

3461072d57336000556012620186a15561070b6100216100003961070b610000f36003361161000c5761039a565b60003560e01c346106f957637fab635d811861005157602436106106f9576004358060a01c6106f95760805260005433186106f95760805160405261004f6103a0565b005b63e038c75a81186100e157600436106106f9576318160ddd610320526020610320600461033c73d533a949740bb3306d119cc777fa900ba034cd525afa61009d573d600060003e3d6000fd5b60203d106106f95761032051610300526100b861034061040b565b610340516103205261030051610320518082038281116106f95790509050610340526020610340f35b63e9333fab811861011357602436106106f9576004358060a01c6106f95760405260005433186106f957604051600055005b63f851a440811861013257600436106106f95760005460405260206040f35b63945c9142811861016357600436106106f95773d533a949740bb3306d119cc777fa900ba034cd5260405260206040f35b63474da79a811861019057602436106106f9576004356201869f81116106f9576001015460405260206040f35b63af13c9a081186101b157600436106106f957620186a15460405260206040f35b63903b21f3811861039857602436106106f95760207341df5d28c7e801c4df0ab33421e2ed6ce52d2567604052732b6509ca3d0fb2cd1c00f354f119aa139f118bb360605273e3997288987e6297ad550a69b31439504f51326760805273d061d61a4d941c39e5453435b6345dc261c2fce060a05273d2d43555134dc575bf7279f4ba18809645db0f1d60c052732a7d59e327759acd5d11a8fb652bf4072d28ac0460e05273a445521569e93d8a87820e593bc9c51c0123da086101005273d533a949740bb3306d119cc777fa900ba034cd526101205273f22995a3ea2c83f6764c711115b23a88411cafdd6101405273575ccd8e2d300e2377b43478339e364000318e2c61016052735f3b5dfeb7b28cdbd7faba78963ee202a494e2a26101805273f7dbc322d72c1788a1e37eee738e2ea9c7fa875e6101a05273679fcb9b33fc4ae10ff4f96caef49c1ae3f8fa676101c0527381930d767a75269dc0e9b83938884e342c1fa5f66101e05273629347824016530fcd9a1990a30658ed9a04c8346102005273967e923269475d1af5718581ab10bbc6a61548616102205273f049ae8d0ddccdd63d479e38ac3c51c4ee64fc2c6102405273730e9af9b71d5f41a1ea211347b888024a76612a610260526040600435601181116106f95760051b81019050f35b505b60006000fd5b60405160016060526000620186a0905b806001015483186103c55760006060526103d0565b6001018181186103b0575b50506060519050156106f957604051620186a1546201869f81116106f95760010155620186a154600181018181106106f9579050620186a155565b600060405260006012905b806060526040516370a082316102c0527341df5d28c7e801c4df0ab33421e2ed6ce52d2567608052732b6509ca3d0fb2cd1c00f354f119aa139f118bb360a05273e3997288987e6297ad550a69b31439504f51326760c05273d061d61a4d941c39e5453435b6345dc261c2fce060e05273d2d43555134dc575bf7279f4ba18809645db0f1d61010052732a7d59e327759acd5d11a8fb652bf4072d28ac046101205273a445521569e93d8a87820e593bc9c51c0123da086101405273d533a949740bb3306d119cc777fa900ba034cd526101605273f22995a3ea2c83f6764c711115b23a88411cafdd6101805273575ccd8e2d300e2377b43478339e364000318e2c6101a052735f3b5dfeb7b28cdbd7faba78963ee202a494e2a26101c05273f7dbc322d72c1788a1e37eee738e2ea9c7fa875e6101e05273679fcb9b33fc4ae10ff4f96caef49c1ae3f8fa67610200527381930d767a75269dc0e9b83938884e342c1fa5f66102205273629347824016530fcd9a1990a30658ed9a04c8346102405273967e923269475d1af5718581ab10bbc6a61548616102605273f049ae8d0ddccdd63d479e38ac3c51c4ee64fc2c6102805273730e9af9b71d5f41a1ea211347b888024a76612a6102a0526080606051601181116106f95760051b81019050516102e05260206102c060246102dc73d533a949740bb3306d119cc777fa900ba034cd525afa61062d573d600060003e3d6000fd5b60203d106106f9576102c0518082018281106106f957905090506040526001018181186104165750506000612710905b806060526060516201869f81116106f9576001015461067b576106ef565b6040516370a082316080526060516201869f81116106f9576001015460a052602060806024609c73d533a949740bb3306d119cc777fa900ba034cd525afa6106c8573d600060003e3d6000fd5b60203d106106f9576080518082018281106106f9579050905060405260010181811861065d575b5050604051815250565b600080fda165767970657283000307000b005b600080fd

Deployed Bytecode

0x6003361161000c5761039a565b60003560e01c346106f957637fab635d811861005157602436106106f9576004358060a01c6106f95760805260005433186106f95760805160405261004f6103a0565b005b63e038c75a81186100e157600436106106f9576318160ddd610320526020610320600461033c73d533a949740bb3306d119cc777fa900ba034cd525afa61009d573d600060003e3d6000fd5b60203d106106f95761032051610300526100b861034061040b565b610340516103205261030051610320518082038281116106f95790509050610340526020610340f35b63e9333fab811861011357602436106106f9576004358060a01c6106f95760405260005433186106f957604051600055005b63f851a440811861013257600436106106f95760005460405260206040f35b63945c9142811861016357600436106106f95773d533a949740bb3306d119cc777fa900ba034cd5260405260206040f35b63474da79a811861019057602436106106f9576004356201869f81116106f9576001015460405260206040f35b63af13c9a081186101b157600436106106f957620186a15460405260206040f35b63903b21f3811861039857602436106106f95760207341df5d28c7e801c4df0ab33421e2ed6ce52d2567604052732b6509ca3d0fb2cd1c00f354f119aa139f118bb360605273e3997288987e6297ad550a69b31439504f51326760805273d061d61a4d941c39e5453435b6345dc261c2fce060a05273d2d43555134dc575bf7279f4ba18809645db0f1d60c052732a7d59e327759acd5d11a8fb652bf4072d28ac0460e05273a445521569e93d8a87820e593bc9c51c0123da086101005273d533a949740bb3306d119cc777fa900ba034cd526101205273f22995a3ea2c83f6764c711115b23a88411cafdd6101405273575ccd8e2d300e2377b43478339e364000318e2c61016052735f3b5dfeb7b28cdbd7faba78963ee202a494e2a26101805273f7dbc322d72c1788a1e37eee738e2ea9c7fa875e6101a05273679fcb9b33fc4ae10ff4f96caef49c1ae3f8fa676101c0527381930d767a75269dc0e9b83938884e342c1fa5f66101e05273629347824016530fcd9a1990a30658ed9a04c8346102005273967e923269475d1af5718581ab10bbc6a61548616102205273f049ae8d0ddccdd63d479e38ac3c51c4ee64fc2c6102405273730e9af9b71d5f41a1ea211347b888024a76612a610260526040600435601181116106f95760051b81019050f35b505b60006000fd5b60405160016060526000620186a0905b806001015483186103c55760006060526103d0565b6001018181186103b0575b50506060519050156106f957604051620186a1546201869f81116106f95760010155620186a154600181018181106106f9579050620186a155565b600060405260006012905b806060526040516370a082316102c0527341df5d28c7e801c4df0ab33421e2ed6ce52d2567608052732b6509ca3d0fb2cd1c00f354f119aa139f118bb360a05273e3997288987e6297ad550a69b31439504f51326760c05273d061d61a4d941c39e5453435b6345dc261c2fce060e05273d2d43555134dc575bf7279f4ba18809645db0f1d61010052732a7d59e327759acd5d11a8fb652bf4072d28ac046101205273a445521569e93d8a87820e593bc9c51c0123da086101405273d533a949740bb3306d119cc777fa900ba034cd526101605273f22995a3ea2c83f6764c711115b23a88411cafdd6101805273575ccd8e2d300e2377b43478339e364000318e2c6101a052735f3b5dfeb7b28cdbd7faba78963ee202a494e2a26101c05273f7dbc322d72c1788a1e37eee738e2ea9c7fa875e6101e05273679fcb9b33fc4ae10ff4f96caef49c1ae3f8fa67610200527381930d767a75269dc0e9b83938884e342c1fa5f66102205273629347824016530fcd9a1990a30658ed9a04c8346102405273967e923269475d1af5718581ab10bbc6a61548616102605273f049ae8d0ddccdd63d479e38ac3c51c4ee64fc2c6102805273730e9af9b71d5f41a1ea211347b888024a76612a6102a0526080606051601181116106f95760051b81019050516102e05260206102c060246102dc73d533a949740bb3306d119cc777fa900ba034cd525afa61062d573d600060003e3d6000fd5b60203d106106f9576102c0518082018281106106f957905090506040526001018181186104165750506000612710905b806060526060516201869f81116106f9576001015461067b576106ef565b6040516370a082316080526060516201869f81116106f9576001015460a052602060806024609c73d533a949740bb3306d119cc777fa900ba034cd525afa6106c8573d600060003e3d6000fd5b60203d106106f9576080518082018281106106f9579050905060405260010181811861065d575b5050604051815250565b600080fda165767970657283000307000b

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

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.