Latest 1 internal transaction
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 11659350 | 203 days ago | Contract Creation | 0 GLMR |
Cross-Chain Transactions
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
Child Liquidity Gauge Factory
Compiler Version
vyper:0.3.10
Contract Source Code (Vyper language format)
# pragma version 0.3.10
"""
@title Child Liquidity Gauge Factory
@license MIT
@author Curve Finance
@custom:version 2.0.0
"""
version: public(constant(String[8])) = "2.0.0"
from vyper.interfaces import ERC20
interface ChildGauge:
def initialize(_lp_token: address, _root: address, _manager: address): nonpayable
def integrate_fraction(_user: address) -> uint256: view
def user_checkpoint(_user: address) -> bool: nonpayable
interface CallProxy:
def anyCall(
_to: address, _data: Bytes[1024], _fallback: address, _to_chain_id: uint256
): nonpayable
event DeployedGauge:
_implementation: indexed(address)
_lp_token: indexed(address)
_deployer: indexed(address)
_salt: bytes32
_gauge: address
event Minted:
_user: indexed(address)
_gauge: indexed(address)
_new_total: uint256
event UpdateImplementation:
_old_implementation: address
_new_implementation: address
event UpdateVotingEscrow:
_old_voting_escrow: address
_new_voting_escrow: address
event UpdateRoot:
_factory: address
_implementation: address
event UpdateManager:
_manager: address
event UpdateCallProxy:
_old_call_proxy: address
_new_call_proxy: address
event UpdateMirrored:
_gauge: indexed(address)
_mirrored: bool
event TransferOwnership:
_old_owner: address
_new_owner: address
WEEK: constant(uint256) = 86400 * 7
crv: public(ERC20)
get_implementation: public(address)
voting_escrow: public(address)
owner: public(address)
future_owner: public(address)
manager: public(address)
root_factory: public(address)
root_implementation: public(address)
call_proxy: public(address)
# [last_request][has_counterpart][is_valid_gauge]
gauge_data: public(HashMap[address, uint256])
# user -> gauge -> value
minted: public(HashMap[address, HashMap[address, uint256]])
get_gauge_from_lp_token: public(HashMap[address, address])
get_gauge_count: public(uint256)
get_gauge: public(address[max_value(int128)])
@external
def __init__(_call_proxy: address, _root_factory: address, _root_impl: address, _crv: address, _owner: address):
"""
@param _call_proxy Contract for
@param _root_factory Root factory to anchor to
@param _root_impl Address of root gauge implementation to calculate mirror (can be updated)
@param _crv Bridged CRV token address (might be zero if not known yet)
@param _owner Owner of factory (xgov)
"""
self.crv = ERC20(_crv)
self.call_proxy = _call_proxy
log UpdateCallProxy(empty(address), _call_proxy)
assert _root_factory != empty(address)
assert _root_impl != empty(address)
self.root_factory = _root_factory
self.root_implementation = _root_impl
log UpdateRoot(_root_factory, _root_impl)
self.owner = _owner
log TransferOwnership(empty(address), _owner)
self.manager = msg.sender
log UpdateManager(msg.sender)
@internal
def _psuedo_mint(_gauge: address, _user: address):
gauge_data: uint256 = self.gauge_data[_gauge]
assert gauge_data != 0 # dev: invalid gauge
# if is_mirrored and last_request != this week
if gauge_data & 2 != 0 and (gauge_data >> 2) / WEEK != block.timestamp / WEEK:
CallProxy(self.call_proxy).anyCall(
self,
_abi_encode(_gauge, method_id=method_id("transmit_emissions(address)")),
empty(address),
1,
)
# update last request time
self.gauge_data[_gauge] = block.timestamp << 2 + 3
assert ChildGauge(_gauge).user_checkpoint(_user)
total_mint: uint256 = ChildGauge(_gauge).integrate_fraction(_user)
to_mint: uint256 = total_mint - self.minted[_user][_gauge]
if to_mint != 0 and self.crv != empty(ERC20):
assert self.crv.transfer(_user, to_mint, default_return_value=True)
self.minted[_user][_gauge] = total_mint
log Minted(_user, _gauge, total_mint)
@external
@nonreentrant("lock")
def mint(_gauge: address):
"""
@notice Mint everything which belongs to `msg.sender` and send to them
@param _gauge `LiquidityGauge` address to get mintable amount from
"""
self._psuedo_mint(_gauge, msg.sender)
@external
@nonreentrant("lock")
def mint_many(_gauges: address[32]):
"""
@notice Mint everything which belongs to `msg.sender` across multiple gauges
@param _gauges List of `LiquidityGauge` addresses
"""
for i in range(32):
if _gauges[i] == empty(address):
pass
self._psuedo_mint(_gauges[i], msg.sender)
@external
def deploy_gauge(_lp_token: address, _salt: bytes32, _manager: address = msg.sender) -> address:
"""
@notice Deploy a liquidity gauge
@param _lp_token The token to deposit in the gauge
@param _salt A value to deterministically deploy a gauge
@param _manager The address to set as manager of the gauge
"""
if self.get_gauge_from_lp_token[_lp_token] != empty(address):
# overwriting lp_token -> gauge mapping requires
assert msg.sender == self.owner # dev: only owner
gauge_data: uint256 = 1 # set is_valid_gauge = True
implementation: address = self.get_implementation
salt: bytes32 = keccak256(_abi_encode(chain.id, _salt))
gauge: address = create_minimal_proxy_to(
implementation, salt=salt
)
if msg.sender == self.call_proxy:
gauge_data += 2 # set mirrored = True
log UpdateMirrored(gauge, True)
# issue a call to the root chain to deploy a root gauge
CallProxy(self.call_proxy).anyCall(
self,
_abi_encode(chain.id, _salt, method_id=method_id("deploy_gauge(uint256,bytes32)")),
empty(address),
1
)
self.gauge_data[gauge] = gauge_data
idx: uint256 = self.get_gauge_count
self.get_gauge[idx] = gauge
self.get_gauge_count = idx + 1
self.get_gauge_from_lp_token[_lp_token] = gauge
# derive root gauge address
gauge_codehash: bytes32 = keccak256(
concat(
0x602d3d8160093d39f3363d3d373d3d3d363d73,
convert(self.root_implementation, bytes20),
0x5af43d82803e903d91602b57fd5bf3,
)
)
digest: bytes32 = keccak256(concat(0xFF, convert(self.root_factory, bytes20), salt, gauge_codehash))
root: address = convert(convert(digest, uint256) & convert(max_value(uint160), uint256), address)
# If root is uninitialized, self.owner can always set the root gauge manually
# on the gauge contract itself via set_root_gauge method
ChildGauge(gauge).initialize(_lp_token, root, _manager)
log DeployedGauge(implementation, _lp_token, msg.sender, _salt, gauge)
return gauge
@external
def set_crv(_crv: ERC20):
"""
@notice Sets CRV token address
@dev Child gauges reference the factory to fetch CRV address
If empty, the gauges do not mint any CRV tokens.
@param _crv address of CRV token on child chain
"""
assert msg.sender == self.owner
assert _crv != empty(ERC20)
self.crv = _crv
@external
def set_root(_factory: address, _implementation: address):
"""
@notice Update root addresses
@dev Addresses are used only as helper methods
@param _factory Root gauge factory
@param _implementation Root gauge
"""
assert msg.sender in [self.owner, self.manager] # dev: access denied
self.root_factory = _factory
self.root_implementation = _implementation
log UpdateRoot(_factory, _implementation)
@external
def set_voting_escrow(_voting_escrow: address):
"""
@notice Update the voting escrow contract
@param _voting_escrow Contract to use as the voting escrow oracle
"""
assert msg.sender == self.owner # dev: only owner
log UpdateVotingEscrow(self.voting_escrow, _voting_escrow)
self.voting_escrow = _voting_escrow
@external
def set_implementation(_implementation: address):
"""
@notice Set the implementation
@param _implementation The address of the implementation to use
"""
assert msg.sender == self.owner # dev: only owner
log UpdateImplementation(self.get_implementation, _implementation)
self.get_implementation = _implementation
@external
def set_mirrored(_gauge: address, _mirrored: bool):
"""
@notice Set the mirrored bit of the gauge data for `_gauge`
@param _gauge The gauge of interest
@param _mirrored Boolean deteremining whether to set the mirrored bit to True/False
"""
gauge_data: uint256 = self.gauge_data[_gauge]
assert gauge_data != 0 # dev: invalid gauge
assert msg.sender == self.owner # dev: only owner
gauge_data = gauge_data | 1 # set is_valid_gauge = True
if _mirrored:
gauge_data += 2 # set is_mirrored = True
self.gauge_data[_gauge] = gauge_data
log UpdateMirrored(_gauge, _mirrored)
@external
def set_call_proxy(_new_call_proxy: address):
"""
@notice Set the address of the call proxy used
@dev _new_call_proxy should adhere to the same interface as defined
@param _new_call_proxy Address of the cross chain call proxy
"""
assert msg.sender == self.owner
log UpdateCallProxy(self.call_proxy, _new_call_proxy)
self.call_proxy = _new_call_proxy
@external
def set_manager(_new_manager: address):
assert msg.sender in [self.owner, self.manager] # dev: access denied
self.manager = _new_manager
log UpdateManager(_new_manager)
@external
def commit_transfer_ownership(_future_owner: address):
"""
@notice Transfer ownership to `_future_owner`
@param _future_owner The account to commit as the future owner
"""
assert msg.sender == self.owner # dev: only owner
self.future_owner = _future_owner
@external
def accept_transfer_ownership():
"""
@notice Accept the transfer of ownership
@dev Only the committed future owner can call this function
"""
assert msg.sender == self.future_owner # dev: only future owner
log TransferOwnership(self.owner, msg.sender)
self.owner = msg.sender
@view
@external
def is_valid_gauge(_gauge: address) -> bool:
"""
@notice Query whether the gauge is a valid one deployed via the factory
@param _gauge The address of the gauge of interest
"""
return self.gauge_data[_gauge] != 0
@view
@external
def is_mirrored(_gauge: address) -> bool:
"""
@notice Query whether the gauge is mirrored on Ethereum mainnet
@param _gauge The address of the gauge of interest
"""
return (self.gauge_data[_gauge] & 2) != 0
@view
@external
def last_request(_gauge: address) -> uint256:
"""
@notice Query the timestamp of the last cross chain request for emissions
@param _gauge The address of the gauge of interest
"""
return self.gauge_data[_gauge] >> 2Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"name":"DeployedGauge","inputs":[{"name":"_implementation","type":"address","indexed":true},{"name":"_lp_token","type":"address","indexed":true},{"name":"_deployer","type":"address","indexed":true},{"name":"_salt","type":"bytes32","indexed":false},{"name":"_gauge","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"Minted","inputs":[{"name":"_user","type":"address","indexed":true},{"name":"_gauge","type":"address","indexed":true},{"name":"_new_total","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"UpdateImplementation","inputs":[{"name":"_old_implementation","type":"address","indexed":false},{"name":"_new_implementation","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"UpdateVotingEscrow","inputs":[{"name":"_old_voting_escrow","type":"address","indexed":false},{"name":"_new_voting_escrow","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"UpdateRoot","inputs":[{"name":"_factory","type":"address","indexed":false},{"name":"_implementation","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"UpdateManager","inputs":[{"name":"_manager","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"UpdateCallProxy","inputs":[{"name":"_old_call_proxy","type":"address","indexed":false},{"name":"_new_call_proxy","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"UpdateMirrored","inputs":[{"name":"_gauge","type":"address","indexed":true},{"name":"_mirrored","type":"bool","indexed":false}],"anonymous":false,"type":"event"},{"name":"TransferOwnership","inputs":[{"name":"_old_owner","type":"address","indexed":false},{"name":"_new_owner","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_call_proxy","type":"address"},{"name":"_root_factory","type":"address"},{"name":"_root_impl","type":"address"},{"name":"_crv","type":"address"},{"name":"_owner","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"mint","inputs":[{"name":"_gauge","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"mint_many","inputs":[{"name":"_gauges","type":"address[32]"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"deploy_gauge","inputs":[{"name":"_lp_token","type":"address"},{"name":"_salt","type":"bytes32"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"deploy_gauge","inputs":[{"name":"_lp_token","type":"address"},{"name":"_salt","type":"bytes32"},{"name":"_manager","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"set_crv","inputs":[{"name":"_crv","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_root","inputs":[{"name":"_factory","type":"address"},{"name":"_implementation","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_voting_escrow","inputs":[{"name":"_voting_escrow","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_implementation","inputs":[{"name":"_implementation","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_mirrored","inputs":[{"name":"_gauge","type":"address"},{"name":"_mirrored","type":"bool"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_call_proxy","inputs":[{"name":"_new_call_proxy","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_manager","inputs":[{"name":"_new_manager","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"commit_transfer_ownership","inputs":[{"name":"_future_owner","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"accept_transfer_ownership","inputs":[],"outputs":[]},{"stateMutability":"view","type":"function","name":"is_valid_gauge","inputs":[{"name":"_gauge","type":"address"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"is_mirrored","inputs":[{"name":"_gauge","type":"address"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"last_request","inputs":[{"name":"_gauge","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"crv","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"get_implementation","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"voting_escrow","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"future_owner","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"manager","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"root_factory","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"root_implementation","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"call_proxy","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"gauge_data","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"minted","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_gauge_from_lp_token","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"get_gauge_count","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_gauge","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]}]Contract Creation Code
346101775760206112df6000396000518060a01c6101775760405260206112ff6000396000518060a01c61017757606052602061131f6000396000518060a01c61017757608052602061133f6000396000518060a01c6101775760a052602061135f6000396000518060a01c6101775760c05260a0516001556040516009557fe385116766307e81d4427b03f1ac50c300b2f6a5df7b3c67eeb7eaaab12f0805600060e05260405161010052604060e0a1606051156101775760805115610177576060516007556080516008557f70f9501abbdc1e859ff8c1a6d83d3cb1ba973674e97c3e3c2292540d6e40dcfe60605160e05260805161010052604060e0a160c0516004557f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c600060e05260c05161010052604060e0a1336006557f5c18ab5c697b63d102fc7e14c77bfaef0f1013206eca139920fd389277814e093360e052602060e0a161114e61017c6100003961114e610000f35b600080fd60003560e01c6002601d820660011b61111401601e39600051565b6354fd4d508118610099573461110f5760208060805260056040527f322e302e3000000000000000000000000000000000000000000000000000000060605260408160800181518152602082015160208201528051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506080f35b631ec0cdc181186100b5573461110f5760055460405260206040f35b6366e1de658118610e665760443610341761110f576004358060a01c61110f576040526024358060a01c61110f576060523360045481186100f75760016100fe565b6006548118155b90501561110f576040516007556060516008557f70f9501abbdc1e859ff8c1a6d83d3cb1ba973674e97c3e3c2292540d6e40dcfe60405160805260605160a05260406080a100610e66565b636a4874a18118610e66573461110f5760015460405260206040f3610e66565b63c781c6688118610e66573461110f5760025460405260206040f3610e66565b63dfe0503181186101a5573461110f5760035460405260206040f35b639aece83e8118610e665760243610341761110f576004358060a01c61110f576040523360045481186101d95760016101e0565b6006548118155b90501561110f576040516006557f5c18ab5c697b63d102fc7e14c77bfaef0f1013206eca139920fd389277814e0960405160605260206060a100610e66565b638da5cb5b811861023b573461110f5760045460405260206040f35b63285218488118610e665760243610341761110f576004356f7ffffffffffffffffffffffffffffffe811161110f57600e015460405260206040f3610e66565b63481c6a758118610e66573461110f5760065460405260206040f3610e66565b633043228d8118610e66573461110f5760075460405260206040f3610e66565b637de035c18118610e66573461110f5760085460405260206040f3610e66565b63f81c6c3e81186102f7573461110f5760095460405260206040f35b635d95c65e8118610e665760243610341761110f576004358060a01c61110f57604052600c60405160205260005260406000205460605260206060f3610e66565b63f0ce32f881186103755760243610341761110f576004358060a01c61110f57604052600a60405160205260005260406000205460605260206060f35b632d4841218118610e665760243610341761110f576004358060a01c61110f57604052600454331861110f576040511561110f5760405160015500610e66565b638b752bb08118610e665760443610341761110f576004358060a01c61110f576040526024358060a01c61110f57606052600b604051602052600052604060002080606051602052600052604060002090505460805260206080f3610e66565b63f111569c8118610e66573461110f57600d5460405260206040f3610e66565b636a6278428118610e665760243610341761110f576004358060a01c61110f576102005260005460021461110f576002600055610200516040523360605261047b610e6c565b600360005500610e66565b6355ec67088118610e66576104043610341761110f576004358060a01c61110f57610200526024358060a01c61110f57610220526044358060a01c61110f57610240526064358060a01c61110f57610260526084358060a01c61110f576102805260a4358060a01c61110f576102a05260c4358060a01c61110f576102c05260e4358060a01c61110f576102e052610104358060a01c61110f5761030052610124358060a01c61110f5761032052610144358060a01c61110f5761034052610164358060a01c61110f5761036052610184358060a01c61110f57610380526101a4358060a01c61110f576103a0526101c4358060a01c61110f576103c0526101e4358060a01c61110f576103e052610204358060a01c61110f5761040052610224358060a01c61110f5761042052610244358060a01c61110f5761044052610264358060a01c61110f5761046052610284358060a01c61110f57610480526102a4358060a01c61110f576104a0526102c4358060a01c61110f576104c0526102e4358060a01c61110f576104e052610304358060a01c61110f5761050052610324358060a01c61110f5761052052610344358060a01c61110f5761054052610364358060a01c61110f5761056052610384358060a01c61110f57610580526103a4358060a01c61110f576105a0526103c4358060a01c61110f576105c0526103e4358060a01c61110f576105e05260005460021461110f57600260005560006020905b806106005261060051601f811161110f5760051b61020001516106c7575b61060051601f811161110f5760051b6102000151604052336060526106ea610e6c565b6001018181186106a9575050600360005500610e66565b638db98b5c8118610e665760443610341761110f573360605261074756610e66565b636be320d28118610e665760643610341761110f576044358060a01c61110f576060525b6004358060a01c61110f57604052600c6040516020526000526040600020541561077557600454331861110f575b600160805260025460a052466101005260243561012052604060e05260e080516020820120905060c0527f602d3d8160093d39f3363d3d373d3d3d363d73000000000000000000000000006101005260a05160601b610113527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006101275260c05160366101006000f5801561110f5760e05260095433186108fd576080516002810181811061110f57905060805260e0517f54b0a41dd85251df77437effbf9fbdca133bd234e7771816495877177288092c6001610100526020610100a260095463f9754c93610180526080306101a052806101c05263e10a16b861010452600446610124526024356101445260400161010052610100816101a00160208251018082828560045afa50508051806020830101601f82600003163682375050601f19601f82516020010116905090508101905060006101e05260016102005250803b1561110f57600061018061010461019c6000855af16108fb573d600060003e3d6000fd5b505b608051600a60e051602052600052604060002055600d546101005260e051610100516f7ffffffffffffffffffffffffffffffe811161110f57600e0155610100516001810181811061110f579050600d5560e051600c60405160205260005260406000205560007f602d3d8160093d39f3363d3d373d3d3d363d73000000000000000000000000008161016001526013810190506008548060601b90508161016001526014810190507f5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000816101600152600f81019050806101405261014090508051602082012090506101205260007fff000000000000000000000000000000000000000000000000000000000000008161018001526001810190506007548060601b905081610180015260148101905060c05181610180015260208101905061012051816101800152602081019050806101605261016090508051602082012090506101405273ffffffffffffffffffffffffffffffffffffffff61014051168060a01c61110f576101605260e05163c0c53b8b610180526040516101a052610160516101c0526060516101e052803b1561110f576000610180606461019c6000855af1610ad1573d600060003e3d6000fd5b503360405160a0517f69e16554b097f489830077da86e9e40cc91529a8d0787c42c4f33a0a337a0e086024356101805260e0516101a0526040610180a4602060e0f3610e66565b6323fc5a478118610e665760243610341761110f576004358060a01c61110f57604052600454331861110f577fa1b167642dcf1fee2fbf716c48c7c3f2326e4f26020cb042cd6405dfa72f4fd260035460605260405160805260406060a160405160035500610e66565b634cd69da08118610e665760243610341761110f576004358060a01c61110f57604052600454331861110f577fcdfeee65e4d0a88d6e47c5d034c34b03d52f1e6ffc56906257fc93d993ca04c460025460605260405160805260406060a160405160025500610e66565b634b29cac88118610cac5760443610341761110f576004358060a01c61110f576040526024358060011c61110f57606052600a6040516020526000526040600020546080526080511561110f57600454331861110f5760016080511760805260605115610c67576080516002810181811061110f5790506080525b608051600a6040516020526000526040600020556040517f54b0a41dd85251df77437effbf9fbdca133bd234e7771816495877177288092c60605160a052602060a0a2005b636b441a408118610e665760243610341761110f576004358060a01c61110f57604052600454331861110f5760405160055500610e66565b635ecb9e148118610e665760243610341761110f576004358060a01c61110f57604052600454331861110f577fe385116766307e81d4427b03f1ac50c300b2f6a5df7b3c67eeb7eaaab12f080560095460605260405160805260406060a160405160095500610e66565b63e5ea47b88118610d9d573461110f57600554331861110f577f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c6004546040523360605260406040a133600455005b6351bd4db58118610e665760243610341761110f576004358060a01c61110f57604052600a60405160205260005260406000205460021c60605260206060f3610e66565b634b9203798118610e665760243610341761110f576004358060a01c61110f57604052600a604051602052600052604060002054151560605260206060f3610e66565b638a42bd828118610e665760243610341761110f576004358060a01c61110f576040526002600a60405160205260005260406000205416151560605260206060f35b60006000fd5b600a6040516020526000526040600020546080526080511561110f5760026080511615610eb1574262093a808104905060805160021c62093a80810490501415610eb4565b60005b15610f6e5760095463f9754c93610100526080306101205280610140526311bfb95660a452600460405160c45260200160a05260a0816101200160208251018082828560045afa50508051806020830101601f82600003163682375050601f19601f82516020010116905090508101905060006101605260016101805250803b1561110f57600061010060e461011c6000855af1610f57573d600060003e3d6000fd5b504260051b600a6040516020526000526040600020555b604051634b82009360a05260605160c052602060a0602460bc6000855af1610f9b573d600060003e3d6000fd5b60203d1061110f5760a0518060011c61110f5760e05260e09050511561110f57604051630940070760c05260605160e052602060c0602460dc845afa610fe6573d600060003e3d6000fd5b60203d1061110f5760c090505160a05260a051600b606051602052600052604060002080604051602052600052604060002090505480820382811161110f579050905060c05260c0511561103e576001541515611041565b60005b1561110d5760015463a9059cbb60e0526060516101005260c05161012052602060e0604460fc6000855af161107b573d600060003e3d6000fd5b3d61109257803b1561110f576001610140526110aa565b60203d1061110f5760e0518060011c61110f57610140525b6101409050511561110f5760a051600b60605160205260005260406000208060405160205260005260406000209050556040516060517f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f060a05160e052602060e0a35b565b600080fd0e6603380e660e660bec043507230de10ce40b180b8203b504150e660e66001a027b0486021f0e6602db01490d4e018902bb029b016907010e248419114e81183a00a16576797065728300030a00150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306a45a1478a000dc701a6e1f7a569afb8d9dcd600000000000000000000000096720942f9ff22efd8611f696e5333fe3671717a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071f718d3e4d1449d1502a6a7595eb84ebccb1683
Deployed Bytecode
0x60003560e01c6002601d820660011b61111401601e39600051565b6354fd4d508118610099573461110f5760208060805260056040527f322e302e3000000000000000000000000000000000000000000000000000000060605260408160800181518152602082015160208201528051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506080f35b631ec0cdc181186100b5573461110f5760055460405260206040f35b6366e1de658118610e665760443610341761110f576004358060a01c61110f576040526024358060a01c61110f576060523360045481186100f75760016100fe565b6006548118155b90501561110f576040516007556060516008557f70f9501abbdc1e859ff8c1a6d83d3cb1ba973674e97c3e3c2292540d6e40dcfe60405160805260605160a05260406080a100610e66565b636a4874a18118610e66573461110f5760015460405260206040f3610e66565b63c781c6688118610e66573461110f5760025460405260206040f3610e66565b63dfe0503181186101a5573461110f5760035460405260206040f35b639aece83e8118610e665760243610341761110f576004358060a01c61110f576040523360045481186101d95760016101e0565b6006548118155b90501561110f576040516006557f5c18ab5c697b63d102fc7e14c77bfaef0f1013206eca139920fd389277814e0960405160605260206060a100610e66565b638da5cb5b811861023b573461110f5760045460405260206040f35b63285218488118610e665760243610341761110f576004356f7ffffffffffffffffffffffffffffffe811161110f57600e015460405260206040f3610e66565b63481c6a758118610e66573461110f5760065460405260206040f3610e66565b633043228d8118610e66573461110f5760075460405260206040f3610e66565b637de035c18118610e66573461110f5760085460405260206040f3610e66565b63f81c6c3e81186102f7573461110f5760095460405260206040f35b635d95c65e8118610e665760243610341761110f576004358060a01c61110f57604052600c60405160205260005260406000205460605260206060f3610e66565b63f0ce32f881186103755760243610341761110f576004358060a01c61110f57604052600a60405160205260005260406000205460605260206060f35b632d4841218118610e665760243610341761110f576004358060a01c61110f57604052600454331861110f576040511561110f5760405160015500610e66565b638b752bb08118610e665760443610341761110f576004358060a01c61110f576040526024358060a01c61110f57606052600b604051602052600052604060002080606051602052600052604060002090505460805260206080f3610e66565b63f111569c8118610e66573461110f57600d5460405260206040f3610e66565b636a6278428118610e665760243610341761110f576004358060a01c61110f576102005260005460021461110f576002600055610200516040523360605261047b610e6c565b600360005500610e66565b6355ec67088118610e66576104043610341761110f576004358060a01c61110f57610200526024358060a01c61110f57610220526044358060a01c61110f57610240526064358060a01c61110f57610260526084358060a01c61110f576102805260a4358060a01c61110f576102a05260c4358060a01c61110f576102c05260e4358060a01c61110f576102e052610104358060a01c61110f5761030052610124358060a01c61110f5761032052610144358060a01c61110f5761034052610164358060a01c61110f5761036052610184358060a01c61110f57610380526101a4358060a01c61110f576103a0526101c4358060a01c61110f576103c0526101e4358060a01c61110f576103e052610204358060a01c61110f5761040052610224358060a01c61110f5761042052610244358060a01c61110f5761044052610264358060a01c61110f5761046052610284358060a01c61110f57610480526102a4358060a01c61110f576104a0526102c4358060a01c61110f576104c0526102e4358060a01c61110f576104e052610304358060a01c61110f5761050052610324358060a01c61110f5761052052610344358060a01c61110f5761054052610364358060a01c61110f5761056052610384358060a01c61110f57610580526103a4358060a01c61110f576105a0526103c4358060a01c61110f576105c0526103e4358060a01c61110f576105e05260005460021461110f57600260005560006020905b806106005261060051601f811161110f5760051b61020001516106c7575b61060051601f811161110f5760051b6102000151604052336060526106ea610e6c565b6001018181186106a9575050600360005500610e66565b638db98b5c8118610e665760443610341761110f573360605261074756610e66565b636be320d28118610e665760643610341761110f576044358060a01c61110f576060525b6004358060a01c61110f57604052600c6040516020526000526040600020541561077557600454331861110f575b600160805260025460a052466101005260243561012052604060e05260e080516020820120905060c0527f602d3d8160093d39f3363d3d373d3d3d363d73000000000000000000000000006101005260a05160601b610113527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006101275260c05160366101006000f5801561110f5760e05260095433186108fd576080516002810181811061110f57905060805260e0517f54b0a41dd85251df77437effbf9fbdca133bd234e7771816495877177288092c6001610100526020610100a260095463f9754c93610180526080306101a052806101c05263e10a16b861010452600446610124526024356101445260400161010052610100816101a00160208251018082828560045afa50508051806020830101601f82600003163682375050601f19601f82516020010116905090508101905060006101e05260016102005250803b1561110f57600061018061010461019c6000855af16108fb573d600060003e3d6000fd5b505b608051600a60e051602052600052604060002055600d546101005260e051610100516f7ffffffffffffffffffffffffffffffe811161110f57600e0155610100516001810181811061110f579050600d5560e051600c60405160205260005260406000205560007f602d3d8160093d39f3363d3d373d3d3d363d73000000000000000000000000008161016001526013810190506008548060601b90508161016001526014810190507f5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000816101600152600f81019050806101405261014090508051602082012090506101205260007fff000000000000000000000000000000000000000000000000000000000000008161018001526001810190506007548060601b905081610180015260148101905060c05181610180015260208101905061012051816101800152602081019050806101605261016090508051602082012090506101405273ffffffffffffffffffffffffffffffffffffffff61014051168060a01c61110f576101605260e05163c0c53b8b610180526040516101a052610160516101c0526060516101e052803b1561110f576000610180606461019c6000855af1610ad1573d600060003e3d6000fd5b503360405160a0517f69e16554b097f489830077da86e9e40cc91529a8d0787c42c4f33a0a337a0e086024356101805260e0516101a0526040610180a4602060e0f3610e66565b6323fc5a478118610e665760243610341761110f576004358060a01c61110f57604052600454331861110f577fa1b167642dcf1fee2fbf716c48c7c3f2326e4f26020cb042cd6405dfa72f4fd260035460605260405160805260406060a160405160035500610e66565b634cd69da08118610e665760243610341761110f576004358060a01c61110f57604052600454331861110f577fcdfeee65e4d0a88d6e47c5d034c34b03d52f1e6ffc56906257fc93d993ca04c460025460605260405160805260406060a160405160025500610e66565b634b29cac88118610cac5760443610341761110f576004358060a01c61110f576040526024358060011c61110f57606052600a6040516020526000526040600020546080526080511561110f57600454331861110f5760016080511760805260605115610c67576080516002810181811061110f5790506080525b608051600a6040516020526000526040600020556040517f54b0a41dd85251df77437effbf9fbdca133bd234e7771816495877177288092c60605160a052602060a0a2005b636b441a408118610e665760243610341761110f576004358060a01c61110f57604052600454331861110f5760405160055500610e66565b635ecb9e148118610e665760243610341761110f576004358060a01c61110f57604052600454331861110f577fe385116766307e81d4427b03f1ac50c300b2f6a5df7b3c67eeb7eaaab12f080560095460605260405160805260406060a160405160095500610e66565b63e5ea47b88118610d9d573461110f57600554331861110f577f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c6004546040523360605260406040a133600455005b6351bd4db58118610e665760243610341761110f576004358060a01c61110f57604052600a60405160205260005260406000205460021c60605260206060f3610e66565b634b9203798118610e665760243610341761110f576004358060a01c61110f57604052600a604051602052600052604060002054151560605260206060f3610e66565b638a42bd828118610e665760243610341761110f576004358060a01c61110f576040526002600a60405160205260005260406000205416151560605260206060f35b60006000fd5b600a6040516020526000526040600020546080526080511561110f5760026080511615610eb1574262093a808104905060805160021c62093a80810490501415610eb4565b60005b15610f6e5760095463f9754c93610100526080306101205280610140526311bfb95660a452600460405160c45260200160a05260a0816101200160208251018082828560045afa50508051806020830101601f82600003163682375050601f19601f82516020010116905090508101905060006101605260016101805250803b1561110f57600061010060e461011c6000855af1610f57573d600060003e3d6000fd5b504260051b600a6040516020526000526040600020555b604051634b82009360a05260605160c052602060a0602460bc6000855af1610f9b573d600060003e3d6000fd5b60203d1061110f5760a0518060011c61110f5760e05260e09050511561110f57604051630940070760c05260605160e052602060c0602460dc845afa610fe6573d600060003e3d6000fd5b60203d1061110f5760c090505160a05260a051600b606051602052600052604060002080604051602052600052604060002090505480820382811161110f579050905060c05260c0511561103e576001541515611041565b60005b1561110d5760015463a9059cbb60e0526060516101005260c05161012052602060e0604460fc6000855af161107b573d600060003e3d6000fd5b3d61109257803b1561110f576001610140526110aa565b60203d1061110f5760e0518060011c61110f57610140525b6101409050511561110f5760a051600b60605160205260005260406000208060405160205260005260406000209050556040516060517f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f060a05160e052602060e0a35b565b600080fd0e6603380e660e660bec043507230de10ce40b180b8203b504150e660e66001a027b0486021f0e6602db01490d4e018902bb029b016907010e24
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306a45a1478a000dc701a6e1f7a569afb8d9dcd600000000000000000000000096720942f9ff22efd8611f696e5333fe3671717a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071f718d3e4d1449d1502a6a7595eb84ebccb1683
-----Decoded View---------------
Arg [0] : _call_proxy (address): 0x0000000000000000000000000000000000000000
Arg [1] : _root_factory (address): 0x306A45a1478A000dC701A6e1f7a569afb8D9DCD6
Arg [2] : _root_impl (address): 0x96720942F9fF22eFd8611F696E5333Fe3671717a
Arg [3] : _crv (address): 0x0000000000000000000000000000000000000000
Arg [4] : _owner (address): 0x71F718D3e4d1449D1502A6A7595eb84eBcCB1683
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 000000000000000000000000306a45a1478a000dc701a6e1f7a569afb8d9dcd6
Arg [2] : 00000000000000000000000096720942f9ff22efd8611f696e5333fe3671717a
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 00000000000000000000000071f718d3e4d1449d1502a6a7595eb84ebccb1683
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.