ETH Price: $3,507.57 (+2.53%)

Contract

0x71b08f13B3c3aF35aAdEb3949AFEb1ded1016127
 

Overview

ETH Balance

0 ETH

ETH Value

$0.00

Sponsored

Transaction Hash
Method
Block
From
To
Get Pool44739432024-06-07 10:55:0142 days ago1717757701IN
Thruster: ThrusterPoolFactory
0 ETH0.000073653.01016198
Get Pool44739182024-06-07 10:54:1142 days ago1717757651IN
Thruster: ThrusterPoolFactory
0 ETH0.000073653.01000051
Get Pool44739142024-06-07 10:54:0342 days ago1717757643IN
Thruster: ThrusterPoolFactory
0 ETH0.000073653.0100012
Get Pool44738892024-06-07 10:53:1342 days ago1717757593IN
Thruster: ThrusterPoolFactory
0 ETH0.000073653.01001351
Set Manager17246642024-04-04 19:32:23106 days ago1712259143IN
Thruster: ThrusterPoolFactory
0 ETH0.000000020.0010003
Create Pool4109832024-03-05 9:43:01136 days ago1709631781IN
Thruster: ThrusterPoolFactory
0 ETH0.00048040.101
Create Pool2307462024-03-01 5:35:07140 days ago1709271307IN
Thruster: ThrusterPoolFactory
0 ETH0.007134691.50000054
Create Pool2288312024-03-01 4:31:17141 days ago1709267477IN
Thruster: ThrusterPoolFactory
0 ETH0.00713471.50000051
Create Pool2281882024-03-01 4:09:51141 days ago1709266191IN
Thruster: ThrusterPoolFactory
0 ETH0.007134691.50000053
Create Pool2273022024-03-01 3:40:19141 days ago1709264419IN
Thruster: ThrusterPoolFactory
0 ETH0.007134691.5000005
Create Pool2232122024-03-01 1:23:59141 days ago1709256239IN
Thruster: ThrusterPoolFactory
0 ETH0.007134691.5000009
Create Pool2064612024-02-29 16:05:37141 days ago1709222737IN
Thruster: ThrusterPoolFactory
0 ETH0.000004750.0010003
Set Owner1586312024-02-28 13:31:17142 days ago1709127077IN
Thruster: ThrusterPoolFactory
0 ETH0.000000020.00100025
Set Deployer1586282024-02-28 13:31:11142 days ago1709127071IN
Thruster: ThrusterPoolFactory
0 ETH0.000000040.00100025
0x60a060401586212024-02-28 13:30:57142 days ago1709127057IN
 Create: ThrusterPoolFactory
0 ETH0.000000960.00100025

Parent Transaction Hash Block From To
View All Internal Transactions

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ThrusterPoolFactory

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
istanbul EvmVersion
File 1 of 8 : ThrusterPoolFactory.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity =0.7.6;

import "interfaces/IBlastPoints.sol";
import "interfaces/IThrusterPoolFactory.sol";
import "interfaces/IThrusterPoolDeployer.sol";

import "contracts/NoDelegateCall.sol";
import "contracts/ThrusterGas.sol";

/// @title Canonical Thruster CLMM factory
/// @notice Deploys Thruster CLMM pools and manages ownership and control over pool protocol fees
contract ThrusterPoolFactory is IThrusterPoolFactory, NoDelegateCall, ThrusterGas {
    /// @inheritdoc IThrusterPoolFactory
    address public override owner;

    /// Points adminf or Blast points
    address public override pointsAdmin;

    /// @inheritdoc IThrusterPoolFactory
    address public override deployer;

    /// @inheritdoc IThrusterPoolFactory
    mapping(uint24 => int24) public override feeAmountTickSpacing;
    /// @inheritdoc IThrusterPoolFactory
    mapping(address => mapping(address => mapping(uint24 => address))) public override getPool;
    mapping(address => bool) public poolExists;

    address private constant BLAST_POINTS = 0x2536FE9ab3F511540F2f9e2eC2A805005C3Dd800;

    constructor(address _owner, address _pointsAdmin) ThrusterGas(_owner) {
        owner = _owner;
        emit OwnerChanged(address(0), _owner);
        pointsAdmin = _pointsAdmin;
        IBlastPoints(BLAST_POINTS).configurePointsOperator(_pointsAdmin);

        feeAmountTickSpacing[500] = 10;
        emit FeeAmountEnabled(500, 10);
        feeAmountTickSpacing[3000] = 60;
        emit FeeAmountEnabled(3000, 60);
        feeAmountTickSpacing[10000] = 200;
        emit FeeAmountEnabled(10000, 200);
    }

    /// @inheritdoc IThrusterPoolFactory
    function createPool(address tokenA, address tokenB, uint24 fee)
        public
        override
        noDelegateCall
        returns (address pool)
    {
        require(tokenA != tokenB);
        (address token0, address token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0));
        int24 tickSpacing = feeAmountTickSpacing[fee];
        require(tickSpacing != 0);
        require(getPool[token0][token1][fee] == address(0));
        pool = IThrusterPoolDeployer(deployer).deploy(address(this), token0, token1, fee, tickSpacing);
        getPool[token0][token1][fee] = pool;
        // populate mapping in the reverse direction, deliberate choice to avoid the cost of comparing addresses
        getPool[token1][token0][fee] = pool;
        poolExists[pool] = true;
        emit PoolCreated(token0, token1, fee, tickSpacing, pool);
    }

    /// @inheritdoc IThrusterPoolFactory
    function setOwner(address _owner) external override {
        require(msg.sender == owner);
        require(_owner != address(0));
        emit OwnerChanged(owner, _owner);
        owner = _owner;
    }

    function setDeployer(address _deployer) external {
        require(msg.sender == owner && deployer == address(0), "INVALID");
        deployer = _deployer;
    }

    /// @inheritdoc IThrusterPoolFactory
    function enableFeeAmount(uint24 fee, int24 tickSpacing) public override {
        require(msg.sender == owner);
        require(fee < 1000000);
        // tick spacing is capped at 16384 to prevent the situation where tickSpacing is so large that
        // TickBitmap#nextInitializedTickWithinOneWord overflows int24 container from a valid tick
        // 16384 ticks represents a >5x price change with ticks of 1 bips
        require(tickSpacing > 0 && tickSpacing < 16384);
        require(feeAmountTickSpacing[fee] == 0);

        feeAmountTickSpacing[fee] = tickSpacing;
        emit FeeAmountEnabled(fee, tickSpacing);
    }

    function claimDeployerGas(address _recipient) external {
        require(msg.sender == owner);
        IThrusterPoolDeployer(deployer).claimGas(_recipient);
    }

    function emitSwap(
        address sender,
        address recipient,
        int256 amount0,
        int256 amount1,
        uint160 sqrtPriceX96,
        uint128 liquidity,
        int24 tick
    ) external override {
        require(poolExists[msg.sender], "INVALID_POOL");
        emit Swap(msg.sender, sender, recipient, amount0, amount1, sqrtPriceX96, liquidity, tick);
    }

    function updatePointsAdmin(address _pointsAdmin) external {
        require(msg.sender == owner);
        pointsAdmin = _pointsAdmin;
    }
}

File 2 of 8 : IBlastPoints.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.5.0;

interface IBlastPoints {
	function configurePointsOperator(address operator) external;
}

File 3 of 8 : IThrusterPoolFactory.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.5.0;

/// @title The interface for the Thruster CLMM Factory
/// @notice The Thruster CLMM Factory facilitates creation of Thruster CLMM pools and control over the protocol fees
interface IThrusterPoolFactory {
    /// @notice Emitted when the owner of the factory is changed
    /// @param oldOwner The owner before the owner was changed
    /// @param newOwner The owner after the owner was changed
    event OwnerChanged(address indexed oldOwner, address indexed newOwner);

    /// @notice Emitted when a pool is created
    /// @param token0 The first token of the pool by address sort order
    /// @param token1 The second token of the pool by address sort order
    /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip
    /// @param tickSpacing The minimum number of ticks between initialized ticks
    /// @param pool The address of the created pool
    event PoolCreated(
        address indexed token0, address indexed token1, uint24 indexed fee, int24 tickSpacing, address pool
    );

    /// @notice Emitted when a new fee amount is enabled for pool creation via the factory
    /// @param fee The enabled fee, denominated in hundredths of a bip
    /// @param tickSpacing The minimum number of ticks between initialized ticks for pools created with the given fee
    event FeeAmountEnabled(uint24 indexed fee, int24 indexed tickSpacing);

    event Swap(
        address indexed pool,
        address indexed sender,
        address indexed recipient,
        int256 amount0,
        int256 amount1,
        uint160 sqrtPriceX96,
        uint128 liquidity,
        int24 tick
    );

    /// @notice Returns the current owner of the factory
    /// @dev Can be changed by the current owner via setOwner
    /// @return The address of the factory owner
    function owner() external view returns (address);

    /// @notice Returns the current points admin of the factory
    /// @return The address of the points admin
    function pointsAdmin() external view returns (address);

    /// @notice Returns the current deployer of the factory
    /// @return The address of the pool deployer
    function deployer() external view returns (address);

    /// @notice Returns the tick spacing for a given fee amount, if enabled, or 0 if not enabled
    /// @dev A fee amount can never be removed, so this value should be hard coded or cached in the calling context
    /// @param fee The enabled fee, denominated in hundredths of a bip. Returns 0 in case of unenabled fee
    /// @return The tick spacing
    function feeAmountTickSpacing(uint24 fee) external view returns (int24);

    /// @notice Returns the pool address for a given pair of tokens and a fee, or address 0 if it does not exist
    /// @dev tokenA and tokenB may be passed in either token0/token1 or token1/token0 order
    /// @param tokenA The contract address of either token0 or token1
    /// @param tokenB The contract address of the other token
    /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip
    /// @return pool The pool address
    function getPool(address tokenA, address tokenB, uint24 fee) external view returns (address pool);

    /// @notice Creates a pool for the given two tokens and fee
    /// @param tokenA One of the two tokens in the desired pool
    /// @param tokenB The other of the two tokens in the desired pool
    /// @param fee The desired fee for the pool
    /// @dev tokenA and tokenB may be passed in either order: token0/token1 or token1/token0. tickSpacing is retrieved
    /// from the fee. The call will revert if the pool already exists, the fee is invalid, or the token arguments
    /// are invalid.
    /// @return pool The address of the newly created pool
    function createPool(address tokenA, address tokenB, uint24 fee) external returns (address pool);

    /// @notice Updates the owner of the factory
    /// @dev Must be called by the current owner
    /// @param _owner The new owner of the factory
    function setOwner(address _owner) external;

    /// @notice Enables a fee amount with the given tickSpacing
    /// @dev Fee amounts may never be removed once enabled
    /// @param fee The fee amount to enable, denominated in hundredths of a bip (i.e. 1e-6)
    /// @param tickSpacing The spacing between ticks to be enforced for all pools created with the given fee amount
    function enableFeeAmount(uint24 fee, int24 tickSpacing) external;

    function emitSwap(
        address sender,
        address recipient,
        int256 amount0,
        int256 amount1,
        uint160 sqrtPriceX96,
        uint128 liquidity,
        int24 tick
    ) external;
}

File 4 of 8 : IThrusterPoolDeployer.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.5.0;

/// @title An interface for a contract that is capable of deploying Thruster CLMM Pools
/// @notice A contract that constructs a pool must implement this to pass arguments to the pool
/// @dev This is used to avoid having constructor arguments in the pool contract, which results in the init code hash
/// of the pool being constant allowing the CREATE2 address of the pool to be cheaply computed on-chain
interface IThrusterPoolDeployer {
    /// @notice Get the parameters to be used in constructing the pool, set transiently during pool creation.
    /// @dev Called by the pool constructor to fetch the parameters of the pool
    /// Returns factory The factory address
    /// Returns token0 The first token of the pool by address sort order
    /// Returns token1 The second token of the pool by address sort order
    /// Returns fee The fee collected upon every swap in the pool, denominated in hundredths of a bip
    /// Returns tickSpacing The minimum number of ticks between initialized ticks
    function parameters()
        external
        view
        returns (address _factory, address token0, address token1, uint24 fee, int24 tickSpacing);

    /// @dev Deploys a pool with the given parameters by transiently setting the parameters storage slot and then
    /// clearing it after deploying the pool.
    /// @param _factory The factory address
    /// @param token0 The first token of the pool by address sort order
    /// @param token1 The second token of the pool by address sort order
    /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip
    /// @param tickSpacing The spacing between usable ticks
    function deploy(address _factory, address token0, address token1, uint24 fee, int24 tickSpacing)
        external
        returns (address pool);
    
    /// @notice Claim the accumulated BLAST gas for the factory 
    function claimGas(address _recipient) external returns (uint256 amount);

    /// @notice Get the address of the factory that deployed the pool
    function factory() external view returns (address);
}

File 5 of 8 : NoDelegateCall.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity =0.7.6;

/// @title Prevents delegatecall to a contract
/// @notice Base contract that provides a modifier for preventing delegatecall to methods in a child contract
abstract contract NoDelegateCall {
    /// @dev The original address of this contract
    address private immutable original;

    constructor() {
        // Immutables are computed in the init code of the contract, and then inlined into the deployed bytecode.
        // In other words, this variable won't change when it's checked at runtime.
        original = address(this);
    }

    /// @dev Private method is used instead of inlining into modifier because modifiers are copied into each method,
    ///     and the use of immutable means the address bytes are copied in every place the modifier is used.
    function checkNotDelegateCall() private view {
        require(address(this) == original);
    }

    /// @notice Prevents delegatecall into the modified method
    modifier noDelegateCall() {
        checkNotDelegateCall();
        _;
    }
}

File 6 of 8 : ThrusterGas.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity =0.7.6;

import "interfaces/IBlast.sol";
import "interfaces/IThrusterGas.sol";

contract ThrusterGas is IThrusterGas {
    IBlast public constant BLAST = IBlast(0x4300000000000000000000000000000000000002);
    address public manager;

    modifier onlyManager() {
        require(msg.sender == manager, "FORBIDDEN");
        _;
    }

    constructor(address _manager) {
        BLAST.configureClaimableGas();
        manager = _manager;
    }

    function claimGas(address _recipient, uint256 _minClaimRateBips)
        external
        override
        onlyManager
        returns (uint256 amount)
    {
        if (_minClaimRateBips == 0) {
            amount = BLAST.claimMaxGas(address(this), _recipient);
        } else {
            amount = BLAST.claimGasAtMinClaimRate(address(this), _recipient, _minClaimRateBips);
        }
        emit ClaimGas(_recipient, amount);
    }

    function setManager(address _manager) external override onlyManager {
        manager = _manager;
    }
}

File 7 of 8 : IBlast.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.5.0;

interface IBlast {
    enum YieldMode {
        AUTOMATIC,
        VOID,
        CLAIMABLE
    }

    enum GasMode {
        VOID,
        CLAIMABLE
    }

    // configure
    function configureContract(address contractAddress, YieldMode _yield, GasMode gasMode, address governor) external;
    function configure(YieldMode _yield, GasMode gasMode, address governor) external;

    // base configuration options
    function configureClaimableYield() external;
    function configureClaimableYieldOnBehalf(address contractAddress) external;
    function configureAutomaticYield() external;
    function configureAutomaticYieldOnBehalf(address contractAddress) external;
    function configureVoidYield() external;
    function configureVoidYieldOnBehalf(address contractAddress) external;
    function configureClaimableGas() external;
    function configureClaimableGasOnBehalf(address contractAddress) external;
    function configureVoidGas() external;
    function configureVoidGasOnBehalf(address contractAddress) external;
    function configureGovernor(address _governor) external;
    function configureGovernorOnBehalf(address _newGovernor, address contractAddress) external;

    // claim yield
    function claimYield(address contractAddress, address recipientOfYield, uint256 amount) external returns (uint256);
    function claimAllYield(address contractAddress, address recipientOfYield) external returns (uint256);

    // claim gas
    function claimAllGas(address contractAddress, address recipientOfGas) external returns (uint256);
    function claimGasAtMinClaimRate(address contractAddress, address recipientOfGas, uint256 minClaimRateBips)
        external
        returns (uint256);
    function claimMaxGas(address contractAddress, address recipientOfGas) external returns (uint256);
    function claimGas(address contractAddress, address recipientOfGas, uint256 gasToClaim, uint256 gasSecondsToConsume)
        external
        returns (uint256);

    // read functions
    function readClaimableYield(address contractAddress) external view returns (uint256);
    function readYieldConfiguration(address contractAddress) external view returns (uint8);
    function readGasParams(address contractAddress)
        external
        view
        returns (uint256 etherSeconds, uint256 etherBalance, uint256 lastUpdated, GasMode);
}

File 8 of 8 : IThrusterGas.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.5.0;

interface IThrusterGas {
    event ClaimGas(address indexed recipient, uint256 amount);

    function claimGas(address _recipient, uint256 _minClaimRateBips) external returns (uint256 amount);

    function setManager(address _manager) external;
}

Settings
{
  "remappings": [
    "@openzeppelin/=lib/openzeppelin-contracts/",
    "@uniswap/lib/=lib/solidity-lib/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/",
    "solidity-lib/=lib/solidity-lib/contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs"
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "istanbul",
  "viaIR": false,
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_pointsAdmin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimGas","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint24","name":"fee","type":"uint24"},{"indexed":true,"internalType":"int24","name":"tickSpacing","type":"int24"}],"name":"FeeAmountEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":true,"internalType":"uint24","name":"fee","type":"uint24"},{"indexed":false,"internalType":"int24","name":"tickSpacing","type":"int24"},{"indexed":false,"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"int256","name":"amount0","type":"int256"},{"indexed":false,"internalType":"int256","name":"amount1","type":"int256"},{"indexed":false,"internalType":"uint160","name":"sqrtPriceX96","type":"uint160"},{"indexed":false,"internalType":"uint128","name":"liquidity","type":"uint128"},{"indexed":false,"internalType":"int24","name":"tick","type":"int24"}],"name":"Swap","type":"event"},{"inputs":[],"name":"BLAST","outputs":[{"internalType":"contract IBlast","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"claimDeployerGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_minClaimRateBips","type":"uint256"}],"name":"claimGas","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"}],"name":"createPool","outputs":[{"internalType":"address","name":"pool","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"int256","name":"amount0","type":"int256"},{"internalType":"int256","name":"amount1","type":"int256"},{"internalType":"uint160","name":"sqrtPriceX96","type":"uint160"},{"internalType":"uint128","name":"liquidity","type":"uint128"},{"internalType":"int24","name":"tick","type":"int24"}],"name":"emitSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"}],"name":"enableFeeAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint24","name":"","type":"uint24"}],"name":"feeAmountTickSpacing","outputs":[{"internalType":"int24","name":"","type":"int24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint24","name":"","type":"uint24"}],"name":"getPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pointsAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"poolExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_deployer","type":"address"}],"name":"setDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_manager","type":"address"}],"name":"setManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pointsAdmin","type":"address"}],"name":"updatePointsAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a060405234801561001057600080fd5b50604051610f47380380610f478339818101604052604081101561003357600080fd5b5080516020909101513060601b60805260408051634e606c4760e01b81529051839173430000000000000000000000000000000000000291634e606c479160048082019260009290919082900301818387803b15801561009257600080fd5b505af11580156100a6573d6000803e3d6000fd5b5050600080546001600160a01b039485166001600160a01b03199182161782556001805495881695909116851790556040519092507fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c91508290a3600280546001600160a01b0319166001600160a01b038316908117909155604080516336b91f2b60e01b8152600481019290925251732536fe9ab3f511540f2f9e2ec2a805005c3dd800916336b91f2b91602480830192600092919082900301818387803b15801561017257600080fd5b505af1158015610186573d6000803e3d6000fd5b50506101f4600081815260046020527ffb8cf1d12598d1a039dd1d106665851a96aadf67d0d9ed76fceea282119208b7805462ffffff1916600a908117909155604051909450919250600080516020610f2783398151915291a3610bb8600081815260046020527f72dffa9b822156d9cf4b0090fa0b656bcb9cc2b2c60eb6acfc20a34f54b31743805462ffffff1916603c908117909155604051909291600080516020610f2783398151915291a3612710600081815260046020527f8cc740d51daa94ff54f33bd779c2d20149f524c340519b49181be5a08615f829805462ffffff191660c8908117909155604051909291600080516020610f2783398151915291a3505060805160601c610c7e6102a960003980610c1c5250610c7e6000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80638a7c195f116100a2578063a10a0d2c11610071578063a10a0d2c146102f6578063a167129514610350578063bd454fae1461038c578063d0ebdbe714610394578063d5f39488146103ba5761010b565b80638a7c195f146102955780638da5cb5b146102c057806396214735146102c857806397d75776146102ee5761010b565b80631e1c6a07116100de5780631e1c6a07146101f457806322afcccb1461022e5780632a0f358814610267578063481c6a751461028d5761010b565b806305bafd921461011057806313af40351461014e57806313e62e8f146101765780631698ee821461019c575b600080fd5b61013c6004803603604081101561012657600080fd5b506001600160a01b0381351690602001356103c2565b60408051918252519081900360200190f35b6101746004803603602081101561016457600080fd5b50356001600160a01b031661056b565b005b6101746004803603602081101561018c57600080fd5b50356001600160a01b03166105f1565b6101d8600480360360608110156101b257600080fd5b5080356001600160a01b03908116916020810135909116906040013562ffffff16610686565b604080516001600160a01b039092168252519081900360200190f35b61021a6004803603602081101561020a57600080fd5b50356001600160a01b03166106b2565b604080519115158252519081900360200190f35b6102506004803603602081101561024457600080fd5b503562ffffff166106c7565b6040805160029290920b8252519081900360200190f35b6101746004803603602081101561027d57600080fd5b50356001600160a01b03166106dc565b6101d8610715565b610174600480360360408110156102ab57600080fd5b5062ffffff813516906020013560020b610724565b6101d86107e7565b610174600480360360208110156102de57600080fd5b50356001600160a01b03166107f6565b6101d8610876565b610174600480360360e081101561030c57600080fd5b506001600160a01b0381358116916020810135821691604082013591606081013591608082013516906001600160801b0360a0820135169060c0013560020b610881565b6101d86004803603606081101561036657600080fd5b5080356001600160a01b03908116916020810135909116906040013562ffffff16610948565b6101d8610b86565b610174600480360360208110156103aa57600080fd5b50356001600160a01b0316610b95565b6101d8610c02565b600080546001600160a01b0316331461040e576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b8161049b576040805163662aa11d60e01b81523060048201526001600160a01b038516602482015290516002604360981b019163662aa11d9160448083019260209291908290030181600087803b15801561046857600080fd5b505af115801561047c573d6000803e3d6000fd5b505050506040513d602081101561049257600080fd5b50519050610526565b60408051630951888f60e01b81523060048201526001600160a01b03851660248201526044810184905290516002604360981b0191630951888f9160648083019260209291908290030181600087803b1580156104f757600080fd5b505af115801561050b573d6000803e3d6000fd5b505050506040513d602081101561052157600080fd5b505190505b6040805182815290516001600160a01b038516917f5eadc4013530f38d8b7709b47915d0cef30eee941dad69669a5b45e0686879fa919081900360200190a292915050565b6001546001600160a01b0316331461058257600080fd5b6001600160a01b03811661059557600080fd5b6001546040516001600160a01b038084169216907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316331461060857600080fd5b60035460408051635b19fe5d60e11b81526001600160a01b0384811660048301529151919092169163b633fcba9160248083019260209291908290030181600087803b15801561065757600080fd5b505af115801561066b573d6000803e3d6000fd5b505050506040513d602081101561068157600080fd5b505050565b60056020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b60066020526000908152604090205460ff1681565b60046020526000908152604090205460020b81565b6001546001600160a01b031633146106f357600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031681565b6001546001600160a01b0316331461073b57600080fd5b620f42408262ffffff161061074f57600080fd5b60008160020b13801561076657506140008160020b125b61076f57600080fd5b62ffffff8216600090815260046020526040902054600290810b900b1561079557600080fd5b62ffffff828116600081815260046020526040808220805462ffffff1916600287900b958616179055517fc66a3fdf07232cdd185febcc6579d408c241b47ae2f9907d84be655141eeaecc9190a35050565b6001546001600160a01b031681565b6001546001600160a01b03163314801561081957506003546001600160a01b0316155b610854576040805162461bcd60e51b81526020600482015260076024820152661253959053125160ca1b604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6002604360981b0181565b3360009081526006602052604090205460ff166108d4576040805162461bcd60e51b815260206004820152600c60248201526b1253959053125117d413d3d360a21b604482015290519081900360640190fd5b60408051868152602081018690526001600160a01b03858116828401526001600160801b0385166060830152600284900b60808301529151828916928a169133917fcdbb3606a8844e31da62a3d26550f61be1e020b98631f8163496c703a063053f9181900360a00190a450505050505050565b6000610952610c11565b826001600160a01b0316846001600160a01b0316141561097157600080fd5b600080846001600160a01b0316866001600160a01b031610610994578486610997565b85855b90925090506001600160a01b0382166109af57600080fd5b62ffffff8416600090815260046020526040902054600290810b9081900b6109d657600080fd5b6001600160a01b0383811660009081526005602090815260408083208685168452825280832062ffffff8a1684529091529020541615610a1557600080fd5b6003546040805163fad5359f60e01b81523060048201526001600160a01b038681166024830152858116604483015262ffffff89166064830152600285900b60848301529151919092169163fad5359f9160a48083019260209291908290030181600087803b158015610a8757600080fd5b505af1158015610a9b573d6000803e3d6000fd5b505050506040513d6020811015610ab157600080fd5b50516001600160a01b03848116600081815260056020818152604080842089871680865290835281852062ffffff8e1680875290845282862080546001600160a01b0319908116998b16998a1790915582875294845282862087875284528286208187528452828620805490951688179094558685526006835293819020805460ff191660011790558051600289900b8152918201959095528451959950909491937f783cca1c0412dd0d695e784568c96da2e9c22ff989357a2e8b1d9b2b4e6b711892918290030190a45050509392505050565b6002546001600160a01b031681565b6000546001600160a01b03163314610be0576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031681565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c4657600080fd5b56fea26469706673582212209e1d19a6c9a8ffbeac0a6d3962b941dd7824ca8ee7158afab3ede47913a4de4b64736f6c63430007060033c66a3fdf07232cdd185febcc6579d408c241b47ae2f9907d84be655141eeaecc000000000000000000000000d6b64e44aae0938118ad0dae251b859d85351c22000000000000000000000000d6b64e44aae0938118ad0dae251b859d85351c22

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061010b5760003560e01c80638a7c195f116100a2578063a10a0d2c11610071578063a10a0d2c146102f6578063a167129514610350578063bd454fae1461038c578063d0ebdbe714610394578063d5f39488146103ba5761010b565b80638a7c195f146102955780638da5cb5b146102c057806396214735146102c857806397d75776146102ee5761010b565b80631e1c6a07116100de5780631e1c6a07146101f457806322afcccb1461022e5780632a0f358814610267578063481c6a751461028d5761010b565b806305bafd921461011057806313af40351461014e57806313e62e8f146101765780631698ee821461019c575b600080fd5b61013c6004803603604081101561012657600080fd5b506001600160a01b0381351690602001356103c2565b60408051918252519081900360200190f35b6101746004803603602081101561016457600080fd5b50356001600160a01b031661056b565b005b6101746004803603602081101561018c57600080fd5b50356001600160a01b03166105f1565b6101d8600480360360608110156101b257600080fd5b5080356001600160a01b03908116916020810135909116906040013562ffffff16610686565b604080516001600160a01b039092168252519081900360200190f35b61021a6004803603602081101561020a57600080fd5b50356001600160a01b03166106b2565b604080519115158252519081900360200190f35b6102506004803603602081101561024457600080fd5b503562ffffff166106c7565b6040805160029290920b8252519081900360200190f35b6101746004803603602081101561027d57600080fd5b50356001600160a01b03166106dc565b6101d8610715565b610174600480360360408110156102ab57600080fd5b5062ffffff813516906020013560020b610724565b6101d86107e7565b610174600480360360208110156102de57600080fd5b50356001600160a01b03166107f6565b6101d8610876565b610174600480360360e081101561030c57600080fd5b506001600160a01b0381358116916020810135821691604082013591606081013591608082013516906001600160801b0360a0820135169060c0013560020b610881565b6101d86004803603606081101561036657600080fd5b5080356001600160a01b03908116916020810135909116906040013562ffffff16610948565b6101d8610b86565b610174600480360360208110156103aa57600080fd5b50356001600160a01b0316610b95565b6101d8610c02565b600080546001600160a01b0316331461040e576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b8161049b576040805163662aa11d60e01b81523060048201526001600160a01b038516602482015290516002604360981b019163662aa11d9160448083019260209291908290030181600087803b15801561046857600080fd5b505af115801561047c573d6000803e3d6000fd5b505050506040513d602081101561049257600080fd5b50519050610526565b60408051630951888f60e01b81523060048201526001600160a01b03851660248201526044810184905290516002604360981b0191630951888f9160648083019260209291908290030181600087803b1580156104f757600080fd5b505af115801561050b573d6000803e3d6000fd5b505050506040513d602081101561052157600080fd5b505190505b6040805182815290516001600160a01b038516917f5eadc4013530f38d8b7709b47915d0cef30eee941dad69669a5b45e0686879fa919081900360200190a292915050565b6001546001600160a01b0316331461058257600080fd5b6001600160a01b03811661059557600080fd5b6001546040516001600160a01b038084169216907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316331461060857600080fd5b60035460408051635b19fe5d60e11b81526001600160a01b0384811660048301529151919092169163b633fcba9160248083019260209291908290030181600087803b15801561065757600080fd5b505af115801561066b573d6000803e3d6000fd5b505050506040513d602081101561068157600080fd5b505050565b60056020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b60066020526000908152604090205460ff1681565b60046020526000908152604090205460020b81565b6001546001600160a01b031633146106f357600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031681565b6001546001600160a01b0316331461073b57600080fd5b620f42408262ffffff161061074f57600080fd5b60008160020b13801561076657506140008160020b125b61076f57600080fd5b62ffffff8216600090815260046020526040902054600290810b900b1561079557600080fd5b62ffffff828116600081815260046020526040808220805462ffffff1916600287900b958616179055517fc66a3fdf07232cdd185febcc6579d408c241b47ae2f9907d84be655141eeaecc9190a35050565b6001546001600160a01b031681565b6001546001600160a01b03163314801561081957506003546001600160a01b0316155b610854576040805162461bcd60e51b81526020600482015260076024820152661253959053125160ca1b604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6002604360981b0181565b3360009081526006602052604090205460ff166108d4576040805162461bcd60e51b815260206004820152600c60248201526b1253959053125117d413d3d360a21b604482015290519081900360640190fd5b60408051868152602081018690526001600160a01b03858116828401526001600160801b0385166060830152600284900b60808301529151828916928a169133917fcdbb3606a8844e31da62a3d26550f61be1e020b98631f8163496c703a063053f9181900360a00190a450505050505050565b6000610952610c11565b826001600160a01b0316846001600160a01b0316141561097157600080fd5b600080846001600160a01b0316866001600160a01b031610610994578486610997565b85855b90925090506001600160a01b0382166109af57600080fd5b62ffffff8416600090815260046020526040902054600290810b9081900b6109d657600080fd5b6001600160a01b0383811660009081526005602090815260408083208685168452825280832062ffffff8a1684529091529020541615610a1557600080fd5b6003546040805163fad5359f60e01b81523060048201526001600160a01b038681166024830152858116604483015262ffffff89166064830152600285900b60848301529151919092169163fad5359f9160a48083019260209291908290030181600087803b158015610a8757600080fd5b505af1158015610a9b573d6000803e3d6000fd5b505050506040513d6020811015610ab157600080fd5b50516001600160a01b03848116600081815260056020818152604080842089871680865290835281852062ffffff8e1680875290845282862080546001600160a01b0319908116998b16998a1790915582875294845282862087875284528286208187528452828620805490951688179094558685526006835293819020805460ff191660011790558051600289900b8152918201959095528451959950909491937f783cca1c0412dd0d695e784568c96da2e9c22ff989357a2e8b1d9b2b4e6b711892918290030190a45050509392505050565b6002546001600160a01b031681565b6000546001600160a01b03163314610be0576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031681565b306001600160a01b037f00000000000000000000000071b08f13b3c3af35aadeb3949afeb1ded10161271614610c4657600080fd5b56fea26469706673582212209e1d19a6c9a8ffbeac0a6d3962b941dd7824ca8ee7158afab3ede47913a4de4b64736f6c63430007060033

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

000000000000000000000000d6b64e44aae0938118ad0dae251b859d85351c22000000000000000000000000d6b64e44aae0938118ad0dae251b859d85351c22

-----Decoded View---------------
Arg [0] : _owner (address): 0xd6b64E44aae0938118aD0dAE251b859D85351c22
Arg [1] : _pointsAdmin (address): 0xd6b64E44aae0938118aD0dAE251b859D85351c22

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000d6b64e44aae0938118ad0dae251b859d85351c22
Arg [1] : 000000000000000000000000d6b64e44aae0938118ad0dae251b859d85351c22


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.