Overview
S Balance
0 S
S Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 5 from a total of 5 transactions
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
4430998 | 15 days ago | Contract Creation | 0 S |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
CurveTricryptoSwapFactory
Compiler Version
vyper:0.3.10
Contract Source Code (Vyper language format)
# pragma version 0.3.10 # pragma optimize gas # pragma evm-version paris """ @title CurveTricryptoSwapFactory @custom:version 2.0.0 @author Curve.Fi @license Copyright (c) Curve.Fi, 2020-2024 - all rights reserved @notice Permissionless 3-coin cryptoswap pool deployer and registry """ # ------------------------------- Version ------------------------------------ version: public(constant(String[8])) = "2.0.0" # ------------------------------- Interfaces --------------------------------- interface TricryptoPool: def balances(i: uint256) -> uint256: view interface ERC20: def decimals() -> uint256: view event TricryptoPoolDeployed: pool: address name: String[64] symbol: String[32] weth: address coins: address[N_COINS] math: address salt: bytes32 packed_precisions: uint256 packed_A_gamma: uint256 packed_fee_params: uint256 packed_rebalancing_params: uint256 packed_prices: uint256 deployer: address event UpdateFeeReceiver: _old_fee_receiver: address _new_fee_receiver: address event UpdatePoolImplementation: _implemention_id: uint256 _old_pool_implementation: address _new_pool_implementation: address event UpdateMathImplementation: _old_math_implementation: address _new_math_implementation: address event UpdateViewsImplementation: _old_views_implementation: address _new_views_implementation: address event TransferOwnership: _old_owner: address _new_owner: address struct PoolArray: coins: address[N_COINS] decimals: uint256[N_COINS] implementation: address N_COINS: constant(uint256) = 3 A_MULTIPLIER: constant(uint256) = 10000 # Limits MAX_FEE: constant(uint256) = 10 * 10 ** 9 MIN_GAMMA: constant(uint256) = 10 ** 10 MAX_GAMMA: constant(uint256) = 5 * 10**16 MIN_A: constant(uint256) = N_COINS ** N_COINS * A_MULTIPLIER / 100 MAX_A: constant(uint256) = 1000 * A_MULTIPLIER * N_COINS**N_COINS PRICE_SIZE: constant(uint128) = 256 / (N_COINS - 1) PRICE_MASK: constant(uint256) = 2**PRICE_SIZE - 1 admin: public(address) future_admin: public(address) # fee receiver for all pools: fee_receiver: public(address) pool_implementations: public(HashMap[uint256, address]) views_implementation: public(address) math_implementation: public(address) # mapping of coins -> pools for trading # a mapping key is generated for each pair of addresses via # `bitwise_xor(convert(a, uint256), convert(b, uint256))` markets: HashMap[uint256, address[4294967296]] market_counts: HashMap[uint256, uint256] pool_count: public(uint256) # actual length of pool_list pool_data: HashMap[address, PoolArray] pool_list: public(address[4294967296]) # master list of pools deployer: immutable(address) @external def __init__(_fee_receiver: address): self.fee_receiver = _fee_receiver self.admin = msg.sender deployer = msg.sender log UpdateFeeReceiver(empty(address), _fee_receiver) log TransferOwnership(empty(address), msg.sender) @external def set_owner(_owner: address): assert msg.sender == deployer assert self.admin == deployer assert _owner != deployer self.admin = _owner log TransferOwnership(deployer, _owner) @internal @view def _pack(x: uint256[3]) -> uint256: """ @notice Packs 3 integers with values <= 10**18 into a uint256 @param x The uint256[3] to pack @return The packed uint256 """ return (x[0] << 128) | (x[1] << 64) | x[2] # <--- Pool Deployers ---> @external def deploy_pool( _name: String[64], _symbol: String[32], _coins: address[N_COINS], _weth: address, implementation_id: uint256, A: uint256, gamma: uint256, mid_fee: uint256, out_fee: uint256, fee_gamma: uint256, allowed_extra_profit: uint256, adjustment_step: uint256, ma_exp_time: uint256, initial_prices: uint256[N_COINS-1], ) -> address: """ @notice Deploy a new pool @param _name Name of the new plain pool @param _symbol Symbol for the new plain pool - will be concatenated with factory symbol @return Address of the deployed pool """ pool_implementation: address = self.pool_implementations[implementation_id] assert pool_implementation != empty(address), "Pool implementation not set" # Validate parameters assert A > MIN_A-1 assert A < MAX_A+1 assert gamma > MIN_GAMMA-1 assert gamma < MAX_GAMMA+1 assert mid_fee < MAX_FEE-1 # mid_fee can be zero assert out_fee >= mid_fee assert out_fee < MAX_FEE-1 assert fee_gamma < 10**18+1 assert fee_gamma > 0 assert allowed_extra_profit < 10**18+1 assert adjustment_step < 10**18+1 assert adjustment_step > 0 assert ma_exp_time < 872542 # 7 * 24 * 60 * 60 / ln(2) assert ma_exp_time > 86 # 60 / ln(2) assert min(initial_prices[0], initial_prices[1]) > 10**6 assert max(initial_prices[0], initial_prices[1]) < 10**30 assert _coins[0] != _coins[1] and _coins[1] != _coins[2] and _coins[0] != _coins[2], "Duplicate coins" decimals: uint256[N_COINS] = empty(uint256[N_COINS]) precisions: uint256[N_COINS] = empty(uint256[N_COINS]) for i in range(N_COINS): d: uint256 = ERC20(_coins[i]).decimals() assert d < 19, "Max 18 decimals for coins" decimals[i] = d precisions[i] = 10** (18 - d) # pack precisions packed_precisions: uint256 = self._pack(precisions) # pack fees packed_fee_params: uint256 = self._pack( [mid_fee, out_fee, fee_gamma] ) # pack liquidity rebalancing params packed_rebalancing_params: uint256 = self._pack( [allowed_extra_profit, adjustment_step, ma_exp_time] ) # pack A_gamma packed_A_gamma: uint256 = A << 128 packed_A_gamma = packed_A_gamma | gamma # pack initial prices packed_prices: uint256 = 0 for k in range(N_COINS - 1): packed_prices = packed_prices << PRICE_SIZE p: uint256 = initial_prices[N_COINS - 2 - k] assert p < PRICE_MASK packed_prices = p | packed_prices # pool is an ERC20 implementation _salt: bytes32 = block.prevhash _math_implementation: address = self.math_implementation pool: address = create_from_blueprint( pool_implementation, _name, _symbol, _coins, _math_implementation, _weth, _salt, packed_precisions, packed_A_gamma, packed_fee_params, packed_rebalancing_params, packed_prices, code_offset=3 ) # populate pool data length: uint256 = self.pool_count self.pool_list[length] = pool self.pool_count = length + 1 self.pool_data[pool].decimals = decimals self.pool_data[pool].coins = _coins self.pool_data[pool].implementation = pool_implementation # add coins to market: self._add_coins_to_market(_coins[0], _coins[1], pool) self._add_coins_to_market(_coins[0], _coins[2], pool) self._add_coins_to_market(_coins[1], _coins[2], pool) log TricryptoPoolDeployed( pool, _name, _symbol, _weth, _coins, _math_implementation, _salt, packed_precisions, packed_A_gamma, packed_fee_params, packed_rebalancing_params, packed_prices, msg.sender, ) return pool @internal def _add_coins_to_market(coin_a: address, coin_b: address, pool: address): key: uint256 = ( convert(coin_a, uint256) ^ convert(coin_b, uint256) ) length: uint256 = self.market_counts[key] self.markets[key][length] = pool self.market_counts[key] = length + 1 # <--- Admin / Guarded Functionality ---> @external def set_fee_receiver(_fee_receiver: address): """ @notice Set fee receiver @param _fee_receiver Address that fees are sent to """ assert msg.sender == self.admin, "dev: admin only" log UpdateFeeReceiver(self.fee_receiver, _fee_receiver) self.fee_receiver = _fee_receiver @external def set_pool_implementation( _pool_implementation: address, _implementation_index: uint256 ): """ @notice Set pool implementation @dev Set to empty(address) to prevent deployment of new pools @param _pool_implementation Address of the new pool implementation @param _implementation_index Index of the pool implementation """ assert msg.sender == self.admin, "dev: admin only" log UpdatePoolImplementation( _implementation_index, self.pool_implementations[_implementation_index], _pool_implementation ) self.pool_implementations[_implementation_index] = _pool_implementation @external def set_views_implementation(_views_implementation: address): """ @notice Set views contract implementation @param _views_implementation Address of the new views contract """ assert msg.sender == self.admin, "dev: admin only" log UpdateViewsImplementation(self.views_implementation, _views_implementation) self.views_implementation = _views_implementation @external def set_math_implementation(_math_implementation: address): """ @notice Set math implementation @param _math_implementation Address of the new math contract """ assert msg.sender == self.admin, "dev: admin only" log UpdateMathImplementation(self.math_implementation, _math_implementation) self.math_implementation = _math_implementation @external def commit_transfer_ownership(_addr: address): """ @notice Transfer ownership of this contract to `addr` @param _addr Address of the new owner """ assert msg.sender == self.admin, "dev: admin only" self.future_admin = _addr @external def accept_transfer_ownership(): """ @notice Accept a pending ownership transfer @dev Only callable by the new owner """ assert msg.sender == self.future_admin, "dev: future admin only" log TransferOwnership(self.admin, msg.sender) self.admin = msg.sender # <--- Factory Getters ---> @view @external def get_implementation_address(_pool: address) -> address: """ @notice Get the address of the implementation contract used for a factory pool @param _pool Pool address @return Implementation contract address """ return self.pool_data[_pool].implementation @view @external def find_pool_for_coins(_from: address, _to: address, i: uint256 = 0) -> address: """ @notice Find an available pool for exchanging two coins @param _from Address of coin to be sent @param _to Address of coin to be received @param i Index value. When multiple pools are available this value is used to return the n'th address. @return Pool address """ key: uint256 = convert(_from, uint256) ^ convert(_to, uint256) return self.markets[key][i] # <--- Pool Getters ---> @view @external def get_coins(_pool: address) -> address[N_COINS]: """ @notice Get the coins within a pool @param _pool Pool address @return List of coin addresses """ return self.pool_data[_pool].coins @view @external def get_decimals(_pool: address) -> uint256[N_COINS]: """ @notice Get decimal places for each coin within a pool @param _pool Pool address @return uint256 list of decimals """ return self.pool_data[_pool].decimals @view @external def get_balances(_pool: address) -> uint256[N_COINS]: """ @notice Get balances for each coin within a pool @dev For pools using lending, these are the wrapped coin balances @param _pool Pool address @return uint256 list of balances """ return [ TricryptoPool(_pool).balances(0), TricryptoPool(_pool).balances(1), TricryptoPool(_pool).balances(2), ] @view @external def get_coin_indices( _pool: address, _from: address, _to: address ) -> (uint256, uint256): """ @notice Convert coin addresses to indices for use with pool methods @param _pool Pool address @param _from Coin address to be used as `i` within a pool @param _to Coin address to be used as `j` within a pool @return uint256 `i`, uint256 `j` """ coins: address[N_COINS] = self.pool_data[_pool].coins for i in range(N_COINS): for j in range(N_COINS): if i == j: continue if coins[i] == _from and coins[j] == _to: return i, j raise "Coins not found" @view @external def get_market_counts(coin_a: address, coin_b: address) -> uint256: """ @notice Gets the number of markets with the specified coins. @return Number of pools with the input coins """ key: uint256 = ( convert(coin_a, uint256) ^ convert(coin_b, uint256) ) return self.market_counts[key]
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"name":"TricryptoPoolDeployed","inputs":[{"name":"pool","type":"address","indexed":false},{"name":"name","type":"string","indexed":false},{"name":"symbol","type":"string","indexed":false},{"name":"weth","type":"address","indexed":false},{"name":"coins","type":"address[3]","indexed":false},{"name":"math","type":"address","indexed":false},{"name":"salt","type":"bytes32","indexed":false},{"name":"packed_precisions","type":"uint256","indexed":false},{"name":"packed_A_gamma","type":"uint256","indexed":false},{"name":"packed_fee_params","type":"uint256","indexed":false},{"name":"packed_rebalancing_params","type":"uint256","indexed":false},{"name":"packed_prices","type":"uint256","indexed":false},{"name":"deployer","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"UpdateFeeReceiver","inputs":[{"name":"_old_fee_receiver","type":"address","indexed":false},{"name":"_new_fee_receiver","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"UpdatePoolImplementation","inputs":[{"name":"_implemention_id","type":"uint256","indexed":false},{"name":"_old_pool_implementation","type":"address","indexed":false},{"name":"_new_pool_implementation","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"UpdateMathImplementation","inputs":[{"name":"_old_math_implementation","type":"address","indexed":false},{"name":"_new_math_implementation","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"UpdateViewsImplementation","inputs":[{"name":"_old_views_implementation","type":"address","indexed":false},{"name":"_new_views_implementation","type":"address","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":"_fee_receiver","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_owner","inputs":[{"name":"_owner","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"deploy_pool","inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_coins","type":"address[3]"},{"name":"_weth","type":"address"},{"name":"implementation_id","type":"uint256"},{"name":"A","type":"uint256"},{"name":"gamma","type":"uint256"},{"name":"mid_fee","type":"uint256"},{"name":"out_fee","type":"uint256"},{"name":"fee_gamma","type":"uint256"},{"name":"allowed_extra_profit","type":"uint256"},{"name":"adjustment_step","type":"uint256"},{"name":"ma_exp_time","type":"uint256"},{"name":"initial_prices","type":"uint256[2]"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"set_fee_receiver","inputs":[{"name":"_fee_receiver","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_pool_implementation","inputs":[{"name":"_pool_implementation","type":"address"},{"name":"_implementation_index","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_views_implementation","inputs":[{"name":"_views_implementation","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_math_implementation","inputs":[{"name":"_math_implementation","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"commit_transfer_ownership","inputs":[{"name":"_addr","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"accept_transfer_ownership","inputs":[],"outputs":[]},{"stateMutability":"view","type":"function","name":"get_implementation_address","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"find_pool_for_coins","inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"find_pool_for_coins","inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"i","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"get_coins","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address[3]"}]},{"stateMutability":"view","type":"function","name":"get_decimals","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[3]"}]},{"stateMutability":"view","type":"function","name":"get_balances","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[3]"}]},{"stateMutability":"view","type":"function","name":"get_coin_indices","inputs":[{"name":"_pool","type":"address"},{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_market_counts","inputs":[{"name":"coin_a","type":"address"},{"name":"coin_b","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"admin","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"future_admin","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"fee_receiver","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"pool_implementations","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"views_implementation","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"math_implementation","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"pool_count","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"pool_list","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]}]
Contract Creation Code
6113d75150346100a05760206114926000396000518060a01c6100a05760405260405160025533600055336113d7527f2861448678f0be67f11bfb5481b3e3b4cfeb3acc6126ad60a05f95bfc6530666600060605260405160805260406060a17f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c60006060523360805260406060a16113d76100a5610000396113f7610000f35b600080fd60003560e01c60026015820660011b6113ad01601e39600051565b6354fd4d50811861009957346113a85760208060805260056040527f322e302e3000000000000000000000000000000000000000000000000000000060605260408160800181518152602082015160208201528051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506080f35b63f6fa937f8118611325576024361034176113a8576004358060a01c6113a85760405260005433181561012357600f6060527f6465763a2061646d696e206f6e6c79000000000000000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b7fd84eb1ea70cda40a6bfaa11f4f69efa10cbc5eb82760b3058f440512ec1d6d1f60045460605260405160805260406060a160405160045500611325565b63f851a440811861017d57346113a85760005460405260206040f35b63c1856b528118611325576044361034176113a8576004358060a01c6113a8576040526024358060a01c6113a85760605260605160405118608052600760805160205260005260406000205460a052602060a0f3611325565b6317f7182a81186101f257346113a85760015460405260206040f35b639ac90d3d8118610241576024361034176113a8576004358060a01c6113a8576040526009604051602052600052604060002080546060526001810154608052600281015460a0525060606060f35b6352b515558118611325576024361034176113a8576004358060a01c6113a8576040526009604051602052600052604060002060038101905080546060526001810154608052600281015460a0525060606060f3611325565b63cab4d3db811861132557346113a85760025460405260206040f3611325565b633273ff478118611325576024361034176113a857600360043560205260005260406000205460405260206040f3611325565b63e31593d8811861030957346113a85760045460405260206040f35b63a87df06c8118611325576044361034176113a857600060805261053056611325565b63a13c8f81811861034857346113a85760055460405260206040f35b63956aae3a811861036457346113a85760085460405260206040f35b636f385ff68118611325576044361034176113a8576004358060a01c6113a8576040526000543318156103ee57600f6060527f6465763a2061646d696e206f6e6c79000000000000000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b7f6a42ef9605e135afaf6ae4f3683b161a3b7369d07c9d52c701ab69553e04c3b6602435606052600360243560205260005260406000205460805260405160a05260606060a1604051600360243560205260005260406000205500611325565b633a1d5d8e811861047e576024361034176113a85760043563ffffffff81116113a857600a015460405260206040f35b637cb97b2b8118610514576024361034176113a8576004358060a01c6113a85760405260206113d760003960005133186113a85760206113d7600039600051600054186113a85760206113d7600039600051604051146113a8576040516000557f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c60206113d760603960405160805260406060a1005b636982eb0b8118611325576064361034176113a8576044356080525b6004358060a01c6113a8576040526024358060a01c6113a8576060526060516040511860a052600660a051602052600052604060002060805163ffffffff81116113a857810190505460c052602060c0f3611325565b63aa38b3858118610dc757610264361034176113a85760043560040160408135116113a8576020813501808260e037505060243560040160208135116113a857602081350180826101403750506044358060a01c6113a857610180526064358060a01c6113a8576101a0526084358060a01c6113a8576101c05260a4358060a01c6113a8576101e052600360c435602052600052604060002054610200526102005161069257601b610220527f506f6f6c20696d706c656d656e746174696f6e206e6f742073657400000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b610a8c60e435106113a857631017df8060e435116113a8576402540be40061010435106113a85766b1a2bc2ec5000061010435116113a8576402540be3fe61012435116113a8576101243561014435106113a8576402540be3fe61014435116113a857670de0b6b3a764000061016435116113a85761016435156113a857670de0b6b3a764000061018435116113a857670de0b6b3a76400006101a435116113a8576101a435156113a857620d505d6101c435116113a85760576101c435106113a857620f42416101e4356102043580828118828410021890509050106113a8576c0c9f2c9cd04674edea3fffffff6101e4356102043580828118828411021890509050116113a8576101a05161018051146107cb576101c0516101a051146107c4576101c0516101805114156107ce565b60006107ce565b60005b61083857600f610220527f4475706c696361746520636f696e7300000000000000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b60c0366102203760006003905b806102e0526102e051600281116113a85760051b610180015163313ce567610320526020610320600461033c845afa610883573d600060003e3d6000fd5b60203d106113a857610320905051610300526012610300511115610907576019610320527f4d617820313820646563696d616c7320666f7220636f696e73000000000000006103405261032050610320518061034001601f826000031636823750506308c379a06102e052602061030052601f19601f6103205101166044016102fcfd5b610300516102e051600281116113a85760051b61022001526103005180601203601281116113a8579050604d81116113a85780600a0a90506102e051600281116113a85760051b6102800152600101818118610845575050610280516040526102a0516060526102c05160805261097f61030061132b565b610300516102e052606061012460403761099a61032061132b565b610320516103005260606101846040376109b561034061132b565b610340516103205260e43560801b610340526101043561034051176103405260006103605260006002905b80610380526103605160801b610360526103805180600103600181116113a8579050600181116113a85760051b6101e401356103a0526ffffffffffffffffffffffffffffffffe6103a051116113a857610360516103a05117610360526001018181186109e05750506001430340610380526005546103a052610200516101a0806104e052806104e001602060e0510180828260e060045afa50508051806020830101601f82600003163682375050601f19601f825160200101169050810190508061050052806104e0016101405181526101605160208201528051806020830101601f82600003163682375050601f19601f8251602001011690508101905061018051610520526101a051610540526101c051610560526103a0516103e0526103e051610580526101e05161040052610400516105a0526103805161042052610420516105c0526102e05161044052610440516105e0526103405161046052610460516106005261030051610480526104805161062052610320516104a0526104a05161064052610360516104c0526104c051610660526003823b0359600182126113a85781600382863c8181018381856104e060045afa5050828201816000f080156113a85790509050905090506103c0526008546103e0526103c0516103e05163ffffffff81116113a857600a01556103e051600181018181106113a857905060085560096103c05160205260005260406000206003810190506102205181556102405160018201556102605160028201555060096103c05160205260005260406000206101805181556101a05160018201556101c0516002820155506102005160096103c051602052600052604060002060068101905055610180516040526101a0516060526103c051608052610c79611341565b610180516040526101c0516060526103c051608052610c96611341565b6101a0516040526101c0516060526103c051608052610cb3611341565b7fa307f5d0802489baddec443058a63ce115756de9020e2b07d3e2cd2f21269e2a6101e06103c0516104005280610420528061040001602060e0510180828260e060045afa50508051806020830101601f82600003163682375050601f19601f82516020010116905081019050806104405280610400016101405181526101605160208201528051806020830101601f82600003163682375050601f19601f825160200101169050810190506101e0516104605261018051610480526101a0516104a0526101c0516104c0526103a0516104e05261038051610500526102e05161052052610340516105405261030051610560526103205161058052610360516105a052336105c052610400a160206103c0f35b63eb85226d8118611325576064361034176113a8576004358060a01c6113a8576040526024358060a01c6113a8576060526044358060a01c6113a85760805260096040516020526000526040600020805460a052600181015460c052600281015460e0525060006003905b806101005260006003905b8061012052610120516101005118610e5457610eb2565b60605161010051600281116113a85760051b60a0015118610e8c5760805161012051600281116113a85760051b60a001511815610e8f565b60005b15610eb25750505050610100516101405261012051610160526040610140610f2d565b600101818118610e3d575050600101818118610e32575050600f610100527f436f696e73206e6f7420666f756e6400000000000000000000000000000000006101205261010050610100518061012001601f826000031636823750506308c379a060c052602060e052601f19601f61010051011660440160dcfd5bf3611325565b63e41ab7718118610ff7576024361034176113a8576004358060a01c6113a857604052600054331815610fbd57600f6060527f6465763a2061646d696e206f6e6c79000000000000000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b7f2861448678f0be67f11bfb5481b3e3b4cfeb3acc6126ad60a05f95bfc653066660025460605260405160805260406060a1604051600255005b636b441a408118611089576024361034176113a8576004358060a01c6113a85760405260005433181561108157600f6060527f6465763a2061646d696e206f6e6c79000000000000000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b604051600155005b6392e3cc2d8118611325576024361034176113a8576004358060a01c6113a857604052604051634903b0d16060526000608052602060606024607c845afa6110d6573d600060003e3d6000fd5b60203d106113a857606090505161012052604051634903b0d160a052600160c052602060a0602460bc845afa611111573d600060003e3d6000fd5b60203d106113a85760a090505161014052604051634903b0d160e052600261010052602060e0602460fc845afa61114d573d600060003e3d6000fd5b60203d106113a85760e0905051610160526060610120f3611325565b63b07426f48118611325576024361034176113a8576004358060a01c6113a8576040526000543318156111f357600f6060527f6465763a2061646d696e206f6e6c79000000000000000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b7f68fe8fc3ac76ec17e21117df5e854c8c25b7b5f776aad2adc927fdd156bcd6de60055460605260405160805260406060a160405160055500611325565b63e5ea47b8811861132557346113a8576001543318156112a85760166040527f6465763a206675747572652061646d696e206f6e6c790000000000000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b7f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c6000546040523360605260406040a13360005500611325565b63510d98a48118611325576024361034176113a8576004358060a01c6113a857604052600960405160205260005260406000206006810190505460605260206060f35b60006000fd5b60805160605160401b60405160801b1717815250565b6060516040511860a052600760a05160205260005260406000205460c052608051600660a051602052600052604060002060c05163ffffffff81116113a857810190505560c051600181018181106113a8579050600760a051602052600052604060002055565b600080fd1325132502ed13250586001a1325044e029a1325123112e21325116913251325032c016101d60f3302ba841913d781182a1820a16576797065728300030a00160000000000000000000000003c0a405e914337139992625d5100ea141a9c4d11
Deployed Bytecode
0x60003560e01c60026015820660011b6113ad01601e39600051565b6354fd4d50811861009957346113a85760208060805260056040527f322e302e3000000000000000000000000000000000000000000000000000000060605260408160800181518152602082015160208201528051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506080f35b63f6fa937f8118611325576024361034176113a8576004358060a01c6113a85760405260005433181561012357600f6060527f6465763a2061646d696e206f6e6c79000000000000000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b7fd84eb1ea70cda40a6bfaa11f4f69efa10cbc5eb82760b3058f440512ec1d6d1f60045460605260405160805260406060a160405160045500611325565b63f851a440811861017d57346113a85760005460405260206040f35b63c1856b528118611325576044361034176113a8576004358060a01c6113a8576040526024358060a01c6113a85760605260605160405118608052600760805160205260005260406000205460a052602060a0f3611325565b6317f7182a81186101f257346113a85760015460405260206040f35b639ac90d3d8118610241576024361034176113a8576004358060a01c6113a8576040526009604051602052600052604060002080546060526001810154608052600281015460a0525060606060f35b6352b515558118611325576024361034176113a8576004358060a01c6113a8576040526009604051602052600052604060002060038101905080546060526001810154608052600281015460a0525060606060f3611325565b63cab4d3db811861132557346113a85760025460405260206040f3611325565b633273ff478118611325576024361034176113a857600360043560205260005260406000205460405260206040f3611325565b63e31593d8811861030957346113a85760045460405260206040f35b63a87df06c8118611325576044361034176113a857600060805261053056611325565b63a13c8f81811861034857346113a85760055460405260206040f35b63956aae3a811861036457346113a85760085460405260206040f35b636f385ff68118611325576044361034176113a8576004358060a01c6113a8576040526000543318156103ee57600f6060527f6465763a2061646d696e206f6e6c79000000000000000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b7f6a42ef9605e135afaf6ae4f3683b161a3b7369d07c9d52c701ab69553e04c3b6602435606052600360243560205260005260406000205460805260405160a05260606060a1604051600360243560205260005260406000205500611325565b633a1d5d8e811861047e576024361034176113a85760043563ffffffff81116113a857600a015460405260206040f35b637cb97b2b8118610514576024361034176113a8576004358060a01c6113a85760405260206113d760003960005133186113a85760206113d7600039600051600054186113a85760206113d7600039600051604051146113a8576040516000557f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c60206113d760603960405160805260406060a1005b636982eb0b8118611325576064361034176113a8576044356080525b6004358060a01c6113a8576040526024358060a01c6113a8576060526060516040511860a052600660a051602052600052604060002060805163ffffffff81116113a857810190505460c052602060c0f3611325565b63aa38b3858118610dc757610264361034176113a85760043560040160408135116113a8576020813501808260e037505060243560040160208135116113a857602081350180826101403750506044358060a01c6113a857610180526064358060a01c6113a8576101a0526084358060a01c6113a8576101c05260a4358060a01c6113a8576101e052600360c435602052600052604060002054610200526102005161069257601b610220527f506f6f6c20696d706c656d656e746174696f6e206e6f742073657400000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b610a8c60e435106113a857631017df8060e435116113a8576402540be40061010435106113a85766b1a2bc2ec5000061010435116113a8576402540be3fe61012435116113a8576101243561014435106113a8576402540be3fe61014435116113a857670de0b6b3a764000061016435116113a85761016435156113a857670de0b6b3a764000061018435116113a857670de0b6b3a76400006101a435116113a8576101a435156113a857620d505d6101c435116113a85760576101c435106113a857620f42416101e4356102043580828118828410021890509050106113a8576c0c9f2c9cd04674edea3fffffff6101e4356102043580828118828411021890509050116113a8576101a05161018051146107cb576101c0516101a051146107c4576101c0516101805114156107ce565b60006107ce565b60005b61083857600f610220527f4475706c696361746520636f696e7300000000000000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b60c0366102203760006003905b806102e0526102e051600281116113a85760051b610180015163313ce567610320526020610320600461033c845afa610883573d600060003e3d6000fd5b60203d106113a857610320905051610300526012610300511115610907576019610320527f4d617820313820646563696d616c7320666f7220636f696e73000000000000006103405261032050610320518061034001601f826000031636823750506308c379a06102e052602061030052601f19601f6103205101166044016102fcfd5b610300516102e051600281116113a85760051b61022001526103005180601203601281116113a8579050604d81116113a85780600a0a90506102e051600281116113a85760051b6102800152600101818118610845575050610280516040526102a0516060526102c05160805261097f61030061132b565b610300516102e052606061012460403761099a61032061132b565b610320516103005260606101846040376109b561034061132b565b610340516103205260e43560801b610340526101043561034051176103405260006103605260006002905b80610380526103605160801b610360526103805180600103600181116113a8579050600181116113a85760051b6101e401356103a0526ffffffffffffffffffffffffffffffffe6103a051116113a857610360516103a05117610360526001018181186109e05750506001430340610380526005546103a052610200516101a0806104e052806104e001602060e0510180828260e060045afa50508051806020830101601f82600003163682375050601f19601f825160200101169050810190508061050052806104e0016101405181526101605160208201528051806020830101601f82600003163682375050601f19601f8251602001011690508101905061018051610520526101a051610540526101c051610560526103a0516103e0526103e051610580526101e05161040052610400516105a0526103805161042052610420516105c0526102e05161044052610440516105e0526103405161046052610460516106005261030051610480526104805161062052610320516104a0526104a05161064052610360516104c0526104c051610660526003823b0359600182126113a85781600382863c8181018381856104e060045afa5050828201816000f080156113a85790509050905090506103c0526008546103e0526103c0516103e05163ffffffff81116113a857600a01556103e051600181018181106113a857905060085560096103c05160205260005260406000206003810190506102205181556102405160018201556102605160028201555060096103c05160205260005260406000206101805181556101a05160018201556101c0516002820155506102005160096103c051602052600052604060002060068101905055610180516040526101a0516060526103c051608052610c79611341565b610180516040526101c0516060526103c051608052610c96611341565b6101a0516040526101c0516060526103c051608052610cb3611341565b7fa307f5d0802489baddec443058a63ce115756de9020e2b07d3e2cd2f21269e2a6101e06103c0516104005280610420528061040001602060e0510180828260e060045afa50508051806020830101601f82600003163682375050601f19601f82516020010116905081019050806104405280610400016101405181526101605160208201528051806020830101601f82600003163682375050601f19601f825160200101169050810190506101e0516104605261018051610480526101a0516104a0526101c0516104c0526103a0516104e05261038051610500526102e05161052052610340516105405261030051610560526103205161058052610360516105a052336105c052610400a160206103c0f35b63eb85226d8118611325576064361034176113a8576004358060a01c6113a8576040526024358060a01c6113a8576060526044358060a01c6113a85760805260096040516020526000526040600020805460a052600181015460c052600281015460e0525060006003905b806101005260006003905b8061012052610120516101005118610e5457610eb2565b60605161010051600281116113a85760051b60a0015118610e8c5760805161012051600281116113a85760051b60a001511815610e8f565b60005b15610eb25750505050610100516101405261012051610160526040610140610f2d565b600101818118610e3d575050600101818118610e32575050600f610100527f436f696e73206e6f7420666f756e6400000000000000000000000000000000006101205261010050610100518061012001601f826000031636823750506308c379a060c052602060e052601f19601f61010051011660440160dcfd5bf3611325565b63e41ab7718118610ff7576024361034176113a8576004358060a01c6113a857604052600054331815610fbd57600f6060527f6465763a2061646d696e206f6e6c79000000000000000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b7f2861448678f0be67f11bfb5481b3e3b4cfeb3acc6126ad60a05f95bfc653066660025460605260405160805260406060a1604051600255005b636b441a408118611089576024361034176113a8576004358060a01c6113a85760405260005433181561108157600f6060527f6465763a2061646d696e206f6e6c79000000000000000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b604051600155005b6392e3cc2d8118611325576024361034176113a8576004358060a01c6113a857604052604051634903b0d16060526000608052602060606024607c845afa6110d6573d600060003e3d6000fd5b60203d106113a857606090505161012052604051634903b0d160a052600160c052602060a0602460bc845afa611111573d600060003e3d6000fd5b60203d106113a85760a090505161014052604051634903b0d160e052600261010052602060e0602460fc845afa61114d573d600060003e3d6000fd5b60203d106113a85760e0905051610160526060610120f3611325565b63b07426f48118611325576024361034176113a8576004358060a01c6113a8576040526000543318156111f357600f6060527f6465763a2061646d696e206f6e6c79000000000000000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b7f68fe8fc3ac76ec17e21117df5e854c8c25b7b5f776aad2adc927fdd156bcd6de60055460605260405160805260406060a160405160055500611325565b63e5ea47b8811861132557346113a8576001543318156112a85760166040527f6465763a206675747572652061646d696e206f6e6c790000000000000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b7f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c6000546040523360605260406040a13360005500611325565b63510d98a48118611325576024361034176113a8576004358060a01c6113a857604052600960405160205260005260406000206006810190505460605260206060f35b60006000fd5b60805160605160401b60405160801b1717815250565b6060516040511860a052600760a05160205260005260406000205460c052608051600660a051602052600052604060002060c05163ffffffff81116113a857810190505560c051600181018181106113a8579050600760a051602052600052604060002055565b600080fd1325132502ed13250586001a1325044e029a1325123112e21325116913251325032c016101d60f3302ba0000000000000000000000002d12d0907a388811e3aa855a550f959501d303ee
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003c0a405e914337139992625d5100ea141a9c4d11
-----Decoded View---------------
Arg [0] : _fee_receiver (address): 0x3c0a405E914337139992625D5100Ea141a9C4d11
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000003c0a405e914337139992625d5100ea141a9c4d11
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.