frxETH Price: $1,799.42 (+2.92%)

Contract

0xF0d4c12A5768D806021F80a262B4d39d26C58b8D

Overview

frxETH Balance | FXTL Balance

0 frxETH | 413 FXTL

frxETH Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Deposit_and_stak...193009172025-04-23 12:49:051 hr ago1745412545IN
0xF0d4c12A...d26C58b8D
0 frxETH0.000000380.00100025
Deposit_and_stak...192982382025-04-23 11:19:472 hrs ago1745407187IN
0xF0d4c12A...d26C58b8D
0 frxETH0.000000430.00100025
Deposit_and_stak...192925922025-04-23 8:11:355 hrs ago1745395895IN
0xF0d4c12A...d26C58b8D
0 frxETH0.000000350.00100026
Deposit_and_stak...192887602025-04-23 6:03:518 hrs ago1745388231IN
0xF0d4c12A...d26C58b8D
0 frxETH0.000000410.00100026
Deposit_and_stak...192843502025-04-23 3:36:5110 hrs ago1745379411IN
0xF0d4c12A...d26C58b8D
0 frxETH0.000000390.00100025
Deposit_and_stak...192814922025-04-23 2:01:3512 hrs ago1745373695IN
0xF0d4c12A...d26C58b8D
0 frxETH0.000000420.00110025
Deposit_and_stak...192809322025-04-23 1:42:5512 hrs ago1745372575IN
0xF0d4c12A...d26C58b8D
0 frxETH0.000000380.00110025
Deposit_and_stak...192806022025-04-23 1:31:5512 hrs ago1745371915IN
0xF0d4c12A...d26C58b8D
0 frxETH0.000000450.00100025
Deposit_and_stak...192767772025-04-22 23:24:2514 hrs ago1745364265IN
0xF0d4c12A...d26C58b8D
0 frxETH0.000000350.00100025
Deposit_and_stak...192749222025-04-22 22:22:3515 hrs ago1745360555IN
0xF0d4c12A...d26C58b8D
0 frxETH00.00000025
Deposit_and_stak...192363952025-04-22 0:58:2137 hrs ago1745283501IN
0xF0d4c12A...d26C58b8D
0 frxETH0.000000420.00110025
Deposit_and_stak...192330442025-04-21 23:06:3939 hrs ago1745276799IN
0xF0d4c12A...d26C58b8D
0 frxETH0.000000370.00100025
Deposit_and_stak...192294322025-04-21 21:06:1541 hrs ago1745269575IN
0xF0d4c12A...d26C58b8D
0 frxETH0.000000370.00100025
Deposit_and_stak...192163262025-04-21 13:49:232 days ago1745243363IN
0xF0d4c12A...d26C58b8D
0 frxETH0.000000390.00100025
Deposit_and_stak...192147722025-04-21 12:57:352 days ago1745240255IN
0xF0d4c12A...d26C58b8D
0 frxETH0.000000110.00110025
Deposit_and_stak...192095502025-04-21 10:03:312 days ago1745229811IN
0xF0d4c12A...d26C58b8D
0 frxETH0.000000330.00100025
Deposit_and_stak...192094742025-04-21 10:00:592 days ago1745229659IN
0xF0d4c12A...d26C58b8D
0 frxETH0.000000330.00100025
Deposit_and_stak...192004782025-04-21 5:01:072 days ago1745211667IN
0xF0d4c12A...d26C58b8D
0 frxETH0.000000380.00100025
Deposit_and_stak...191998362025-04-21 4:39:432 days ago1745210383IN
0xF0d4c12A...d26C58b8D
0 frxETH0.000000330.00100025
Deposit_and_stak...191996122025-04-21 4:32:152 days ago1745209935IN
0xF0d4c12A...d26C58b8D
0 frxETH0.000000330.00100025
Deposit_and_stak...191995212025-04-21 4:29:132 days ago1745209753IN
0xF0d4c12A...d26C58b8D
0 frxETH0.000000330.00100025
Deposit_and_stak...191962732025-04-21 2:40:572 days ago1745203257IN
0xF0d4c12A...d26C58b8D
0 frxETH0.000000350.00100025
Deposit_and_stak...191942872025-04-21 1:34:452 days ago1745199285IN
0xF0d4c12A...d26C58b8D
0 frxETH0.000000380.00110025
Deposit_and_stak...191857612025-04-20 20:50:332 days ago1745182233IN
0xF0d4c12A...d26C58b8D
0 frxETH0.000000420.00100025
Deposit_and_stak...191776612025-04-20 16:20:332 days ago1745166033IN
0xF0d4c12A...d26C58b8D
0 frxETH00.00000025
View all transactions

Parent Transaction Hash Block From To
View All Internal Transactions

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CurveDeposit&StakeZap

Compiler Version
vyper:0.3.10

Optimization Enabled:
N/A

Other Settings:
default evmVersion, None license

Contract Source Code (Vyper language format)

# @version 0.3.10

"""
@title CurveDeposit&StakeZap
@custom:version 1.0.0
@author Curve.Fi
@license Copyright (c) Curve.Fi, 2020-2024 - all rights reserved
@notice A zap to add liquidity to pool and deposit into gauge in one transaction
"""

version: public(constant(String[8])) = "1.0.0"


# External Contracts
from vyper.interfaces import ERC20

interface Pool2:
    def add_liquidity(amounts: uint256[2], min_mint_amount: uint256): nonpayable

interface Pool3:
    def add_liquidity(amounts: uint256[3], min_mint_amount: uint256): nonpayable

interface PoolStableNg:
    def add_liquidity(_amounts: DynArray[uint256, MAX_COINS], _min_mint_amount: uint256): nonpayable

interface MetaZap:
    def add_liquidity(pool: address, _amounts: DynArray[uint256, MAX_COINS], _min_mint_amount: uint256): nonpayable

interface Gauge:
    def deposit(lp_token_amount: uint256, addr: address): nonpayable


MAX_COINS: constant(uint256) = 9


@external
@nonreentrant('lock')
def deposit_and_stake(
        deposit: address,
        lp_token: address,
        gauge: address,
        n_coins: uint256,
        coins: DynArray[address, MAX_COINS],
        amounts: DynArray[uint256, MAX_COINS],
        min_mint_amount: uint256,
        use_dynarray: bool,
        pool: address = empty(address),
) -> uint256:
    """
    @notice Deposit coins into pool and stake obtained LP tokens into gauge.
            Zap address should be passed to `deposit` arg in case of meta-pool deposit with underlying coins.
    @param deposit Zap address for meta-pool deposit with underlying coins, pool address for other cases.
    @param lp_token The address of LP token
    @param gauge The address of gauge
    @param n_coins The number of tokens (underlying or wrapped for meta-pools)
    @param coins List of addresses of coins (underlying or wrapped for meta-pools)
    @param amounts List of amounts of coins to deposit (underlying or wrapped for meta-pools)
    @param min_mint_amount Minimum amount of LP tokens to mint from the deposit
    @param use_dynarray True - plain stable, meta stable with underlying coins
                        False - twocrypto, tricrypto, meta stable with wrapped coins
    @param pool The address of meta-pool in case of deposit with underlying coins
    @return Amount of LP tokens staked into gauge
    """
    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 amounts[i] == 0 or ERC20(coins[i]).allowance(self, deposit) > 0:
            continue
        ERC20(coins[i]).approve(deposit, max_value(uint256), default_return_value=True)

    # Ensure allowance for gauge
    if ERC20(lp_token).allowance(self, gauge) == 0:
        ERC20(lp_token).approve(gauge, max_value(uint256))

    # Transfer coins from owner
    for i in range(MAX_COINS):
        if i == n_coins:
            break

        if amounts[i] > 0:
            assert ERC20(coins[i]).transferFrom(msg.sender, self, amounts[i], default_return_value=True)

    # Deposit into pool
    if pool != empty(address):  # meta-pool deposit with underlying coins, deposit is zap here
        MetaZap(deposit).add_liquidity(pool, amounts, min_mint_amount)
    elif use_dynarray:  # plain stable pool
        PoolStableNg(deposit).add_liquidity(amounts, min_mint_amount)
    else:
        if n_coins == 2:  # twocrypto or meta-pool deposit with wrapped coins
            Pool2(deposit).add_liquidity([amounts[0], amounts[1]], min_mint_amount)
        elif n_coins == 3:  # tricrypto
            Pool3(deposit).add_liquidity([amounts[0], amounts[1], amounts[2]], min_mint_amount)
        else:
            raise "Wrong arguments"

    # Stake into gauge
    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)

    return lp_token_amount


@payable
@external
def __default__():
    pass

Contract Security Audit

Contract ABI

API
[{"stateMutability":"nonpayable","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[]"},{"name":"amounts","type":"uint256[]"},{"name":"min_mint_amount","type":"uint256"},{"name":"use_dynarray","type":"bool"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","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[]"},{"name":"amounts","type":"uint256[]"},{"name":"min_mint_amount","type":"uint256"},{"name":"use_dynarray","type":"bool"},{"name":"pool","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"view","type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string"}]}]

61088461001161000039610884610000f35f3560e01c60026003820660011b61087e01601e395f51565b6354fd4d508118610878573461087a5760208060805260056040527f312e302e3000000000000000000000000000000000000000000000000000000060605260408160800181518152602082015160208201528051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506080f3610878565b6210d5a78118610878576101443610341761087a575f610340526100e456610878565b63c0c702dc8118610878576101643610341761087a57610104358060a01c61087a57610340525b6004358060a01c61087a576040526024358060a01c61087a576060526044358060a01c61087a57608052608435600401600981351161087a5780355f816009811161087a57801561015657905b8060051b6020850101358060a01c61087a578160051b60c00152600101818118610131575b50508060a052505060a435600401600981351161087a57803560208160051b0180836101e03750505060e4358060011c61087a57610320525f5460021461087a5760025f556002606435101561020b576013610360527f6e5f636f696e73206d757374206265203e3d32000000000000000000000000006103805261036050610360518061038001601f825f031636823750506308c379a061032052602061034052601f19601f61036051011660440161033cfd5b6009606435111561027b57601b610360527f6e5f636f696e73206d757374206265203c3d4d41585f434f494e5300000000006103805261036050610360518061038001601f825f031636823750506308c379a061032052602061034052601f19601f61036051011660440161033cfd5b5f6009905b80610360526064356103605118610296576103bb565b610360516101e05181101561087a5760051b61020001516102b857600161030c565b6103605160a05181101561087a5760051b60c0015163dd62ed3e61038052306103a0526040516103c0526020610380604461039c845afa6102fb573d5f5f3e3d5ffd5b60203d1061087a5761038090505115155b15610316576103b0565b6103605160a05181101561087a5760051b60c0015163095ea7b3610380526040516103a0527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6103c0526020610380604461039c5f855af161037a573d5f5f3e3d5ffd5b3d61039157803b1561087a5760016103e0526103aa565b60203d1061087a57610380518060011c61087a576103e0525b6103e050505b600101818118610280575b505060605163dd62ed3e6103605230610380526080516103a0526020610360604461037c845afa6103ee573d5f5f3e3d5ffd5b60203d1061087a576103609050516104705760605163095ea7b36103c0526080516103e0527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6104005260206103c060446103dc5f855af1610452573d5f5f3e3d5ffd5b60203d1061087a576103c0518060011c61087a576104205261042050505b5f6009905b8061036052606435610360511861048b5761054b565b610360516101e05181101561087a5760051b610200015115610540576103605160a05181101561087a5760051b60c001516323b872dd61038052336103a052306103c052610360516101e05181101561087a5760051b61020001516103e0526020610380606461039c5f855af1610504573d5f5f3e3d5ffd5b3d61051b57803b1561087a57600161040052610534565b60203d1061087a57610380518060011c61087a57610400525b6104009050511561087a575b600101818118610475575b505061034051156105f15760405163fd9de6316103605260606103405161038052806103a05280610380015f6101e0518083528060051b5f826009811161087a5780156105b257905b8060051b61020001518160051b602088010152600101818118610594575b5050820160200191505090508101905060c4356103c05250803b1561087a575f6103606101a461037c5f855af16105eb573d5f5f3e3d5ffd5b506107ee565b6103205161075f5760026064351861066b57604051630b4c7e4d610360526101e0511561087a575f60051b61020001516103805260026101e0511061087a57600160051b61020001516103a05260c4356103c052803b1561087a575f610360606461037c5f855af1610665573d5f5f3e3d5ffd5b506107ee565b6003606435186106f657604051634515cef3610360526101e0511561087a575f60051b61020001516103805260026101e0511061087a57600160051b61020001516103a05260036101e0511061087a57600260051b61020001516103c05260c4356103e052803b1561087a575f610360608461037c5f855af16106f0573d5f5f3e3d5ffd5b506107ee565b600f610360527f57726f6e6720617267756d656e747300000000000000000000000000000000006103805261036050610360518061038001601f825f031636823750506308c379a061032052602061034052601f19601f61036051011660440161033cfd6107ee565b60405163b72df5de610360526040806103805280610380015f6101e0518083528060051b5f826009811161087a5780156107b357905b8060051b61020001518160051b602088010152600101818118610795575b5050820160200191505090508101905060c4356103a05250803b1561087a575f61036061018461037c5f855af16107ec573d5f5f3e3d5ffd5b505b6060516370a0823161038052306103a0526020610380602461039c845afa610818573d5f5f3e3d5ffd5b60203d1061087a5761038090505161036052610360511561087a57608051636e553f6561038052610360516103a052336103c052803b1561087a575f610380604461039c5f855af161086c573d5f5f3e3d5ffd5b50602061036060035f55f35b005b5f80fd009a00bd001884190884810600a16576797065728300030a0014

Deployed Bytecode

0x5f3560e01c60026003820660011b61087e01601e395f51565b6354fd4d508118610878573461087a5760208060805260056040527f312e302e3000000000000000000000000000000000000000000000000000000060605260408160800181518152602082015160208201528051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506080f3610878565b6210d5a78118610878576101443610341761087a575f610340526100e456610878565b63c0c702dc8118610878576101643610341761087a57610104358060a01c61087a57610340525b6004358060a01c61087a576040526024358060a01c61087a576060526044358060a01c61087a57608052608435600401600981351161087a5780355f816009811161087a57801561015657905b8060051b6020850101358060a01c61087a578160051b60c00152600101818118610131575b50508060a052505060a435600401600981351161087a57803560208160051b0180836101e03750505060e4358060011c61087a57610320525f5460021461087a5760025f556002606435101561020b576013610360527f6e5f636f696e73206d757374206265203e3d32000000000000000000000000006103805261036050610360518061038001601f825f031636823750506308c379a061032052602061034052601f19601f61036051011660440161033cfd5b6009606435111561027b57601b610360527f6e5f636f696e73206d757374206265203c3d4d41585f434f494e5300000000006103805261036050610360518061038001601f825f031636823750506308c379a061032052602061034052601f19601f61036051011660440161033cfd5b5f6009905b80610360526064356103605118610296576103bb565b610360516101e05181101561087a5760051b61020001516102b857600161030c565b6103605160a05181101561087a5760051b60c0015163dd62ed3e61038052306103a0526040516103c0526020610380604461039c845afa6102fb573d5f5f3e3d5ffd5b60203d1061087a5761038090505115155b15610316576103b0565b6103605160a05181101561087a5760051b60c0015163095ea7b3610380526040516103a0527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6103c0526020610380604461039c5f855af161037a573d5f5f3e3d5ffd5b3d61039157803b1561087a5760016103e0526103aa565b60203d1061087a57610380518060011c61087a576103e0525b6103e050505b600101818118610280575b505060605163dd62ed3e6103605230610380526080516103a0526020610360604461037c845afa6103ee573d5f5f3e3d5ffd5b60203d1061087a576103609050516104705760605163095ea7b36103c0526080516103e0527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6104005260206103c060446103dc5f855af1610452573d5f5f3e3d5ffd5b60203d1061087a576103c0518060011c61087a576104205261042050505b5f6009905b8061036052606435610360511861048b5761054b565b610360516101e05181101561087a5760051b610200015115610540576103605160a05181101561087a5760051b60c001516323b872dd61038052336103a052306103c052610360516101e05181101561087a5760051b61020001516103e0526020610380606461039c5f855af1610504573d5f5f3e3d5ffd5b3d61051b57803b1561087a57600161040052610534565b60203d1061087a57610380518060011c61087a57610400525b6104009050511561087a575b600101818118610475575b505061034051156105f15760405163fd9de6316103605260606103405161038052806103a05280610380015f6101e0518083528060051b5f826009811161087a5780156105b257905b8060051b61020001518160051b602088010152600101818118610594575b5050820160200191505090508101905060c4356103c05250803b1561087a575f6103606101a461037c5f855af16105eb573d5f5f3e3d5ffd5b506107ee565b6103205161075f5760026064351861066b57604051630b4c7e4d610360526101e0511561087a575f60051b61020001516103805260026101e0511061087a57600160051b61020001516103a05260c4356103c052803b1561087a575f610360606461037c5f855af1610665573d5f5f3e3d5ffd5b506107ee565b6003606435186106f657604051634515cef3610360526101e0511561087a575f60051b61020001516103805260026101e0511061087a57600160051b61020001516103a05260036101e0511061087a57600260051b61020001516103c05260c4356103e052803b1561087a575f610360608461037c5f855af16106f0573d5f5f3e3d5ffd5b506107ee565b600f610360527f57726f6e6720617267756d656e747300000000000000000000000000000000006103805261036050610360518061038001601f825f031636823750506308c379a061032052602061034052601f19601f61036051011660440161033cfd6107ee565b60405163b72df5de610360526040806103805280610380015f6101e0518083528060051b5f826009811161087a5780156107b357905b8060051b61020001518160051b602088010152600101818118610795575b5050820160200191505090508101905060c4356103a05250803b1561087a575f61036061018461037c5f855af16107ec573d5f5f3e3d5ffd5b505b6060516370a0823161038052306103a0526020610380602461039c845afa610818573d5f5f3e3d5ffd5b60203d1061087a5761038090505161036052610360511561087a57608051636e553f6561038052610360516103a052336103c052803b1561087a575f610380604461039c5f855af161086c573d5f5f3e3d5ffd5b50602061036060035f55f35b005b5f80fd009a00bd0018

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.