FRAX Price: $0.83 (-18.15%)

Contract

0xDFef5B38C1c080A4a82431b687989759cB207d24

Overview

FRAX Balance | FXTL Balance

0 FRAX | 1,238 FXTL

FRAX Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To

There are no matching entries

1 Internal Transaction and 1 Token Transfer found.

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To
226395702025-07-09 19:37:31200 days ago1752089851  Contract Creation0 FRAX

Cross-Chain Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xe50A3550...B50DD6E08
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
TokenManagerDeployer

Compiler Version
v0.8.27+commit.40a35a09

Optimization Enabled:
Yes with 1000 runs

Other Settings:
london EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { Create3Fixed } from './Create3Fixed.sol';

import { ITokenManagerDeployer } from '../interfaces/ITokenManagerDeployer.sol';

import { TokenManagerProxy } from '../proxies/TokenManagerProxy.sol';

/**
 * @title TokenManagerDeployer
 * @notice This contract is used to deploy new instances of the TokenManagerProxy contract.
 */
contract TokenManagerDeployer is ITokenManagerDeployer, Create3Fixed {
    /**
     * @notice Deploys a new instance of the TokenManagerProxy contract
     * @param tokenId The unique identifier for the token
     * @param implementationType Token manager implementation type
     * @param params Additional parameters used in the setup of the token manager
     * @return tokenManager The address of the deployed tokenManager
     */
    // slither-disable-next-line locked-ether
    function deployTokenManager(
        bytes32 tokenId,
        uint256 implementationType,
        bytes calldata params
    ) external payable returns (address tokenManager) {
        bytes memory args = abi.encode(address(this), implementationType, tokenId, params);
        // slither-disable-next-line too-many-digits
        bytes memory bytecode = abi.encodePacked(type(TokenManagerProxy).creationCode, args);

        tokenManager = _create3(bytecode, tokenId);

        if (tokenManager.code.length == 0) revert TokenManagerDeploymentFailed();
    }
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title CreateDeploy Contract
 * @notice This contract deploys new contracts using the `CREATE` opcode and is used as part of
 * the `CREATE3` deployment method.
 */
contract CreateDeploy {
    /**
     * @dev Deploys a new contract with the specified bytecode using the `CREATE` opcode.
     * @param bytecode The bytecode of the contract to be deployed
     */
    // slither-disable-next-line locked-ether
    function deploy(bytes memory bytecode) external payable {
        assembly {
            if iszero(create(0, add(bytecode, 32), mload(bytecode))) {
                revert(0, 0)
            }
        }
    }
}

File 3 of 13 : IDeploy.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title IDeploy Interface
 * @notice This interface defines the errors for a contract that is responsible for deploying new contracts.
 */
interface IDeploy {
    error EmptyBytecode();
    error AlreadyDeployed();
    error DeployFailed();
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

// General interface for upgradable contracts
interface IProxy {
    error InvalidOwner();
    error InvalidImplementation();
    error SetupFailed();
    error NotOwner();
    error AlreadyInitialized();

    function implementation() external view returns (address);

    function setup(bytes calldata setupParams) external;
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library ContractAddress {
    function isContract(address contractAddress) internal view returns (bool) {
        bytes32 existingCodeHash = contractAddress.codehash;

        // https://eips.ethereum.org/EIPS/eip-1052
        // keccak256('') == 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470
        return
            existingCodeHash != bytes32(0) &&
            existingCodeHash != 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
    }
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { IProxy } from '../interfaces/IProxy.sol';

/**
 * @title BaseProxy Contract
 * @dev This abstract contract implements a basic proxy that stores an implementation address. Fallback function
 * calls are delegated to the implementation. This contract is meant to be inherited by other proxy contracts.
 */
abstract contract BaseProxy is IProxy {
    // bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)
    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
    // keccak256('owner')
    bytes32 internal constant _OWNER_SLOT = 0x02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c0;

    /**
     * @dev Returns the current implementation address.
     * @return implementation_ The address of the current implementation contract
     */
    function implementation() public view virtual returns (address implementation_) {
        assembly {
            implementation_ := sload(_IMPLEMENTATION_SLOT)
        }
    }

    /**
     * @dev Shadows the setup function of the implementation contract so it can't be called directly via the proxy.
     * @param params The setup parameters for the implementation contract.
     */
    function setup(bytes calldata params) external {}

    /**
     * @dev Returns the contract ID. It can be used as a check during upgrades. Meant to be implemented in derived contracts.
     * @return bytes32 The contract ID
     */
    function contractId() internal pure virtual returns (bytes32);

    /**
     * @dev Fallback function. Delegates the call to the current implementation contract.
     */
    fallback() external payable virtual {
        address implementation_ = implementation();
        assembly {
            calldatacopy(0, 0, calldatasize())

            let result := delegatecall(gas(), implementation_, 0, calldatasize(), 0, 0)
            returndatacopy(0, 0, returndatasize())

            switch result
            case 0 {
                revert(0, returndatasize())
            }
            default {
                return(0, returndatasize())
            }
        }
    }

    /**
     * @dev Payable fallback function. Can be overridden in derived contracts.
     */
    receive() external payable virtual {}
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title IBaseTokenManager
 * @notice This contract is defines the base token manager interface implemented by all token managers.
 */
interface IBaseTokenManager {
    /**
     * @notice A function that returns the token id.
     */
    function interchainTokenId() external view returns (bytes32);

    /**
     * @notice A function that should return the address of the token.
     * Must be overridden in the inheriting contract.
     * @return address address of the token.
     */
    function tokenAddress() external view returns (address);

    /**
     * @notice A function that should return the token address from the init params.
     */
    function getTokenAddressFromParams(bytes calldata params) external pure returns (address);
}

File 8 of 13 : ITokenManagerDeployer.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title ITokenManagerDeployer Interface
 * @notice This interface is used to deploy new instances of the TokenManagerProxy contract.
 */
interface ITokenManagerDeployer {
    error TokenManagerDeploymentFailed();

    /**
     * @notice Deploys a new instance of the TokenManagerProxy contract.
     * @param tokenId The token ID.
     * @param implementationType Token manager implementation type.
     * @param params Additional parameters used in the setup of the token manager.
     * @return tokenManager Address of the deployed tokenManager.
     */
    function deployTokenManager(
        bytes32 tokenId,
        uint256 implementationType,
        bytes calldata params
    ) external payable returns (address tokenManager);
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title ITokenManagerImplementation Interface
 * @notice Interface for returning the token manager implementation type.
 */
interface ITokenManagerImplementation {
    /**
     * @notice Returns the implementation address for a given token manager type.
     * @param tokenManagerType The type of token manager.
     * @return tokenManagerAddress_ The address of the token manager implementation.
     */
    function tokenManagerImplementation(uint256 tokenManagerType) external view returns (address tokenManagerAddress_);
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { IProxy } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IProxy.sol';

/**
 * @title ITokenManagerProxy Interface
 * @notice This interface is for a proxy for token manager contracts.
 */
interface ITokenManagerProxy is IProxy {
    error ZeroAddress();

    /**
     * @notice Returns implementation type of this token manager.
     * @return uint256 The implementation type of this token manager.
     */
    function implementationType() external view returns (uint256);

    /**
     * @notice Returns the interchain token ID of the token manager.
     * @return bytes32 The interchain token ID of the token manager.
     */
    function interchainTokenId() external view returns (bytes32);

    /**
     * @notice Returns token address that this token manager manages.
     * @return address The token address.
     */
    function tokenAddress() external view returns (address);

    /**
     * @notice Returns implementation type and token address.
     * @return uint256 The implementation type.
     * @return address The token address.
     */
    function getImplementationTypeAndTokenAddress() external view returns (uint256, address);
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { IProxy } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IProxy.sol';
import { BaseProxy } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/upgradable/BaseProxy.sol';

import { IBaseTokenManager } from '../interfaces/IBaseTokenManager.sol';
import { ITokenManagerProxy } from '../interfaces/ITokenManagerProxy.sol';
import { ITokenManagerImplementation } from '../interfaces/ITokenManagerImplementation.sol';

/**
 * @title TokenManagerProxy
 * @notice This contract is a proxy for token manager contracts.
 * @dev This contract implements BaseProxy and ITokenManagerProxy.
 */
contract TokenManagerProxy is BaseProxy, ITokenManagerProxy {
    bytes32 private constant CONTRACT_ID = keccak256('token-manager');

    address public immutable interchainTokenService;
    uint256 public immutable implementationType;
    bytes32 public immutable interchainTokenId;
    address public immutable tokenAddress;

    /**
     * @notice Constructs the TokenManagerProxy contract.
     * @param interchainTokenService_ The address of the interchain token service.
     * @param implementationType_ The token manager type.
     * @param tokenId The identifier for the token.
     * @param params The initialization parameters for the token manager contract.
     */
    constructor(address interchainTokenService_, uint256 implementationType_, bytes32 tokenId, bytes memory params) {
        if (interchainTokenService_ == address(0)) revert ZeroAddress();

        interchainTokenService = interchainTokenService_;
        implementationType = implementationType_;
        interchainTokenId = tokenId;

        address implementation_ = _tokenManagerImplementation(interchainTokenService_, implementationType_);
        if (implementation_ == address(0)) revert InvalidImplementation();

        (bool success, ) = implementation_.delegatecall(abi.encodeWithSelector(IProxy.setup.selector, params));
        if (!success) revert SetupFailed();

        tokenAddress = IBaseTokenManager(implementation_).getTokenAddressFromParams(params);
    }

    /**
     * @notice Getter for the contract id.
     * @return bytes32 The contract id.
     */
    function contractId() internal pure override returns (bytes32) {
        return CONTRACT_ID;
    }

    /**
     * @notice Returns implementation type and token address.
     * @return implementationType_ The implementation type.
     * @return tokenAddress_ The token address.
     */
    function getImplementationTypeAndTokenAddress() external view returns (uint256 implementationType_, address tokenAddress_) {
        implementationType_ = implementationType;
        tokenAddress_ = tokenAddress;
    }

    /**
     * @notice Returns the address of the current implementation.
     * @return implementation_ The address of the current implementation.
     */
    function implementation() public view override(BaseProxy, IProxy) returns (address implementation_) {
        implementation_ = _tokenManagerImplementation(interchainTokenService, implementationType);
    }

    /**
     * @notice Returns the implementation address from the interchain token service for the provided type.
     * @param interchainTokenService_ The address of the interchain token service.
     * @param implementationType_ The token manager type.
     * @return implementation_ The address of the implementation.
     */
    function _tokenManagerImplementation(
        address interchainTokenService_,
        uint256 implementationType_
    ) internal view returns (address implementation_) {
        implementation_ = ITokenManagerImplementation(interchainTokenService_).tokenManagerImplementation(implementationType_);
    }
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title Create3AddressFixed contract
 * @notice This contract can be used to predict the deterministic deployment address of a contract deployed with the `CREATE3` technique.
 * It is equivalent to the Create3Address found in axelar-gmp-sdk-solidity repo but uses a fixed bytecode for CreateDeploy,
 * which allows changing compilation options (like number of runs) without affecting the future deployment addresses.
 */
contract Create3AddressFixed {
    // slither-disable-next-line too-many-digits
    bytes internal constant CREATE_DEPLOY_BYTECODE =
        hex'608060405234801561001057600080fd5b50610162806100206000396000f3fe60806040526004361061001d5760003560e01c806277436014610022575b600080fd5b61003561003036600461007b565b610037565b005b8051602082016000f061004957600080fd5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561008d57600080fd5b813567ffffffffffffffff808211156100a557600080fd5b818401915084601f8301126100b957600080fd5b8135818111156100cb576100cb61004c565b604051601f8201601f19908116603f011681019083821181831017156100f3576100f361004c565b8160405282815287602084870101111561010c57600080fd5b82602086016020830137600092810160200192909252509594505050505056fea264697066735822122094780ce55d28f1d568f4e0ab1b9dc230b96e952b73d2e06456fbff2289fa27f464736f6c63430008150033';
    bytes32 internal constant CREATE_DEPLOY_BYTECODE_HASH = keccak256(CREATE_DEPLOY_BYTECODE);

    /**
     * @notice Compute the deployed address that will result from the `CREATE3` method.
     * @param deploySalt A salt to influence the contract address
     * @return deployed The deterministic contract address if it was deployed
     */
    function _create3Address(bytes32 deploySalt) internal view returns (address deployed) {
        address deployer = address(
            uint160(uint256(keccak256(abi.encodePacked(hex'ff', address(this), deploySalt, CREATE_DEPLOY_BYTECODE_HASH))))
        );

        deployed = address(uint160(uint256(keccak256(abi.encodePacked(hex'd6_94', deployer, hex'01')))));
    }
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { IDeploy } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IDeploy.sol';
import { ContractAddress } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/libs/ContractAddress.sol';
import { CreateDeploy } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/deploy/CreateDeploy.sol';
import { Create3AddressFixed } from './Create3AddressFixed.sol';

/**
 * @title Create3Fixed contract
 * @notice This contract can be used to deploy a contract with a deterministic address that depends only on
 * the deployer address and deployment salt, not the contract bytecode and constructor parameters.
 * It uses a fixed bytecode to allow changing the compilation settings without affecting the deployment address in the future.
 */
contract Create3Fixed is Create3AddressFixed, IDeploy {
    using ContractAddress for address;

    /**
     * @notice Deploys a new contract using the `CREATE3` method.
     * @dev This function first deploys the CreateDeploy contract using
     * the `CREATE2` opcode and then utilizes the CreateDeploy to deploy the
     * new contract with the `CREATE` opcode.
     * @param bytecode The bytecode of the contract to be deployed
     * @param deploySalt A salt to influence the contract address
     * @return deployed The address of the deployed contract
     */
    function _create3(bytes memory bytecode, bytes32 deploySalt) internal returns (address deployed) {
        deployed = _create3Address(deploySalt);

        if (bytecode.length == 0) revert EmptyBytecode();
        if (deployed.isContract()) revert AlreadyDeployed();

        // Deploy using create2
        CreateDeploy createDeploy;
        bytes memory createDeployBytecode_ = CREATE_DEPLOY_BYTECODE;
        uint256 length = createDeployBytecode_.length;
        assembly {
            createDeploy := create2(0, add(createDeployBytecode_, 0x20), length, deploySalt)
        }

        if (address(createDeploy) == address(0)) revert DeployFailed();
        // Deploy using create
        createDeploy.deploy(bytecode);
    }
}

Settings
{
  "evmVersion": "london",
  "optimizer": {
    "enabled": true,
    "runs": 1000,
    "details": {
      "peephole": true,
      "inliner": true,
      "jumpdestRemover": true,
      "orderLiterals": true,
      "deduplicate": true,
      "cse": true,
      "constantOptimizer": true,
      "yul": true,
      "yulDetails": {
        "stackAllocation": true
      }
    }
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"name":"AlreadyDeployed","type":"error"},{"inputs":[],"name":"DeployFailed","type":"error"},{"inputs":[],"name":"EmptyBytecode","type":"error"},{"inputs":[],"name":"TokenManagerDeploymentFailed","type":"error"},{"inputs":[{"internalType":"bytes32","name":"tokenId","type":"bytes32"},{"internalType":"uint256","name":"implementationType","type":"uint256"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"deployTokenManager","outputs":[{"internalType":"address","name":"tokenManager","type":"address"}],"stateMutability":"payable","type":"function"}]

0x6080604052348015600f57600080fd5b50610f8c8061001f6000396000f3fe60806040526004361061001e5760003560e01c80636519d04b14610023575b600080fd5b610036610031366004610409565b610052565b6040516001600160a01b03909116815260200160405180910390f35b600080308587868660405160200161006e95949392919061048c565b6040516020818303038152906040529050600060405180602001610091906103fc565b601f1982820381018352601f9091011660408190526100b5919084906020016104fd565b60405160208183030381529060405290506100d08188610120565b9250826001600160a01b03163b600003610116576040517f22c7871800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050949350505050565b600061012b8261029e565b90508251600003610168576040517f21744a5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61017a816001600160a01b03166103b9565b156101b1576040517fa6ef0ba100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080604051806101c001604052806101828152602001610dd5610182913980519091508481602084016000f592506001600160a01b038316610220576040517fb4f5411100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517e7743600000000000000000000000000000000000000000000000000000000081526001600160a01b03841690627743609061026390899060040161052c565b600060405180830381600087803b15801561027d57600080fd5b505af1158015610291573d6000803e3d6000fd5b5050505050505092915050565b6000803083604051806101c001604052806101828152602001610dd561018291398051602091820120604051610321949392017fff00000000000000000000000000000000000000000000000000000000000000815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b60408051601f1981840301815282825280516020918201207fd6940000000000000000000000000000000000000000000000000000000000008285015260601b6bffffffffffffffffffffffff191660228401527f0100000000000000000000000000000000000000000000000000000000000000603684015281516017818503018152603790930190915281519101209392505050565b60006001600160a01b0382163f80158015906103f557507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708114155b9392505050565b6108758061056083390190565b6000806000806060858703121561041f57600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561044457600080fd5b8501601f8101871361045557600080fd5b803567ffffffffffffffff81111561046c57600080fd5b87602082840101111561047e57600080fd5b949793965060200194505050565b6001600160a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b60005b838110156104f45781810151838201526020016104dc565b50506000910152565b6000835161050f8184602088016104d9565b8351908301906105238183602088016104d9565b01949350505050565b602081526000825180602084015261054b8160408501602087016104d9565b601f01601f1916919091016040019291505056fe61010060405234801561001157600080fd5b50604051610875380380610875833981016040819052610030916102b6565b6001600160a01b0384166100575760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03841660805260a083905260c0829052600061007a85856101ed565b90506001600160a01b0381166100a35760405163340aafcd60e11b815260040160405180910390fd5b6000816001600160a01b0316639ded06df60e01b846040516024016100c8919061038e565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161010691906103c1565b600060405180830381855af49150503d8060008114610141576040519150601f19603f3d011682016040523d82523d6000602084013e610146565b606091505b5050905080610168576040516397905dfb60e01b815260040160405180910390fd5b60405163f5983e8360e01b81526001600160a01b0383169063f5983e839061019490869060040161038e565b602060405180830381865afa1580156101b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d591906103dd565b6001600160a01b031660e052506103f8945050505050565b604051633f0a8fd360e11b8152600481018290526000906001600160a01b03841690637e151fa690602401602060405180830381865afa158015610235573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025991906103dd565b9392505050565b80516001600160a01b038116811461027757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102ad578181015183820152602001610295565b50506000910152565b600080600080608085870312156102cc57600080fd5b6102d585610260565b60208601516040870151606088015192965090945092506001600160401b0381111561030057600080fd5b8501601f8101871361031157600080fd5b80516001600160401b0381111561032a5761032a61027c565b604051601f8201601f19908116603f011681016001600160401b03811182821017156103585761035861027c565b60405281815282820160200189101561037057600080fd5b610381826020830160208601610292565b9598949750929550505050565b60208152600082518060208401526103ad816040850160208701610292565b601f01601f19169190910160400192915050565b600082516103d3818460208701610292565b9190910192915050565b6000602082840312156103ef57600080fd5b61025982610260565b60805160a05160c05160e05161042961044c600039600081816101a801526102340152600061011d01526000818161015f015281816101fc015261028701526000818160bf015261026601526104296000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b146101815780639d76ea58146101965780639ded06df146101ca578063d4ae3c42146101e95761007b565b806309c6bed9146100ad578063129d81881461010b5780634fdf7cb51461014d5761007b565b3661007b57005b600061008561025f565b90503660008037600080366000845af43d6000803e8080156100a6573d6000f35b3d6000fd5b005b3480156100b957600080fd5b506100e17f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561011757600080fd5b5061013f7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610102565b34801561015957600080fd5b5061013f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561018d57600080fd5b506100e161025f565b3480156101a257600080fd5b506100e17f000000000000000000000000000000000000000000000000000000000000000081565b3480156101d657600080fd5b506100ab6101e5366004610349565b5050565b3480156101f557600080fd5b50604080517f0000000000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016602082015201610102565b60006102ab7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006102b0565b905090565b6040517f7e151fa60000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff841690637e151fa690602401602060405180830381865afa15801561031e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034291906103bd565b9392505050565b6000806020838503121561035c57600080fd5b823567ffffffffffffffff81111561037357600080fd5b8301601f8101851361038457600080fd5b803567ffffffffffffffff81111561039b57600080fd5b8560208284010111156103ad57600080fd5b6020919091019590945092505050565b6000602082840312156103cf57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461034257600080fdfea2646970667358221220fe36e72a99474f08534df4ada0b102f7c198df65bf7daafff03a225fb00724c964736f6c634300081b0033608060405234801561001057600080fd5b50610162806100206000396000f3fe60806040526004361061001d5760003560e01c806277436014610022575b600080fd5b61003561003036600461007b565b610037565b005b8051602082016000f061004957600080fd5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561008d57600080fd5b813567ffffffffffffffff808211156100a557600080fd5b818401915084601f8301126100b957600080fd5b8135818111156100cb576100cb61004c565b604051601f8201601f19908116603f011681019083821181831017156100f3576100f361004c565b8160405282815287602084870101111561010c57600080fd5b82602086016020830137600092810160200192909252509594505050505056fea264697066735822122094780ce55d28f1d568f4e0ab1b9dc230b96e952b73d2e06456fbff2289fa27f464736f6c63430008150033a264697066735822122019fa5ae3e0948f19e633366cdadd4d2885054c3175f3f1471b392466794b5d6064736f6c634300081b0033

Deployed Bytecode

0x60806040526004361061001e5760003560e01c80636519d04b14610023575b600080fd5b610036610031366004610409565b610052565b6040516001600160a01b03909116815260200160405180910390f35b600080308587868660405160200161006e95949392919061048c565b6040516020818303038152906040529050600060405180602001610091906103fc565b601f1982820381018352601f9091011660408190526100b5919084906020016104fd565b60405160208183030381529060405290506100d08188610120565b9250826001600160a01b03163b600003610116576040517f22c7871800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050949350505050565b600061012b8261029e565b90508251600003610168576040517f21744a5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61017a816001600160a01b03166103b9565b156101b1576040517fa6ef0ba100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080604051806101c001604052806101828152602001610dd5610182913980519091508481602084016000f592506001600160a01b038316610220576040517fb4f5411100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517e7743600000000000000000000000000000000000000000000000000000000081526001600160a01b03841690627743609061026390899060040161052c565b600060405180830381600087803b15801561027d57600080fd5b505af1158015610291573d6000803e3d6000fd5b5050505050505092915050565b6000803083604051806101c001604052806101828152602001610dd561018291398051602091820120604051610321949392017fff00000000000000000000000000000000000000000000000000000000000000815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b60408051601f1981840301815282825280516020918201207fd6940000000000000000000000000000000000000000000000000000000000008285015260601b6bffffffffffffffffffffffff191660228401527f0100000000000000000000000000000000000000000000000000000000000000603684015281516017818503018152603790930190915281519101209392505050565b60006001600160a01b0382163f80158015906103f557507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708114155b9392505050565b6108758061056083390190565b6000806000806060858703121561041f57600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561044457600080fd5b8501601f8101871361045557600080fd5b803567ffffffffffffffff81111561046c57600080fd5b87602082840101111561047e57600080fd5b949793965060200194505050565b6001600160a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b60005b838110156104f45781810151838201526020016104dc565b50506000910152565b6000835161050f8184602088016104d9565b8351908301906105238183602088016104d9565b01949350505050565b602081526000825180602084015261054b8160408501602087016104d9565b601f01601f1916919091016040019291505056fe61010060405234801561001157600080fd5b50604051610875380380610875833981016040819052610030916102b6565b6001600160a01b0384166100575760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03841660805260a083905260c0829052600061007a85856101ed565b90506001600160a01b0381166100a35760405163340aafcd60e11b815260040160405180910390fd5b6000816001600160a01b0316639ded06df60e01b846040516024016100c8919061038e565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161010691906103c1565b600060405180830381855af49150503d8060008114610141576040519150601f19603f3d011682016040523d82523d6000602084013e610146565b606091505b5050905080610168576040516397905dfb60e01b815260040160405180910390fd5b60405163f5983e8360e01b81526001600160a01b0383169063f5983e839061019490869060040161038e565b602060405180830381865afa1580156101b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d591906103dd565b6001600160a01b031660e052506103f8945050505050565b604051633f0a8fd360e11b8152600481018290526000906001600160a01b03841690637e151fa690602401602060405180830381865afa158015610235573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025991906103dd565b9392505050565b80516001600160a01b038116811461027757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102ad578181015183820152602001610295565b50506000910152565b600080600080608085870312156102cc57600080fd5b6102d585610260565b60208601516040870151606088015192965090945092506001600160401b0381111561030057600080fd5b8501601f8101871361031157600080fd5b80516001600160401b0381111561032a5761032a61027c565b604051601f8201601f19908116603f011681016001600160401b03811182821017156103585761035861027c565b60405281815282820160200189101561037057600080fd5b610381826020830160208601610292565b9598949750929550505050565b60208152600082518060208401526103ad816040850160208701610292565b601f01601f19169190910160400192915050565b600082516103d3818460208701610292565b9190910192915050565b6000602082840312156103ef57600080fd5b61025982610260565b60805160a05160c05160e05161042961044c600039600081816101a801526102340152600061011d01526000818161015f015281816101fc015261028701526000818160bf015261026601526104296000f3fe6080604052600436106100745760003560e01c80635c60da1b1161004e5780635c60da1b146101815780639d76ea58146101965780639ded06df146101ca578063d4ae3c42146101e95761007b565b806309c6bed9146100ad578063129d81881461010b5780634fdf7cb51461014d5761007b565b3661007b57005b600061008561025f565b90503660008037600080366000845af43d6000803e8080156100a6573d6000f35b3d6000fd5b005b3480156100b957600080fd5b506100e17f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561011757600080fd5b5061013f7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610102565b34801561015957600080fd5b5061013f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561018d57600080fd5b506100e161025f565b3480156101a257600080fd5b506100e17f000000000000000000000000000000000000000000000000000000000000000081565b3480156101d657600080fd5b506100ab6101e5366004610349565b5050565b3480156101f557600080fd5b50604080517f0000000000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016602082015201610102565b60006102ab7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006102b0565b905090565b6040517f7e151fa60000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff841690637e151fa690602401602060405180830381865afa15801561031e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034291906103bd565b9392505050565b6000806020838503121561035c57600080fd5b823567ffffffffffffffff81111561037357600080fd5b8301601f8101851361038457600080fd5b803567ffffffffffffffff81111561039b57600080fd5b8560208284010111156103ad57600080fd5b6020919091019590945092505050565b6000602082840312156103cf57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461034257600080fdfea2646970667358221220fe36e72a99474f08534df4ada0b102f7c198df65bf7daafff03a225fb00724c964736f6c634300081b0033608060405234801561001057600080fd5b50610162806100206000396000f3fe60806040526004361061001d5760003560e01c806277436014610022575b600080fd5b61003561003036600461007b565b610037565b005b8051602082016000f061004957600080fd5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561008d57600080fd5b813567ffffffffffffffff808211156100a557600080fd5b818401915084601f8301126100b957600080fd5b8135818111156100cb576100cb61004c565b604051601f8201601f19908116603f011681019083821181831017156100f3576100f361004c565b8160405282815287602084870101111561010c57600080fd5b82602086016020830137600092810160200192909252509594505050505056fea264697066735822122094780ce55d28f1d568f4e0ab1b9dc230b96e952b73d2e06456fbff2289fa27f464736f6c63430008150033a264697066735822122019fa5ae3e0948f19e633366cdadd4d2885054c3175f3f1471b392466794b5d6064736f6c634300081b0033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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