Contract
0xb7de33440b7171159a9718cbe748086cecdd9685
6
Contract Overview
Balance:
0 GLMR
GLMR Value:
$0.00
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Source Code Verified (Exact Match)
Contract Name:
Vyper_contract
Compiler Version
vyper:0.3.0
Contract Source Code (Vyper language format)
# @version ^0.3.0 # A "zap" to add liquidity and deposit into gauge in one transaction # (c) Curve.Fi, 2022 MAX_COINS: constant(uint256) = 5 ETH_ADDRESS: constant(address) = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE # External Contracts interface ERC20: def transfer(_receiver: address, _amount: uint256): nonpayable def transferFrom(_sender: address, _receiver: address, _amount: uint256): nonpayable def approve(_spender: address, _amount: uint256): nonpayable def decimals() -> uint256: view def balanceOf(_owner: address) -> uint256: view def allowance(_owner : address, _spender : address) -> uint256: view interface Pool2: def add_liquidity(amounts: uint256[2], min_mint_amount: uint256): payable interface Pool3: def add_liquidity(amounts: uint256[3], min_mint_amount: uint256): payable interface Pool4: def add_liquidity(amounts: uint256[4], min_mint_amount: uint256): payable interface Pool5: def add_liquidity(amounts: uint256[5], min_mint_amount: uint256): payable interface PoolUseUnderlying2: def add_liquidity(amounts: uint256[2], min_mint_amount: uint256, use_underlying: bool): payable interface PoolUseUnderlying3: def add_liquidity(amounts: uint256[3], min_mint_amount: uint256, use_underlying: bool): payable interface PoolUseUnderlying4: def add_liquidity(amounts: uint256[4], min_mint_amount: uint256, use_underlying: bool): payable interface PoolUseUnderlying5: def add_liquidity(amounts: uint256[5], min_mint_amount: uint256, use_underlying: bool): payable interface PoolFactory2: def add_liquidity(pool: address, amounts: uint256[2], min_mint_amount: uint256): payable interface PoolFactory3: def add_liquidity(pool: address, amounts: uint256[3], min_mint_amount: uint256): payable interface PoolFactory4: def add_liquidity(pool: address, amounts: uint256[4], min_mint_amount: uint256): payable interface PoolFactory5: def add_liquidity(pool: address, amounts: uint256[5], min_mint_amount: uint256): payable interface Gauge: def deposit(lp_token_amount: uint256, addr: address): payable allowance: public(HashMap[address, HashMap[address, bool]]) gauge_allowance: HashMap[address, bool] @internal def _add_liquidity( deposit: address, n_coins: uint256, amounts: uint256[MAX_COINS], min_mint_amount: uint256, eth_value: uint256, use_underlying: bool, pool: address ): if pool != ZERO_ADDRESS: if n_coins == 2: PoolFactory2(deposit).add_liquidity(pool, [amounts[0], amounts[1]], min_mint_amount, value=eth_value) elif n_coins == 3: PoolFactory3(deposit).add_liquidity(pool, [amounts[0], amounts[1], amounts[2]], min_mint_amount, value=eth_value) elif n_coins == 4: PoolFactory4(deposit).add_liquidity(pool, [amounts[0], amounts[1], amounts[2], amounts[3]], min_mint_amount, value=eth_value) elif n_coins == 5: PoolFactory5(deposit).add_liquidity(pool, [amounts[0], amounts[1], amounts[2], amounts[3], amounts[4]], min_mint_amount, value=eth_value) elif use_underlying: if n_coins == 2: PoolUseUnderlying2(deposit).add_liquidity([amounts[0], amounts[1]], min_mint_amount, True, value=eth_value) elif n_coins == 3: PoolUseUnderlying3(deposit).add_liquidity([amounts[0], amounts[1], amounts[2]], min_mint_amount, True, value=eth_value) elif n_coins == 4: PoolUseUnderlying4(deposit).add_liquidity([amounts[0], amounts[1], amounts[2], amounts[3]], min_mint_amount, True, value=eth_value) elif n_coins == 5: PoolUseUnderlying5(deposit).add_liquidity([amounts[0], amounts[1], amounts[2], amounts[3], amounts[4]], min_mint_amount, True, value=eth_value) else: if n_coins == 2: Pool2(deposit).add_liquidity([amounts[0], amounts[1]], min_mint_amount, value=eth_value) elif n_coins == 3: Pool3(deposit).add_liquidity([amounts[0], amounts[1], amounts[2]], min_mint_amount, value=eth_value) elif n_coins == 4: Pool4(deposit).add_liquidity([amounts[0], amounts[1], amounts[2], amounts[3]], min_mint_amount, value=eth_value) elif n_coins == 5: Pool5(deposit).add_liquidity([amounts[0], amounts[1], amounts[2], amounts[3], amounts[4]], min_mint_amount, value=eth_value) @payable @external @nonreentrant('lock') def deposit_and_stake( deposit: address, lp_token: address, gauge: address, n_coins: uint256, coins: address[MAX_COINS], amounts: uint256[MAX_COINS], min_mint_amount: uint256, use_underlying: bool, # for aave, saave, ib (use_underlying) and crveth, cvxeth (use_eth) pool: address = ZERO_ADDRESS, # for factory ): assert n_coins >= 2, 'n_coins must be >=2' assert n_coins <= MAX_COINS, 'n_coins must be <=MAX_COINS' # Ensure allowance for swap or zap for i in range(MAX_COINS): if i >= n_coins: break if coins[i] == ETH_ADDRESS or amounts[i] == 0 or self.allowance[deposit][coins[i]]: continue self.allowance[deposit][coins[i]] = True ERC20(coins[i]).approve(deposit, MAX_UINT256) # Ensure allowance for gauge if not self.gauge_allowance[gauge]: self.gauge_allowance[gauge] = True ERC20(lp_token).approve(gauge, MAX_UINT256) # Transfer coins from owner has_eth: bool = False for i in range(MAX_COINS): if i >= n_coins: break if coins[i] == ETH_ADDRESS: assert msg.value == amounts[i] has_eth = True continue if amounts[i] > 0: # "safeTransferFrom" which works for ERC20s which return bool or not _response: Bytes[32] = raw_call( coins[i], concat( method_id("transferFrom(address,address,uint256)"), convert(msg.sender, bytes32), convert(self, bytes32), convert(amounts[i], bytes32), ), max_outsize=32, ) # dev: failed transfer if len(_response) > 0: assert convert(_response, bool) # dev: failed transfer if not has_eth: assert msg.value == 0 # Reverts if n_coins is wrong self._add_liquidity(deposit, n_coins, amounts, min_mint_amount, msg.value, use_underlying, pool) lp_token_amount: uint256 = ERC20(lp_token).balanceOf(self) assert lp_token_amount > 0 # dev: swap-token mismatch Gauge(gauge).deposit(lp_token_amount, msg.sender) @payable @external def __default__(): pass
[{"stateMutability":"payable","type":"function","name":"deposit_and_stake","inputs":[{"name":"deposit","type":"address"},{"name":"lp_token","type":"address"},{"name":"gauge","type":"address"},{"name":"n_coins","type":"uint256"},{"name":"coins","type":"address[5]"},{"name":"amounts","type":"uint256[5]"},{"name":"min_mint_amount","type":"uint256"},{"name":"use_underlying","type":"bool"}],"outputs":[],"gas":416901},{"stateMutability":"payable","type":"function","name":"deposit_and_stake","inputs":[{"name":"deposit","type":"address"},{"name":"lp_token","type":"address"},{"name":"gauge","type":"address"},{"name":"n_coins","type":"uint256"},{"name":"coins","type":"address[5]"},{"name":"amounts","type":"uint256[5]"},{"name":"min_mint_amount","type":"uint256"},{"name":"use_underlying","type":"bool"},{"name":"pool","type":"address"}],"outputs":[],"gas":416901},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"view","type":"function","name":"allowance","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"address"}],"outputs":[{"name":"","type":"bool"}],"gas":3190}]
Contract Creation Code
610b9856600436101561000d576106b5565b60046000601c3760005163851ba91181141561002e5760006104c05261004e565b63aba17d9381141561065257610204358060a01c610b8f578090506104c0525b6004358060a01c610b8f578090506103a0526024358060a01c610b8f578090506103c0526044358060a01c610b8f578090506103e0526084358060a01c610b8f578090506104005260a4358060a01c610b8f578090506104205260c4358060a01c610b8f578090506104405260e4358060a01c610b8f5780905061046052610104358060a01c610b8f57809050610480526101e4358060011c610b8f578090506104a052600054610b8f5760016000556002606435101561014e576308c379a06104e0526020610500526013610520527f6e5f636f696e73206d757374206265203e3d3200000000000000000000000000610540526105205060646104fcfd5b6005606435111561019e576308c379a06104e052602061050052601b610520527f6e5f636f696e73206d757374206265203c3d4d41585f434f494e530000000000610540526105205060646104fcfd5b6104e060006005818352015b6064356104e051106101bb57610304565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6104006104e0516005811015610b8f57602002015114156101f257600161023d565b60206104e05102610124013561020957600161023c565b60016103a05160e05260c052604060c0206104006104e0516005811015610b8f57602002015160e05260c052604060c020545b5b15610247576102f4565b600160016103a05160e05260c052604060c0206104006104e0516005811015610b8f57602002015160e05260c052604060c0205563095ea7b3610500526103a051610520527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610540526104006104e0516005811015610b8f5760200201513b15610b8f5760006000604461051c60006104006104e0516005811015610b8f5760200201515af115610b8f575b81516001018083528114156101aa575b505060026103e05160e05260c052604060c0205461038757600160026103e05160e05260c052604060c0205563095ea7b36104e0526103e051610500527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610520526103c0513b15610b8f576000600060446104fc60006103c0515af115610b8f575b60006104e05261050060006005818352015b60643561050051106103aa57610569565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610400610500516005811015610b8f57602002015114156103f857602061050051026101240135341415610b8f5760016104e052610559565b600060206105005102610124013511156105585760006004610560527f23b872dd00000000000000000000000000000000000000000000000000000000610580526105606004806020846105a001018260208501600060045af1505080518201915050336020826105a0010152602081019050306020826105a00101526020810190506020610500510261012401356020826105a0010152602081019050806105a0526105a090508051602001806106408284600060045af115610b8f5750506020610700610640516106606000610400610500516005811015610b8f5760200201515af115610b8f5760203d808211156104f357806104f5565b815b905090506106e0526106e08051602001806105208284600060045af115610b8f5750506000610520511115610557576105208060200151600082518060209013610b8f5780919012610b8f57806020036101000a820490509050905015610b8f575b5b5b8151600101808352811415610399575b50506104e0516105795734610b8f575b6103a05161014052606435610160526101243561018052610144356101a052610164356101c052610184356101e0526101a435610200526101c4356102205234610240526104a051610260526104c051610280526105d56106b7565b6370a082316105205230610540526020610520602461053c6103c0515afa15610b8f57601f3d1115610b8f5761052051610500526000610500511115610b8f57636e553f6561052052610500516105405233610560526103e0513b15610b8f5760006000604461053c60006103e0515af115610b8f576000600055005b63dd62ed3e8114156106b3576004358060a01c610b8f57809050610140526024358060a01c610b8f578090506101605234610b8f5760016101405160e05260c052604060c0206101605160e05260c052604060c02054610180526020610180f35b505b005b600061028051181561086757600261016051141561071f5763d2fb954c6102a052610280516102c052610180516102e0526101a051610300526102205161032052610140513b15610b8f576000600060846102bc61024051610140515af115610b8f57610862565b60036101605114156107835763a31851796102a052610280516102c052610180516102e0526101a051610300526101c051610320526102205161034052610140513b15610b8f576000600060a46102bc61024051610140515af115610b8f57610861565b60046101605114156107ef5763384e03db6102a052610280516102c052610180516102e0526101a051610300526101c051610320526101e051610340526102205161036052610140513b15610b8f576000600060c46102bc61024051610140515af115610b8f57610860565b600561016051141561085f57631b61222b6102a052610280516102c052610180516102e0526101a051610300526101c051610320526101e0516103405261020051610360526102205161038052610140513b15610b8f576000600060e46102bc61024051610140515af115610b8f575b5b5b5b610b8d565b6102605115610a0c5760026101605114156108ca5763ee22be236102a052610180516102c0526101a0516102e0526102205161030052600161032052610140513b15610b8f576000600060846102bc61024051610140515af115610b8f57610a07565b600361016051141561092c57632b6e993a6102a052610180516102c0526101a0516102e0526101c051610300526102205161032052600161034052610140513b15610b8f576000600060a46102bc61024051610140515af115610b8f57610a06565b60046101605114156109965763dc3a2d816102a052610180516102c0526101a0516102e0526101c051610300526101e051610320526102205161034052600161036052610140513b15610b8f576000600060c46102bc61024051610140515af115610b8f57610a05565b6005610160511415610a045763c25fd5656102a052610180516102c0526101a0516102e0526101c051610300526101e0516103205261020051610340526102205161036052600161038052610140513b15610b8f576000600060e46102bc61024051610140515af115610b8f575b5b5b5b610b8c565b6002610160511415610a6057630b4c7e4d6102a052610180516102c0526101a0516102e0526102205161030052610140513b15610b8f576000600060646102bc61024051610140515af115610b8f57610b8b565b6003610160511415610abc57634515cef36102a052610180516102c0526101a0516102e0526101c051610300526102205161032052610140513b15610b8f576000600060846102bc61024051610140515af115610b8f57610b8a565b6004610160511415610b205763029b2f346102a052610180516102c0526101a0516102e0526101c051610300526101e051610320526102205161034052610140513b15610b8f576000600060a46102bc61024051610140515af115610b8f57610b89565b6005610160511415610b885763847384996102a052610180516102c0526101a0516102e0526101c051610300526101e0516103205261020051610340526102205161036052610140513b15610b8f576000600060c46102bc61024051610140515af115610b8f575b5b5b5b5b5b565b600080fd5b610004610b9803610004600039610004610b98036000f3
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.