Sonic Blaze Testnet

Contract

0x3B5F96986389f6BaCF58d5b69425fab000D3551e

Overview

S Balance

Sonic Blaze LogoSonic Blaze LogoSonic Blaze Logo0 S

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Update Generator...50132342024-12-18 8:16:102 days ago1734509770IN
0x3B5F9698...000D3551e
0 S0.000032741
Update Deposit C...50132342024-12-18 8:16:102 days ago1734509770IN
0x3B5F9698...000D3551e
0 S0.000073591

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
53090082024-12-19 10:46:4641 hrs ago1734605206
0x3B5F9698...000D3551e
0 S
53090082024-12-19 10:46:4641 hrs ago1734605206
0x3B5F9698...000D3551e
0 S
53090082024-12-19 10:46:4641 hrs ago1734605206
0x3B5F9698...000D3551e
0 S
53090082024-12-19 10:46:4641 hrs ago1734605206
0x3B5F9698...000D3551e
0 S
53090082024-12-19 10:46:4641 hrs ago1734605206
0x3B5F9698...000D3551e
0 S
53090082024-12-19 10:46:4641 hrs ago1734605206
0x3B5F9698...000D3551e
0 S
53090052024-12-19 10:46:4541 hrs ago1734605205
0x3B5F9698...000D3551e
0 S
53090052024-12-19 10:46:4541 hrs ago1734605205
0x3B5F9698...000D3551e
0 S
53090052024-12-19 10:46:4541 hrs ago1734605205
0x3B5F9698...000D3551e
0 S
53090052024-12-19 10:46:4541 hrs ago1734605205
0x3B5F9698...000D3551e
0 S
53090052024-12-19 10:46:4541 hrs ago1734605205
0x3B5F9698...000D3551e
0 S
53090052024-12-19 10:46:4541 hrs ago1734605205
0x3B5F9698...000D3551e
0 S
53090052024-12-19 10:46:4541 hrs ago1734605205
0x3B5F9698...000D3551e
0 S
53090052024-12-19 10:46:4541 hrs ago1734605205
0x3B5F9698...000D3551e
0 S
53090052024-12-19 10:46:4541 hrs ago1734605205
0x3B5F9698...000D3551e
0 S
53090052024-12-19 10:46:4541 hrs ago1734605205
0x3B5F9698...000D3551e
0 S
53090052024-12-19 10:46:4541 hrs ago1734605205
0x3B5F9698...000D3551e
0 S
53090052024-12-19 10:46:4541 hrs ago1734605205
0x3B5F9698...000D3551e
0 S
53088092024-12-19 10:45:4141 hrs ago1734605141
0x3B5F9698...000D3551e
0 S
53088092024-12-19 10:45:4141 hrs ago1734605141
0x3B5F9698...000D3551e
0 S
53088052024-12-19 10:45:4041 hrs ago1734605140
0x3B5F9698...000D3551e
0 S
53088052024-12-19 10:45:4041 hrs ago1734605140
0x3B5F9698...000D3551e
0 S
53088052024-12-19 10:45:4041 hrs ago1734605140
0x3B5F9698...000D3551e
0 S
53088052024-12-19 10:45:4041 hrs ago1734605140
0x3B5F9698...000D3551e
0 S
52965602024-12-19 9:37:4942 hrs ago1734601069
0x3B5F9698...000D3551e
0 S
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SupraRouterContract

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion, MIT license

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 8 : SupraRouterContract.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

import {ReentrancyGuard} from "./ReentrancyGuard.sol";
import {IDepositContract} from "./IDepositContract.sol";
import {Ownable2Step} from "./Ownable2Step.sol";
import {ISupraRouterContract} from "./ISupraRouterContract.sol";
import {CheckContractAddress} from "./CheckContractAddress.sol";

/// @title VRF Router Contract
/// @author Supra Developer
/// @notice You can use this contract to interact with VRF Generator contract & Client contract
/// @dev All function calls are currently implemented without side effects

contract SupraRouterContract is
ReentrancyGuard,
Ownable2Step,
ISupraRouterContract,
CheckContractAddress
{
    /// @dev nonce is an incremental counter which is associated with request
    uint256 internal _nonce = 0;

    /// @dev Generator contract address to forward random number request
    address public _supraGeneratorContract;

    /// @dev To put constraint on generator contract upgradability
    bool private _upgradable;

    ///@dev Deposit Contract address to check fund details of relevant user
    address public _depositContract;
    IDepositContract public depositContract;

    constructor() {
        _upgradable = true;
    }

    ///@notice This function is for updating the Deposit Contract Address
    ///@dev To update deposit contract address
    ///@param _contractAddress contract address of the deposit/new deposit contract
    function updateDepositContract(address _contractAddress)
    external
    onlyOwner
    {
        require(
            isContract(_contractAddress),
            "Deposit contract address cannot be EOA"
        );
        require(
            _contractAddress != address(0),
            "Deposit contract address cannot be a zero address"
        );
        _depositContract = _contractAddress;
        depositContract = IDepositContract(_contractAddress);
    }

    /// @notice This function is updating the generator contract address
    /// @dev To update the generator contract address
    /// @param _contractAddress contract address of new generator contract
    function updateGeneratorContract(address _contractAddress)
    external
    onlyOwner
    {
        require(
            isContract(_contractAddress),
            "Generator contract address cannot be EOA"
        );
        require(
            _contractAddress != address(0),
            "Generator contract address cannot be a zero address"
        );
        require(_upgradable, "Generator contract address cannot be updated");
        _supraGeneratorContract = _contractAddress;
    }

    /// @notice By calling this function updation of generator contract address functionality would stop
    /// @dev It will freeze the upgradability of Generator contract address
    function freezeUpgradability() external onlyOwner {
        _upgradable = false;
    }

    /// @notice It will Generate the random number request to generator contract
    /// @dev It will forward the random number generation request by calling generator contracts function
    /// @param _functionSig A combination of a function and the types of parameters it takes, combined together as a string with no spaces
    /// @param _rngCount Number of random numbers requested
    /// @param _numConfirmations Number of Confirmations
    /// @return _nonce nonce is an incremental counter which is associated with request
    function generateRequest(
        string memory _functionSig,
        uint8 _rngCount,
        uint256 _numConfirmations,
        address _clientWalletAddress
    ) external override nonReentrant returns (uint256) {
        return
        generateRequest(
            _functionSig,
            _rngCount,
            _numConfirmations,
            0,
            _clientWalletAddress
        );
    }

    /// @notice It will Generate the random number request to generator contract with client's randomness added
    /// @dev It will forward the random number generation request by calling generator contracts function which takes seed value other than required parameter to add randomness
    /// @param _functionSig A combination of a function and the types of parameters it takes, combined together as a string with no spaces
    /// @param _rngCount Number of random numbers requested
    /// @param _numConfirmations Number of Confirmations
    /// @param _clientSeed Use of this is to add some extra randomness
    /// @return _nonce nonce is an incremental counter which is associated with request
    function generateRequest(
        string memory _functionSig,
        uint8 _rngCount,
        uint256 _numConfirmations,
        uint256 _clientSeed,
        address _clientWalletAddress
    ) public override returns (uint256) {
        //_functionSig should be in a format such that it should carry the parameter type altogether
        require(
            depositContract.isContractEligible(
                _clientWalletAddress,
                msg.sender
            ),
            "Contract not eligible to request"
        );
        require(
            !depositContract.isMinimumBalanceReached(_clientWalletAddress),
            "Insufficient Funds: Minimum balance reached for request"
        );

        bytes memory _functionSigbytes = bytes(_functionSig);
        require(_rngCount > 0, "Invalid rngCount");
        require(_numConfirmations >= 0, "Invalid numConfirmations");
        require(_functionSigbytes.length > 0, "Invalid functionSig");
        _nonce++;
        if (_numConfirmations > 20) {
            _numConfirmations = 20;
        }
        uint256 nonce_ = _nonce;
        (bool _success, bytes memory _data) = _supraGeneratorContract.call(
            abi.encodeWithSignature(
                "rngRequest(uint256,string,uint8,address,uint256,uint256,address)",
                nonce_,
                _functionSig,
                _rngCount,
                msg.sender,
                _numConfirmations,
                _clientSeed,
                _clientWalletAddress
            )
        );
        require(_success, "Generator Contract call failed");
        return _nonce;
    }

    /// @notice This is the call back function to serve random number request
    /// @dev This function will be called from generator contract address to fulfill random number request which goes to client contract
    /// @param nonce nonce is an incremental counter which is associated with request
    /// @param _clientContractAddress Actual contract address from which request has been generated
    /// @param _functionSig A combination of a function and the types of parameters it takes, combined together as a string with no spaces
    /// @return success bool variable which shows the status of request
    /// @return data data getting from client contract address
    function rngCallback(
        uint256 nonce,
        uint256[] memory rngList,
        address _clientContractAddress,
        string memory _functionSig
    ) public returns (bool, bytes memory) {
        require(
            msg.sender == _supraGeneratorContract,
            "Caller cannot generate the callback"
        );
        (bool success, bytes memory data) = _clientContractAddress.call(
            abi.encodeWithSignature(_functionSig, nonce, rngList)
        );
        return (success, data);
    }
}

File 2 of 8 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)

pragma solidity 0.8.19;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

File 3 of 8 : IDepositContract.sol
// INSTRUCTIONS : Contains methods that will be used by the ROUTER and GENERATOR contracts.
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

interface IDepositContract {
    function isContractEligible(address _clientAddress, address _contractAddress) external view returns (bool);

    function isMinimumBalanceReached(address _clientAddress) external view returns (bool);

    function checkMinBalance(address _clientAddress) external view returns (uint256);

    function checkClientFund(address _clientAddress) external view returns (uint256);

    function collectFund(address _clientAddress, uint256 _amount) external;
}

File 4 of 8 : Ownable2Step.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (access/Ownable2Step.sol)

pragma solidity 0.8.19;

import "./Ownable.sol";

/**
 * @dev Contract module which provides access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership} and {acceptOwnership}.
 *
 * This module is used through inheritance. It will make available all functions
 * from parent (Ownable).
 */
abstract contract Ownable2Step is Ownable {
    address private _pendingOwner;

    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Returns the address of the pending owner.
     */
    function pendingOwner() public view virtual returns (address) {
        return _pendingOwner;
    }

    /**
     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual override onlyOwner {
        _pendingOwner = newOwner;
        emit OwnershipTransferStarted(owner(), newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual override {
        delete _pendingOwner;
        super._transferOwnership(newOwner);
    }

    /**
     * @dev The new owner accepts the ownership transfer.
     */
    function acceptOwnership() public virtual {
        address sender = _msgSender();
        require(pendingOwner() == sender, "Ownable2Step: caller is not the new owner");
        _transferOwnership(sender);
    }
}

File 5 of 8 : ISupraRouterContract.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

interface ISupraRouterContract {
    function generateRequest(
        string memory _functionSig,
        uint8 _rngCount,
        uint256 _numConfirmations,
        uint256 _clientSeed,
        address _clientWalletAddress
    ) external returns (uint256);

    function generateRequest(
        string memory _functionSig,
        uint8 _rngCount,
        uint256 _numConfirmations,
        address _clientWalletAddress
    ) external returns (uint256);

    function rngCallback(
        uint256 nonce,
        uint256[] memory rngList,
        address _clientContractAddress,
        string memory _functionSig
    ) external returns (bool, bytes memory) ;
}

File 6 of 8 : CheckContractAddress.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

contract CheckContractAddress {
    /// @dev Returns a boolean indicating whether the given address is a contract or not.
    /// @param _addr The address to be checked.
    /// @return A boolean indicating whether the given address is a contract or not.
    function isContract(address _addr) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(_addr)
        }
        return size > 0;
    }
}

File 7 of 8 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity 0.8.19;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 8 of 8 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity 0.8.19;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

Settings
{
  "remappings": [
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "openzeppelin/=lib/openzeppelin-contracts/contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "viaIR": true,
  "libraries": {}
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"_depositContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_supraGeneratorContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositContract","outputs":[{"internalType":"contract IDepositContract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freezeUpgradability","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_functionSig","type":"string"},{"internalType":"uint8","name":"_rngCount","type":"uint8"},{"internalType":"uint256","name":"_numConfirmations","type":"uint256"},{"internalType":"uint256","name":"_clientSeed","type":"uint256"},{"internalType":"address","name":"_clientWalletAddress","type":"address"}],"name":"generateRequest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_functionSig","type":"string"},{"internalType":"uint8","name":"_rngCount","type":"uint8"},{"internalType":"uint256","name":"_numConfirmations","type":"uint256"},{"internalType":"address","name":"_clientWalletAddress","type":"address"}],"name":"generateRequest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256[]","name":"rngList","type":"uint256[]"},{"internalType":"address","name":"_clientContractAddress","type":"address"},{"internalType":"string","name":"_functionSig","type":"string"}],"name":"rngCallback","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"}],"name":"updateDepositContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"}],"name":"updateGeneratorContract","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608080604052346100825760016000818155600280546001600160a01b03199081169091558254908116339081179093556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a360006003556004805460ff60a01b1916600160a01b179055610ff190816100888239f35b600080fdfe6040608081526004908136101561001557600080fd5b600090813560e01c80632932f04114610cb1578063660db17514610c8957806379ba509714610bbd5780638da5cb5b14610b95578063a1fa0c2d14610b6d578063b7b3243a1461082f578063c55dc8fa14610807578063d291ba0914610462578063df9d902814610352578063e30c39781461032a578063e94ad65b14610302578063f2fde38b146102915763f3c21ee0146100b057600080fd5b3461028d57608036600319011261028d57602491823567ffffffffffffffff8082116102895736602383011215610289578186013594818611610278578560051b96855193602097610104898b0187610e30565b855287850183819a8301019136831161026057848a9101915b838310610268575050604435956001600160a01b03949092509050838616860361026457606435858111610260576101589036908501610e84565b9383541633036102135787518451948a01949094206001600160e01b031916948411610202578884019485526064840192359084015286604484015251809152608482019790855b8181106101ee575050509083826101c78295946101ea98999a03601f198101835282610e30565b51925af1916101d4610f8b565b9080805195869515158652850152830190610edb565b0390f35b82518a5298880198918801916001016101a0565b634e487b7160e01b87526041835286fd5b8260236084928b8b519362461bcd60e51b85528401528201527f43616c6c65722063616e6e6f742067656e6572617465207468652063616c6c6260448201526261636b60e81b6064820152fd5b8780fd5b8680fd5b82358152918101918a910161011d565b634e487b7160e01b84526041875283fd5b8280fd5b5080fd5b82346102ff5760203660031901126102ff576102ab610e15565b6102b3610f1b565b600280546001600160a01b0319166001600160a01b039283169081179091556001549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b503461028d578160031936011261028d5760065490516001600160a01b039091168152602090f35b503461028d578160031936011261028d5760025490516001600160a01b039091168152602090f35b5082346102895760203660031901126102895761036d610e15565b610375610f1b565b803b15610410576001600160a01b03169182156103b35750506bffffffffffffffffffffffff60a01b81816005541617600555600654161760065580f35b906020608492519162461bcd60e51b8352820152603160248201527f4465706f73697420636f6e747261637420616464726573732063616e6e6f742060448201527062652061207a65726f206164647265737360781b6064820152fd5b506020608492519162461bcd60e51b8352820152602660248201527f4465706f73697420636f6e747261637420616464726573732063616e6e6f7420604482015265626520454f4160d01b6064820152fd5b503461028d57608036600319011261028d57823567ffffffffffffffff8111610289576104929036908501610e84565b61049a610ecb565b604490813560649384359060018060a01b038083168093036108035760028954146107c2579089959493929160028a558391816006541695848b519d8e636012107960e11b815201526024968d883391015260209d8e818b81855afa9081156107b6578f8f92610799575b505015610758578d86898c8f51948593849263263cc27360e21b84528301525afa90811561074e578e8e92610721575b50506106c05760ff1691821561068a5781511561065157600354600019811461063f578d8b8e9893978e978b978b9a978f8f90998d9a601460016105d59b019b8c60035511610636575b9160e0916105ad949354169d519a8b998a019d8e63a5e36129851b90528a0152880152610104870190610edb565b9385015233608485015260a48401528560c484015260e483015203601f198101835282610e30565b51925af16105e1610f8b565b50156105f857505050506001600354925551908152f35b845162461bcd60e51b8152928301879052601e908301527f47656e657261746f7220436f6e74726163742063616c6c206661696c6564000090820152fd5b6014955061057f565b634e487b7160e01b8d5260118a52878dfd5b50505050505090601372496e76616c69642066756e6374696f6e53696760681b928887519562461bcd60e51b8752860152840152820152fd5b5050505050509060106f125b9d985b1a59081c9b99d0dbdd5b9d60821b928887519562461bcd60e51b8752860152840152820152fd5b50895162461bcd60e51b81528089018d90526037818801527f496e73756666696369656e742046756e64733a204d696e696d756d2062616c6181890152761b98d9481c995858da195908199bdc881c995c5d595cdd604a1b818b0152608490fd5b6107409250803d10610747575b6107388183610e30565b810190610f73565b388e610535565b503d61072e565b8c513d8f823e3d90fd5b50505087877f436f6e7472616374206e6f7420656c696769626c6520746f2072657175657374888e89818f519562461bcd60e51b8752860152840152820152fd5b6107af9250803d10610747576107388183610e30565b388f610505565b8e8e51903d90823e3d90fd5b875162461bcd60e51b81526020818c0152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00818801528790fd5b8880fd5b503461028d578160031936011261028d5760055490516001600160a01b039091168152602090f35b5082346102895760a036600319011261028957803567ffffffffffffffff8111610b69576108609036908301610e84565b92610869610ecb565b9360449182356001600160a01b0360843581811690819003610b69578282600654169589519a636012107960e11b8c52838a8d01526024978c893391015260209c8d818c81855afa908115610b5f578e8a92610b42575b505015610b00578c858a8d8f51948593849263263cc27360e21b84528301525afa908115610af6578891610ad9575b50610a765760ff16938415610a4057815115610a075760035460001981146109f5578b9589958b8f93968b9a968f9661098e97601460018f9c019a8b600355116109ec575b9360e091610962949554169c51998a9889019c8d63a5e36129851b9052890152870152610104860190610edb565b92606485015233608485015260a484015260643560c484015260e483015203601f198101835282610e30565b51925af161099a610f8b565b50156109ad575050506003549051908152f35b601e906064957f47656e657261746f7220436f6e74726163742063616c6c206661696c656400009495519562461bcd60e51b8752860152840152820152fd5b60149350610934565b634e487b7160e01b885260118b528888fd5b5050885162461bcd60e51b81528089018b905260138188015272496e76616c69642066756e6374696f6e53696760681b81890152606490fd5b5050885162461bcd60e51b81528089018b90526010818801526f125b9d985b1a59081c9b99d0dbdd5b9d60821b81890152606490fd5b5050885162461bcd60e51b81528089018b90526037818801527f496e73756666696369656e742046756e64733a204d696e696d756d2062616c6181890152761b98d9481c995858da195908199bdc881c995c5d595cdd604a1b6064820152608490fd5b610af091508d803d10610747576107388183610e30565b8d6108ef565b8c513d8a823e3d90fd5b508a5162461bcd60e51b8152808b018d90528089018d90527f436f6e7472616374206e6f7420656c696769626c6520746f2072657175657374818b0152606490fd5b610b589250803d10610747576107388183610e30565b8e8e6108c0565b8d513d8b823e3d90fd5b8380fd5b5082346102895782600319360112610289575490516001600160a01b03909116815260209150f35b503461028d578160031936011261028d5760015490516001600160a01b039091168152602090f35b50829034610289578260031936011261028957600254916001600160a01b03913383851603610c345750506bffffffffffffffffffffffff60a01b8092166002556001549133908316176001553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b906020608492519162461bcd60e51b8352820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152fd5b82843461028d578160031936011261028d57610ca3610f1b565b805460ff60a01b1916905580f35b5082903461028957602036600319011261028957610ccd610e15565b610cd5610f1b565b803b15610dc1576001600160a01b0316908115610d635782549060ff8260a01c1615610d0c57506001600160a01b03191617905580f35b5162461bcd60e51b8152602081850152602c60248201527f47656e657261746f7220636f6e747261637420616464726573732063616e6e6f60448201526b1d081899481d5c19185d195960a21b6064820152608490fd5b5162461bcd60e51b8152602081840152603360248201527f47656e657261746f7220636f6e747261637420616464726573732063616e6e6f604482015272742062652061207a65726f206164647265737360681b6064820152608490fd5b815162461bcd60e51b8152602081850152602860248201527f47656e657261746f7220636f6e747261637420616464726573732063616e6e6f6044820152677420626520454f4160c01b6064820152608490fd5b600435906001600160a01b0382168203610e2b57565b600080fd5b90601f8019910116810190811067ffffffffffffffff821117610e5257604052565b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff8111610e5257601f01601f191660200190565b81601f82011215610e2b57803590610e9b82610e68565b92610ea96040519485610e30565b82845260208383010111610e2b57816000926020809301838601378301015290565b6024359060ff82168203610e2b57565b919082519283825260005b848110610f07575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201610ee6565b6001546001600160a01b03163303610f2f57565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b90816020910312610e2b57518015158103610e2b5790565b3d15610fb6573d90610f9c82610e68565b91610faa6040519384610e30565b82523d6000602084013e565b60609056fea26469706673582212209e4664f86e11d5d5ba441e5553367ff3dbb5d6e9018a1d9bae1d03a71cc1fe3464736f6c63430008130033

Deployed Bytecode

0x6040608081526004908136101561001557600080fd5b600090813560e01c80632932f04114610cb1578063660db17514610c8957806379ba509714610bbd5780638da5cb5b14610b95578063a1fa0c2d14610b6d578063b7b3243a1461082f578063c55dc8fa14610807578063d291ba0914610462578063df9d902814610352578063e30c39781461032a578063e94ad65b14610302578063f2fde38b146102915763f3c21ee0146100b057600080fd5b3461028d57608036600319011261028d57602491823567ffffffffffffffff8082116102895736602383011215610289578186013594818611610278578560051b96855193602097610104898b0187610e30565b855287850183819a8301019136831161026057848a9101915b838310610268575050604435956001600160a01b03949092509050838616860361026457606435858111610260576101589036908501610e84565b9383541633036102135787518451948a01949094206001600160e01b031916948411610202578884019485526064840192359084015286604484015251809152608482019790855b8181106101ee575050509083826101c78295946101ea98999a03601f198101835282610e30565b51925af1916101d4610f8b565b9080805195869515158652850152830190610edb565b0390f35b82518a5298880198918801916001016101a0565b634e487b7160e01b87526041835286fd5b8260236084928b8b519362461bcd60e51b85528401528201527f43616c6c65722063616e6e6f742067656e6572617465207468652063616c6c6260448201526261636b60e81b6064820152fd5b8780fd5b8680fd5b82358152918101918a910161011d565b634e487b7160e01b84526041875283fd5b8280fd5b5080fd5b82346102ff5760203660031901126102ff576102ab610e15565b6102b3610f1b565b600280546001600160a01b0319166001600160a01b039283169081179091556001549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b503461028d578160031936011261028d5760065490516001600160a01b039091168152602090f35b503461028d578160031936011261028d5760025490516001600160a01b039091168152602090f35b5082346102895760203660031901126102895761036d610e15565b610375610f1b565b803b15610410576001600160a01b03169182156103b35750506bffffffffffffffffffffffff60a01b81816005541617600555600654161760065580f35b906020608492519162461bcd60e51b8352820152603160248201527f4465706f73697420636f6e747261637420616464726573732063616e6e6f742060448201527062652061207a65726f206164647265737360781b6064820152fd5b506020608492519162461bcd60e51b8352820152602660248201527f4465706f73697420636f6e747261637420616464726573732063616e6e6f7420604482015265626520454f4160d01b6064820152fd5b503461028d57608036600319011261028d57823567ffffffffffffffff8111610289576104929036908501610e84565b61049a610ecb565b604490813560649384359060018060a01b038083168093036108035760028954146107c2579089959493929160028a558391816006541695848b519d8e636012107960e11b815201526024968d883391015260209d8e818b81855afa9081156107b6578f8f92610799575b505015610758578d86898c8f51948593849263263cc27360e21b84528301525afa90811561074e578e8e92610721575b50506106c05760ff1691821561068a5781511561065157600354600019811461063f578d8b8e9893978e978b978b9a978f8f90998d9a601460016105d59b019b8c60035511610636575b9160e0916105ad949354169d519a8b998a019d8e63a5e36129851b90528a0152880152610104870190610edb565b9385015233608485015260a48401528560c484015260e483015203601f198101835282610e30565b51925af16105e1610f8b565b50156105f857505050506001600354925551908152f35b845162461bcd60e51b8152928301879052601e908301527f47656e657261746f7220436f6e74726163742063616c6c206661696c6564000090820152fd5b6014955061057f565b634e487b7160e01b8d5260118a52878dfd5b50505050505090601372496e76616c69642066756e6374696f6e53696760681b928887519562461bcd60e51b8752860152840152820152fd5b5050505050509060106f125b9d985b1a59081c9b99d0dbdd5b9d60821b928887519562461bcd60e51b8752860152840152820152fd5b50895162461bcd60e51b81528089018d90526037818801527f496e73756666696369656e742046756e64733a204d696e696d756d2062616c6181890152761b98d9481c995858da195908199bdc881c995c5d595cdd604a1b818b0152608490fd5b6107409250803d10610747575b6107388183610e30565b810190610f73565b388e610535565b503d61072e565b8c513d8f823e3d90fd5b50505087877f436f6e7472616374206e6f7420656c696769626c6520746f2072657175657374888e89818f519562461bcd60e51b8752860152840152820152fd5b6107af9250803d10610747576107388183610e30565b388f610505565b8e8e51903d90823e3d90fd5b875162461bcd60e51b81526020818c0152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00818801528790fd5b8880fd5b503461028d578160031936011261028d5760055490516001600160a01b039091168152602090f35b5082346102895760a036600319011261028957803567ffffffffffffffff8111610b69576108609036908301610e84565b92610869610ecb565b9360449182356001600160a01b0360843581811690819003610b69578282600654169589519a636012107960e11b8c52838a8d01526024978c893391015260209c8d818c81855afa908115610b5f578e8a92610b42575b505015610b00578c858a8d8f51948593849263263cc27360e21b84528301525afa908115610af6578891610ad9575b50610a765760ff16938415610a4057815115610a075760035460001981146109f5578b9589958b8f93968b9a968f9661098e97601460018f9c019a8b600355116109ec575b9360e091610962949554169c51998a9889019c8d63a5e36129851b9052890152870152610104860190610edb565b92606485015233608485015260a484015260643560c484015260e483015203601f198101835282610e30565b51925af161099a610f8b565b50156109ad575050506003549051908152f35b601e906064957f47656e657261746f7220436f6e74726163742063616c6c206661696c656400009495519562461bcd60e51b8752860152840152820152fd5b60149350610934565b634e487b7160e01b885260118b528888fd5b5050885162461bcd60e51b81528089018b905260138188015272496e76616c69642066756e6374696f6e53696760681b81890152606490fd5b5050885162461bcd60e51b81528089018b90526010818801526f125b9d985b1a59081c9b99d0dbdd5b9d60821b81890152606490fd5b5050885162461bcd60e51b81528089018b90526037818801527f496e73756666696369656e742046756e64733a204d696e696d756d2062616c6181890152761b98d9481c995858da195908199bdc881c995c5d595cdd604a1b6064820152608490fd5b610af091508d803d10610747576107388183610e30565b8d6108ef565b8c513d8a823e3d90fd5b508a5162461bcd60e51b8152808b018d90528089018d90527f436f6e7472616374206e6f7420656c696769626c6520746f2072657175657374818b0152606490fd5b610b589250803d10610747576107388183610e30565b8e8e6108c0565b8d513d8b823e3d90fd5b8380fd5b5082346102895782600319360112610289575490516001600160a01b03909116815260209150f35b503461028d578160031936011261028d5760015490516001600160a01b039091168152602090f35b50829034610289578260031936011261028957600254916001600160a01b03913383851603610c345750506bffffffffffffffffffffffff60a01b8092166002556001549133908316176001553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b906020608492519162461bcd60e51b8352820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152fd5b82843461028d578160031936011261028d57610ca3610f1b565b805460ff60a01b1916905580f35b5082903461028957602036600319011261028957610ccd610e15565b610cd5610f1b565b803b15610dc1576001600160a01b0316908115610d635782549060ff8260a01c1615610d0c57506001600160a01b03191617905580f35b5162461bcd60e51b8152602081850152602c60248201527f47656e657261746f7220636f6e747261637420616464726573732063616e6e6f60448201526b1d081899481d5c19185d195960a21b6064820152608490fd5b5162461bcd60e51b8152602081840152603360248201527f47656e657261746f7220636f6e747261637420616464726573732063616e6e6f604482015272742062652061207a65726f206164647265737360681b6064820152608490fd5b815162461bcd60e51b8152602081850152602860248201527f47656e657261746f7220636f6e747261637420616464726573732063616e6e6f6044820152677420626520454f4160c01b6064820152608490fd5b600435906001600160a01b0382168203610e2b57565b600080fd5b90601f8019910116810190811067ffffffffffffffff821117610e5257604052565b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff8111610e5257601f01601f191660200190565b81601f82011215610e2b57803590610e9b82610e68565b92610ea96040519485610e30565b82845260208383010111610e2b57816000926020809301838601378301015290565b6024359060ff82168203610e2b57565b919082519283825260005b848110610f07575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201610ee6565b6001546001600160a01b03163303610f2f57565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b90816020910312610e2b57518015158103610e2b5790565b3d15610fb6573d90610f9c82610e68565b91610faa6040519384610e30565b82523d6000602084013e565b60609056fea26469706673582212209e4664f86e11d5d5ba441e5553367ff3dbb5d6e9018a1d9bae1d03a71cc1fe3464736f6c63430008130033

Deployed Bytecode Sourcemap

580:6753:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4878:114;580:6753;4878:114;;;580:6753;;;;;4878:114;580:6753;4878:114;;;580:6753;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;580:6753:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;580:6753:7;;;-1:-1:-1;;;;;580:6753:7;;;-1:-1:-1;580:6753:7;-1:-1:-1;580:6753:7;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;7044:10;:37;580:6753;;;;;;;;;7229:53;;;;-1:-1:-1;;;;;;580:6753:7;;;;;;7229:53;;;;;;580:6753;;;;;7229:53;;;580:6753;;;;;;;;;;;;;;;;;;;;;;7229:53;;;;;;;;;;580:6753;7229:53;;;;5703:332;;7229:53;;;;;;:::i;:::-;7188:104;;;;;;;:::i;:::-;580:6753;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;580:6753:7;;;;;;:::i;:::-;1056:62:4;;:::i;:::-;1228:24:5;580:6753:7;;-1:-1:-1;;;;;;580:6753:7;-1:-1:-1;;;;;580:6753:7;;;;;;;;;;;;;;1267:43:5;;;;580:6753:7;;;;;;;;;;;;;;;;;;1133:39;580:6753;;;-1:-1:-1;;;;;580:6753:7;;;;;;;;;;;;;;;;;;;;;926:13:5;580:6753:7;;;-1:-1:-1;;;;;580:6753:7;;;;;;;;;;;;;;;;-1:-1:-1;;580:6753:7;;;;;;:::i;:::-;1056:62:4;;:::i;:::-;412:59:0;;487:8;580:6753:7;;-1:-1:-1;;;;;580:6753:7;;1681:30;;580:6753;;;;;;;;;1796:35;580:6753;;;1796:35;580:6753;1841:52;580:6753;;;1841:52;580:6753;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;-1:-1:-1;;580:6753:7;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1759:1:6;580:6753:7;;2468:19:6;1759:1;;;;;;;;;;;;3647:154:7;580:6753;;4878:15;580:6753;;;;;;;;;;;4878:114;;;580:6753;;4968:10;;;;580:6753;;;4878:114;;;;;;;;;;;;;;;;;;;580:6753;;;;;;;;;;;;;;;;;;;;5082:61;;;;580:6753;5082:61;;;;;;;;;;;;580:6753;5081:62;;580:6753;;;;5305:13;;;580:6753;;;;5426:28;580:6753;;;;-1:-1:-1;;580:6753:7;;;;;;;;;;;;;;;;;;;;;;;5530:2;580:6753;5703:332;580:6753;;1759:1:6;;580:6753:7;1759:1:6;5510:22:7;5506:75;;580:6753;;;;;;;;;;;5703:332;;;;;;;;;;;;;;580:6753;;;;;;;;;:::i;:::-;;;;;4968:10;580:6753;;;;;;;;;;;;;;;;;5703:332;;;;;;;;;:::i;:::-;5661:384;;;;;;:::i;:::-;;580:6753;;;;;;;;;;1759:1:6;;580:6753:7;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;;;5506:75;5530:2;;-1:-1:-1;5506:75:7;;580:6753;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;580:6753:7;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;5082:61;;;;;;-1:-1:-1;5082:61:7;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;580:6753;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4878:114;;;;;;-1:-1:-1;4878:114:7;;;;;;:::i;:::-;;;;;;580:6753;;;;;;;;;;;1759:1:6;580:6753:7;;-1:-1:-1;;;1759:1:6;;580:6753:7;1759:1:6;;;;;580:6753:7;1759:1:6;;580:6753:7;1759:1:6;580:6753:7;;;1759:1:6;580:6753:7;;1759:1:6;580:6753:7;;;;;;;;;;;;;;;;;1096:31;580:6753;;;-1:-1:-1;;;;;580:6753:7;;;;;;;;;;;;;;;;-1:-1:-1;;580:6753:7;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;580:6753:7;;;;;;;;;;;;;4878:15;580:6753;;;;;;;;;4878:114;;;;;;580:6753;;4968:10;;;;580:6753;;;4878:114;;;;;;;;;;;;;;;;;;;580:6753;;;;;;;;;;;;;;;;;;;;5082:61;;;;580:6753;5082:61;;;;;;;;;;;580:6753;5081:62;580:6753;;;;5305:13;;;580:6753;;;;5426:28;580:6753;;;;-1:-1:-1;;580:6753:7;;;;;;;;;;;;;;;;;5703:332;580:6753;5530:2;580:6753;;;;1759:1:6;;580:6753:7;1759:1:6;5510:22:7;5506:75;;580:6753;;;;;;;;;;;5703:332;;;;;;;;;;;;;;580:6753;;;;;;;;;:::i;:::-;;;;;;4968:10;580:6753;;;;;;;;;;;;;;;;;;5703:332;;;;;;;;;:::i;:::-;5661:384;;;;;;:::i;:::-;;580:6753;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5506:75;5530:2;;-1:-1:-1;5506:75:7;;580:6753;-1:-1:-1;;;580:6753:7;;;;;;;;;-1:-1:-1;;580:6753:7;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;-1:-1:-1;;580:6753:7;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;-1:-1:-1;;580:6753:7;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;5082:61;;;;;;;-1:-1:-1;5082:61:7;;;;;;:::i;:::-;;;;;580:6753;;;;;;;;;;-1:-1:-1;580:6753:7;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;;;;;;4878:114;;;;;;-1:-1:-1;4878:114:7;;;;;;:::i;:::-;;;;;;580:6753;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;580:6753:7;;;;;;;-1:-1:-1;580:6753:7;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;580:6753:7;;;;;;;;;;;;;;;;;;;;;;;926:13:5;580:6753:7;;-1:-1:-1;;;;;580:6753:7;222:10:1;580:6753:7;;;1833:24:5;580:6753:7;;;;;;;;;;926:13:5;580:6753:7;;;222:10:1;;580:6753:7;;;;;;222:10:1;580:6753:7;;2123:40:4;;;;580:6753:7;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;;;1056:62:4;;:::i;:::-;580:6753:7;;-1:-1:-1;;;;580:6753:7;;;;;;;;;;;;;;-1:-1:-1;;580:6753:7;;;;;;:::i;:::-;1056:62:4;;:::i;:::-;412:59:0;;487:8;580:6753:7;;-1:-1:-1;;;;;580:6753:7;;2354:30;;580:6753;;;;;;;;;;;;;-1:-1:-1;;;;;;;580:6753:7;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;-1:-1:-1;;;;;580:6753:7;;;;;;:::o;:::-;;;;;;5703:332;;;580:6753;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;5703:332;580:6753;-1:-1:-1;;580:6753:7;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;580:6753:7;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;5703:332;;;580:6753;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;1352:130:4;580:6753:7;;-1:-1:-1;;;;;580:6753:7;222:10:1;1415:23:4;580:6753:7;;1352:130:4:o;580:6753:7:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;580:6753:7;;;;:::o;:::-;;;:::o

Swarm Source

ipfs://9e4664f86e11d5d5ba441e5553367ff3dbb5d6e9018a1d9bae1d03a71cc1fe34

Block Transaction 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.