ETH Price: $3,723.94 (+1.25%)

Contract

0x17063Ad4e83B0aBA4ca0F3fC3a9794E807A00ED7

Overview

ETH Balance

0 ETH

ETH Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Deliver Liquidit...1061036132023-06-26 19:00:03533 days ago1687806003IN
Sonne Finance: Liquidity Generation
0 ETH0.0000166129820.0024
Claim Velo Rewar...1061036072023-06-26 18:59:51533 days ago1687805991IN
Sonne Finance: Liquidity Generation
0 ETH0.0000170239260.0024
Claim Velo Rewar...1058795632023-06-21 14:31:43538 days ago1687357903IN
Sonne Finance: Liquidity Generation
0 ETH0.0000298535510.0001
Claim Velo Rewar...1055942302023-06-15 0:00:37545 days ago1686787237IN
Sonne Finance: Liquidity Generation
0 ETH0.0000238380420.0001
Claim Velo Rewar...1052836522023-06-07 19:28:01552 days ago1686166081IN
Sonne Finance: Liquidity Generation
0 ETH0.0000303704220.0001
Claim Velo Rewar...1033771522023-05-31 20:56:38559 days ago1685566598IN
Sonne Finance: Liquidity Generation
0 ETH0.0001571482620.001
Claim Velo Rewar...1033764212023-05-31 20:53:07559 days ago1685566387IN
Sonne Finance: Liquidity Generation
0 ETH0.0001255991070.001
Claim Velo Rewar...1011588622023-05-24 19:03:33566 days ago1684955013IN
Sonne Finance: Liquidity Generation
0 ETH0.0002121019630.001
Claim Velo Rewar...990549752023-05-17 10:20:21574 days ago1684318821IN
Sonne Finance: Liquidity Generation
0 ETH0.0002407857110.0011
Claim Velo Rewar...972220812023-05-10 10:25:22581 days ago1683714322IN
Sonne Finance: Liquidity Generation
0 ETH0.0003167771390.001
Claim Velo Rewar...961240922023-05-03 13:46:44587 days ago1683121604IN
Sonne Finance: Liquidity Generation
0 ETH0.0002972164130.001
Claim Velo Rewar...944094412023-04-26 11:39:15595 days ago1682509155IN
Sonne Finance: Liquidity Generation
0 ETH0.000130610760.001
Claim Velo Rewar...922356712023-04-19 12:44:50601 days ago1681908290IN
Sonne Finance: Liquidity Generation
0 ETH0.0002596545850.0012
Claim Velo Rewar...895156732023-04-12 14:23:15608 days ago1681309395IN
Sonne Finance: Liquidity Generation
0 ETH0.0001015266190.001
Claim Velo Rewar...865241742023-04-05 16:46:35615 days ago1680713195IN
Sonne Finance: Liquidity Generation
0 ETH0.0001298693960.001
Claim Velo Rewar...846055322023-03-29 13:58:35622 days ago1680098315IN
Sonne Finance: Liquidity Generation
0 ETH0.0001087845780.001
Claim Velo Rewar...829770682023-03-22 19:00:56629 days ago1679511656IN
Sonne Finance: Liquidity Generation
0 ETH0.0001038986950.001
Claim Velo Rewar...829488842023-03-22 17:26:06629 days ago1679505966IN
Sonne Finance: Liquidity Generation
0 ETH0.0001531251020.001
Claim Velo Rewar...811334662023-03-15 15:05:42636 days ago1678892742IN
Sonne Finance: Liquidity Generation
0 ETH0.0001383963970.001
Claim Velo Rewar...793187252023-03-08 17:42:18643 days ago1678297338IN
Sonne Finance: Liquidity Generation
0 ETH0.0002225526070.001
Claim Velo Rewar...780157592023-03-01 17:50:44650 days ago1677693044IN
Sonne Finance: Liquidity Generation
0 ETH0.0002161405180.001
Claim Velo Rewar...760193522023-02-22 15:51:30657 days ago1677081090IN
Sonne Finance: Liquidity Generation
0 ETH0.0002096557720.001
Claim Velo Rewar...745156732023-02-15 16:19:37664 days ago1676477977IN
Sonne Finance: Liquidity Generation
0 ETH0.0001846872320.001
Claim Velo Rewar...729670872023-02-08 15:37:45671 days ago1675870665IN
Sonne Finance: Liquidity Generation
0 ETH0.0001848501750.001
Claim Velo Rewar...716630822023-02-01 16:37:46678 days ago1675269466IN
Sonne Finance: Liquidity Generation
0 ETH0.0000746922460.001
View all transactions

Latest 15 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
1061036132023-06-26 19:00:03533 days ago1687806003
Sonne Finance: Liquidity Generation
0 ETH
1061036132023-06-26 19:00:03533 days ago1687806003
Sonne Finance: Liquidity Generation
0 ETH
1061036132023-06-26 19:00:03533 days ago1687806003
Sonne Finance: Liquidity Generation
0 ETH
1061036072023-06-26 18:59:51533 days ago1687805991
Sonne Finance: Liquidity Generation
0 ETH
1061036072023-06-26 18:59:51533 days ago1687805991
Sonne Finance: Liquidity Generation
0 ETH
1061036072023-06-26 18:59:51533 days ago1687805991
Sonne Finance: Liquidity Generation
0 ETH
1058795632023-06-21 14:31:43538 days ago1687357903
Sonne Finance: Liquidity Generation
0 ETH
1058795632023-06-21 14:31:43538 days ago1687357903
Sonne Finance: Liquidity Generation
0 ETH
1058795632023-06-21 14:31:43538 days ago1687357903
Sonne Finance: Liquidity Generation
0 ETH
1055942302023-06-15 0:00:37545 days ago1686787237
Sonne Finance: Liquidity Generation
0 ETH
1055942302023-06-15 0:00:37545 days ago1686787237
Sonne Finance: Liquidity Generation
0 ETH
1055942302023-06-15 0:00:37545 days ago1686787237
Sonne Finance: Liquidity Generation
0 ETH
1052836522023-06-07 19:28:01552 days ago1686166081
Sonne Finance: Liquidity Generation
0 ETH
1052836522023-06-07 19:28:01552 days ago1686166081
Sonne Finance: Liquidity Generation
0 ETH
1052836522023-06-07 19:28:01552 days ago1686166081
Sonne Finance: Liquidity Generation
0 ETH

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LiquidityGenerator

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license
File 1 of 9 : LiquidityGenerator.sol
//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.10;

import './interfaces/IERC20.sol';
import './interfaces/IOwnedDistributor.sol';
import './interfaces/IVelodromeGauge.sol';
import './interfaces/IVelodromePairFactory.sol';
import './interfaces/IVelodromeRouter.sol';
import './interfaces/IVelodromeVoter.sol';
import './libraries/SafeMath.sol';
import './libraries/SafeToken.sol';

contract LiquidityGenerator {
    using SafeMath for uint256;
    using SafeToken for address;

    struct ConstuctorParams {
        address admin_;
        address sonne_;
        address usdc_;
        address velo_;
        address router0_;
        address voter_;
        address reservesManager_;
        address distributor_;
        address bonusDistributor_;
        uint256 periodBegin_;
        uint256 periodDuration_;
        uint256 bonusDuration_;
    }

    uint256 public constant lockDuration = 6 * 30 * 24 * 60 * 60; // 6 months

    address public immutable admin;
    address public immutable sonne;
    address public immutable usdc;
    address public immutable velo;
    address public immutable router0;
    address public immutable voter;
    address public immutable distributor;
    address public immutable bonusDistributor;
    uint256 public immutable periodBegin;
    uint256 public immutable periodEnd;
    uint256 public immutable bonusEnd;
    uint256 public unlockTimestamp;
    bool public finalized = false;
    bool public delivered = false;
    address public reservesManager;

    // Generated velodrome addresses
    address public immutable pair0;
    address public immutable gauge;

    event Finalized(uint256 amountSonne, uint256 amountUSDC);
    event Deposit(
        address indexed sender,
        uint256 amount,
        uint256 distributorTotalShares,
        uint256 bonusDistributorTotalShares,
        uint256 newShares,
        uint256 newBonusShares
    );
    event PostponeUnlockTimestamp(
        uint256 prevUnlockTimestamp,
        uint256 unlockTimestamp
    );
    event Delivered(uint256 amountPair0);
    event VeloRewardClaimed(uint256 amountVelo);

    constructor(ConstuctorParams memory params_) {
        require(
            params_.periodDuration_ > 0,
            'LiquidityGenerator: INVALID_PERIOD_DURATION'
        );
        require(
            params_.bonusDuration_ > 0 &&
                params_.bonusDuration_ <= params_.periodDuration_,
            'LiquidityGenerator: INVALID_BONUS_DURATION'
        );
        admin = params_.admin_;
        sonne = params_.sonne_;
        usdc = params_.usdc_;
        velo = params_.velo_;
        router0 = params_.router0_;
        voter = params_.voter_;
        reservesManager = params_.reservesManager_;
        distributor = params_.distributor_;
        bonusDistributor = params_.bonusDistributor_;
        periodBegin = params_.periodBegin_;
        periodEnd = params_.periodBegin_.add(params_.periodDuration_);
        bonusEnd = params_.periodBegin_.add(params_.bonusDuration_);

        address _pair0 = _createPair(
            params_.router0_,
            params_.sonne_,
            params_.usdc_
        );
        address _gauge = _createGauge(params_.voter_, _pair0);

        pair0 = _pair0;
        gauge = _gauge;
    }

    function distributorTotalShares()
        public
        view
        returns (uint256 totalShares)
    {
        return IOwnedDistributor(distributor).totalShares();
    }

    function bonusDistributorTotalShares()
        public
        view
        returns (uint256 totalShares)
    {
        return IOwnedDistributor(bonusDistributor).totalShares();
    }

    function distributorRecipients(address account)
        public
        view
        returns (
            uint256 shares,
            uint256 lastShareIndex,
            uint256 credit
        )
    {
        return IOwnedDistributor(distributor).recipients(account);
    }

    function bonusDistributorRecipients(address account)
        public
        view
        returns (
            uint256 shares,
            uint256 lastShareIndex,
            uint256 credit
        )
    {
        return IOwnedDistributor(bonusDistributor).recipients(account);
    }

    function setReserveManager(address reserveManager_) external {
        require(msg.sender == admin, 'LiquidityGenerator: FORBIDDEN');
        require(
            reserveManager_ != address(0),
            'LiquidityGenerator: INVALID_ADDRESS'
        );
        reservesManager = reserveManager_;
    }

    function postponeUnlockTimestamp(uint256 newUnlockTimestamp) public {
        require(msg.sender == admin, 'LiquidityGenerator: UNAUTHORIZED');
        require(
            newUnlockTimestamp > unlockTimestamp,
            'LiquidityGenerator: INVALID_UNLOCK_TIMESTAMP'
        );
        uint256 prevUnlockTimestamp = unlockTimestamp;
        unlockTimestamp = newUnlockTimestamp;
        emit PostponeUnlockTimestamp(prevUnlockTimestamp, unlockTimestamp);
    }

    function deliverLiquidityToReservesManager() public {
        require(msg.sender == admin, 'LiquidityGenerator: UNAUTHORIZED');
        require(!delivered, 'LiquidityGenerator: ALREADY_DELIVERED');
        require(finalized, 'LiquidityGenerator: NOT_FINALIZED');
        uint256 blockTimestamp = getBlockTimestamp();
        require(
            blockTimestamp >= unlockTimestamp,
            'LiquidityGenerator: STILL_LOCKED'
        );
        IVelodromeGauge(gauge).withdrawAll();
        uint256 _amountPair0 = pair0.myBalance();
        pair0.safeTransfer(reservesManager, _amountPair0);
        delivered = true;
        emit Delivered(_amountPair0);
    }

    function claimVeloRewards() public {
        require(msg.sender == admin, 'LiquidityGenerator: UNAUTHORIZED');
        require(finalized, 'LiquidityGenerator: NOT_FINALIZED');

        address[] memory tokens = new address[](1);
        tokens[0] = velo;
        IVelodromeGauge(gauge).getReward(address(this), tokens);

        uint256 _amountVelo = velo.myBalance();
        velo.safeTransfer(reservesManager, _amountVelo);
        emit VeloRewardClaimed(_amountVelo);
    }

    function finalize() public {
        require(!finalized, 'LiquidityGenerator: FINALIZED');
        uint256 blockTimestamp = getBlockTimestamp();
        require(blockTimestamp >= periodEnd, 'LiquidityGenerator: TOO_SOON');

        uint256 _amountSonne = sonne.myBalance();
        uint256 _amountUSDC = usdc.myBalance();

        sonne.safeApprove(router0, _amountSonne);
        usdc.safeApprove(router0, _amountUSDC);
        IVelodromeRouter(router0).addLiquidity(
            sonne,
            usdc,
            false,
            _amountSonne,
            _amountUSDC,
            _amountSonne,
            _amountUSDC,
            address(this),
            blockTimestamp
        );

        uint256 _amountPair0 = pair0.myBalance();
        pair0.safeApprove(gauge, _amountPair0);
        IVelodromeGauge(gauge).deposit(_amountPair0, 0);

        unlockTimestamp = blockTimestamp.add(lockDuration);
        finalized = true;
        emit Finalized(_amountSonne, _amountUSDC);
    }

    function deposit(uint256 amountUSDC) external payable {
        uint256 blockTimestamp = getBlockTimestamp();
        require(blockTimestamp >= periodBegin, 'LiquidityGenerator: TOO_SOON');
        require(blockTimestamp < periodEnd, 'LiquidityGenerator: TOO_LATE');
        require(amountUSDC >= 1e7, 'LiquidityGenerator: INVALID_VALUE'); // minimum 10 USDC

        // Pull usdc to this contract
        usdc.safeTransferFrom(msg.sender, address(this), amountUSDC);

        (uint256 _prevSharesBonus, , ) = IOwnedDistributor(bonusDistributor)
            .recipients(msg.sender);
        uint256 _newSharesBonus = _prevSharesBonus;
        if (blockTimestamp < bonusEnd) {
            _newSharesBonus = _prevSharesBonus.add(amountUSDC);
            IOwnedDistributor(bonusDistributor).editRecipient(
                msg.sender,
                _newSharesBonus
            );
        }
        (uint256 _prevShares, , ) = IOwnedDistributor(distributor).recipients(
            msg.sender
        );
        uint256 _newShares = _prevShares.add(amountUSDC);
        IOwnedDistributor(distributor).editRecipient(msg.sender, _newShares);
        emit Deposit(
            msg.sender,
            amountUSDC,
            distributorTotalShares(),
            bonusDistributorTotalShares(),
            _newShares,
            _newSharesBonus
        );
    }

    receive() external payable {
        revert('LiquidityGenerator: BAD_CALL');
    }

    function getBlockTimestamp() public view virtual returns (uint256) {
        return block.timestamp;
    }

    function _createPair(
        address router_,
        address sonne_,
        address usdc_
    ) internal returns (address) {
        address _veloPairFactory = IVelodromeRouter(router_).factory();
        address _pair = IVelodromePairFactory(_veloPairFactory).getPair(
            sonne_,
            usdc_,
            false
        );
        if (_pair != address(0)) return _pair;

        _pair = IVelodromePairFactory(_veloPairFactory).createPair(
            sonne,
            usdc,
            false
        );

        return _pair;
    }

    function _createGauge(address voter_, address pair0_)
        internal
        returns (address)
    {
        address _gauge = IVelodromeVoter(voter_).gauges(pair0_);
        if (_gauge != address(0)) return _gauge;

        _gauge = IVelodromeVoter(voter_).createGauge(pair0_);

        return _gauge;
    }
}

File 2 of 9 : IERC20.sol
//SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.5.0;

interface IERC20 {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);
}

File 3 of 9 : IOwnedDistributor.sol
//SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.5.0;

interface IOwnedDistributor {
    function totalShares() external view returns (uint256);

    function recipients(address)
        external
        view
        returns (
            uint256 shares,
            uint256 lastShareIndex,
            uint256 credit
        );

    function editRecipient(address account, uint256 shares) external;
}

File 4 of 9 : IVelodromeGauge.sol
//SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.5.0;

interface IVelodromeGauge {
    function deposit(uint256 amount, uint256 tokenId) external;

    function withdrawAll() external;

    function withdraw(uint256 amount) external;

    function balanceOf(address account) external view returns (uint256);

    function getReward(address account, address[] calldata tokens) external;
}

File 5 of 9 : IVelodromePairFactory.sol
//SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.5.0;

interface IVelodromePairFactory {
    function createPair(
        address tokenA,
        address tokenB,
        bool stable
    ) external returns (address pair);

    function getPair(
        address tokenA,
        address tokenB,
        bool stable
    ) external view returns (address pair);
}

File 6 of 9 : IVelodromeRouter.sol
//SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.5.0;

interface IVelodromeRouter {
    function factory() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        bool stable,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        bool stable,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);
}

File 7 of 9 : IVelodromeVoter.sol
//SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.5.0;

interface IVelodromeVoter {
    function gauges(address _pool) external view returns (address);

    function claimable(address _gauge) external view returns (uint256);

    function createGauge(address _pool) external returns (address);

    function whitelist(address token) external;

    function distribute(address _gauge) external;

    function vote(
        uint256 tokenId,
        address[] calldata _poolVote,
        uint256[] calldata _weights
    ) external;

    function votes(uint256 _tokenId, address _pool) external view returns (uint256);
}

File 8 of 9 : SafeMath.sol
//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.10;

// From https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/Math.sol
// Subject to the MIT license.

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting with custom message on overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, errorMessage);

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on underflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot underflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction underflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on underflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot underflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, errorMessage);

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers.
     * Reverts on division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers.
     * Reverts with custom message on division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

File 9 of 9 : SafeToken.sol
//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.10;

interface ERC20Interface {
    function balanceOf(address user) external view returns (uint256);
}

library SafeToken {
    function myBalance(address token) internal view returns (uint256) {
        return ERC20Interface(token).balanceOf(address(this));
    }

    function balanceOf(address token, address user) internal view returns (uint256) {
        return ERC20Interface(token).balanceOf(user);
    }

    function safeApprove(
        address token,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), '!safeApprove');
    }

    function safeTransfer(
        address token,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), '!safeTransfer');
    }

    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), '!safeTransferFrom');
    }

    function safeTransferETH(address to, uint256 value) internal {
        (bool success, ) = to.call{value: value}(new bytes(0));
        require(success, '!safeTransferETH');
    }
}

Settings
{
  "evmVersion": "london",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"components":[{"internalType":"address","name":"admin_","type":"address"},{"internalType":"address","name":"sonne_","type":"address"},{"internalType":"address","name":"usdc_","type":"address"},{"internalType":"address","name":"velo_","type":"address"},{"internalType":"address","name":"router0_","type":"address"},{"internalType":"address","name":"voter_","type":"address"},{"internalType":"address","name":"reservesManager_","type":"address"},{"internalType":"address","name":"distributor_","type":"address"},{"internalType":"address","name":"bonusDistributor_","type":"address"},{"internalType":"uint256","name":"periodBegin_","type":"uint256"},{"internalType":"uint256","name":"periodDuration_","type":"uint256"},{"internalType":"uint256","name":"bonusDuration_","type":"uint256"}],"internalType":"struct LiquidityGenerator.ConstuctorParams","name":"params_","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountPair0","type":"uint256"}],"name":"Delivered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"distributorTotalShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bonusDistributorTotalShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBonusShares","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountSonne","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountUSDC","type":"uint256"}],"name":"Finalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevUnlockTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"unlockTimestamp","type":"uint256"}],"name":"PostponeUnlockTimestamp","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountVelo","type":"uint256"}],"name":"VeloRewardClaimed","type":"event"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bonusDistributor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"bonusDistributorRecipients","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"lastShareIndex","type":"uint256"},{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bonusDistributorTotalShares","outputs":[{"internalType":"uint256","name":"totalShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bonusEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimVeloRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deliverLiquidityToReservesManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delivered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountUSDC","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"distributorRecipients","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"lastShareIndex","type":"uint256"},{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributorTotalShares","outputs":[{"internalType":"uint256","name":"totalShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gauge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlockTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodBegin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newUnlockTimestamp","type":"uint256"}],"name":"postponeUnlockTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservesManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"reserveManager_","type":"address"}],"name":"setReserveManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sonne","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlockTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"velo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6102206040526001805461ffff191690553480156200001d57600080fd5b506040516200257f3803806200257f833981016040819052620000409162000567565b600081610140015111620000af5760405162461bcd60e51b815260206004820152602b60248201527f4c697175696469747947656e657261746f723a20494e56414c49445f5045524960448201526a27a22fa22aa920aa24a7a760a91b60648201526084015b60405180910390fd5b6000816101600151118015620000cf575080610140015181610160015111155b620001305760405162461bcd60e51b815260206004820152602a60248201527f4c697175696469747947656e657261746f723a20494e56414c49445f424f4e5560448201526929afa22aa920aa24a7a760b11b6064820152608401620000a6565b80516001600160a01b039081166080908152602080840151831660a09081526040850151841660c09081526060860151851660e09081529386015185166101009081529186015185166101209081529086015160018054918716620100000262010000600160b01b03199092169190911790559285015184166101409081529085015190931661016052908301805161018052918301519151620001df9290916200177162000262821b17901c565b6101a052610160810151610120820151620002069162000262602090811b6200177117901c565b6101c0526080810151602082015160408301516000926200022992909162000279565b90506000620002438360a00151836200040f60201b60201c565b6001600160a01b039283166101e05290911661020052506200069a9050565b600062000270828462000655565b90505b92915050565b600080846001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e191906200067c565b6040516306801cc360e41b81526001600160a01b0386811660048301528581166024830152600060448301819052929350831690636801cc3090606401602060405180830381865afa1580156200033c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036291906200067c565b90506001600160a01b038116156200037e579150620004089050565b60a05160c0516040516320b7f73960e21b81526001600160a01b039283166004820152908216602482015260006044820152908316906382dfdce4906064016020604051808303816000875af1158015620003dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040391906200067c565b925050505b9392505050565b60405163b9a09fd560e01b81526001600160a01b038281166004830152600091829185169063b9a09fd590602401602060405180830381865afa1580156200045b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200048191906200067c565b90506001600160a01b038116156200049b57905062000273565b6040516352fa180f60e11b81526001600160a01b03848116600483015285169063a5f4301e906024016020604051808303816000875af1158015620004e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200050a91906200067c565b949350505050565b60405161018081016001600160401b03811182821017156200054457634e487b7160e01b600052604160045260246000fd5b60405290565b80516001600160a01b03811681146200056257600080fd5b919050565b600061018082840312156200057b57600080fd5b6200058562000512565b62000590836200054a565b8152620005a0602084016200054a565b6020820152620005b3604084016200054a565b6040820152620005c6606084016200054a565b6060820152620005d9608084016200054a565b6080820152620005ec60a084016200054a565b60a0820152620005ff60c084016200054a565b60c08201526200061260e084016200054a565b60e0820152610100620006278185016200054a565b9082015261012083810151908201526101408084015190820152610160928301519281019290925250919050565b600082198211156200067757634e487b7160e01b600052601160045260246000fd5b500190565b6000602082840312156200068f57600080fd5b62000270826200054a565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051611d456200083a60003960008181610493015281816107da01528181610c5501528181610c97015261160801526000818161062a015281816108520152818161089301528181610bf70152610c330152600081816103f601526111db01526000818161035f0152818161096501526110480152600081816102700152610fd80152600081816104dd01528181610d8501528181610f790152818161115f015261122a01526000818161056d01528181610e04015281816112a70152818161134b01526117400152600061031601526000818161065e01528181610a6e01528181610ac20152610b7f01526000818161044a015281816115b10152818161167a01526116bb0152600081816102e201528181610a1001528181610aa001528181610b26015261111f0152600081816105a1015281816109da01528181610a4c0152610afe015260008181610692015281816106bf01528181610e940152818161142a015261152e0152611d456000f3fe6080604052600436106101c65760003560e01c8063a4fa00e0116100f7578063bfe1092811610095578063ea988b5911610064578063ea988b59146105f8578063f05663a614610618578063f6bcd63a1461064c578063f851a4401461068057600080fd5b8063bfe109281461055b578063c0c2ae501461058f578063df7da754146105c3578063e80aff84146105e357600080fd5b8063b04c1e02116100d1578063b04c1e02146104cb578063b3f05b97146104ff578063b6b55f2514610529578063bbdfbfba1461053c57600080fd5b8063a4fa00e01461046c578063a6f19c8414610481578063aa082a9d146104b557600080fd5b8063506ec0951161016457806384d572b41161013e57806384d572b4146103cf5780638bc85b03146103e45780638be1ff39146104185780638c7c53ce1461043857600080fd5b8063506ec0951461034d57806366082ffc14610381578063796b89b9146103bc57600080fd5b8063345ef941116101a0578063345ef941146102925780633e413bee146102d057806346c96aac146103045780634bb278f31461033857600080fd5b8063045544431461021d57806324054e4a146102475780632c995cae1461025e57600080fd5b366102185760405162461bcd60e51b815260206004820152601c60248201527f4c697175696469747947656e657261746f723a204241445f43414c4c0000000060448201526064015b60405180910390fd5b600080fd5b34801561022957600080fd5b5061023462ed4e0081565b6040519081526020015b60405180910390f35b34801561025357600080fd5b5061025c6106b4565b005b34801561026a57600080fd5b506102347f000000000000000000000000000000000000000000000000000000000000000081565b34801561029e57600080fd5b506001546102b8906201000090046001600160a01b031681565b6040516001600160a01b03909116815260200161023e565b3480156102dc57600080fd5b506102b87f000000000000000000000000000000000000000000000000000000000000000081565b34801561031057600080fd5b506102b87f000000000000000000000000000000000000000000000000000000000000000081565b34801561034457600080fd5b5061025c61090f565b34801561035957600080fd5b506102347f000000000000000000000000000000000000000000000000000000000000000081565b34801561038d57600080fd5b506103a161039c366004611b1b565b610d5f565b6040805193845260208401929092529082015260600161023e565b3480156103c857600080fd5b5042610234565b3480156103db57600080fd5b50610234610e00565b3480156103f057600080fd5b506102347f000000000000000000000000000000000000000000000000000000000000000081565b34801561042457600080fd5b5061025c610433366004611b44565b610e89565b34801561044457600080fd5b506102b87f000000000000000000000000000000000000000000000000000000000000000081565b34801561047857600080fd5b50610234610f75565b34801561048d57600080fd5b506102b87f000000000000000000000000000000000000000000000000000000000000000081565b3480156104c157600080fd5b5061023460005481565b3480156104d757600080fd5b506102b87f000000000000000000000000000000000000000000000000000000000000000081565b34801561050b57600080fd5b506001546105199060ff1681565b604051901515815260200161023e565b61025c610537366004611b44565b610fd5565b34801561054857600080fd5b5060015461051990610100900460ff1681565b34801561056757600080fd5b506102b87f000000000000000000000000000000000000000000000000000000000000000081565b34801561059b57600080fd5b506102b87f000000000000000000000000000000000000000000000000000000000000000081565b3480156105cf57600080fd5b5061025c6105de366004611b1b565b61141f565b3480156105ef57600080fd5b5061025c611523565b34801561060457600080fd5b506103a1610613366004611b1b565b61171a565b34801561062457600080fd5b506102b87f000000000000000000000000000000000000000000000000000000000000000081565b34801561065857600080fd5b506102b87f000000000000000000000000000000000000000000000000000000000000000081565b34801561068c57600080fd5b506102b87f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106fc5760405162461bcd60e51b815260040161020f90611b5d565b600154610100900460ff16156107625760405162461bcd60e51b815260206004820152602560248201527f4c697175696469747947656e657261746f723a20414c52454144595f44454c49604482015264159154915160da1b606482015260840161020f565b60015460ff166107845760405162461bcd60e51b815260040161020f90611b92565b60005442908110156107d85760405162461bcd60e51b815260206004820181905260248201527f4c697175696469747947656e657261746f723a205354494c4c5f4c4f434b4544604482015260640161020f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663853828b66040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561083357600080fd5b505af1158015610847573d6000803e3d6000fd5b50505050600061087f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611784565b6001549091506108c2906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169162010000900416836117f5565b6001805461ff0019166101001790556040517ffcc296b8bdd64e3f1d1faadef50cb2d6550f645316330fe57cb1dd7e0612ead0906109039083815260200190565b60405180910390a15050565b60015460ff16156109625760405162461bcd60e51b815260206004820152601d60248201527f4c697175696469747947656e657261746f723a2046494e414c495a4544000000604482015260640161020f565b427f00000000000000000000000000000000000000000000000000000000000000008110156109d35760405162461bcd60e51b815260206004820152601c60248201527f4c697175696469747947656e657261746f723a20544f4f5f534f4f4e00000000604482015260640161020f565b6000610a077f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611784565b90506000610a3d7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611784565b9050610a936001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000084611900565b610ae76001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000083611900565b604051635a47ddc360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f00000000000000000000000000000000000000000000000000000000000000008116602483015260006044830152606482018490526084820183905260a4820184905260c482018390523060e483015261010482018590527f00000000000000000000000000000000000000000000000000000000000000001690635a47ddc390610124016060604051808303816000875af1158015610bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed9190611bd3565b5050506000610c247f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611784565b9050610c7a6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000083611900565b604051631c57762b60e31b815260048101829052600060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e2bbb15890604401600060405180830381600087803b158015610ce357600080fd5b505af1158015610cf7573d6000803e3d6000fd5b50505050610d1162ed4e008561177190919063ffffffff16565b6000556001805460ff19168117905560408051848152602081018490527fb968440accd1ce5fa60b00de8bb8d8487eb2fda3c3701fb30fea3f69aa910a48910160405180910390a150505050565b6040516375c1018960e11b81526001600160a01b038281166004830152600091829182917f00000000000000000000000000000000000000000000000000000000000000009091169063eb820312906024015b606060405180830381865afa158015610dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df39190611bd3565b9250925092509193909250565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633a98ef396040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e849190611c01565b905090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ed15760405162461bcd60e51b815260040161020f90611b5d565b6000548111610f375760405162461bcd60e51b815260206004820152602c60248201527f4c697175696469747947656e657261746f723a20494e56414c49445f554e4c4f60448201526b0434b5f54494d455354414d560a41b606482015260840161020f565b600080549082905560408051828152602081018490527fe3d6cde4e8f25cec5cc1b915261e33581a4bf2cf7e2aa87985f471cc52fa0f819101610903565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633a98ef396040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e60573d6000803e3d6000fd5b427f00000000000000000000000000000000000000000000000000000000000000008110156110465760405162461bcd60e51b815260206004820152601c60248201527f4c697175696469747947656e657261746f723a20544f4f5f534f4f4e00000000604482015260640161020f565b7f000000000000000000000000000000000000000000000000000000000000000081106110b55760405162461bcd60e51b815260206004820152601c60248201527f4c697175696469747947656e657261746f723a20544f4f5f4c41544500000000604482015260640161020f565b629896808210156111125760405162461bcd60e51b815260206004820152602160248201527f4c697175696469747947656e657261746f723a20494e56414c49445f56414c556044820152604560f81b606482015260840161020f565b6111476001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333085611a03565b6040516375c1018960e11b81523360048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063eb82031290602401606060405180830381865afa1580156111ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d29190611bd3565b509091508190507f000000000000000000000000000000000000000000000000000000000000000083101561128f5761120b8285611771565b6040516304674a9360e41b8152336004820152602481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634674a93090604401600060405180830381600087803b15801561127657600080fd5b505af115801561128a573d6000803e3d6000fd5b505050505b6040516375c1018960e11b81523360048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063eb82031290602401606060405180830381865afa1580156112f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131a9190611bd3565b509091506000905061132c8287611771565b6040516304674a9360e41b8152336004820152602481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634674a93090604401600060405180830381600087803b15801561139757600080fd5b505af11580156113ab573d6000803e3d6000fd5b50505050336001600160a01b03167ff943cf10ef4d1e3239f4716ddecdf546e8ba8ab0e41deafd9a71a99936827e45876113e3610e00565b6113eb610f75565b60408051938452602084019290925290820152606081018490526080810186905260a00160405180910390a2505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146114975760405162461bcd60e51b815260206004820152601d60248201527f4c697175696469747947656e657261746f723a20464f5242494444454e000000604482015260640161020f565b6001600160a01b0381166114f95760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747947656e657261746f723a20494e56414c49445f4144445260448201526245535360e81b606482015260840161020f565b600180546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461156b5760405162461bcd60e51b815260040161020f90611b5d565b60015460ff1661158d5760405162461bcd60e51b815260040161020f90611b92565b604080516001808252818301909252600091602080830190803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000816000815181106115e3576115e3611c1a565b6001600160a01b0392831660209182029290920101526040516331279d3d60e01b81527f0000000000000000000000000000000000000000000000000000000000000000909116906331279d3d906116419030908590600401611c30565b600060405180830381600087803b15801561165b57600080fd5b505af115801561166f573d6000803e3d6000fd5b5050505060006116a77f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611784565b6001549091506116ea906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169162010000900416836117f5565b6040518181527f3d284dc4d07f3beab8dfa65cda1155635b168cf80a24413d3b617e385ac1720390602001610903565b6040516375c1018960e11b81526001600160a01b038281166004830152600091829182917f00000000000000000000000000000000000000000000000000000000000000009091169063eb82031290602401610db2565b600061177d8284611c8c565b9392505050565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156117cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ef9190611c01565b92915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916118519190611cb2565b6000604051808303816000865af19150503d806000811461188e576040519150601f19603f3d011682016040523d82523d6000602084013e611893565b606091505b50915091508180156118bd5750805115806118bd5750808060200190518101906118bd9190611ced565b6118f95760405162461bcd60e51b815260206004820152600d60248201526c10b9b0b332aa3930b739b332b960991b604482015260640161020f565b5050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b179052915160009283929087169161195c9190611cb2565b6000604051808303816000865af19150503d8060008114611999576040519150601f19603f3d011682016040523d82523d6000602084013e61199e565b606091505b50915091508180156119c85750805115806119c85750808060200190518101906119c89190611ced565b6118f95760405162461bcd60e51b815260206004820152600c60248201526b2173616665417070726f766560a01b604482015260640161020f565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691611a679190611cb2565b6000604051808303816000865af19150503d8060008114611aa4576040519150601f19603f3d011682016040523d82523d6000602084013e611aa9565b606091505b5091509150818015611ad3575080511580611ad3575080806020019051810190611ad39190611ced565b611b135760405162461bcd60e51b815260206004820152601160248201527021736166655472616e7366657246726f6d60781b604482015260640161020f565b505050505050565b600060208284031215611b2d57600080fd5b81356001600160a01b038116811461177d57600080fd5b600060208284031215611b5657600080fd5b5035919050565b6020808252818101527f4c697175696469747947656e657261746f723a20554e415554484f52495a4544604082015260600190565b60208082526021908201527f4c697175696469747947656e657261746f723a204e4f545f46494e414c495a456040820152601160fa1b606082015260800190565b600080600060608486031215611be857600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215611c1357600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038381168252604060208084018290528451918401829052600092858201929091906060860190855b81811015611c7e578551851683529483019491830191600101611c60565b509098975050505050505050565b60008219821115611cad57634e487b7160e01b600052601160045260246000fd5b500190565b6000825160005b81811015611cd35760208186018101518583015201611cb9565b81811115611ce2576000828501525b509190910192915050565b600060208284031215611cff57600080fd5b8151801515811461177d57600080fdfea26469706673582212207d6cef60d0d96fcf17b52329c8ddaee08a155fc8958e5b516b41fafd9a3b584064736f6c634300080a0033000000000000000000000000fb59ce8986943163f14c590755b29db2998f23220000000000000000000000001db2466d9f5e10d7090e7152b68d62703a2245f00000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000003c8b650257cfb5f272f799f5e2b4e65093a11a050000000000000000000000009c12939390052919af3155f41bf4160fd3666a6f00000000000000000000000009236cff45047dbee6b921e00704bed6d6b8cf7e000000000000000000000000201ecb1c439f92afd5df5d399e195f73b01bb0f30000000000000000000000002ba86032e601e001aeb0069efff824bcf699ffc50000000000000000000000009eff321ddf8ab509c8c65f7e57289258e9c169b1000000000000000000000000000000000000000000000000000000006330c150000000000000000000000000000000000000000000000000000000000003f4800000000000000000000000000000000000000000000000000000000000015180

Deployed Bytecode

0x6080604052600436106101c65760003560e01c8063a4fa00e0116100f7578063bfe1092811610095578063ea988b5911610064578063ea988b59146105f8578063f05663a614610618578063f6bcd63a1461064c578063f851a4401461068057600080fd5b8063bfe109281461055b578063c0c2ae501461058f578063df7da754146105c3578063e80aff84146105e357600080fd5b8063b04c1e02116100d1578063b04c1e02146104cb578063b3f05b97146104ff578063b6b55f2514610529578063bbdfbfba1461053c57600080fd5b8063a4fa00e01461046c578063a6f19c8414610481578063aa082a9d146104b557600080fd5b8063506ec0951161016457806384d572b41161013e57806384d572b4146103cf5780638bc85b03146103e45780638be1ff39146104185780638c7c53ce1461043857600080fd5b8063506ec0951461034d57806366082ffc14610381578063796b89b9146103bc57600080fd5b8063345ef941116101a0578063345ef941146102925780633e413bee146102d057806346c96aac146103045780634bb278f31461033857600080fd5b8063045544431461021d57806324054e4a146102475780632c995cae1461025e57600080fd5b366102185760405162461bcd60e51b815260206004820152601c60248201527f4c697175696469747947656e657261746f723a204241445f43414c4c0000000060448201526064015b60405180910390fd5b600080fd5b34801561022957600080fd5b5061023462ed4e0081565b6040519081526020015b60405180910390f35b34801561025357600080fd5b5061025c6106b4565b005b34801561026a57600080fd5b506102347f000000000000000000000000000000000000000000000000000000006330c15081565b34801561029e57600080fd5b506001546102b8906201000090046001600160a01b031681565b6040516001600160a01b03909116815260200161023e565b3480156102dc57600080fd5b506102b87f0000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160781565b34801561031057600080fd5b506102b87f00000000000000000000000009236cff45047dbee6b921e00704bed6d6b8cf7e81565b34801561034457600080fd5b5061025c61090f565b34801561035957600080fd5b506102347f000000000000000000000000000000000000000000000000000000006334b5d081565b34801561038d57600080fd5b506103a161039c366004611b1b565b610d5f565b6040805193845260208401929092529082015260600161023e565b3480156103c857600080fd5b5042610234565b3480156103db57600080fd5b50610234610e00565b3480156103f057600080fd5b506102347f00000000000000000000000000000000000000000000000000000000633212d081565b34801561042457600080fd5b5061025c610433366004611b44565b610e89565b34801561044457600080fd5b506102b87f0000000000000000000000003c8b650257cfb5f272f799f5e2b4e65093a11a0581565b34801561047857600080fd5b50610234610f75565b34801561048d57600080fd5b506102b87f0000000000000000000000003786d4419d6b4a902607ceb2bb319bb336735df881565b3480156104c157600080fd5b5061023460005481565b3480156104d757600080fd5b506102b87f0000000000000000000000009eff321ddf8ab509c8c65f7e57289258e9c169b181565b34801561050b57600080fd5b506001546105199060ff1681565b604051901515815260200161023e565b61025c610537366004611b44565b610fd5565b34801561054857600080fd5b5060015461051990610100900460ff1681565b34801561056757600080fd5b506102b87f0000000000000000000000002ba86032e601e001aeb0069efff824bcf699ffc581565b34801561059b57600080fd5b506102b87f0000000000000000000000001db2466d9f5e10d7090e7152b68d62703a2245f081565b3480156105cf57600080fd5b5061025c6105de366004611b1b565b61141f565b3480156105ef57600080fd5b5061025c611523565b34801561060457600080fd5b506103a1610613366004611b1b565b61171a565b34801561062457600080fd5b506102b87f000000000000000000000000c899c4d73ed8df2ead1543ab915888b0bf7d57a281565b34801561065857600080fd5b506102b87f0000000000000000000000009c12939390052919af3155f41bf4160fd3666a6f81565b34801561068c57600080fd5b506102b87f000000000000000000000000fb59ce8986943163f14c590755b29db2998f232281565b336001600160a01b037f000000000000000000000000fb59ce8986943163f14c590755b29db2998f232216146106fc5760405162461bcd60e51b815260040161020f90611b5d565b600154610100900460ff16156107625760405162461bcd60e51b815260206004820152602560248201527f4c697175696469747947656e657261746f723a20414c52454144595f44454c49604482015264159154915160da1b606482015260840161020f565b60015460ff166107845760405162461bcd60e51b815260040161020f90611b92565b60005442908110156107d85760405162461bcd60e51b815260206004820181905260248201527f4c697175696469747947656e657261746f723a205354494c4c5f4c4f434b4544604482015260640161020f565b7f0000000000000000000000003786d4419d6b4a902607ceb2bb319bb336735df86001600160a01b031663853828b66040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561083357600080fd5b505af1158015610847573d6000803e3d6000fd5b50505050600061087f7f000000000000000000000000c899c4d73ed8df2ead1543ab915888b0bf7d57a26001600160a01b0316611784565b6001549091506108c2906001600160a01b037f000000000000000000000000c899c4d73ed8df2ead1543ab915888b0bf7d57a281169162010000900416836117f5565b6001805461ff0019166101001790556040517ffcc296b8bdd64e3f1d1faadef50cb2d6550f645316330fe57cb1dd7e0612ead0906109039083815260200190565b60405180910390a15050565b60015460ff16156109625760405162461bcd60e51b815260206004820152601d60248201527f4c697175696469747947656e657261746f723a2046494e414c495a4544000000604482015260640161020f565b427f000000000000000000000000000000000000000000000000000000006334b5d08110156109d35760405162461bcd60e51b815260206004820152601c60248201527f4c697175696469747947656e657261746f723a20544f4f5f534f4f4e00000000604482015260640161020f565b6000610a077f0000000000000000000000001db2466d9f5e10d7090e7152b68d62703a2245f06001600160a01b0316611784565b90506000610a3d7f0000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316076001600160a01b0316611784565b9050610a936001600160a01b037f0000000000000000000000001db2466d9f5e10d7090e7152b68d62703a2245f0167f0000000000000000000000009c12939390052919af3155f41bf4160fd3666a6f84611900565b610ae76001600160a01b037f0000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607167f0000000000000000000000009c12939390052919af3155f41bf4160fd3666a6f83611900565b604051635a47ddc360e01b81526001600160a01b037f0000000000000000000000001db2466d9f5e10d7090e7152b68d62703a2245f0811660048301527f0000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316078116602483015260006044830152606482018490526084820183905260a4820184905260c482018390523060e483015261010482018590527f0000000000000000000000009c12939390052919af3155f41bf4160fd3666a6f1690635a47ddc390610124016060604051808303816000875af1158015610bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed9190611bd3565b5050506000610c247f000000000000000000000000c899c4d73ed8df2ead1543ab915888b0bf7d57a26001600160a01b0316611784565b9050610c7a6001600160a01b037f000000000000000000000000c899c4d73ed8df2ead1543ab915888b0bf7d57a2167f0000000000000000000000003786d4419d6b4a902607ceb2bb319bb336735df883611900565b604051631c57762b60e31b815260048101829052600060248201527f0000000000000000000000003786d4419d6b4a902607ceb2bb319bb336735df86001600160a01b03169063e2bbb15890604401600060405180830381600087803b158015610ce357600080fd5b505af1158015610cf7573d6000803e3d6000fd5b50505050610d1162ed4e008561177190919063ffffffff16565b6000556001805460ff19168117905560408051848152602081018490527fb968440accd1ce5fa60b00de8bb8d8487eb2fda3c3701fb30fea3f69aa910a48910160405180910390a150505050565b6040516375c1018960e11b81526001600160a01b038281166004830152600091829182917f0000000000000000000000009eff321ddf8ab509c8c65f7e57289258e9c169b19091169063eb820312906024015b606060405180830381865afa158015610dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df39190611bd3565b9250925092509193909250565b60007f0000000000000000000000002ba86032e601e001aeb0069efff824bcf699ffc56001600160a01b0316633a98ef396040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e849190611c01565b905090565b336001600160a01b037f000000000000000000000000fb59ce8986943163f14c590755b29db2998f23221614610ed15760405162461bcd60e51b815260040161020f90611b5d565b6000548111610f375760405162461bcd60e51b815260206004820152602c60248201527f4c697175696469747947656e657261746f723a20494e56414c49445f554e4c4f60448201526b0434b5f54494d455354414d560a41b606482015260840161020f565b600080549082905560408051828152602081018490527fe3d6cde4e8f25cec5cc1b915261e33581a4bf2cf7e2aa87985f471cc52fa0f819101610903565b60007f0000000000000000000000009eff321ddf8ab509c8c65f7e57289258e9c169b16001600160a01b0316633a98ef396040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e60573d6000803e3d6000fd5b427f000000000000000000000000000000000000000000000000000000006330c1508110156110465760405162461bcd60e51b815260206004820152601c60248201527f4c697175696469747947656e657261746f723a20544f4f5f534f4f4e00000000604482015260640161020f565b7f000000000000000000000000000000000000000000000000000000006334b5d081106110b55760405162461bcd60e51b815260206004820152601c60248201527f4c697175696469747947656e657261746f723a20544f4f5f4c41544500000000604482015260640161020f565b629896808210156111125760405162461bcd60e51b815260206004820152602160248201527f4c697175696469747947656e657261746f723a20494e56414c49445f56414c556044820152604560f81b606482015260840161020f565b6111476001600160a01b037f0000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160716333085611a03565b6040516375c1018960e11b81523360048201526000907f0000000000000000000000009eff321ddf8ab509c8c65f7e57289258e9c169b16001600160a01b03169063eb82031290602401606060405180830381865afa1580156111ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d29190611bd3565b509091508190507f00000000000000000000000000000000000000000000000000000000633212d083101561128f5761120b8285611771565b6040516304674a9360e41b8152336004820152602481018290529091507f0000000000000000000000009eff321ddf8ab509c8c65f7e57289258e9c169b16001600160a01b031690634674a93090604401600060405180830381600087803b15801561127657600080fd5b505af115801561128a573d6000803e3d6000fd5b505050505b6040516375c1018960e11b81523360048201526000907f0000000000000000000000002ba86032e601e001aeb0069efff824bcf699ffc56001600160a01b03169063eb82031290602401606060405180830381865afa1580156112f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131a9190611bd3565b509091506000905061132c8287611771565b6040516304674a9360e41b8152336004820152602481018290529091507f0000000000000000000000002ba86032e601e001aeb0069efff824bcf699ffc56001600160a01b031690634674a93090604401600060405180830381600087803b15801561139757600080fd5b505af11580156113ab573d6000803e3d6000fd5b50505050336001600160a01b03167ff943cf10ef4d1e3239f4716ddecdf546e8ba8ab0e41deafd9a71a99936827e45876113e3610e00565b6113eb610f75565b60408051938452602084019290925290820152606081018490526080810186905260a00160405180910390a2505050505050565b336001600160a01b037f000000000000000000000000fb59ce8986943163f14c590755b29db2998f232216146114975760405162461bcd60e51b815260206004820152601d60248201527f4c697175696469747947656e657261746f723a20464f5242494444454e000000604482015260640161020f565b6001600160a01b0381166114f95760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747947656e657261746f723a20494e56414c49445f4144445260448201526245535360e81b606482015260840161020f565b600180546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b336001600160a01b037f000000000000000000000000fb59ce8986943163f14c590755b29db2998f2322161461156b5760405162461bcd60e51b815260040161020f90611b5d565b60015460ff1661158d5760405162461bcd60e51b815260040161020f90611b92565b604080516001808252818301909252600091602080830190803683370190505090507f0000000000000000000000003c8b650257cfb5f272f799f5e2b4e65093a11a05816000815181106115e3576115e3611c1a565b6001600160a01b0392831660209182029290920101526040516331279d3d60e01b81527f0000000000000000000000003786d4419d6b4a902607ceb2bb319bb336735df8909116906331279d3d906116419030908590600401611c30565b600060405180830381600087803b15801561165b57600080fd5b505af115801561166f573d6000803e3d6000fd5b5050505060006116a77f0000000000000000000000003c8b650257cfb5f272f799f5e2b4e65093a11a056001600160a01b0316611784565b6001549091506116ea906001600160a01b037f0000000000000000000000003c8b650257cfb5f272f799f5e2b4e65093a11a0581169162010000900416836117f5565b6040518181527f3d284dc4d07f3beab8dfa65cda1155635b168cf80a24413d3b617e385ac1720390602001610903565b6040516375c1018960e11b81526001600160a01b038281166004830152600091829182917f0000000000000000000000002ba86032e601e001aeb0069efff824bcf699ffc59091169063eb82031290602401610db2565b600061177d8284611c8c565b9392505050565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156117cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ef9190611c01565b92915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916118519190611cb2565b6000604051808303816000865af19150503d806000811461188e576040519150601f19603f3d011682016040523d82523d6000602084013e611893565b606091505b50915091508180156118bd5750805115806118bd5750808060200190518101906118bd9190611ced565b6118f95760405162461bcd60e51b815260206004820152600d60248201526c10b9b0b332aa3930b739b332b960991b604482015260640161020f565b5050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b179052915160009283929087169161195c9190611cb2565b6000604051808303816000865af19150503d8060008114611999576040519150601f19603f3d011682016040523d82523d6000602084013e61199e565b606091505b50915091508180156119c85750805115806119c85750808060200190518101906119c89190611ced565b6118f95760405162461bcd60e51b815260206004820152600c60248201526b2173616665417070726f766560a01b604482015260640161020f565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691611a679190611cb2565b6000604051808303816000865af19150503d8060008114611aa4576040519150601f19603f3d011682016040523d82523d6000602084013e611aa9565b606091505b5091509150818015611ad3575080511580611ad3575080806020019051810190611ad39190611ced565b611b135760405162461bcd60e51b815260206004820152601160248201527021736166655472616e7366657246726f6d60781b604482015260640161020f565b505050505050565b600060208284031215611b2d57600080fd5b81356001600160a01b038116811461177d57600080fd5b600060208284031215611b5657600080fd5b5035919050565b6020808252818101527f4c697175696469747947656e657261746f723a20554e415554484f52495a4544604082015260600190565b60208082526021908201527f4c697175696469747947656e657261746f723a204e4f545f46494e414c495a456040820152601160fa1b606082015260800190565b600080600060608486031215611be857600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215611c1357600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038381168252604060208084018290528451918401829052600092858201929091906060860190855b81811015611c7e578551851683529483019491830191600101611c60565b509098975050505050505050565b60008219821115611cad57634e487b7160e01b600052601160045260246000fd5b500190565b6000825160005b81811015611cd35760208186018101518583015201611cb9565b81811115611ce2576000828501525b509190910192915050565b600060208284031215611cff57600080fd5b8151801515811461177d57600080fdfea26469706673582212207d6cef60d0d96fcf17b52329c8ddaee08a155fc8958e5b516b41fafd9a3b584064736f6c634300080a0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000fb59ce8986943163f14c590755b29db2998f23220000000000000000000000001db2466d9f5e10d7090e7152b68d62703a2245f00000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000003c8b650257cfb5f272f799f5e2b4e65093a11a050000000000000000000000009c12939390052919af3155f41bf4160fd3666a6f00000000000000000000000009236cff45047dbee6b921e00704bed6d6b8cf7e000000000000000000000000201ecb1c439f92afd5df5d399e195f73b01bb0f30000000000000000000000002ba86032e601e001aeb0069efff824bcf699ffc50000000000000000000000009eff321ddf8ab509c8c65f7e57289258e9c169b1000000000000000000000000000000000000000000000000000000006330c150000000000000000000000000000000000000000000000000000000000003f4800000000000000000000000000000000000000000000000000000000000015180

-----Decoded View---------------
Arg [0] : params_ (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]

-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 000000000000000000000000fb59ce8986943163f14c590755b29db2998f2322
Arg [1] : 0000000000000000000000001db2466d9f5e10d7090e7152b68d62703a2245f0
Arg [2] : 0000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607
Arg [3] : 0000000000000000000000003c8b650257cfb5f272f799f5e2b4e65093a11a05
Arg [4] : 0000000000000000000000009c12939390052919af3155f41bf4160fd3666a6f
Arg [5] : 00000000000000000000000009236cff45047dbee6b921e00704bed6d6b8cf7e
Arg [6] : 000000000000000000000000201ecb1c439f92afd5df5d399e195f73b01bb0f3
Arg [7] : 0000000000000000000000002ba86032e601e001aeb0069efff824bcf699ffc5
Arg [8] : 0000000000000000000000009eff321ddf8ab509c8c65f7e57289258e9c169b1
Arg [9] : 000000000000000000000000000000000000000000000000000000006330c150
Arg [10] : 000000000000000000000000000000000000000000000000000000000003f480
Arg [11] : 0000000000000000000000000000000000000000000000000000000000015180


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  ]
[ 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.